Анализ .NET стиллера GrandSteal
Moody
В этом посте я поделюсь с вами своими заметками об анализе одного стиллера, написанного на .NET. Кто - то принял его за Quesar, соответствующе пометив на Any.run. Но после анализа исходного кода, я понял, что он имеет существенные отличия и не принадлежит к вышеназванному семейству вирусов. Поиск по IOC не дал результатов, поэтому, на основании внутренних имен классов, я присвоил ему имя "GrandSteal".
- Оригинальный сэмпл: 89782B6CDAAAB7848D544255D5FE7002
- Источник: http://a4.doshimotai[.]ru/pxpx.exe
- Информация об URL: VxVault URLhaus
- Автоматически-сгенерированный отчет из песочницы: Открыть
- Первая загрузка на VirusTotal: 2019-03-18 22:28:20
- Анализ при помощи Any.Run: Здесь
- Тэги на Any.Run: Evasion, Trojan, Rat, Quasar
- Декомпилированный исходный код: Github
Анализ
Loader
- Сэмпл не имеет цифровой подписи
Сведения:
- Авторские права: Symantec© 2019
- Описание: pxpx.exe
- Название продукта: pxpx.exe
- Исходное имя файла: pxpx.exe
- Версия продукта: 7.1.0.0
Лоадер написан на .NET и обфусцирован при помощи ConfuserEx v1.0.0

Распакованные модули
После того, как мы запустили исполнительный файл в виртуальной машине, при помощи WinDbg, мы обнаруживаем, что вредонос распаковывает набор модулей в оперативную память:

Дампим их на жесткий диск и видим, что большинство из них написано, также, как и лоадер, на .NET. Используем dnSpy для декомпиляции и анализа.

Вредонос содержит код для кражи данных из различных продуктов, среди которых:

Chromium Стиллер
Малварь крадет различную информацию из браузеров на Chromium.

Полную реализацию можно посмотреть по ссылке ChromiumManager.cs.
Cookie
Чтение таблицы с Cookie из базы данных SQLite

Учетные записи
Чтение таблицы с сохраненными учетными записями из базы данных SQLite.


Автозаполнение
Чтение таблицы с данными автозаполнения из базы данных SQLite.

Кредитные карты
Чтение таблицы credit_cards из базы данных SQLite.

Стиллер криптокошельков
Кража файлов "wallet.dat" следующих кошельков:
- Litecoin: "%appdata%\Litecoin\wallet.dat"
- Litecoin-Qt: walletpath=read("HKCU\Software\Litecoin\strDataDir"), walletpath + "wallet.dat"
- Litecoin-Qt: walletpath=read("HKCU\Software\Litecoin-Qt\strDataDir"), walletpath + "wallet.dat"
- Bitcoin: "%appdata%\Bitcoin\wallet.dat"
- Bitcoin-Qt: walletpath=read("HKCU\Software\Bitcoin\strDataDir"), walletpath + "wallet.dat"
- Bitcoin-Qt: walletpath=read("HKCU\Software\Bitcoin-Qt\strDataDir"), walletpath + "wallet.dat"
- Bytecoin: "%appdata%\bytecoin\*.wallet"
- Exodus: "%appdata%\Exodus\*"
- Dash-Qt: walletpath=read("HKCU\Software\Dash\strDataDir"), walletpath + "wallet.dat"
- Dash-Qt: walletpath=read("HKCU\Software\Dash-Qt\strDataDir"), walletpath + "wallet.dat"
- Electrum: "%appdata%\Electrum\wallets\*"
- Ethereum: "%appdata%\Ethereum\wallets\*"
- Monero: walletpath=read("HKCU\Software\monero-project\wallet_path"), walletpath + "wallet.dat"
- Monero: walletpath=read("HKCU\Software\monero-core\wallet_path"), walletpath + "wallet.dat"
С исходным кодом можно ознакомиться тут - ColdWalletManager.cs.
Кража файлов из личных директорий
Кража файлов с рабочего стола, избранного и личных папок.

С исходным кодом можно ознакомиться тут - DesktopFileManager.cs.
Discord Стиллер
Вредонос крадет информацию из Discord с помощью любопытного метода. Вызывает API-метод MiniDumpWriteDump из DbgHelp.dll, чтобы создать мини-дамп любого процесса, который содержит слово "Discord" в названии.


После того, как мини-дамп создан, осуществляется поиск токена для получения полной информации из аккаунта Discord, при помощи регулярного выражения.

С исходным кодом можно ознакомиться тут - DiscordManager.cs.
Filezilla
Кража данных из .XML файлов Filezilla.

С исходным кодом можно ознакомиться тут - FileZillaManager.cs.
Gecko Стиллер
Сначала стиллер ищет важные файлы, в которых хранятся пароли, куки, автозаполнения - аналогично Chromium.

После этого восстанавливает учетные данные:

И куки:

С исходным кодом можно ознакомиться тут - GeckoManager.cs.
RDP Стиллер
Малварь может красть сохраненные учетные данные от RDP.

С исходным кодом можно ознакомиться тут - RdpManager.cs.
Telegram стиллер
Пытается найти файлы в директории:
"%appdata%\Telegram Desktop\tdata\D877F783D5D3EF8C\map*"
и восстановить сессию.

С исходным кодом можно ознакомиться тут - TelegramManager.cs.
Набор правил для Yara
rule grandsteal {
strings:
$s1 = "ws://{0}:{1}/websocket" wide
$s2 = "GrabBrowserCredentials: " wide
$s3 = "GrabColdWallets: " wide
$s4 = "GrabDesktopFiles: " wide
$s5 = "GrabTelegram: " wide
$s6 = "ColdWallets parser has been started" wide
$s7 = "DiscordSession parser has been started" wide
$s8 = "Rdps parser has been started" wide
$s9 = "DesktopFiles parser has been started" wide
$s10 = "FTPs parser has been started" wide
$s11 = "TelegramSession parser has been started" wide
$s12 = "ListOfProcesses parser has been started" wide
$s13 = "ListOfPrograms parser has been started" wide
$s14 = "card_number_encrypted" wide
$s15 = "\\Litecoin\\wallet.dat" wide
$s16 = "\\Bitcoin\\wallet.dat" wide
$s17 = "\\Exodus\\exodus.wallet" wide
$s18 = "\\Electrum\\wallets" wide
$s19 = "\\Ethereum\\wallets" wide
$s20 = "monero-project" wide
$s21 = "Discord dump UNKNOWN" wide
$s22 = "{0}\\FileZilla\\recentservers.xml" wide
$s23 = "{0}\\FileZilla\\sitemanager.xml" wide
$s24 = "cookies.sqlite" wide
$s25 = "password-check" wide
$s26 = "AppData\\Roaming\\Telegram Desktop\\tdata\\D877F783D5D3EF8C" wide
$s27 = "%USERPROFILE%\\AppData\\Local\\Temp\\Remove.bat" wide
$s28 = "taskkill /F /PID %1" wide
$s29 = "choice /C Y /N /D Y /T 3 & Del %2" wide
$s30 = "ExtractPrivateKey" wide
$s31 = "formSubmitURL" wide
$s32 = "passwordField" wide
$s33 = "usernameField" wide
$s34 = "GrabDiscord" wide
$s35 = "encryptedPassword" wide
$s36 = "masterPassword" wide
$s37 = "WalletName" wide
condition:
(30 of them)
}
Список всех строк из PE - *клик*.