Аудит смарт-контрактов и блокчейн
Наша компания провела аудит смарт-контракта для Concordex - платформы децентрализованного финансирования (DeFi). Этот проект ярко демонстрирует важность тщательного аудита смарт-контрактов перед их внедрением.
О платформе
Concordex использует смарт-контракты для:
- Управления транзакциями.
- Обеспечения ликвидности.
- Выполнения других финансовых операций.
Обнаруженные критические уязвимости
Во время аудита наши эксперты обнаружили три основные уязвимости:
- Атаки Reentrancy.
- Позволяли злоумышленникам вызывать функцию контракта несколько раз до завершения первой транзакции.
- Потенциальное последствие - потеря средств пользователями.
- Неправильная валидация введенных данных.
- Некоторые функции не имели надлежащей проверки входных данных.
- Возможные последствия - выполнение опасных операций или манипуляции с балансами.
- Уязвимость к атакам переполнения.
- Отсутствие защиты от атак переполнения в нескольких функциях.
- Потенциальные риски - неправомерное увеличение баланса злоумышленников или другие нежелательные последствия.
Больше подробностей - в публичном отчете по аудиту.
Одним из наших аудиторских проектов была проверка смарт-контрактов на платформе DX25. Этот аудит позволил выявить несколько важных уязвимостей и предоставить рекомендации по их устранению.
Методология аудита
- Наш подход к аудиту смарт-контрактов проекта DX25 включал комбинацию ручных и автоматизированных методов для всестороннего выявления потенциальных уязвимостей. Основные аспекты аудита охватывали:
- Оценку управления потоками поведения.
- Проверку контроля доступа.
- Оценку угроз отказа в обслуживании.
- Проверку криптографических вопросов.
- Анализ типичных ошибок кода.
Обнаруженные уязвимости
В ходе аудита было обнаружено несколько уязвимостей разного уровня риска:
1. Отсутствие проверки (F-1)
- Описание: метод init_wegld не содержит проверки ensure_payable_api_resumed, что может привести к нежелательному поведению.
- Риск: низкий
- Рекомендация: добавить проверку ensure_payable_api_resumed к методу init_wegld.
2. Ненужная двойная проверка (F-2)
- Описание: метод init_wegld включает проверку, которая ограничивает возможность вызова этого метода только владельцем смарт-контракта, но последующие вызовы также включают эту проверку.
- Риск: низкий
- Рекомендация: рассмотреть возможность удаления повторной проверки или реализации дополнительного метода более низкого уровня.
3. Ненужная передача аргументов (F-3)
- Описание: при инициализации смарт-контракта передаются аргументы, которые затем проверяются и устраняются в методе new_contract.
- Риск: низкий
- Рекомендация: вместо передачи аргументов использовать константные выражения.
4. Отсутствие проверок переполнения (F-4)
- Описание: файл Cargo.toml не включает опцию overflow-checks=true, что может привести к переполнений в сборках release.
- Риск: информационный
- Рекомендация: добавить overflow-checks=true в профиль release в файле Cargo.toml.
Больше подробностей - в публичном отчёте по аудиту.
Во время теста на проникновение в торговое решение DEX была проведена оценка трёх полных узлов Cardano. Оценка проводилась в режимах "черный ящик" и "серый ящик". В результате было обнаружено, что не установлены 4 обновления безопасности, также были подтверждены 3 уязвимости на уровне ядра. Заказчик устранил обнаруженные уязвимости, после чего начал безопасно выполнять операции по управлению пулом.
Исходный код протокола ликвидности для несгораемых токенов, включая смарт-контракты, был подвергнут аудиту безопасности с использованием сопоставления уязвимостей по схемам классификации CWE/SANS Top 25, DASP Top 10 и SWC Registry. Были обнаружены дорогостоящие циклы, мертвый код, ненадлежащий уровень видимости функций в контрактах и интерфейсах, а также слабые места, на которые потенциально могут повлиять майнеры. Уязвимости были классифицированы как SWC-135, SWC-100, SWC-108 и DASP-8. Заказчик получил подробный отчет со всеми находками, которые впоследствии были успешно устранены и исправлены в новом релизе.
Недавно нам удалось получить уникальный опыт анализа децентрализованной биржи, ориентированной на инновационный протокол Milkomeda L2. Протокол позволяет получить возможности виртуальных машин Ethereum в сетях блокчейн, где их поддержка не предусмотрена.
В ходе аудита смарт-контрактов, обеспечивающих работу биржи, мы применили свою проверенную временем методологию. Анализ состоял как из автоматических проверок, так и из ручных. Были проведены тесты по поиску уязвимостей из SWC и DASP TOP10, а также развертывание контрактов в тестовой сети для реализации всех возможных сценариев атак.
Как результат, мы помогли нашему клиенту стать уверенным в том, что его проект не будет очередным инфоповодом для новости о крупнейшем взломе биржи. Были разработаны персональные рекомендации по устранению найденных уязвимостей, а также пути экономии затрат Gas.
Нам была поставлена задача провести аудит смарт-контрактов, написанных для блокчейна Algorand — конкурента Ethereum.
Программирование на блокчейне Algorand является относительно новой областью, без множества стандартов безопасности, документации или выработанных практик.
Несмотря на это, смарт-контракты могут управлять десятками миллионов долларов, что делает их целью преступников.
Смарт-контракты Algorand используют специальный язык — Transaction Execution Approval Language (TEAL). Предоставленные нам смарт-контракты были созданы с помощью PyTeal — Python-библиотеки для генерации TEAL-программ.
Нам требовалось подтвердить, что функции смарт-контрактов работают так, как задумано, и определить любые потенциальные проблемы безопасности. Для этого мы использовали собственный код для проверки ряда векторов атак, с различными данными, которые соответствуют сценариям реальных инцидентов. Мы также воспользовались списком известных проблем безопасности смарт-контрактов и официальным руководством Algorand. Наконец, мы подтвердили наши находки путем развертывания смарт-контрактов в собственной сети и проверки найденных проблем.
В результате нам удалось убедиться в невозможности злоупотребления смарт-контрактами или нарушения бизнес-требований заказчика. Дополнительно, мы предоставили заказчику полезные рекомендации по улучшению на основе нашего опыта.