Атака АРА. Детальный разбор и методы защиты
В последние недели участились «атаки отравления» АРА (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 на адрес Aтакующего 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 обеспечивает онлайн-мониторинг таких атак в режиме реального времени. Чтобы избежать дальнейших угроз, мы рекомендуем:
- Установить приложение, которое помогает пользователям различать адреса по цвету или другим подсказкам.
- Пользователи должны тщательно перепроверять исторические адреса транзакций при переводе средств.
- Желательно вести отдельные записи с адресами где-то на отдельных документах. Это не очень удобно, зато надежно.
Берегите свои финансы и не забывайте читать наши свежие обучающие материалы.