در تحلیل بدافزار، شناسایی اینکه آیا یک فایل باینری فشرده (Packed) یا رمزنگاری (Encrypted) شده است، یکی از اولین و حیاتیترین مراحل Triage است. در حالی که ابزارهای پیچیدهای برای این کار وجود دارند، پیادهسازی یک ابزار سبک و مستقل با زبان C میتواند برای تیمهای پاسخ به حادثه (Incident Response) در محیطهای محدود بسیار کاربردی باشد.
مفهوم آنتروپی شانون (Shannon Entropy)
آنتروپی در واقع معیاری برای سنجش میزان تصادفی بودن دادهها است. در یک فایل باینری، کدهای اجرایی و دادههای معمولی ساختار مشخصی دارند (تکرار Opcodeها، خوشههای رشتهای و Paddingهای صفر)، بنابراین توزیع بایتهای آنها یکنواخت نیست. اما فرآیندهای فشردهسازی و رمزنگاری، دادهها را به نویزهای تصادفی تبدیل میکنند که باعث میشود توزیع بایتها یکنواخت شود.
فرمول آنتروپی شانون برای یک سکشن با ۲۵۶ مقدار احتمالی بایت به شرح زیر است:
H = -Σ p_i log2(p_i)
که در آن p_i احتمال حضور هر بایت است. مقدار H بین ۰ (تکرار یک بایت واحد) تا ۸ (تصادفی کامل) متغیر است. هرچه این مقدار به ۸ نزدیکتر باشد، احتمال Packed یا Encrypted بودن آن سکشن بیشتر است.
آستانههای تشخیص (Thresholds)
بر اساس پژوهشهای انجام شده بر روی مجموعههای بزرگ از فایلها، مقادیر میانگین آنتروپی به شرح زیر است:
- متن ساده (Plain Text): حدود ۴.۳۵
- فایلهای اجرایی Native: حدود ۵.۱۰
- فایلهای Packed: حدود ۶.۸۰
- فایلهای Encrypted: حدود ۷.۱۷
بر این اساس، در ابزار meow.c از سه سطح رنگی استفاده شده است: زیر ۶.۰ (سبز/نرمال)، بین ۶.۰ تا ۷.۰ (زرد/بالا – معمولاً برای کدهای متراکم .text) و بالای ۷.۰ (قرمز – احتمال زیاد Packed یا Encrypted).
تحلیل ساختاری PE و ELF
برای اینکه آنتروپی به جای کل فایل، به صورت Section-by-Section محاسبه شود، ابزار باید ساختار فایلهای اجرایی را بشناسد:
- در فایلهای PE: ابزار از طریق
e_lfanewبه NT Headers دسترسی پیدا کرده و سپس با پیمایش جدول سکشنها، مقادیرSizeOfRawDataوPointerToRawDataرا استخراج میکند تا محدوده دقیق بایتهای هر سکشن را برای محاسبه آنتروپی به دست آورد. - در فایلهای ELF64: ابزار از
e_shoffبرای یافتن جدول Headerهای سکشن و از.shstrtabبرای استخراج نام سکشنها استفاده میکند و سپس آنتروپی هر بخش را محاسبه مینماید.
محدودیتها و نکات امنیتی
آنتروپی یک ابزار قدرتمند اما «ساده» است و محدودیتهایی دارد:
- مثبت کاذب (False Positive): منابع فشردهشده قانونی (مانند آیکونها یا فایلهای Zip داخلی در سکشن
.rsrc) نیز آنتروپی بالایی دارند. - دور زدن (Evasion): مهاجمان میتوانند با اضافه کردن دادههای کم-آنتروپی (Padding) به یک سکشن، میانگین کلی را پایین بیاورند تا شناسایی نشوند.
- عدم تفکیک: آنتروپی به تنهایی نمیتواند تفاوت بین دادههای فشرده و رمزنگاری شده را تشخیص دهد، زیرا هر دو رفتاری شبیه به نویز تصادفی دارند.
برای تحلیل دقیقتر، توصیه میشود نتایج آنتروپی با بررسی Import Table، قوانین YARA و تستهای آماری مانند Chi-Square ترکیب شود.