در دنیای امنیت سایبری و تحلیل بدافزار، یکی از مهمترین چالشها برای هکر شناسایی و مقابله با تکنیکهای دیباگینگ و نقاط توقف (breakpoints) است که برای بررسی و تجزیه و تحلیل برنامههای آلوده به کار میروند. یکی از تکنیکهای رایج برای ایجاد نقاط توقف در فرآیند دیباگینگ، استفاده از پرچم ترپ (Trap Flag) در رجیستر EFLAGS است. این پرچم به دیباگرها این امکان را میدهد که بهصورت گامبهگام دستورات برنامه را اجرا کنند و تغییرات حافظه و رجیسترها را بررسی نمایند. با این حال، شناسایی استفاده از پرچم ترپ برای نقاط توقف میتواند چالشبرانگیز باشد، زیرا بهراحتی نمیتوان این پرچم را خواند و بررسی کرد.
🤡پرچم ترپ (Trap Flag) چیست؟
این Trap Flag (TF) یک پرچم خاص در رجیستر EFLAGS در معماری پردازندههای x86 است که برای فعال کردن Single-Stepping یا گامبهگام اجرا کردن دستورات برنامه به کار میرود. هنگامی که دیباگر بهطور گام به گام یک برنامه را تحلیل میکند، این پرچم در رجیستر EFLAGS تنظیم میشود تا پس از اجرای هر دستور، پردازنده یک Interrupt 1 (خطای دیباگ) ایجاد کند و کنترل را به دیباگر بازگرداند.
این ویژگی به دیباگر اجازه میدهد تا بتواند پس از اجرای هر دستور، وضعیت حافظه و مقادیر رجیسترها را بررسی کرده و تغییرات آنها را نظارت کند. بنابراین، Trap Flag یک ابزار بسیار مفید برای تحلیل و بررسی دقیق عملکرد برنامهها در سطح اسمبلی است.
👻چالشهای شناسایی Trap Flag:
هرچند استفاده از Trap Flag برای گام به گام اجرا کردن برنامه بسیار مفید است، اما شناسایی و تشخیص آن از بیرون (یعنی توسط خود برنامه یا ابزارهای شناسایی بدافزار) کار دشواری است. دلایل این مشکل عبارتند از:
✔️این EFLAGS بهطور مستقیم قابل خواندن نیست: این EFLAGS که شامل Trap Flag میباشد، بهطور مستقیم از طریق دستوراتی مانند mov قابل خواندن نیست. برای خواندن وضعیت این رجیستر باید از دستور pushf استفاده کرد، که وضعیت EFLAGS را در استک ذخیره میکند.
✔️پرچم Trap Flag بهطور خودکار غیرفعال میشود: پس از هر بار برگشت از دیباگر، Trap Flag بهطور خودکار به حالت False (غیرفعال) تغییر میکند. این ویژگی باعث میشود که بررسی وضعیت این پرچم برای شناسایی نقاط توقف در برنامه سخت باشد.
👽روشهای شناسایی رفتار دیباگینگ با استفاده از Trap Flag:
با وجود اینکه Trap Flag بهطور مستقیم قابل شناسایی نیست، روشهایی برای شناسایی رفتار دیباگرها و نقاط توقف وجود دارد. برخی از این روشها عبارتند از:
✔️ بررسی استک با استفاده از دستور pushf: همانطور که اشاره شد، تنها راه دسترسی به وضعیت EFLAGS استفاده از دستور pushf است که وضعیت EFLAGS را در استک ذخیره میکند. بدافزار میتواند بهطور پیوسته وضعیت استک را بررسی کرده و در صورتی که تغییرات غیرمنتظرهای در آن مشاهده شود، به وجود یک دیباگر مشکوک شود.
✔️ تحلیل زمانبندی دستورات: اجرای گام به گام دستورات توسط دیباگر باعث تغییرات در زمانبندی اجرای دستورات میشود. این زمانبندی ممکن است برای برنامه قابل شناسایی باشد. بهعنوان مثال، اگر برنامه بین هر دستور وقفههای کوچکی داشته باشد (که ناشی از فعال بودن Trap Flag است)، این تفاوتها میتوانند بهعنوان علائم رفتاری دیباگر شناسایی شوند.
🟣کتاب Evasive malware را با هم در نوروز در کانال میخوانیم