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

Фото - Почему так много взломов смарт-контрактов и протоколов?
К сожалению, статистика за прошлый год свидетельствует о том, что из смартконтрактов, DeFi-протоколов и кроссчейн-мостов было украдено более $4,2 млрд в крипте. Почему это происходит так часто?
Смарт-контракты являются важной составляющей сектора DeFi. Их активно используют разные децентрализованные приложения (dApps), биржи (DEX) и протоколы. Многие dApps спешат выйти на рынок без прохождения аудита, имея в 99% случаев уязвимости в коде и другие недостатки. Этим могут воспользоваться хакеры, что приведет к потере клиентских активов. Простыми словами, если смарт-контракт уязвим, то уязвим будет и dApp или протокол, использующий этот смарт-контракт. 

Откуда взялась проблема

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

Разработчики dApps и протоколов допускают ошибки не реже, чем программисты, создающие смарт-контракты. К сожалению, большинство программного обеспечения для сектора DeFi создается через копирование открытого кода или использование готовых шаблонов, которые целесообразно тщательно дорабатывать под каждый отдельный проект. Но в большинстве случаев это не делается, что значительно увеличивает риски и вероятность взлома.  

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

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

Следовательно, запуск или развертывание смарт-контракта без прохождения аудита, игнорирование проверок безопасности кода, отказ от тестов на проникновение (penetration tests) и сотрудничество с непроверенными компаниями-разработчиками или программистами-фрилансерами рано или поздно может привести к катастрофе.

Что делать командам DeFi-сервисов

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

  • Заказать и пройти аудит смарт-контрактов. Наиболее известные компании-аудиторы — Certik и ConsenSys Diligence. Однако в каждой стране есть местные компании, репутацию и опыт которых необходимо тщательно проверить, прежде чем начать сотрудничество.

  • Провести тесты на проникновение как в тестовой, так и в продакшн-среде.

  • Провести нагрузочный тест (для избежания ситуаций с недоступностью сервиса из-за наплыва большого количества пользователей).

  • Провести аудит облачной среды.

  • В идеале — провести повторный аудит, заказав его у другой компании: два аудитора лучше одного.

Как пользователям проверять DeFi-сервисы

Перед тем, как доверять активы децентрализованному сервису, пользователям следует проверить следующее:
 
  • команду проекта. Если некоторые фамилии были ранее замечены в мошеннических сделках — понятно, что рисковать денежными средствами не стоит;
  • срок присутствия на рынке. Чем дольше, тем лучше: проекты, которые существуют меньше года, имеют статус высокорисковых.
  • наличие отчета о прохождении аудита. Желательно от двух компаний.

И всегда помните, что стоит инвестировать не больше, чем можете позволить себе потерять.