باجافزار WannaCry
در حال حاضر بدافزارهای زیادی وجود دارند که برای عملیاتهای خرابکارنه استفاده میشوند. برای حل این مشکل، بسیاری از محققان، فناوریهایی که میتوانند به سرعت و به طور خودکار به شناسایی بدافزارها کمک کنند را مورد مطالعه قرار میدهند. استفاده از هوش مصنوعی یکی از این فناوریها میباشد. با این حال هوش مصنوعی در پاسخ به روشهای جدید حمله با مشکل روبرو میباشد. بدافزارها با وجود تنوعی که دارند، اغلب در همه آنها در قسمت هسته از فناوری مشابهی استفاده میشود. بنابراین، شاید اگر بتوانیم قسمت اصلی بدافزار را از طریق تجزیه و تحلیل شناسایی کنیم، میتوانیم انواع مختلفی از آنها را نیز از این طریق شناسایی نماییم. به همین دلیل میتوانیم بر روی مهندسی معکوس برای شناسایی اقدامات متقابل از طریق آنالیز بدافزارها تمرکز کنیم.
باجافزار WannaCry
باجافزار WannaCry برای اولین بار در سال 2017 منتشر شد. تا الان بسیاری از سیستمها از طریق این بدافزاز آسیب دیدهاند. این باجافزار دارای ویژگی رمزگذاری فایل و عملکردی شبیه به Worm برای انتشار میباشد.
تابع رمزگذاری باجافزار WannaCry فایلها را با استفاده از الگوریتم رمز AES 128 (مد CBC) رمزگذاری میکند. علاوهبراین، بدافزار کلید رمزنگاری خود را نیز با استفاده از کلید عمومی RSA ایجاد شده بر روی سیستم هدف رمز مینماید. در ادامه کلید رمز شده AES و دیتای فایل رمز شده و عبارت “WANACry!” را با هم ترکیب میکند. در آخر باجافزار WannaCry به آخر همه فایلهای رمز شده عبارت .WNCRY را اضافه میکند. در این فرآیند کلید رمز ایجاد شده بر روی سیستم هدف از طریق کلید عمومی موجود در داخل باجافزار که با اسم 00000000.eky ذخیره شده است، رمز میشود. مهاجم با فشار دادن دکمه “بررسی پرداخت” در صفحه باج افزار سعی میکند فایل “00000000.eky” را از طریق شبکه TOR انتقال دهد. در صورتی که باج درخواستی پرداخت شده باشد، قربانی کلید رمز RSA رمزگشایی شده را دریافت کرده و کلید را با نام “00000000.dky” ذخیره میکند.
با این حال، در این فرآیند مشخص است که مشکلی در عملکرد وجود دارد و حتی در صورت پرداخت باج، پروندهها رمزگشایی نمیشوند.
باجافزار WannaCry برای داشتن عملکرد کرم مانند، برای انتشار خود از Exploit به اسم “EternalBlue” و از Backdoor به اسم “DoublePulsar” استفاده میکند. در بخش اصلی این مقاله، بر روی نتایج تجزیه و تحلیل کرم تمرکز شده است. سپس، سعی شده تا با استفاده از نتایح تجزیه و تحلیل، ارتباطات کرم شناسایی و جلوگیری شود. مقادیر هش نمونههای آنالیز شده به صورت زیر میباشد.
MD5: db349b97c37d22f5ea1d1841e3c89eb4
SHA1: e889544aff85ffaf8b0d0da705105dee7c97fe26
SHA256:24d004a104d4d54034dbcffc2a4b19a11f39008a575aa614ea04703480b1
022c
طرح کلی
باجافزار WannaCry در اصل از طریق آسیبپذیری SMB منتشر میشود. با توجه به اینکه SMB با استفاده از مجوز سیستمی اجرا میشود به همین دلیل کد آلوده نیز با مجوز سیستمی اجرا میشود. باجافزار WannaCry بعد از انتشار آلودگی دو کار اصلی بر روی سیستم هدف انجام میدهد. یکی پروسه رمزنگاری فایلهای سیستم هدف به عنوان باجافزار و دومی ایفای نقش کرم برای انتشار آلودگی به سایر سیستمها. در فرآیند انتشار، باجافزار WannaCry سعی میکند با استفاده از پورت 445 مربوط به پروتکل SMB در شبکه به سایر سیستمها وصل شود. در صورت موفقیتآمیر بودن اتصال، این باجافزار به دنبال سیستمهایی میگردد که آسیبپذیری “EternalBlue” را داشته باشند. اگر آسیبپذیری “EternalBlue” وجود داشته باشد به دنبال آنهایی میگردد که با بدافزار “DoublePulsar” آلوده شده باشند. اگر سیستمی دارای آسیبپذیری “EternalBlue” باشد ولی آلودگی “DoublePulsar” نداشته باشد، باجافزار WannaCry از طریق آسیبپذیری “EternalBlue” آن را آلوده خواهد کرد. بعد از ایجاد آلودگی، WannaCry قسمت اصلی بدافزار را به سیستم قربانی جدید ارسال میکند. در اکثر مراحل ارتباط از یک XOR ساده و 32 بیتی برای رمزنگاری و در امان ماندن از دید IDS/IPS استفاده میشود.
جزئیات کرم – قبل از Expliot
هنگامی که یک سیستم به نسخه اولیه WannaCry آلوده میشود، ابتدا سیستم شروع به اتصال به URL معروف “Kill Switch” میکند. در صورت ناموفق بودن اتصال، پردازش تا برقراری ارتباط ادامه مییابد. بعد از برقراری ارتباط در مرحله بعدی آرگومانهای آن را چک شود. اگر دارای دو آرگومان باشد، روال معمول را در مورد آن به عنوان کرم، اجرا کنید. در موارد دیگر، روالی را برای عمل رمزگذاری آن به عنوان یک باجافزار اجرا کنید. این بدافزار هنگامی که به عنوان کرم در سیستم هدف عمل میکند، به صورت یک سرویس در میآید. در واقع این سرویس زمانی ثبت میشود که باجافزار WannaCry بلافاصله پس از آلودگی به عنوان باج افزار فعال شود. در این فرآیند اسمهایی که برای سرویس و فایل اجرایی انتخاب میشود به گونهای است که شبیه پردازههای مجاز مایکروسافت میباشند.
Service Name: mssecsvc2.0
Display name: Microsoft Security Center (2.0) Service
Execution file path: C:\Windows\ mssecsvc.exe -m security
Startup type: Auto
Recovery: Restart service (after 1 minute)
نحوه کار کرم
کرم سیستمهایی را جستجو میکند که قابلیت اتصال از طریق SMB را دارند. ابتدا متد جستجو یک آدرس IPv4 با یک شماره تصادفی ایجاد میکند. در این فرآیند از تبدیل شدن اوکتت اول به 127 یا بالاتر از 224 جلوگیری میشود. بنابراین احتمال آلوده شدن سیستمها با قابلیت اتصال SMB چه با آدرس public و چه یک آدرس local وجود دارد. اگر اتصال به پورت 445 موفقیت آمیز باشد، اکتتهای اول تا سوم آدرس با سیستم هدف یکسان انتخاب میشود و اکتت چهارم به ترتیب از 1 تا 254 تغییر پیدا میکند.
سرویس WannaCry در صورت موفقیت آمیز بودن اتصال به پورت 445، یک Thread برای exploit و انتقال بدافزار ایجاد میکند. این نخ ابتدا یک درخواست با مقدار خاصی از داده ارسال میکند. اگر سیستم هدف دارای آسیبپذیری “EternalBlue” باشد، مقدار(STATUS_INSUFF_SERVER_RESOURCES) را برمیگرداند. به همین دلیل، بدافزار بررسی میکند که کجا، مقدار برگشتی مقدار آسیب پذیری است. در ادامه سرویس WannaCry درخواستی را برای بررسی سیستم به آلودگی “DoublePulsar” ارسال میکند. Thread ایجاد شده چک میکند که مقدار Multiplex ID دادههای دریافتی از سیستم هدف آیا 81 (0x51) است یا نه. در صورت برابری مقدار با 81، سرویس WannaCry به این نتیجه میرسد که سیستم هدف به “DoublePulsar” نیز آلوده میباشد.
به عنوان یک دلیل دیگر،Thread ایجاد شده برای بررسی اینکه سیستم هدف آیا به “DoublePulsar” آلوده است یا نه، یک شناسه MultiPlex با مقدار 65 (0x41) ارسال میکند. بدافزار با بررسی مقدار برگشتی میتواند آلودگی “DoublePulsar” را مجددا تأیید کند. بعد از تشخیص آلوده بودن هدف به “DoublePulsar”، نخ ایجاد شده فرآیند مربوط به پسا بهرهبرداری را اجرا میکند.
جزئیات کرم – Exploit
به منظور آلوده کردن سیستم هدف به “DoublePulsar”، باجافزار WannaCry بهره برداری مربوط به آسیبپذیری “EternalBlue” را در سیستم قربانی اجرا میکند. در طول تراکنش 2، دادههای مربوط به درخواست دوم و SMB 2 در داخل Exploit منتقل میشوند. مشخصا این ارتباط برای تخریب حافظه میباشد. پس از این ارتباط، درب پشتی “DoublePulsar” ارسال میشود. با استفاده از تحلیل دادههای حافظه سیستم قربانی میتوان تأیید کرد که دادههای Backdoor ارسالی شامل پردازش رمزگشایی است که عملیات32 بیتی از XOR را انجام میدهد.
جرئیات کرم – مرحله Post-Exploit
بعد از آلوده شدن سیستم هدف به “DoublePulsar”، نخ ایجاد شده Payload مربوط به WannaCry را به سیستم قربانی ارسال میکند. برای انتقال از Trans2 SESSION_SETUP که یک دستور SMB برای انتقال میباشد، استفاده میشود. در این ارتباط نخ Payload ارسالی را با استفاده از یک عملگر 32 بیتی رمز و ارسال میکند. در سیستم هدف با دریافت Payload عملیات رمزگشایی توسط “Doublepulsar” انجام شده و کد دسترسی راه دور اجرا میشود. در نهایت فایل اجرایی WannaCry در سیستم هدف با فایلی به اسم mssecsvc.exe در فولدر ویندوز، بدون هیچ آرگومانی اجرا میشود. در نتیجه سیسم هدف به WannaCry آلوده میشود.
ارتباطات “EternalBlue” و “DoublePulsar”
در فرآیند انتشار باجافزار WannaCry، از طریق آسیبپذیری”EternalBlue” ارتباطاتی برای تخریب حافظه و اجرای کد برقرار میشود. در این ارتباط “EternalBlue” دادههایی برای تخریب حافظه ارسال میکند. این داده ساختگی بوده و دادههای معتبری نمیباشند. نکته مهم اندازه دادههایی است که باید منتقل شود. یک مهاجم میتواند از دادههای دلخواه برای ایجاد Payload به منظور تخریب حافظه استفاده کند. بنابراین، هنگام ایجاد انواع Payload، ممکن است محتوای آن تغییر کند. به همین دلیل ایجاد یک امضا براساس Payload مربوط به “EternalBlue” نمیتواند به ما در تشخیص باجافزار WannaCry کمک کند.
WannaCry پس از تخریب حافظه توسط “EternalBlue”، محموله “DoublePulsar” را در یک متن ساده ارسال میکند. بنابراین ما میتوانیم این حمله را با استفاده از امضای محموله DoublePulsar تشخیص دهیم. ولی این نکته را باید به یاد داشته باشیم که اگر Backdoor ارسال شده به همراه بهره برداری “EternalBlue” تغییر کند، دیگرما قادر به تشخیص آن نخواهیم بود. به همین دلیل، شناسایی متادیتای مربوط به مشخصههای “EternalBlue” برای تشخیص حمله میتواند مفیدتر از payload باشد.
با توجه به نتایج مهندسی معکوس “EternalBlue” و “DoublePulsar”، میتوان نتیجه گرفت که استراتژی شناسایی حمله به جای شناسایی Payload، باید شناسایی متادیتای آنها باشد. بدست آوردن این اطلاعات از طریق مهدندسی معکوس یکی از محاسن استفاده از این روش میباشد.
ایجاد قوانین Snort از دانش بدست آمده از مهندسی معکوس
ارسال مقدار غیرقانونی SMB2 هنگام ارسال بهرهبرداری “EternalBlue “
“EternalBlue” به داشتن الگوی خاصی برای یافتن اهداف آسیبپذیری، شناخته میشود. برای چنین ارتباطاتی، از پارامترهای معمول استفاده نمیشود. در این ارتباطات، اگرچه SMB2 داخل هدر SMB دیده میشود، اما همه پارامترهای بعدی 0 میباشند. مشخص ترین ویژگی این است که “StructureSize” (2 بایت) بعد از هدر SMB “00 00” است. در حالی که راهنمای SMB2 مایکروسافت مشخص کرده است که مقدار این پارامتر بایستی “64” (0x40h) باشد. بنابراین این یک ارتباط غیرمجاز میباشد و برای ارسال بهرهبرداری “EternalBlue” ضروری است.
زیرساخت قانون برای تشخیص ارسال بهرهبرداری مربوط به آسیبپذیری EtenalBlue را به صورت زیر در نظر میگیریم.
- ارتباط از نوع SMB2
- اندازه ساختار در نظر گرفته شده “00 00”
- اندازه داده “00”
alert tcp any any -> any 445 (msg:" SMB2 packet data is possible to be EternalBlue Exploit "; content:"|fe|SMB|00 00 00 00 00 00 00 00|" offset:4;sid:1000001; rev: 1;)
استفاده از محتوای درخواست و پاسخ بررسی آسیب پذیری “EternalBlue”
اگر آسیبپذیری “EternalBlue” وجود داشته باشد، فرض میشود که مقدار STATUS_INSUFF_SERVER_RESOURCES برای درخواست TRANS_PEEK_NMPIPE با FID مقدار “0” ضروری میباشد.
درخواست:
- نوع ارتباط “SMB”
- دستور مربوط به درخواست SMB_COM_TRANSACTION(0x25h)
- زیر دستور در خواست TRANS_PEEK_NMPIPE(0x0023)
- مقدار FID برابر 0
پاسخ:
- نوع ارتباط SMB
- دستور بازگشتی SMB_COM_TRANSACTION(0x25h)
- مقدار بازگشتی STATUS_INSUFF_SERVER_RESOURCES (0xC0000205)
تحت این شرایط امکان تشخیص مثبت غلط نیز وجود دارد. زیرا مقدار برگشتی “STATUS_INSUFF_SERVER_RESOURCES” ممکن است برای درخواست دیگری که مربوط به آسیب پذیری نیست نیز برگردانده شود. به همین دلیل با ترکیب یک درخواست نادرست TRANS_PEEK_NMPIPE که بلافاصله قبل از آن ارسال شده است، میتوان درخواست مربوط به شناسایی آسیبپذیری را به درستی تشخیص داد. با استفاده از این اطلاعات علاوه بر اینکه میتوانیم متوجه شویم که یک مهاجم آسیب پذیری “EternalBlue” را بررسی میکند یا نه، میتوانیم آسیبپذیر بودن هدف را نیز تشخیص دهیم.
alert tcp any any -> any 445 (msg:"EternalBlue Vulnerable check request"; content:"|ff|SMB|25|"; offset:4; content:"|23 00 00 00|"; distance:56; sid:1000002; rev:1;)
alert tcp any 445 -> any any (msg:"EternalBlue Vulnerable check return"; content:"|ff|SMB";offset:4; content:"|25 05 02 00 c0|"; distance:0; sid:1000003; rev:1;)
استفاده از دادههای انتقالی Trans2 SESSION_SETUP توسط “DoublePulsar”
کرم WannaCry با بهره برداری از آسیبپذیری “EternalBlue”، سیستم قربانی را به در پشتی “DoublePulsar” آلوده میکند. سپس WannaCry یک Payload برای سیستم هدف ارسال میکند تا سیستم هدف خود را آلوده نماید. برای ارسال Payload از دستورTrans2 SESSION_SETUP استفاده میشود. با توجه به اینکه (طبق راهنمای CIFS مایکروسافت)، این دستور نه تنها به عنوان یک دستور کاربردی استفاده نمیشود بلکه اصلا پیادهسازی نشده است. به همین دلیل، استفاده از این فرمان در یک برنامه معمولی غیر عادی است. بنابراین ارتباطات “DoublePulsar” با تشخیص این زیرفرمان قابل تشخیص میباشد. با توجه به اینکه Payload ارسالی توسط “DoublePulsar” با استفاده از یک عملگر 32 بیتی XOR رمز شده است. بنابراین نوشتن امضا با استفاده از آن امکانپذیر نمیباشد.
بنابراین زیرساخت قانون برای تشخیص را به صورت زیر در نظر میگیریم.
- نوع ارتباط: SMB.
- دستور درخواستی: SMB_COM_TRANSACTION2 (0x32h).
- زیرفرمان درخواستی: TRANS2_SESSION_SETUP (0x000e).
alert tcp any any -> any 445 (msg:"Send Data is possible to send to DoublePulser Backdoor"; content:"|ff|SMB|32|"; offset:4; content:"|0e 00|"; distance:56; sid:1000004; rev:1;)
استفاده از محتوای درخواستهای شناسایی نقاط آلوده به “DoublePulsar”
زیرساخت این قانون بر مبنای شناسایی درخواستیهایی است که برای شناسایی نقاط آلوده به “DoublePulsar” استفاده میشود.
- نوع ارتباط: SMB.
- دستور درخواست: SMB_COM_TRANSACTION2 (0x32h).
- زیرفرمان درخواست: TRANS2_SESSION_SETUP (0x000e).
- ID مربوط به Multiplex: مقدار 0x41.
alert tcp any any -> any 445 (msg:"Possible DoublePulsar infection check request"; content:"|ff|SMB|32|"; offset:4; content:"|41 00|"; distance:25; content:"|0e 00|";distance:29; sid:1000005; rev:1;)
استفاده از محتوای پاسخ ارسالی زمانی که سیستم هدف به “DoublePulsar” آلوده شده باشد
زیرساخت این قانون بر مبنای شناسایی پاسخهای نقاط پایانی است که به “DoublePulsar” آلوه شدهاند.
- نوع ارتباط: SMB.
- دستور درخواست: SMB_COM_TRANSACTION2 (0x32h).
- زیرفرمان درخواست: STATUS_NOT_IMPLEMENTED (0xc0000002).
- ID مربوط به Multiplex: مقدار 0x51.
alert tcp any 445 -> any any (msg:"Possible DoublePusar infected responce"; content:"|ff|SMB|32|"; offset:4; content:"|02 00 00 c0|"; distance:0; content:"|51 00|"; distance:21; sid:1000006; rev:1;)
استفاده از ارتباطاتی که Payload مربوط به WannaCry را به “DoublePulsar” ارسال میکند
زیرساخت قانون برای تشخیص ارتباطات مربوط به ارسال payload برای DoublePulsar را به صورت زیر در نظر میگیریم.
- نوع ارتباط: SMB.
- دستور درخواست: SMB_COM_TRANSACTION2 (0x32h).
- زیرفرمان درخواست: TRANS2_SESSION_SETUP (0x000e).
- ID مربوط به Multiplex: مقدار 0x42.
alert tcp any any -> any 445 (msg:"Possible send Payload to DoublePulsar"; content:"|ff|SMB|32|"; offset:4; content:"|42 00|"; distance:25; content:"|0e 00|";distance:29; sid:1000007; rev:1;)
دیدگاهتان را بنویسید