Аудит смарт-контрактов: чем полезна услуга?

Одним из самых громких событий ушедшего года стало похищение трех миллионов долларов из DeFi протокола Cover 28 декабря 2020 года. Злоумышленник использовал уязвимость «бесконечного майнинга»: вкладывал активы, выводил их, забирал прибыль и повторил это несколько раз. Примечательно, что хакер оказался порядочным — средства он вернул, сопроводив транзакцию сообщением «Следите за своим добром в следующий раз».

Это событие, тем не менее, имело последствия для протокола. Стоимость токена упала на 96%, а сумма заблокированных в протоколе активов снизилась до одного миллиона долларов. Сейчас положение уже частично восстановилось, но кто знает, сколько пользователей ушли навсегда и больше не смогут доверять этому проекту?

Что произошло с Cover? 

Для того, чтобы разобраться, благодаря чему стало возможным хищение средств Cover, мы обратились за комментарием к компании, специализирующейся на работе со смарт-контрактами. Пояснить ситуацию согласились в компании Telescr.in

К таким печальным последствиям привело сочетание двух малозначительных багов, которые, по сути, относительно безвредны по отдельности. Первая ошибка связана с памятью: вообще в смарт-контрактах существует три типа памяти: steak (локальные переменные), storage (самая дорогая память, которая хранится в блокчейне) и memory (байт последовательности). Поскольку смарт-контракт использует все виды памяти, это делает возможным перезапись одной переменной из storage в memory, ее изменение в результате проведения операции и дальнейшее использование уже в измененном виде. Второй недостаток связан с несоответствием порядка переменных при выполнении операций. Например, мы вносим в смарт-контракт переменную, которая имеет 18 знаков, а дальше прописано, что она имеет 12 знаков — из-за этого тоже возникает неточность, но не критичная.

При взломе Cover хакер изначально сделал несколько операций депозита и вывода, запрашивая награду. Пройдя несколько циклов одна из переменных дала ошибку, в результате чего появилась возможность вывести огромное число токенов.

Специалисты отмечают, что существуют инструменты, позволяющие отслеживать процессы в момент проведения транзакции. Также и банальное обнаружение и исправление багов могло бы защитить Cover от неприятностей. 

В данном случае, все закончилось неплохо — ведь хакер вернул средства, но так происходит далеко не всегда. 

Громкие взломы 2020

Cover далеко не единственный криптовалютный проект, который пострадал от хакерской атаки в 2020 году. 

  • Сентябрьская атака на криптовалютную биржу KuCoin стала одним из самых крупных взломов в истории индустрии (ущерб оценили в $280 млн).
  • В апреле от атаки пострадал DeFi-протокол dForce. На момент кражи сумма составляла почти $25 млн. Хакер воспользовался критической уязвимостью в смарт-контрактах платформы Lendf.me.
  • От хакерской атаки постарадал и Harvest Finance —  ошибка смарт контракта обошлась им почти в $20 млн.
  • Крупный ущерб в результате атаки понес еще один DeFi-проект Pickle Finance. Хакеры украли более $19 млн. 
  • В ноябре стейблкоин Origin Dollar пострадал от хакерской атаки — проект потерял более $7 млн.

Что такое аудит смарт-контрактов? 

Почему такое случается, если смарт-контракты считаются сегодня одним из самых безопасных методов управления средствами? При всем их совершенстве, хакеры тоже не дремлют. Они становятся более изобретательными по мере роста сложности контрактов. Как говорится, «блокчейн безопасен, а блокчейн-приложения — не всегда». Именно для того, чтобы бороться с этим и не допускать таких случаев, существуют аудиты смарт-контрактов, которые в последнее время набирают все большую популярность. 

Обычный аудит смарт-контракта включает в себя анализ спецификации и сопутствующей документации, в которых объясняется принцип архитектуры проекта; тестирование и поиск основных баг, автоматизированный анализ при помощи специального программного обеспечения… — поясняют в Telescr.in.

Но главное, это конечно ручной анализ. Именно этот процесс позволяет определить, насколько код соответствует заявленной функциональности. Например, в Telescr.in этим занимаются сразу несколько инженеров, которые затем сравнивают результаты между собой. Такой подход позволяет искать уязвимости максимально эффективно. В результате владельцы смарт контракта получают подробный отчет о результатах, который включает в себя перечень всех найденных уязвимостей и несоответствий, а также рекомендации по их устранению.

Какие проблемы обнаруживает аудит? 

Аудит помогает отыскать не только критичные, но и более распространенные ошибки смарт-контрактов. Например, проблемы с арифметикой целых чисел, уязвимость лимита газа в блоке при переполнении массива, отсутствующие параметры или предварительные условия (результат небрежного отношения к разработке), потенциальный фронтраннинг (обгон неподтвержденной транзакции), а также великое множество логических недочетов.

Все они могут быть обнаружены только в том случае, если аудитор в полной мере понимает архитектуру кодовой базы и имеет представление о предполагаемой функциональности проекта и спецификации контракта. Специалисты отмечают, что именно поэтому аудит смарт-контрактов занимает время, требует определенных затрат и участия высококвалифицированных специалистов.

Мы считаем, что рынок аудита на данный момент не развит и на нем отсутствуют крупные аудиторские фирмы, которые могли бы защищать средств инвесторов от подобных ситуаций, проверяя проекты, — отмечают в Telescr.in. — Например развивающийся сегодня DeFi сектор особенно опасен в этом плане. Когда проект попадает на децентрализованные площадки, нет возможности быстро закрыть его и исправить ошибки даже если они найдены. Это одновременно и хорошо и плохо, поэтому логично что проверять смарт-контракты следует до выхода на рынок. Причем, проверки оптимально проводить сразу несколькими организациями. Аудит очень субъективен,  одна фирма не всегда может найти все баги, тогда как несколько взглядов почти всегда решает эту задачу. При этом, стоимость аудита невысока относительно тех проблем, которые может создать отсутствие проверок и ситуация с Cover это подтверждает.