Как крадут деньги на DEX биржах.
Сегодня я расскажу как хакеры крадут деньги в криптовалютных DeFi протоколах, при этом не используя никаких уязвимостей с бэкдорами и не нарушая закон.
Существуют децентрализованные биржи, которые работают на смарт-контрактах без участия управляющих органов. Каждая торговая пара на данных биржах состоит из двух монет или токенов. За пример возьму пару eth/usdt. В пределах этой пары люди могут обменивать эти 2 актива в любом направлении. Эта пара функционирует на основе смарт-контракта и пула ликвидности. Пул ликвидности в моём примере состоит из эфира и usdt. Любые пользователи могут пополнять пул ликвидности и получать комиссии с каждого обмена за каждую транзакцию в пределах этой пары.
Цена на эфир регулируется автоматически после каждого обмена. Например, человек хочет купить 1 эфир за 1715 usdt по текущей цене. Он добавляет в пул 1715 usdt и забирает оттуда 1 эфир. Из-за того, что в пуле эфира стало меньше, а usdt больше, то цена эфира в этой паре вырастает на определённое значение. Именно так функционируют все пары на децентрализованных биржах работающих на смарт-контрактах.
Теперь к самом интересному, о том, как происходит процесс кражи денег. Давайте рассмотрим пример, я хочу купить 10 эфиров за 17150 usdt по текущему курсу. Я захожу на DeFi биржу, начинаю делать обмен и отправляю транзакцию в сеть со следующей информацией: "Забрать из пула 10 эфиров и добавить 17150 usdt". Для завершения обмена, мне осталось только подождать, пока транзакция подтвердится. Как только я отправила транзакцию и она ещё не подтвердилась, хакер с помощью бота уже нашёл мою транзакцию в мем-пуле. Он делает точно такую же транзакцию на покупку 10 эфиров за 17150 usdt, но ставит чуть большую комиссию, чтобы его транзакция подтвердилась быстрее, чем моя. В итоге его транзакция подтверждается первой и он покупает 10 эфиров за 17150 usdt, это приводит к увеличению цены эфира в этой паре, ведь эфириума в пуле стало меньше, а usdt больше. Затем подтверждается и моя транзакция, но из-за того, что цена эфира в пуле выросла из-за первой транзакции хакера, то я получаю не 10 эфиров, а 9.9, потому что покупка уже идёт по новой завышенной цене. Моя транзакция также повышает цену эфира в паре дальше, потому что я тоже забрала оттуда 9.9 эфиров и добавила 17150 usdt. Затем хакер делает вторую транзакцию и продаёт свои 10 эфиров по новой цене и получает уже 19000 usdt. В итоге я покупаю эфир дороже, чем изначально хотела, а хакер получает 2000 usdt просто так.
Отслеживаем таких транзакций хакерские боты занимаются постоянно. Если бот замечает, что цена обмена высокая, то он инициирует транзакцию для покупки с большей комиссией, а дальше всё происходит по алгоритму, который написан мной выше. Но такие атаки работают только на тех торговых парах, где очень мало ликвидности. Из-за того, что ликвидности мало, то даже 1 обмен может сильно двинуть цену актива, поэтому атака становится выгодной. Если же брать популярные пары, такие как usdt и эфир, где ликвидности по 50-100 миллионов $, то такую атаку провести почти невозможно, потому что от от 1 обмена, пусть даже на большую сумму, цена изменится незначительно. А если брать пары, где менее известные токены + usdt и ликвидность от 20к до 100 тысяч $, то там цена уже изменится очень хорошо.