Хакерський злам BNB Chain: як це було?

07.10.2022
6 мин
1720
0
Хакерський злам BNB Chain: як це було? Головний колаж новини.

Користувач під ніком samczsun, який працює ресерчером у відомому фонді Paradigm, розповів у своєму треді, як відбувався злом BNB Chain (розповідь буде від імені автора):

Зловмисник вкрав 2 мільйони BNB з Binance Bridge. Ось як усе відбулося.

Усе почалося з того, що мені надіслали адресу з мільйонами доларів. Або їх отримали великим “висмикуванням килима” (рагпул), або величезним зломом.

Знадобилося кілька секунд, щоб зрозуміти, що хакер “дійсно” вклав 200 млн у Venus. Залишилося з’ясувати, де він їх узяв.

Річ у тім, що йому вдалося “переконати” Binance Bridge двічі відправити йому по 1 млн BNB.

Або це був жирний дроп від Binance, або він знайшов критичну вразливість.

Я почав із порівняння його транзакцій і звичайних переказів коштів. Перше, що мені вдалося помітити — висота блоків, яку він використовував. Вона завжди була однаковою – 110217401. Висоти, використовувані для законних виведень коштів, були набагато більшими.

Також “доказ” транзакції був значно коротшим ніж у звичайних транзакцій.

Це змусило мене повірити, що хакеру вдалося підробити доказ для конкретного блоку – 110217401, тому довелося з’ясувати як вони взагалі працюють.

На Binance існує спеціальний контракт попередньої компіляції, який використовується для перевірки дерев IAVL. Якщо ви нічого не знаєте про дерева IAVL, не хвилюйтеся.

В основному, коли ви перевіряєте дерево IAVL, ви вказуєте список “операцій”. Binance Bridge зазвичай очікує дві з них: операцію “iavl:v” і операцію “мультистор”. Ось їх реалізації:

Щоб підробити доказ, нам потрібно, щоб обидві операції були успішними, і нам потрібно, щоб остання операція (мультистор) повертала фіксоване значення (хеш зазначеного блоку: 110217401).

Дивлячись на реалізацію, ми можемо зрозуміти, що неможливо, або принаймні дуже складно маніпулювати кореневим хешем. Це означає, що нам потрібно, щоб наше вхідне значення дорівнювало одному з ідентифікаторів фіксації.

Вхідне значення операції “multistore” є вихідним значенням операції “iavl:v”. Це означає, що ми хочемо якось контролювати тут кореневу змінну, але при цьому пройти перевірку значення.

То як же обчислюється кореневий хеш? Що ж, буває в цьому монстрі функція під назвою COMPUTEHASH. На дуже-дуже високому рівні, хеш рекурсивно проходить кожним шляхом і аркушем і виконує купу хешування, і насправді, деталі результату не мають значення.

Дивлячись на те, як доказ викладено в легітимній транзакції, ми бачимо, що він має дуже довгий шлях, без внутрішніх вузлів і лише з одним кінцевим. Цей листовий вузол містить хеш нашого шкідливого корисного навантаження! Якщо ми не можемо змінити цей кінцевий вузол, нам потрібно додати новий.

Звичайно, якщо ми додамо новий кінцевий вузол, нам також потрібно буде додати новий внутрішній вузол, щоб вони відповідали один одному.

Тепер нам залишилося зіткнутися з останньою перешкодою — змусити COMPUTEHASH повертати потрібний нам кореневий хеш. Зверніть увагу, що в кінцевому підсумку нам знадобиться шлях, що містить ненульовий правильний хеш. Коли ми знаходимо відповідний, ми стверджуємо, що він відповідає проміжному кореневому хешу.

Давайте просто трохи відредагуємо код, щоб зрозуміти, який хеш нам потрібен, і…

Залишилося зібрати все воєдино. Ми візьмемо законний доказ і змінимо його так, щоб:

  • ми додали новий аркуш для forged payload;
  • ми додали порожній внутрішній вузол, щоб задовольнити докази;
  • ми налаштували наш лист, щоб отримати правильний кореневий хеш.

(Варто зазначити, що це був не той метод, який використовував зловмисник. Однак інша частина експлойту ідентична)

Таким чином, помилка була в тому, як Binance Bridge перевіряв докази, які могли дозволити зловмисникам підробляти довільні повідомлення. На щастя, зловмисник підробив лише два повідомлення, але збиток міг бути набагато більшим.

Після цього, хакер перевів 1 млн BNB на лендингову платформу Venus, під заставу яких йому вдалося взяти $150 млн у різних стейблкоїнах. Після цього кошти були розподілені в різні мережі.

Зараз BNB Chain відновила свою роботу, а валідатори провели оновлення коду. Під час публікації інформації про оновлення, розробники повідомляли, що воно покликане заблокувати обліковий запис хакера і зупинити транзакції між BNB Beacon Chain і BNB Chain.

Як вам стаття?

0
0

статті на цю ж тему

Центробанк Нігерії вимагає...
avatar Serhii Pantyukh
24.04.2024
Приплив коштів в спотові біткоїн-ETF...
avatar Nazar Pyrih
24.04.2024
Команда LayerZero анонсувала TGE у першій...
avatar Serhii Pantyukh
24.04.2024