Основные советы по проведению эффективного и тщательного аудита Ethereum
Если вы только начинаете свой путь в мире безопасности блокчейна, аудит смарт-контрактов может показаться довольно утомительным. В этом руководстве представлен пошаговый процесс — от чтения документации до определения основных контрактов и сосредоточения на областях с высоким риском.
Документация: понимание потока
Прежде чем начать изучать код протокола следует понять, что из себя представляет протокол. Для этого рекомендуется прочитать документацию протокола. Это может показаться скучным, но это как получить чертежи перед постройкой дома — для оценки состояния строения и возможных проблем
- Обзор протокола: для начала, разберитесь в сути протокола. Это децентрализованная биржа (DEX), кредитная платформа или, может быть, рынок NFT? Это поможет понять, где, скорее всего, будут большие риски.
- Архитектурная схема: Схема покажет, как все взаимодействует, и поможет визуализировать происходящее. Это облегчает понимание того, куда утекают деньги и какие части протокола могут дать уязвимости.
- Обзор ключевых контрактов: Документация обычно указывает на основные контракты и их функции. Рекомендуется составить их список, чтобы знать, на чем сосредоточить внимание при изучении кода
Определение основных контрактов
После получения приблизительного представления о том, как все работает, пора определить основные контракты — те, которые имеют решающее значение для успеха протокола. По сути, нужно выяснить, какие контракты держат деньги или контролируют важные вещи, такие как доступ пользователей.
- Управление стоимостью: Ищите контракты, которые управляют фондами. Это могут быть хранилища, стекинг пулы или резервы. Они являются главной целью для взломщиков
- Контроль доступа: Затем следует проверить какие контракты управляют разрешениями или административными функциями. Если кто-то завладеет ими, он может нанести большой ущерб.
- Proxy Contracts: Если протокол использует обновляемые контракты (что довольно распространено), рекомендуется обратить внимание на proxy contract. Они контролируют, как обновляются контракты, и могут возникнуть неприятности если что-то пойдет не так.
Картографирование дерева зависимостей
Большинство протоколов блокчейна имеют несколько контрактов, которые взаимодействуют друг с другом, как команда, которой нужно работать слаженно. Понимание указанных зависимостей- ключ к хорошему аудиту.
- Зависимости и взаимодействия: некоторые контракты зависят от других. Если начать от работы которых зависит работа остальных, вы будете в выигрышном положении. Составление этого плана (даже если это просто простой список) поможет отслеживать какой из контрактов от какого зависит.
- Наследование и интерфейсы: Иногда контракт наследует функции от другого или взаимодействует через интерфейсы. Уязвимости часто проникают через этот унаследованный код, поэтому стоит проверить его структуру
Сосредоточение на общественных и внешних функциях
Общественные и внешние функции - точки входа для пользователей, но они также являются тем, с чем могут взаимодействовать злоумышленники.
- Точки входа: Проверьте все публичные/внешние функции. Убедитесь, что они надлежащим образом контролируются. Это означает проверку надлежащей авторизация — чтобы убедиться, что только нужные люди могут вносить изменения.
- Проблемы повторного входа: мониторьте уязвимости повторного входа. Они случаются, когда злоумышленник может повторно вызывать функцию до момента завершения первой функции. Хороший способ предотвратить это — следовать шаблону «проверки-эффекты-взаимодействия».
Анализ функций с высоким риском
Есть некоторые функции, которые просто по своей природе более рискованные — перевод, внесение или снятие средств. Именно их нужно сделать приоритетными во время аудита.
- Функции передачи: у функций передачи должен быть надлежащий контроль доступа, непроверенной функцией передачи могут легко воспользоваться.
- Изменения состояния: изменения состояния (в основном, изменения способа хранения данных) должны происходить до внешних вызовов. Это другой способ предотвращения проблемы повторного входа
- Оптимизация газа: высокие затраты на газ иногда могут приводить к сбою транзакций. Если в контракте есть дорогостоящие циклы, они могут быть использованы для атак типа «отказ в обслуживании», поэтому их стоит оптимизировать.
Тестирование и моделирование
Даже после ручного просмотра кода важно его протестировать. Новички могут использовать ряд инструментов, которые помогают имитировать атаки или странные сценарии.
- Модульное тестирование: попробуйте написать модульные тесты для самых важных функций. Такое тестирование важно для проверки работы функций работают в разных ситуациях.
- Fuzz-тестирование: рекомендуется использовать Echidna, для fuzz-тестирования. При таком тесте случайные входные данные вводятся в функции для проверки их устойчивости.
- Статический анализ: инструменты Slither или Aderyn могут быстро просканировать контракт на предмет распространенных уязвимостей.
Безопасный контроль доступа и права собственности
Контроль доступа — еще одна большая проблема. Многие атаки происходят из-за того, что кто-то находит функцию, которая не должна быть публичной.
- Управление собственностью: контракты часто имеют «владельца», который может вносить изменения. Нужно убедиться, что владельцем может быть только нужный человек, и что право собственности не может быть передано случайно.
- Требования к мультиподписям: Важные функции должны запрашивать разрешение более чем одного человека для выполнения. Это как необходимость иметь два ключа, чтобы открыть хранилище — так безопаснее!
Возможность модернизации и управления
Многие протоколы можно обновлять, чтобы они могли идти в ногу с новыми функциями или исправлять ошибки. Но обновление контрактов — может быть рискованным поэтому перед обновлением нужно все тщательно проверить
- Шаблоны прокси: убедитесь, что только авторизованные люди могут выполнять обновления.
- Риски управления: если есть система голосования (например, управление в блокчейне), убедитесь, что она безопасна. Злоумышленник не должен иметь возможности протолкнуть вредоносное предложение.
Аудиты — не панацея: реальность безопасности смарт-контрактов
Аудит — не панацея. Даже если все сделать правильно, риски все равно могут быть. Постоянно появляются новые уязвимости, а блокчейн — это быстро меняющееся пространство.
- Сложные зависимости: иногда проблемы возникают из-за того, как взаимодействуют разные контракты, даже если каждый из них по отдельности выглядит нормально. Это немного похоже на пазл — один неправильный элемент может испортить всю картину.
- Human Oversigh: Аудиторы — это люди, в конце концов, которые тоже могут что-то упустить.
- Быстрые изменения и обновления: протоколы постоянно развиваются. Каждый раз при обновлении могут быть введены новые уязвимости при отсутствии регулярной проверки
- Непредвиденные уязвимости: не все ошибки очевидны сразу. Иногда появляются новые методы атак, и внезапно то, что раньше казалось безопасным, теперь становится рискованным.
Важность многоуровневого подхода
Аудит — это всего лишь часть головоломки. Для безопасного ведения протокола понадобится:
- Программы вознаграждения за ошибки: Приглашайте других находить уязвимости. Часто свежий взгляд может заметить пропущенное
- Непрерывный мониторинг: настройте оповещения, чтобы отслеживать любые необычные события в режиме реального времени.
- Своевременные обновления и исправления: будьте готовы быстро устранять уязвимости после их обнаружения.
- Управление и контроль рисков: Разработайте надежную систему для внесения изменений и убедитесь, что только доверенные лица могут принимать такие решения.
Суть в том, что аудиты помогают, но они не делают протокол неуязвивым. Надежный подход к безопасности подразумевает совместное использование аудитов, вознаграждений за ошибки, мониторинга и интеллектуального управления рисками.
Основные выводы
Аудит может быть сложным, особенно для новичков. Но разбивка действий аудита на подэтапы упрощает задачу. Начните с понимания того, как все работает, определите основные контракты и наметьте зависимости. Не забудьте проверить высокорисковые функции и наличие доступа только у авторизированных лиц
Хороший аудит — это не просто поиск проблем, это повышение безопасности протокола и обучение в процессе работы. Всегда помните, что безопасность — это непрерывный процесс, где всегда есть чему научиться.
Комментарии
Комментарии для сайта Cackle