Атака АРА. Детальний розбір і методи захисту
Останніми тижнями почастішали «атаки отруєння» АРА (Address Poisoning Attack) з переказами $0 USD. За даними на 2 грудня в мережі «отруєно» понад 340 тис. адрес. Загалом ми маємо 99 адрес жертв і понад $1,64 млн вкрадених коштів.
У цій статті X-explore дає всебічний аналіз таких атак, відстежує зловмисників онлайн, а також показує детальну схему реалізації АРА.
Хотілося б, щоб додатки-гаманці активізували такі сповіщення про ризики. А звичайні користувачі були в курсі подібних загроз при переказі крипти.
Переклад статті від x-explore.eth
Історія
Нещодавно наш ончейн-моніторинг ризиків показав, що в мережах ETH і BSC часто бувають перекази по $0 USD. Ми взяли дані транзакцій BSC-chain як приклад, щоб показати, як це відбувається.
Жертва A робить звичайну транзакцію з переказу 452 BSC-USD Користувачеві B. Але Користувач B отримає 0 BSC-USD від Атакуючого C. У цей самий час, у тій самій транзакції хеша сам Користувач A помилково переказує 0 BSC-USD на адресу Атакуючого C (реалізація операції переказу 0 BSC-USD «туди-назад»):
Багато користувачів не розуміють, у чому справа. Вони бояться, що їхні закриті ключі під загрозою, і що зловмисники крадуть активи. Ось скріни повідомлень із соцмереж:
Цілі атаки
Насправді користувачам, які зіткнулися з такою ситуацією, не потрібно нервувати. Їхні активи в безпеці, приватний ключ не зламаний. Потрібно тільки уважно підтвердити адресу і не передавати невірну адресу. Методи хакера дуже прості:
- Він відстежує інформацію про переказ кількох стейблкоїнів ончейн. Наприклад, він перехоплює інформацію про переказ, який адреса Жертви А часто відправляє Користувачеві В.
- Далі створює хакерську Адресу C з тими самими першими й останніми цифрами, що й адреса користувача B. Потім жертва A і хакерська адреса C передають одна одній 0 монет. (Тут зловмисник може використати інструмент генерації чисел Profanity, щоб за кілька секунд згенерувати адресу з тими самими першими й останніми 7 цифрами, що й адреса користувача).
- Наступного разу, коли Жертва А неуважно копіює адресу історичної транзакції, дуже легко скопіювати саме Адресу С, підготовлену хакером для виверту. Таким чином кошти переводяться на неправильний рахунок.
Жертви переказують гроші на нормальні адреси:
Хакерські адреси з переказами $0:
Жертви переказують гроші на хакерські адреси
Ось наші висновки з приводу атаки «address poisoning attack»:
- По-перше, хакер робить так, щоб його адреса відображалася в історії транзакцій користувача. Мета — щоб користувача не догледів і прийняв його за довірений контакт. Тобто адресу, якій часто відправляє гроші.
- По-друге, хакер створює адресу, що збігається з довіреною адресою за першими й останніми цифрами. Помилково її може використати жертва для наступної транзакції.
Користувачі ризикують втратити капітал, тож будьте напоготові!
Тенденції
На 2 грудня зафіксовано велику кількість таких атак: 290 000 у мережі BSC і 40 000 у мережі Ethereum. А кількість незалежних адрес, яких торкнулися атаки, перевищила 150 000 і 36 000 відповідно.
З погляду трендів, мережа BSC почала зазнавати атак з 22 листопада, а мережа ETH — з 27 листопада. При цьому масштаби атак в обох блокчейнах посилюються.
Також ми бачимо, що атаки мають певну регулярність за часом. Їхній обсяг значно зменшується щодня в період між 17:00 UTC і 0:00 UTC. Тож підозрювані зловмисники, найімовірніше, живуть в азійському часовому поясі.
Станом на 2 грудня жертвами скаму стали 94 унікальні адреси. Вони втратили кошти на загальну суму $1 640 000. Ми прогнозуємо, що апетити зловмисників будуть тільки зростати. У найближчому майбутньому все більше користувачів почнуть піддаватися такому шахрайству.
Також ми проаналізували вартість атаки зловмисника. Загальна сума зараз близька до $26 000 (46 BNB + 10 ETH). При цьому зловмисник віддає перевагу BSC-USD і USDT — найімовірніше, через великий обіг і популярність цих стейблкоїнів.
Відстеження злочинця
Ми відстежуємо одного з шахраїв, який орудував на двох великих централізованих біржах. Повний процес показано на малюнку нижче.
- Адреса джерела його коштів для атаки пов’язана з акаунтом OKX.com. Зловмисник спочатку переводить ці монети з мережі TRON у мережу BSC, використовуючи кросчейн-міст Transit.Finance.
- Вкрадені кошти в кінцевому підсумку йдуть на Huobi.com. Тут зловмисник знову використовує міст Transit.Finance для переказу в мережу TRON.
Підімо далі та простежимо потік вкрадених коштів до джерела:
- Адреса жертви: 0xe17c2b2b40574d229a251fe3776e6da2cc46aa5e.
- Він передає 1300 монет на адресу зловмисника: 0x720c1cfe1bfc38b3b21c20961262ad1e095a6867 (Переказ був двома частинами).
- Далі зловмисник вносить кошти на цю адресу: 0x89e692c1b31e7f03b7b9cbb1c7ab7872ddeadd49.
- Зловмисник виконав кросчейн-переказ коштів за адресою: 0x89e692c1b31e7f03b7b9cbb1c7ab7872ddeadd49. У цей хеш: 0x72905bd839f682f795946d285500143ee7606e9690df2ad32968e878ad290d9f
- У транзакції, як показано нижче, він передає 10561 USDT через контракт Transit.Finance: 0xb45a2dda996c32e93b8c47098e90ed0e7ab18e39
- У журналах подій цієї транзакції видно, що монети USDT пішли в мережу TRON. Ось ця адреса: TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD
- Він відповідає хешу транзакції в мережі TRON: 716507136ad28717ffd5f2f437af753ff96d344d2bcbe83f24d801db49f5a884.
- Зрештою зловмисник додав адресу TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD до біржі Huobi. Адреси депозитів для поповнення: TPtzsrCAG61QMwig3jZV8Px7Rd1WZVnRXG, TDp7r3S1hJeiNfH1CvCVXeY8notY47nagJ:
Аналіз принципу атаки
Випадок атаки 1:
EOA: 0xBAA1451bE8C33998CD43F375c2e67E79c1a104AD
CA: 0x7ceBeb6035B231A73CB5Fb4119c2FbBC04Ec6fD1
Випадок атаки 2:
EOA: 0x616384a80f32aDb65243522971aE2ba7664B62E3
CA: 0x6f00Ed594A6AceEf0E1A6FE023Ecd5Eb96c8665a
Хакер контролює різні адреси й переводить 0 BSC-USD на адреси жертв у пакетному режимі через контракти.
Атаки на Binance Smart Chain в основному охоплюють такі токени: BSC-USD, BUSD, USDC, ETH тощо. Більшість таких атак здійснюються через пакетний файл, який запускає команду transferFrom() за контрактом атаки. Але бувають і випадки ручного запуску функції transfer(). Принцип здебільшого один і той самий. Нижче ми бачимо приклад контракту на атаку з BSC-USD.
transferFrom()
У транзакції, де зловмисник використовує такі скрипти, контракт атаки викликає тільки функцію transferFrom() BSC-USD. Після заповнення параметрів відправника, одержувача та суми, хакер може запустити перекази 0 USD між будь-якими адресами. І водночас генерувати команди AuthorizeApproval() і TransferTransfer().
Phalcon Blockchain Transaction Explorer
Інформації про транзакції з блокчейн-браузера Blocksec phalcon
Вихідний код контракту BSC-USD показує, що функція transferFrom() послідовно викликає функції _transfer() і _approve():
Опція _transfer() має просту функцію. По-перше, вона виключає всі нульові адреси з транзакції. Потім віднімає гроші для відправника і додає гроші для одержувача. І, нарешті, записує подію переказу. Використовувані тут функції додавання і віднімання add()/sub() — це бібліотека SafeMath, створена в колекції смарт-контрактів OpenZeppelin. У разі переповнення вона повідомить про помилку повернення:
Функція _approve() також виключає повну нульову адресу і змінює значення авторизації. Основна увага в цій функції приділяється обчисленню параметра виклику transferFrom для затвердження. Він використовує такий скрипт:
_allowances[sender][_msgSender()].sub(amount, “BEP20: transfer amount exceeds allowance”)
Цей скрипт віднімає кількість наявних токенів авторизації з передачі. Сума авторизації, що залишилася, поміщається у твердження і повторно авторизується. Функція віднімання sub(), що використовується тут, являє собою теж бібліотеку SafeMath від колекції смарт-контрактів OpenZeppelin. У разі переповнення вона повідомляє про помилку повернення. Однак, якщо параметр суми всього процесу дорівнює нулю, жоден механізм виявлення не може відхилити транзакцію. Це також призводить до великої кількості нульових переказів он-чейн, які можуть бути відправлені у звичайному режимі. Хакеру потрібно тільки заплатити комісію, щоб отримати солідний дохід.
transfer()
Виклик функції transfer() має такий самий принцип дії, як описаний вище. Тільки весь процес додає або віднімає виявлення переповнення. Тут немає фільтрації нульових переказів:
BNB
У процесі трасування (відстеження) токен-атаки ми також знайшли першу й останню ідентичні фішингові атаки через переказ 0 BNB. Принцип тут аналогічний токен-фішингу: хакер будує першу й останню ідентичні адреси для фішингу.
Транзакції з атакою:
https://bscscan.com/tx/0x5ae6a7b8e3ee1f342153c1992ef9170788e024c4142941590857d773c63ceeb3
Після таких хитрощів користувач може заплутатися в адресах і випадково перевести токени на хакерську адресу:
Звичайна адреса користувача:
0x69c b60065ddd0197e0837fac61f8de8e186c 2a73
Адреса хакера:
0x69c 22da7a26a322ace4098cba637b39fa0a4 2a73
Висновки
Наразі команда X-explore забезпечує онлайн-моніторинг таких атак у режимі реального часу. Щоб уникнути подальших загроз, ми рекомендуємо:
- Встановити додаток, який допомагає користувачам розрізняти адреси за кольором або іншими підказками.
- Користувачі повинні ретельно перевіряти історичні адреси транзакцій під час переказу коштів.
- Бажано вести окремі записи з адресами десь на окремих документах. Це не дуже зручно, зате надійно.
Бережіть свої фінанси та не забувайте читати наші свіжі навчальні матеріали.