Фреймворк для запуска нескольких инструментов анализа смарт-контрактов (Mythril, Slither, Oyente, Manticore и др.) параллельно и сравнения их результатов. Автоматизирует аудит по нескольким движкам с единым отчётом.
git clone https://github.com/smartbugs/smartbugs cd smartbugs install/setup-venv.sh # Анализ контракта всеми инструментами ./smartbugs -t all -f contracts/MyContract.sol # Только Mythril + Slither ./smartbugs -t mythril slither -f MyContract.sol # JSON-вывод результатов ./smartbugs -t slither -f MyContract.sol ./reparse results ./results2csv -p results > results.csv
@авторы инструментов Подумайте о самостоятельной интеграции вашего инструмента с оптимальными настройками, вместо ожидания, пока это сделает кто-то другой. Создайте pull request или свяжитесь с нами для поддержки!
@пользователи Имейте в виду, что наряду с поддерживаемыми инструментами, такими как Mythril, Oyente+, Semgrep, Slither и Solhint, SmartBugs также предлагает неподдерживаемые академические исследовательские прототипы, которые могут быть несовместимы с текущими версиями Solidity и EVM.
SmartBugs — это расширяемая платформа с единым интерфейсом к инструментам анализа программ блокчейнов на наличие слабостей и других свойств, описанным в статье.
Monika di Angelo, Thomas Durieux, João F. Ferreira, Gernot Salzer:
"SmartBugs 2.0: An Execution Framework for Weakness Detection in Ethereum Smart Contracts",
in Proc. 38th IEEE/ACM International Conference on Automated Software Engineering (ASE),
pages 2102-2105, IEEE Computer Society, 2023.
25 поддерживаемых инструментов, 3 режима для анализа исходного кода Solidity, байткода деплоя и кода выполнения.
Модульная интеграция анализаторов. Всё, что нужно для добавления нового инструмента — это Docker-образ, инкапсулирующий инструмент, и несколько строк в конфигурационном файле. Чтобы сделать вывод доступным в стандартизированном формате, добавьте небольшой скрипт на Python.
Параллельное, случайное и возобновляемое выполнение задач для оптимального использования ресурсов при проведении массового анализа. Если выполнение прервано, его можно возобновить, снова запустив SmartBugs с теми же параметрами.
Стандартизированный формат вывода. Скрипты разбирают и нормализуют вывод инструментов для автоматического анализа результатов для различных инструментов.
Автоматическая загрузка подходящего компилятора Solidity, соответствующего анализируемому контракту, и его внедрение в Docker-образ.
Вывод результатов в формате SARIF для интеграции в рабочие процессы Github.
Кроссплатформенность: SmartBugs проверен на Linux, MacOS и Windows.
| версия | Solidity | байткод | код выполнения | |
|---|---|---|---|---|
| CCC (CPG Contract Checker) | #c531ae3 (IMC-24) | :heavy_check_mark: | ||
| ConFuzzius | #4315fb7 v0.0.1 | :heavy_check_mark: | ||
| Conkas | #4e0f256 | :heavy_check_mark: | :heavy_check_mark: | |
| Ethainter | :heavy_check_mark: | |||
| eThor | 2023 [2] | :heavy_check_mark: | ||
| HoneyBadger | #ff30c9a | :heavy_check_mark: | :heavy_check_mark: | |
| MadMax | #6e9a6e9 | :heavy_check_mark: | ||
| Maian | #4bab09a | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Mando | v0.1 | :heavy_check_mark: | ||
| Mando HGT | v0.1-hgt | :heavy_check_mark: | ||
| Manticore [3] | 0.3.7 | :heavy_check_mark: | ||
| Mythril | 0.24.8 [2] | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Osiris | #d1ecc37 | :heavy_check_mark: | :heavy_check_mark: | |
| Oyente+ [1] | #060ca34 | :heavy_check_mark: | :heavy_check_mark: | |
| Pakala | #c84ef38 v1.1.10 | :heavy_check_mark: | ||
| Securify | :heavy_check_mark: | :heavy_check_mark: | ||
| Securify2 | :heavy_check_mark: | |||
| Semgrep/Decurity | 1.131.0/1.2.1 [2] | :heavy_check_mark: | ||
| sFuzz | #48934c0 (2019-03-01) | :heavy_check_mark: | ||
| Slither | 0.11.3 [2] | :heavy_check_mark: | ||
| Smartcheck | :heavy_check_mark: | |||
| Solhint | 6.0.0 [2] | :heavy_check_mark: | ||
| teEther | #04adf56 | :heavy_check_mark: | ||
| Vandal | #d2b0043 | :heavy_check_mark: | ||
| VulHunter | v0.1 | :heavy_check_mark: | :heavy_check_mark: |
Примечания:
[1] oyente+ — это обновление теперь неподдерживаемого инструмента Oyente, доступного в SmartBugs как oyente. Oyente ограничен устаревшими версиями EVM (примерно соответствующими Solidity 0.4.x), так как он не обрабатывает операции EVM, введенные после его выпуска. Oyente+ расширяет Oyente этими операциями, не добавляя детекторы для других слабостей. Oyente+ поддерживается и обрабатывает последние версии EVM.
[2] Доступны более старые версии, см. папку tools.
[3] Этот инструмент может быть некорректно сконфигурирован и поэтому может не выдавать полезные результаты. Не стесняйтесь присылать исправления.
SmartBugs проверен на Linux, MacOS и Windows. Он зависит от Docker и Python. Подробности см. в инструкциях по установке.
SmartBugs предоставляет единый командный интерфейс для всех инструментов. Две утилиты позволяют пользователю повторно разобрать результаты анализа в любое время после анализа и извлечь данные в форму, пригодную для базы данных.
В качестве примера следующие команды анализируют контракты в папке samples всеми доступными инструментами и записывают разобранный вывод в results.csv.
./smartbugs -t all -f samples/* --timeout 600
./reparse results
./results2csv -p results > results.csv
Подробности см. в примечаниях по использованию и вики SmartBugs.
Смотрите нашу информацию о доступных наборах данных, если вы ищете входные данные. Количество контрактов в этих наборах данных варьируется от 10 до 250 000.
Если вы используете SmartBugs или один из вышеуказанных наборов данных, вы, возможно, захотите указать свои источники. Подробности см. в списке публикаций.
Вы можете выразить свою признательность проекту и поддержать его дальнейшее развитие, сделав пожертвование.
🙌 Пожертвования в ETH: 0xA4FBA2908162646197aca90b84B095BE4D16Ae53 🙌
Лицензия распространяется на все файлы в репозитории, за исключением смарт-контрактов в папке samples. Файлы там были получены с Etherscan и сохраняют свои оригинальные лицензии.