استقبال نویسندگان بدافزار از زبانهای برنامهنویسی غیرمعمول
بررسیها نشان میدهد نویسندگان بدافزار در ساخت ابزارهای خود بهطور فزایندهای از زبانهای برنامهنویسی غیرمعمول همچون Go ،Rust ،Nim و Dlang با هدف دشوار کردن تحلیل عملکرد و ماهیت مخرب آنها بهره میگیرند.
بر اساس گزارشی که اخیراً شرکت بلکبری (BlackBerry Limited) آن را منتشر کرده تعداد بدافزارهایی که در برنامهنویسی آنها از چنین زبانهایی استفاده شده بهنحو چشمگیری افزایش یافته است.
در ادامه این مطلب که با همکاری شرکت مهندسی شبکه گستر و مرکز مدیریت راهبردی افتای ریاست جمهوری تهیه شده، چکیدهای از گزارش بلکبری ارائه شده است.
این زبانهای برنامهنویسی غیرمعمول برخلاف تصورات قبلی چندان هم به ندرت مورد استفاده قرار نمیگیرند. مهاجمان از آنها برای بازنویسی بدافزارهای متداول و شناختهشده یا ایجاد ابزارهایی برای مجموعههای جدیدی از بدافزارها استفاده میکنند.
این محققان آن دسته از فایلهای دریافت/فراخوانیکننده بدافزار (Loader/Dropper) را که به زبانهای برنامهنویسی غیرمعمول نوشته شدهاند مورد رصد قرار دادهاند. این تکهکدهای مخرب در مراحل اول فرایند آلودهسازی دستگاه، وظیفه دریافت، رمزگشایی و استقرار بدافزارهایی نظیر NanoCore RAT و ابزارهای بالقوه مخربی همچون Cobalt Strike را بر عهده دارند. این فایلها نقشی کلیدی در مخفی کردن عملیات آلوده شدن دستگاه از دید محصولات امنیتی نصب شده بر روی آن دارند.
هر چند نویسندگان بدافزار کمی سخت از روشهای معمول و سنتی خود دست میکشند اما همانند برنامهنویسان نرمافزارهای معتبر و مجاز از زبانهای برنامهنویسی جدید با امکانات و قابلیتهای نو استقبال میکنند. ضمن آن که از نگاه نویسندگان بدافزار، بکارگیری این نوع زبانها و فناوریهای جدید آنها را یک قدم جلوتر از محصولات امنیتی قرار میدهد.
از سویی دیگر برنامهنویسان بدافزار هم همچون همه به غیرآسیبپذیر بودن برنامههای خود حساس هستند. برای مثال، حدود یک سال پیش فاش شد که بدافزار Emotet حاوی باگی از نوع سرریز بافر (Buffer Overflow) است که امکان از کار انداختن این بدافزار را ممکن میکند. موضوعی که زبان برنامهنویسی اهمیت خاصی در پیشگیری از بروز آن دارد.
وقتی صحبت از زبانهای غیرمعمول میشود، زبان Go بیش از سایر جلب توجه میکند. یک زبان همهمنظوره که بسیار شبیه به ++C است. کامپایلر آن در ابتدا به زبان C نوشته شده بود اما مدتی بعد از همان زبان Go استفاده شد.
به گفته محققان بلکبری، Go در حال حاضر یکی از زبانهای مورد علاقه مهاجمان است که هم در توسعه تهدیدات موسوم به پیشرفته و ماندگار (Advanced Persistent Threat – به اختصار APT) و هم در برنامهنویسی بدافزارهای عمومی نقش ایفا میکند.
هر چند محققان معتقدند زبان C همچنان متداولترین زبان برنامهنویسی است اما کم نیستند مهاجمان و نویسندگان بدافزاری که به زبانهای برنامهنویسی جدید روی آوردهاند.
برای مثال، میتوان به دو گروه منتسب به هکرهای روسی به نامهای APT28 و APT29، اشاره کرد. از APT28، با عناوینی نظیر Fancy Bear و Strontium و از APT29، با نامهای Nobelium ،Cozy Bear و Dukes نیز یاد میشود.
APT28 که برخی معتقدند با نفوذ به دستگاههای کمیته ملی دموکرات ایالات متحده در انتخابات ریاست جمهوری 2016 این کشور دخالت داشته است با مجموعه گستردهای از حملات و بدافزارها در ارتباط بوده است. Zebrocy، به عنوان یکی از بدافزارهای این گروه به طور خاص از چندین زبان برنامهنویسی به ویژه در ماژول زنجیره مرگ (Kill Chain) آن استفاده شده است.
وظیفه Zebrocy، دریافت فایلهای مخرب بیشتر بر روی دستگاه آلوده و سرقت دادههای قربانی است.
نخستین نمونهها از بدافزار Zebrocy که در سال 2015 مشاهده شدند، دارای سه بخش بودند؛ یک دریافتکننده مبتنی بر Delphi، یک دریافتکننده تحت AutoIT و یک دربپشتی (Backdoor) که به زبان Delphi نوشته شده بود. صرفنظر از زبان برنامهنویسی آن، Zebrocy از طریق کارزارهای فیشینگی که ناقل فایل مخرب اولیه است منتشر میشود. فایل مذکور با برقراری ارتباط با سرور فرماندهی (C2)، یک دریافتکننده را اجرا کرده و کد اصلی بدافزار را از طریق دربپشتی بر روی دستگاه نصب میکند. هر چند Zebrocy بارها توسط برنامهنویسان آن بازنویسی شده، اما روال و روش کار تقریباً بدون تغییر باقی مانده است.
نمونههایی از بازنویسی کدها به زبان Go توسط گروه APT28 بهشرح زیر است:
- 2018: نسخه Delphi بدافزار Zebrocy، به زبان Go بازنویسی شد.
- 2019: در کارزارهایی که در جریان آنها سفارتخانهها و وزارتخانههای امور خارجه کشورهای اروپای شرقی و آسیای مرکزی هدف قرار میگرفتند یک دریافتکننده مبتنی بر Nim به همراه یک دربپشتی Go کشف شد.
- 2020 و پس از آن: مهاجمان APT28 بیش از هر زمانی به Go روی آوردند و اجزای اساسی دیگر Zebrocy شامل بخش دربپشتی و دریافتکننده را با Go بازنویسی کردند. در دسامبر سال میلادی گذشته نیز APT28 با سوءاستفاده از موضوعات مربوط به همهگیری کووید-19، اقدام به توزیع ایمیلهای ناقل نسخه تحت Go بدافزار کرد.
APT29 نیز دیگر گروهی است که کدنویسی بدافزارها به زبانهای غیرمعمول را در کارنامه دارد. این گروه که اجرای حمله زنجیره تأمین سولارویندز آن را بیش از هر زمانی معروف کرد در سال 2018 دستگاههای Windows و Linux را با WellMess هدف قرار داد. WellMess یک تروجان دسترسی از راه دور (RAT) است و در برنامهنویسی آن از Go و NET. بهره گرفته شده است.
پرانتشارترین نوع WellMess نسخه Go است که در هر دو نسخه 32 و 64 بیتی بهصورت فایلهای PE و ELF ارائه شده و امکان اجرا بر روی انواع سیستمهای عامل را داراست.
APT29 معمولاً با پویش نشانیهای IP سازمان اقدام به کشف آسیبپذیریها سامانههای تحت دسترس و سوءاستفاده از آنها به منظور رخنه به شبکه قربانی میکند.
این گروه بهطور روزافزون از زبان برنامهنویسی Go در توسعه انواع بدافزارهای خود استفاده میکند. برای مثال، در سال 2020 این گروه از نسخ پیشرفتهتر WellMess در حمله سایبری به مؤسسات تحقیقاتی دانشگاهی و دارویی در کشورهای مختلف جهان با هدف سرقت اسناد تحقیقاتی در زمینه واکسن کووید-19 استفاده کرد. این نسخ جدید که به زبان Go نوشته شده بودند به دلیل پشتیبانی از پودمانهای شبکهای بیشتر و توانایی اجرای اسکریپتهای PowerShell به مراتب پیشرفتهتر و مخربتر از نسخ قبلی بودند.
هر دوی این گروهها هنوز فعال هستند و برخی از تاثیرگذارترین حملات سایبری به نام آنها ثبت شده است.
فعالیتهای اخیر نشان میدهد که این دو گروه از زبانهای برنامهنویسی غیرمعمول ذکر شده در این گزارش برای افزایش قابلیتها، فراهم ساختن امکان اجرا بر روی انواع سیستمهای عامل و بیاثر کردن ابزارهای امنیتی استفاده میکنند.
بجز Go و صرفنظر از APT28 و APT29 به عنوان دو گروه علاقمند به Go، زبانهای غیرمتعارف دیگری نیز در دهه گذشته به طور فزاینده توسط برخی دیگر از مهاجمان مورد استفاده قرار گرفته است.
در نمودار زمانی زیر، روند استفاده از این زبانها نمایش داده شده است. با این توضیح که موارد اشاره شده در این نمودار تنها نمونههایی معدود از انبوه بدافزارهای نوشته شده به این زبانها هستند.
هر چند به نظر میرسد DLang در مقایسه با سه زبان دیگر از مقبولیت کمتری برخوردار بوده است اما از سال 2020 روند استفاده از آن تا حدودی افزایش یافته و میتوان انتظار داشت که در سالهای آینده نیز بیش از قبل مورد توجه نویسندگان بدافزار قرار بگیرد.
همچنین در موارد متعددی، فایلهایی که در نقش دریافت و اجراکننده ابزار Cobalt Strike عمل میکنند نیز با Go و اخیراً با Nim کامپایل شدهاند که ممکن است برخی ابزارهای امنیتی از شناسایی آنها عاجز باشند.
بلکبری، موراد زیر را اصلیترین دلایل استفاده مهاجمان از زبانهای نامتعارف میداند:
- جبران کاستیهای زبانهای موجود: نویسندگان بدافزارهای مخرب ممکن است به دنبال جبران ضعفهایی باشند که در زبانهای دیگر وجود دارد، خواه کدنویسی سادهتر، افزایش عملکرد یا مدیریت کارآمدتر حافظه. لذا ممکن است یک زبان جدید، ابزار مناسبی برای بسترهایی خاص باشد. به عنوان مثال، در هدف قرار دادن دستگاههای اینترنت اشیاء (IoT) از زبانهای سطح پایینتر مانند C یا Assembly استفاده میشود. مزیت دیگر کاربرپسند بودن برخی از زبانها است که موجب تسهیل و تسریع برنامهنویسی میشود. (برای مثال pip برای Python و npm برای JS)
- بیاثر کردن ابزارهای مهندسی معکوس: همه ابزارهای تحلیل بدافزار از زبانهای برنامهنویسی پشتیبانی نمیکنند. تحلیل فایلهای دودویی نوشته شده باGo ،Rust ، Nim و DLang، در مقایسه با همتایان سنتی خود که با زبانهای C++، C و #C نوشته شدهاند پیچیده و دشوارتر است.
- عدم شناسایی توسط پویشگرهای مبتنی بر امضاء: برای تشخیص یک امضاء، امضای فایل باید ثابت بماند. بازنویسی به زبانی دیگر سبب تولید فایلی با امضایی متفاوت میشود.
- مبهمسازی: وقتی صحبت از زبانهای غیرمعمول میشود، یک زبان برنامه نویسی جدید خود میتواند عامل مبهمسازی باشد. به عبارت دیگر زبانها میتوانند اثری مشابه با الگوریتمهای مبهمسازی سنتی داشته باشند و در عمل سازوکارها و تحلیلگرهای امنیتی را دور بزنند.
- قابلیت اجرا در هر دو بستر Windows و Mac: یک توسعهدهنده بدافزار میتواند با کدنویسی یکسان با یک زبان برنامهنویسی چندبستری فایلهایی را برای اجرا بر روی انواع سیستمهای عامل کامپایل کند.
- بازنویسی کدهای اولیه بدون نیاز به بازنویسی اصل بدافزار: مهاجمان با برنامهنویسی فایلهای دریافت/اجراکننده به زبانهای غیرمعمول، هم ابزارهای امنیتی سر راه را بیاثر میکنند و هم فایل بدافزار اصلی را بدون اعمال هر گونه تغییر در آن اجرا میکند.
بلکبری به مهندسان بدافزار و محققان تهدید توصیه کرده از الگوریتمهای پویا و رفتارشناسی از طریق سندباکس یا سازوکارهای EDR یا لاگ دادهها برای شناسایی بدافزارهای چندزبانی استفاده کنند.
به گفته محققان، با توجه به اینکه بدافزارها اغلب به یک شکل رفتار میکنند، به ویژه هنگامی که بدافزار مجدداً کدنویسی میشود، استفاده از قواعد تشخیصی فارغ از نوع پیادهسازی، جهت شناسایی رفتارهای پویا میتواند در صورت ناموفق بودن امضای ایستا کمککننده باشد.
در موارد دیگر همچون اجراکنندگان Shellcode که اغلب از طریق فراخوانی برخی توابع API در Windows در پروسهها تزریق میشوند، می توان فراخوانی این توابع را به عنوان نشانه آلودگی در نظر گرفت.
همچنین به گفته محققان، در یک فایل دودویی اغلب میتوان از کتابخانههای امضاءشده استفاده کرد. زبانهای مورد بررسی در این گزارش دارای این قابلیت هستند که به آنها امکان استفاده از API Win32 وفراخوانهای API را میدهد. در اصل، آنها میتوانند از یک روش تقریباً مشابه از زبانهای سنتیتر مانند ++C استفاده کنند. البته این همیشه صادق نیست، زیرا زبانهای خاصی هستند که از توابع API خود بجای توابع Win32 API استفاده میکنند. به عنوان مثال، آنها میتوانند از کتابخانههای رمزنگاری شده استفاده کنند که قابلیت نمایش برخی از رویدادها را محدود میکند. با این حال، استفاده از این کتابخانهها در یک فایل دودویی نیز اغلب میتواند بهصورت “امضاشده” باشد.
پشتیبانی ابزارهای تحلیل بدافزار از کدهای نوشته به این زبانها زمانبر خواهد بود، اما بلکبری هشدار میدهد که ضروری است که جامعه امنیت در مقابله با بهرهجوییهای مخرب از فناوریها و تکنیکهای نوظهور بهصورت فعال عمل کنند.
مشروح گزارش بلکبری در لینک زیر قابل مطالعه است:
https://www.blackberry.com/us/en/forms/enterprise/report-old-dogs-new-tricks