استقبال توسعه‌دهندگان بدافزار از زبان‌های برنامه‌نویسی غیرمعمول

بررسی‌ها نشان می‌دهد توسعه‌دهندگان بدافزار در ساخت ابزارهای خود به طور فزاینده‌ای از زبان‌های برنامه‌نویسی غیرمعمول همچون Go، Rust، Nim و Dlang باهدف دشوار کردن تحلیل عملکرد و ماهیت مخرب آن‌ها بهره می‌گیرند.
به گزارش مرکز مدیریت راهبردی افتا، به نقل از گزارش شرکت BlackBerry، تعداد بدافزارهایی که در برنامه‌نویسی آنها از چنین زبان‌هایی استفاده شده به نحو چشم‌گیری افزایش‌یافته است.
این زبان‌های برنامه‌نویسی غیر‌معمول، برخلاف گذشته مورد استقبال قرار گرفته‌اند و مهاجمان از آن‌ها برای بازنویسی بدافزارهای متداول و شناخته‌شده یا ایجاد بدافزارهای جدید استفاده می‌کنند.
این محققان آن دسته از فایل‌های Loader یا Dropper بدافزارها که به زبان‌های برنامه‌نویسی غیرمعمول نوشته شده‌اند مورد رصد قرار داده‌اند. این تکه کدهای مخرب در مراحل اول فرایند آلوده‌‌سازی دستگاه، وظیفه دریافت، رمزگشایی و استقرار بدافزارهایی نظیر NanoCore RAT و ابزارهای بالقوه مخربی همچون Cobalt Strike را بر عهده دارند.
 این فایل‌ها نقش کلیدی در مخفی کردن عملیات آلوده شدن دستگاه از دید محصولات امنیتی نصب شده بر روی آن دارند. از نگاه نویسندگان بدافزار، به‌کارگیری این نوع زبان‌ها و فناوری‌های جدید، آن‌ها را یک‌قدم جلوتر از محصولات امنیتی قرار می‌دهد.
از سویی دیگر برنامه‌نویسان بدافزار مانند سایر برنامه‌نویسان به عدم آسیب‌پذیر بودن برنامه‌های خود حساس هستند. برای مثال، حدود یک سال پیش فاش شد که بدافزار Emotet حاوی باگی از نوع Buffer Overflow است که امکان ازکارانداختن این بدافزار را ممکن می‌کند. موضوعی که زبان برنامه‌نویسی اهمیت خاصی در پیشگیری از بروز آن دارد.
وقتی صحبت از زبان‌های غیرمعمول می‌شود، زبان Go بیش از سایرین جلب‌توجه می‌کند. یک زبان همه‌منظوره که بسیار شبیه به C++  است. کامپایلر آن در ابتدا به زبان C نوشته شده بود اما مدتی بعد از همان زبان Go استفاده شد. 
به گفته محققان بلک‌بری، Go در حال حاضر یکی از زبان‌های موردعلاقه مهاجمان است که هم در توسعه تهدیدات موسوم به APT (Advanced Persistent Threat) و هم در برنامه‌نویسی بدافزارهای عمومی نقش ایفا می‌کند.
هرچند محققان معتقدند زبان C همچنان متداول‌ترین زبان برنامه‌نویسی است اما مهاجمان و نویسندگان بدافزاری که به زبان‌های برنامه‌نویسی جدید روی آورده‌اند کم نیستند. برای مثال، می‌توان به دو گروه منتسب به هکرهای روسی به نام‌های APT۲۸ و APT۲۹، اشاره کرد. از APT۲۸، با عناوینی نظیر Fancy Bear و Strontium و از APT۲۹، با نام‌های Nobelium، Cozy Bear و Dukes نیز یاد می‌شود.
در APT۲۸ که برخی معتقدند با نفوذ به دستگاه‌های کمیته ملی دموکرات ایالات متحده در انتخابات ریاست‌جمهوری ۲۰۱۶ این کشور دخالت داشته، با مجموعه گسترده‌ای از حملات و بدافزارها در ارتباط بوده است.
بدافزار  Zebrocy، به‌عنوان یکی از بدافزارهای این گروه به طور خاص از چندین زبان برنامه‌نویسی (به‌ویژه در ماژول Kill Chain) آن استفاده شده است. وظیفه Zebrocy، دریافت فایل‌های مخرب بیشتر بر روی دستگاه آلوده و سرقت داده‌های قربانی است. 
نخستین نمونه از بدافزار Zebrocy که در سال ۲۰۱۵ مشاهده شد، دارای سه بخش بودند؛ یک downloader مبتنی بر Delphi، یک downloader مبتنی بر AutoIT و یک Backdoor که به زبان Delphi نوشته شده بود.
 صرف‌نظر از زبان برنامه‌نویسی آن، Zebrocy از طریق فیشینگ که انتقال‌دهنده فایل مخرب اولیه است منتشر می‌شود. فایل مذکور با برقراری ارتباط با C&C، یک downloader را اجرا کرده و payload بدافزار را از طریق Backdoor موجود بر روی دستگاه، نصب می‌کند. هرچند Zebrocy بارها توسط برنامه‌نویسان آن بازنویسی شده، اما روال و روش کار تقریباً بدون تغییر باقی‌مانده است.
نمونه‌هایی از بازنویسی کدها به زبان Go توسط گروه APT۲۸ به شرح زیر است:

  •     ۲۰۱۸: نسخه Delphi بدافزار Zebrocy، به زبان Go بازنویسی شد.
  •     ۲۰۱۹: در کارزارهایی که در جریان آنها سفارتخانه‌ها و وزارتخانه‌های امور خارجه کشورهای اروپای شرقی و آسیای مرکزی هدف قرار می‌گرفتند یک downloader مبتنی بر Nim به همراه یک Backdoor به زبان Go کشف شد.
  •     ۲۰۲۰ و پس از آن: مهاجمان APT۲۸ بیش از هر زمانی به Go روی آوردند و اجزای اساسی دیگر Zebrocy شامل بخش Backdoor و downloader را با Go بازنویسی کردند. در دسامبر سال میلادی گذشته نیز APT۲۸ با سوءاستفاده از موضوعات مربوط به همه‌گیری کووید -۱۹، اقدام به توزیع نسخه downloader این بدافزار به زبان Go کرد.

APT۲۹ نیز دیگر گروهی است که کدنویسی بدافزارها به زبان‌های غیرمعمول را در کارنامه دارد. این گروه که اجرای حمله زنجیره تأمین SolarWinds آن را بیش از هر زمانی معروف کرد در سال ۲۰۱۸ دستگاه‌های Windows و Linux را با WellMess هدف قرارداد. WellMess یک تروجان از نوع RAT است و در برنامه‌نویسی آن از Go و .NET بهره گرفته شده است. پر انتشارترین نوع WellMess نسخه Go است که در هر دو نسخه ۳۲ و ۶۴ بیتی به‌صورت فایل‌های PE و ELF ارائه شده و امکان اجرا بر روی انواع سیستم‌های عامل را داراست.
APT۲۹ معمولاً با پویش آدرس IP های سازمانی، اقدام به کشف آسیب‌پذیری‌های سامانه‌های تحت دسترس و سوء‌استفاده از آن‌ها به‌منظور نفوذ به شبکه قربانی می‌کند. این گروه به طور روزافزون از زبان برنامه‌نویسی Go در توسعه انواع بدافزارهای خود استفاده می‌کند. به عنوان مثال، در سال ۲۰۲۰ این گروه از نسخ پیشرفته‌تر WellMess در حمله سایبری به مؤسسات تحقیقاتی دانشگاهی و دارویی در کشورهای مختلف همچون امریکا، انگلیس و کانادا باهدف سرقت اسناد تحقیقاتی در زمینه واکسن کووید -۱۹ استفاده کرد. این نسخ جدید که به زبان Go نوشته شده بودند به دلیل پشتیبانی از پروتکل‌های شبکه‌ای بیشتر و توانایی اجرای اسکریپت‌های PowerShell به‌مراتب پیشرفته‌تر و مخرب‌تر از نسخ قبلی بودند.
هر دو گروه‌ APT همچنان فعال هستند و برخی از تأثیرگذارترین حملات سایبری به نام آن‌ها ثبت شده است؛ همچنان که ذکر شد، از زبان‌های برنامه‌نویسی غیر‌معمول ذکر شده در این گزارش برای افزایش قابلیت‌ها، فراهم ساختن امکان اجرا بر روی انواع سیستم‌های عامل و بی‌اثر کردن ابزارهای امنیتی استفاده می‌کنند.
به‌جز Go و صرف‌نظر از APT۲۸ و APT۲۹ به‌عنوان دو گروه علاقه‌مند به Go، زبان‌های غیرمتعارف دیگری نیز در دهه گذشته به طور فزاینده توسط برخی دیگر از مهاجمان استفاده شده است.
در نمودار زمانی زیر، روند استفاده از این زبان‌ها نمایش‌داده‌شده است. با این توضیح که موارد اشاره شده در این نمودار تنها نمونه‌هایی معدود از انبوه بدافزارهای نوشته شده به این زبان‌ها هستند.

هرچند به نظر می‌رسد DLang در مقایسه با سه زبان دیگر از مقبولیت کمتری برخوردار بوده است، اما از سال ۲۰۲۰ روند استفاده از آن تا حدودی افزایش‌یافته و می‌توان انتظار داشت که در سال‌های آینده نیز بیش از قبل موردتوجه نویسندگان بدافزار قرار گیرد.
بلک‌بری، موارد زیر را اصلی‌ترین دلایل استفاده مهاجمان از زبان‌های نامتعارف می‌داند:

  •     جبران کاستی‌های زبان‌های موجود: نویسندگان بدافزارهای مخرب ممکن است به دنبال جبران ضعف‌هایی باشند که در زبان‌های دیگر وجود دارد؛ وبه دنبال کدنویسی ساده‌تر، افزایش عملکرد یا مدیریت کارآمدتر حافظه هستند. لذا ممکن است یک زبان جدید، ابزار مناسبی برای بسترهایی خاص باشد. به‌عنوان‌مثال، در هدف قراردادن دستگاه‌های IoT از زبان‌های سطح پایین‌تر مانند C یا Assembly استفاده می‌شود. مزیت دیگر کاربرپسند بودن برخی از زبان‌ها است که موجب تسهیل و تسریع برنامه‌نویسی می‌شود. (برای مثال pip برای Python و npm برای Node.JS)
  •     بی‌اثر کردن ابزارهای مهندسی معکوس: ابزارهای تحلیل بدافزار از تمامی زبان‌های برنامه‌نویسی پشتیبانی نمی‌کنند. تحلیل فایل‌های دودویی نوشته شده با Go ،Rust ، Nim و DLang، در مقایسه با همتایان سنتی خود که با زبان‌های C، C++ و C# نوشته شده‌اند پیچیده و دشوارتر است.
  •     عدم شناسایی توسط پویشگرهای مبتنی بر امضا: برای تشخیص یک امضا، امضای فایل باید ثابت بماند. یک مثال از مشخصه ایستای فایل‌ها، hash است که نیاز به یکسان بودن بیت به بیت فایل دارد؛ بازنویسی به زبانی دیگر سبب تولید فایلی با hash متفاوت می‌شود.
  •     مبهم‌سازی: وقتی صحبت از زبان‌های غیر‌معمول می‌شود، یک زبان برنامه‌نویسی جدید خود می‌تواند عامل مبهم‌سازی باشد. به‌عبارت‌دیگر زبان‌ها می‌توانند اثری مشابه با الگوریتم‌های مبهم‌سازی سنتی داشته باشند و در عمل سازوکارها و تحلیلگرهای امنیتی را دور بزنند.
  •     قابلیت اجرا در هر دو بستر Windows و Mac: یک توسعه‌دهنده بدافزار می‌تواند با کدنویسی یکسان با یک زبان برنامه‌نویسی چند بستری فایل‌هایی را برای اجرا بر روی انواع سیستم‌های عامل کامپایل کند.
  •     بازنویسی کدهای اولیه بدون نیاز به بازنویسی اصل بدافزار: مهاجمان با برنامه‌نویسی فایل‌هایdropper و loader به زبان‌های غیرمعمول، هم ابزارهای امنیتی سر راه را بی‌اثر می‌کنند و هم فایل بدافزار اصلی را بدون اعمال هرگونه تغییر در آن اجرا می‌کند.

بلک‌بری به مهندسان بدافزار و محققان تهدید توصیه کرده است از الگوریتم‌های پویا و رفتارشناسی از طریق سندباکس یا سازوکارهای EDR یا لاگ داده‌ها برای شناسایی بدافزارهای چندزبانی استفاده کنند. 
به گفته محققان، باتوجه‌به اینکه بدافزارها اغلب به یک‌شکل رفتار می‌کنند، به‌ویژه هنگامی که بدافزار مجدداً کدنویسی می‌شود، به منظور شناسایی رفتار بدافزار، در صورت ناموفق بودن امضای ایستا، استفاده از قواعد تشخیصی برای شناسایی رفتارهای پویا می‌تواند کمک‌کننده باشد؛ به عنوان مثال، اجراکنندگان Shellcode که اغلب از طریق فراخوانی برخی توابع API در Windows در پروسه‌ها تزریق می‌شوند، می‌توان فراخوانی این توابع را به‌عنوان نشانه آلودگی در نظر گرفت.
همچنین به گفته محققان، در یک فایل دودویی اغلب می‌توان از کتابخانه‌های امضاشده استفاده کرد. زبان‌های مورد بررسی در این گزارش دارای این قابلیت هستند که به آن‌ها امکان استفاده از API Win۳۲ و فراخوان‌های API را می‌دهد. در اصل، آن‌ها می‌توانند از یک روش تقریباً مشابه از زبان‌های سنتی‌تر مانند C++ استفاده کنند. البته این همیشه صادق نیست، زیرا زبان‌های خاصی هستند که از توابع API خود به‌جای توابع Win۳۲ API استفاده می‌کنند. 
پشتیبانی ابزارهای تحلیل بدافزار از کدهای نوشته به این زبان‌ها زمان‌بر خواهد بود؛  blackberryهشدار می‌دهد که جامعه امنیت در مقابله با بهره‌جویی‌های مخرب از فناوری‌ها و تکنیک‌های نوظهور به‌صورت فعال عمل کنند.
مشروح گزارش بلک‌بری در لینک زیر قابل‌مطالعه است:

https://www.blackberry.com/us/en/forms/enterprise/report-old-dogs-new-tricks

منبع:

https://threatpost.com/malware-makers-using-exotic-programming-languages/۱۶۸۱۱۷/

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد.