
slither v0.11.6
Статический анализатор для Solidity и Vyper
Slither, статический анализатор смарт-контрактов
Присоединяйтесь к Slack-каналу Empire Hacking
- Обсуждения и поддержка
Slither — это фреймворк статического анализа для Solidity и Vyper, написанный на Python3. Он запускает набор детекторов уязвимостей, выводит визуальную информацию о деталях контрактов и предоставляет API для простого написания собственных анализов. Slither позволяет разработчикам находить уязвимости, улучшать понимание кода и быстро прототипировать собственные анализы.
- Возможности
- Использование
- Как установить
- Детекторы
- Принтеры
- Инструменты
- Документация API
- Получение помощи
- Часто задаваемые вопросы
- Лицензия
- Публикации
Возможности
- Обнаруживает уязвимый код Solidity с низким уровнем ложных срабатываний (см. список трофеев)
- Определяет, где в исходном коде возникает условие ошибки
- Легко интегрируется в непрерывную интеграцию и сборки Hardhat/Foundry
- Встроенные «принтеры» быстро сообщают важную информацию о контракте
- API детекторов для написания собственных анализов на Python
- Возможность анализа контрактов, написанных на Solidity >= 0.4
- Промежуточное представление (SlithIR) обеспечивает простые и высокоточные анализы
- Корректно парсит 99.9% всего публичного кода Solidity
- Среднее время выполнения менее 1 секунды на контракт
- Интегрируется со сканированием кода GitHub в CI
- Поддержка смарт-контрактов Vyper
Использование
Запустите Slither в приложении Hardhat/Foundry/Dapp/Brownie:```console slither .
Это предпочтительный вариант, если ваш проект имеет зависимости, поскольку Slither полагается на базовый фреймворк компиляции для компиляции исходного кода.
Однако вы можете запустить Slither на одном файле, который не импортирует зависимости:```console
slither tests/uninitialized.sol
Как установить
Примечание Slither требует Python 3.10+. Если вы не собираетесь использовать один из поддерживаемых фреймворков сборки, вам потребуется solc, компилятор Solidity; мы рекомендуем использовать solc-select для удобного переключения между версиями solc.
Использование uv (рекомендуется)
uv — это быстрый менеджер пакетов Python, который в 10-100 раз быстрее pip.```console
Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
Install slither as a tool
uv tool install slither-analyzer
Or run slither without installation
uvx --from slither-analyzer slither
Для обновления:```console
uv tool upgrade slither-analyzer
Использование Pip```console
python3 -m pip install slither-analyzer
Для обновления:```console
python3 -m pip install --upgrade slither-analyzer
Использование Brew```console
brew install slither-analyzer
### Использование Git (Разработка)```bash
git clone https://github.com/crytic/slither.git && cd slither
# Install as editable for development
uv tool install -e .
# Or use uv run for testing without installation
uv run slither <target>
Флаг -e устанавливает в редактируемый режим, то есть изменения в исходном коде немедленно отражаются без переустановки.
Использование Docker
Используйте образ Docker eth-security-toolbox. Он включает все наши инструменты безопасности и все основные версии Solidity в одном образе. /home/share будет смонтирован в /share внутри контейнера.```bash
docker pull trailofbits/eth-security-toolbox
Чтобы предоставить общий доступ к каталогу в контейнере:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
Интеграция
- Для интеграции с GitHub Actions используйте slither-action.
- Для интеграции с pre-commit используйте (замените
$GIT_TAGна реальный тег) ```YAML- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- id: slither
- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- Чтобы сгенерировать отчёт в Markdown, используйте
slither [target] --checklist. - Чтобы сгенерировать Markdown с подсветкой исходного кода GitHub, используйте
slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(заменитеORG,REPO,COMMIT)
Детекторы
Для получения дополнительной информации см.
- Документацию по детекторам для подробностей о каждом детекторе
- Выбор детекторов для запуска только выбранных детекторов. По умолчанию запускаются все детекторы.
- Режим триажа для фильтрации отдельных результатов
Принтеры
Принтеры быстрого обзора
human-summary: Вывести удобочитаемую сводку по контрактамinheritance-graph: Экспортировать граф наследования каждого контракта в dot-файлcontract-summary: Вывести сводку по контрактамloc: Подсчитать общее количество строк кода (LOC), исходных строк кода (SLOC) и строк комментариев (CLOC) в исходных файлах (SRC), зависимостях (DEP) и тестовых файлах (TEST).entry-points: Вывести все изменяющие состояние точки входа и их переменные контрактов
Принтеры углублённого обзора* call-graph: Экспортировать граф вызовов контрактов в dot-файл
cfg: Экспортировать CFG каждой функцииfunction-summary: Вывести сводку по функциямvars-and-auth: Вывести записываемые переменные состояния и авторизацию функцийnot-pausable: Вывести функции, не использующие модификаторwhenNotPaused.
Для запуска принтера используйте --print и список принтеров, разделённых запятыми.
См. документацию принтера для полного списка.
Инструменты
slither-check-upgradeability: Проверить обновляемость на основеdelegatecallslither-prop: Автоматическая генерация юнит-тестов и свойствslither-flat: Свести код в один файлslither-check-erc: Проверить соответствие стандарту ERCslither-read-storage: Чтение значений хранилища из контрактовslither-interface: Создать интерфейс для контракта
См. документацию по инструментам для дополнительных инструментов.
Свяжитесь с нами, чтобы получить помощь в создании собственных инструментов.
Документация API
Документация по внутренностям Slither доступна здесь.
Получение помощи
Не стесняйтесь заглянуть в наш Slack-канал (#ethereum) для получения помощи по использованию или расширению Slither.
-
Документация принтера описывает информацию, которую Slither может визуализировать для каждого контракта.
-
Документация детектора описывает, как написать новый анализ уязвимостей.
-
Документация API описывает методы и объекты, доступные для пользовательского анализа.
-
Документация SlithIR описывает промежуточное представление SlithIR.
Часто задаваемые вопросы
Как исключить моки или тесты?
- Ознакомьтесь с нашей документацией по фильтрации путей.
Как исправить ошибки «unknown file» или проблемы компиляции?
- Поскольку slither требует AST solc, все зависимости должны быть доступны. Если контракт имеет зависимости,
slither contract.solзавершится ошибкой. Вместо этого используйтеslither .в родительской директорииcontracts/(вы должны увидетьcontracts/при выполненииls). Если у вас есть папкаnode_modules/, она должна находиться в той же директории, что иcontracts/. Чтобы убедиться, что проблема связана с slither, выполните команду компиляции для используемой вами платформы, напримерnpx hardhat compile. Это должно успешно работать; в противном случае механизм компиляции slither, crytic-compile, не сможет сгенерировать AST.
Лицензия
Slither распространяется под лицензией AGPLv3. Свяжитесь с нами, если вам нужно исключение из условий.
Публикации
Публикация Trail of Bits
- Slither: A Static Analysis Framework For Smart Contracts, Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
Внешние публикации
| Название | Использование | Авторы | Издание | Код |
|---|---|---|---|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | AST-анализ, построенный на основе Slither | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | - |
| MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract | Использование зависимостей данных через Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | Использование зависимостей данных через Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | Символическое выполнение на основе CFG от Slither | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | Использование детекторов уязвимостей Slither | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | Использование зависимостей данных через Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | Использование CFG от Slither для обнаружения циклов | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | - |
| SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds | Использование SlithIR для построения графа зависимостей хранилища | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | Sailfish |
| SolType: Refinement Types for Arithmetic Overflow in Solidity | Использование Slither в качестве интерфейса для построения системы уточнённых типов | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | - |
| Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection | Использование Slither для извлечения характеристик токенов (mintable, pausable, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) | - |
| MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities | Использование Slither для извлечения CFG и графа вызовов | Hoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao Jiang | IEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022) | ge-sc |
| Automated Auditing of Price Gouging TOD Vulnerabilities in Smart Contracts | Использование Slither для извлечения CFG и зависимостей данных | Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long | 2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC) | Smart-Contract-Repair |
| Modeling and Enforcing Access Control Policies for Smart Contracts | Расширение зависимостей данных Slither | Jan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf Reussner | IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022 | SolidityAccessControlEnforcement |
| Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision Fusion | Использование Slither для извлечения CFG | Weichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan Hu | Sensors 2023, 23, 7246 | - |
| Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code Reuse | Использование Slither для извлечения характеристик кода (CFG, функция, типы параметров, ..) | Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin Xia | ACM Transactions on Software Engineering and Methodology, 2023 | - |
| Smart Contract Parallel Execution with Fine-Grained State Accesses | Использование Slither для построения графов доступа к состоянию | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | Реализация внутреннего анализа на основе Slither | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | Создание 4 детекторов на основе Slither | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (нет открытого доступа к PDF) | Использование CFG и AST от Slither | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |
Если вы используете Slither в академической работе, рассмотрите возможность подачи заявки на Crytic $10k Research Prize.