업데이트로 돌아가기
New releaseJul 29, 2026

slither v0.11.6

Solidity 및 Vyper용 정적 분석기

공유

Slither, 스마트 계약 정적 분석기

Slither 정적 분석 프레임워크 로고

Build Status PyPI Slither - Read the Docs Slither - Wiki

Empire Hacking Slack에 참여하세요

Slack Status

- 토론 및 지원

Slither는 Python3로 작성된 Solidity 및 Vyper 정적 분석 프레임워크입니다. 취약점 탐지기 모음을 실행하고, 계약 세부 정보에 대한 시각적 정보를 출력하며, 사용자 정의 분석을 쉽게 작성할 수 있는 API를 제공합니다. Slither는 개발자가 취약점을 찾고, 코드 이해도를 높이며, 사용자 정의 분석을 신속하게 프로토타입화할 수 있도록 합니다.

특징

  • 낮은 오탐지율로 취약한 Solidity 코드를 탐지합니다 (트로피 목록 보기 trophies)
  • 소스 코드에서 오류 조건이 발생하는 위치를 식별합니다
  • 지속적 통합 및 Hardhat/Foundry 빌드에 쉽게 통합됩니다
  • 내장된 '프린터'가 중요 계약 정보를 신속하게 보고합니다
  • Python으로 사용자 정의 분석을 작성하기 위한 탐지기 API
  • Solidity >= 0.4로 작성된 계약 분석 기능
  • 중간 표현 (SlithIR)을 통해 간단하고 높은 정밀도의 분석 가능
  • 모든 공개 Solidity 코드의 99.9%를 정확하게 파싱
  • 계약당 평균 실행 시간 1초 미만
  • CI에서 Github의 코드 스캔과 통합
  • Vyper 스마트 계약 지원

사용법

Hardhat/Foundry/Dapp/Brownie 애플리케이션에서 Slither 실행:```console slither .

이 방법은 프로젝트에 의존성이 있을 때 권장됩니다. Slither는 기본 컴파일 프레임워크에 의존하여 소스 코드를 컴파일하기 때문입니다.

하지만 의존성을 임포트하지 않는 단일 파일에서 Slither를 실행할 수도 있습니다:```console
slither tests/uninitialized.sol

설치 방법

참고 Slither는 Python 3.10+가 필요합니다. 지원되는 컴파일 프레임워크 중 하나를 사용하지 않을 경우, solc, 즉 Solidity 컴파일러가 필요합니다. solc 버전 간 편리하게 전환하려면 solc-select 사용을 권장합니다.

uv 사용 (권장)

uv는 pip보다 10~100배 빠른 Python 패키지 관리자입니다.```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>

The -e 플래그는 편집 가능 모드로 설치하여, 소스 코드 변경 사항이 재설치 없이 즉시 반영됩니다.

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 액션 통합을 위해서는 slither-action을 사용하세요.
  • pre-commit 통합을 위해서는 ($GIT_TAG를 실제 태그로 바꾸세요) 사용하세요. ```YAML
  • To generate a Markdown report, use slither [target] --checklist.
  • To generate a Markdown with GitHub source code highlighting, use slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (replace ORG, REPO, COMMIT)

탐지기

번호탐지기탐지 내용영향신뢰도
1abiencoderv2-array스토리지 abiencoderv2 배열높음높음
2arbitrary-send-erc20임의의 from을 사용하는 transferFrom높음높음
3array-by-reference값으로 스토리지 배열 수정높음높음
4encode-packed-collisionABI encodePacked 충돌높음높음
5incorrect-shift시프트 명령어의 매개변수 순서가 잘못됨높음높음
6multiple-constructors다중 생성자 방식높음높음
7name-reused계약 이름 재사용높음높음
8protected-vars보호되지 않은 변수 감지높음높음
9public-mappings-nested중첩 변수가 있는 public 매핑높음높음
10rtlo오른쪽에서 왼쪽 재정의 제어 문자 사용높음높음
11shadowing-state상태 변수 섀도잉높음높음
12suicidal누구나 계약을 파괴할 수 있는 함수높음높음
13uninitialized-state초기화되지 않은 상태 변수높음높음
14uninitialized-storage초기화되지 않은 스토리지 변수높음높음
15unprotected-upgrade보호되지 않은 업그레이드 가능 계약높음높음
16arbitrary-send-erc20-permitpermint과 함께 임의의 from을 사용하는 transferFrom높음중간
17arbitrary-send-eth임의의 대상으로 Ether를 보내는 함수높음중간
18controlled-array-length오염된 배열 길이 할당높음중간
19controlled-delegatecall제어되는 delegatecall 대상높음중간
20delegatecall-loop루프 내에서 delegatecall을 사용하는 지불 가능 함수높음중간
21incorrect-exp잘못된 지수 연산높음중간
22incorrect-return어셈블리 모드에서 return이 잘못 사용된 경우높음중간
23msg-value-loop루프 내의 msg.value높음중간
24reentrancy-eth재진입 취약점 (Ether 도난)높음중간
25reentrancy-balance오래된 잔액 확인으로 이어지는 재진입 취약점높음중간
26return-leaveleave 대신 return이 사용된 경우높음중간
27storage-array부호 있는 정수 배열 컴파일러 버그높음중간
28unchecked-transfer확인되지 않은 토큰 전송높음중간
29weak-prng약한 PRNG높음중간
30domain-separator-collisionEIP-2612의 DOMAIN_SEPARATOR()와 서명이 충돌하는 함수가 있는 ERC20 토큰 감지중간높음
31enum-conversion위험한 enum 변환 감지중간높음
32erc20-interface잘못된 ERC20 인터페이스중간높음
33erc721-interface잘못된 ERC721 인터페이스중간높음
34incorrect-equality위험한 엄격한 동등성중간높음
35locked-etherEther를 잠그는 계약중간높음
36mapping-deletion구조체를 포함하는 매핑 삭제중간높음
37pyth-deprecated-functionsPyth 사용 중단 함수 감지중간높음
38pyth-unchecked-confidencePyth 가격의 신뢰 수준이 확인되지 않은 경우 감지중간높음
39pyth-unchecked-publishtimePyth 가격의 publishTime이 확인되지 않은 경우 감지중간높음
40shadowing-abstract추상 계약의 상태 변수 섀도잉중간높음
41tautological-compare변수를 자기 자신과 비교하면 비교 유형에 따라 항상 참 또는 거짓을 반환함중간높음
42tautology동어 반복 또는 모순중간높음
43write-after-write사용되지 않는 쓰기중간높음
44boolean-cst부울 상수 오용중간중간
45chronicle-unchecked-priceChronicle 가격이 확인되지 않은 경우 감지중간중간
46constant-function-asm어셈블리 코드를 사용하는 상수 함수중간중간
47constant-function-state상태를 변경하는 상수 함수중간중간
48divide-before-multiply부정확한 산술 연산 순서중간중간
49gelato-unprotected-randomness보호되지 않은 함수 내에서 _requestRandomness 호출중간중간
50out-of-order-retryable순서가 잘못된 재시도 가능 트랜잭션중간중간
51reentrancy-no-eth재진입 취약점 (Ether 도난 없음)중간중간
52reused-constructor재사용된 기본 생성자중간중간
53tx-origintx.origin의 위험한 사용중간중간
54unchecked-lowlevel확인되지 않은 저수준 호출중간중간
55unchecked-send확인되지 않은 send중간중간
56uninitialized-local초기화되지 않은 지역 변수중간중간
57unused-return사용되지 않는 반환 값중간중간
58chainlink-feed-registryChainlink 피드 레지스트리 사용 감지낮음높음
59incorrect-modifier기본 값을 반환할 수 있는 수정자낮음높음
60optimism-deprecation사용 중단된 Optimism 사전 배포 또는 함수가 사용된 경우 감지낮음높음
61shadowing-builtin내장 기호 섀도잉낮음높음
62shadowing-local지역 변수 섀도잉낮음높음
63uninitialized-fptr-cst생성자에서 초기화되지 않은 함수 포인터 호출낮음높음
64variable-scope선언 전에 사용된 지역 변수낮음높음
65void-cst호출되었지만 구현되지 않은 생성자낮음높음
66calls-loop루프 내의 다중 호출낮음중간
67events-access이벤트 접근 제어 누락낮음중간
68events-maths이벤트 산술 누락낮음중간
69incorrect-unary위험한 단항 표현식낮음중간
70missing-zero-check0 주소 검증 누락낮음중간
71reentrancy-benign양성 재진입 취약점낮음중간
72reentrancy-events순서가 잘못된 이벤트로 이어지는 재진입 취약점낮음중간
73return-bomb저수준 호출 대상이 예상치 못하게 모든 호출자의 가스를 소비할 수 있음낮음중간
74timestampblock.timestamp의 위험한 사용낮음중간
75assembly어셈블리 사용정보높음
76assert-state-changeassert 상태 변경정보높음
77boolean-equal부울 상수와 비교정보높음
78cyclomatic-complexity높은 순환 복잡도(> 11)를 가진 함수 감지정보높음
79deprecated-standards사용 중단된 Solidity 표준정보높음
80erc20-indexed인덱싱되지 않은 ERC20 이벤트 매개변수정보높음
81function-init-state상태 변수를 초기화하는 함수정보높음
82incorrect-using-for주어진 라이브러리의 함수 중 주어진 유형과 일치하는 함수가 없을 때 using-for 문 사용 감지정보높음
83low-level-calls저수준 호출정보높음
84missing-inheritance상속 누락정보높음
85naming-conventionSolidity 명명 규칙 준수정보높음
86pragma다른 pragma 지시문이 사용된 경우정보높음
87redundant-statements중복 문정보높음
88solc-version잘못된 Solidity 버전정보높음
89unimplemented-functions구현되지 않은 함수정보높음
90unindexed-event-address인덱싱된 매개변수 없이 주소 매개변수를 사용하는 이벤트정보높음
91unused-state사용되지 않는 상태 변수정보높음
92costly-loop루프 내의 비용이 많이 드는 연산정보중간
93dead-code사용되지 않는 함수정보중간
94reentrancy-unlimited-gassend 및 transfer를 통한 재진입 취약점정보중간
95too-many-digits숫자 표기법 모범 사례 준수정보중간
96cache-array-length루프 조건에서 일부 스토리지 배열의 length 멤버를 사용하고 이를 수정하지 않는 for 루프 감지최적화높음
97constable-states상수로 선언될 수 있는 상태 변수최적화높음
98external-functionexternal로 선언될 수 있는 public 함수최적화높음
99immutable-statesimmutable로 선언될 수 있는 상태 변수최적화높음
100var-read-using-thisthis를 사용하여 자체 변수를 읽는 계약최적화높음

자세한 내용은 다음을 참조하세요.

  • 각 탐지기에 대한 자세한 내용은 탐지기 문서를 참조하세요.
  • 선택한 탐지만 실행하려면 탐지 선택을 참조하세요. 기본적으로 모든 탐지기가 실행됩니다.
  • 개별 결과를 필터링하려면 분류 모드를 참조하세요.

출력기

빠른 검토 출력기

심층 검토 출력기* call-graph: 컨트랙트의 호출 그래프를 dot 파일로 내보내기

프린터를 실행하려면 --print와 함께 쉼표로 구분된 프린터 목록을 사용하세요.

전체 목록은 프린터 문서를 참조하세요.

도구

추가 도구는 도구 문서를 참조하세요.

문의하기를 통해 사용자 정의 도구 구축에 대한 도움을 받을 수 있습니다.

API 문서

Slither 내부에 대한 문서는 여기에서 확인할 수 있습니다.

도움말

Slither 사용 또는 확장에 대한 도움을 받으려면 Slack 채널 (#ethereum)에 방문하세요.

  • 프린터 문서는 Slither가 각 컨트랙트에 대해 시각화할 수 있는 정보를 설명합니다.
  • 탐지기 문서는 새로운 취약점 분석을 작성하는 방법을 설명합니다.
  • API 문서는 사용자 정의 분석에 사용 가능한 메서드와 객체를 설명합니다.
  • SlithIR 문서는 SlithIR 중간 표현을 설명합니다.

자주 묻는 질문 (FAQ)

모의 객체(mocks)나 테스트를 제외하려면 어떻게 하나요?

"unknown file" 또는 컴파일 문제를 해결하려면 어떻게 하나요?

  • slither는 solc AST가 필요하므로 모든 의존성을 사용할 수 있어야 합니다. 컨트랙트에 의존성이 있는 경우 slither contract.sol은 실패합니다. 대신 contracts/의 상위 디렉토리에서 slither .를 사용하세요(ls를 실행하면 contracts/가 보여야 합니다). node_modules/ 폴더가 있다면 contracts/와 같은 디렉토리에 있어야 합니다. 이 문제가 slither와 관련된 것인지 확인하려면 사용 중인 프레임워크의 컴파일 명령어(예: npx hardhat compile)를 실행하세요. 해당 명령어가 성공적으로 작동해야 합니다. 그렇지 않으면 slither의 컴파일 엔진인 crytic-compile이 AST를 생성할 수 없습니다.

라이선스

Slither는 AGPLv3 라이선스에 따라 라이선스가 부여되고 배포됩니다. 라이선스 예외가 필요하시면 문의해 주세요.

출판물

Trail of Bits 출판물

외부 출판물

제목사용법저자학술지/학회코드
ReJection: A AST-Based Reentrancy Vulnerability Detection MethodSlither 기반 AST 분석Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia ChenCTCIS 19-
MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart ContractSlither를 통한 데이터 종속성 활용William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay GaneshISSRE 2019MPro
ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart ContractsSlither를 통한 데이터 종속성 활용Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi MaSANER 20-
Verification of Ethereum Smart Contracts: A Model Checking ApproachSlither의 CFG 기반 기호 실행Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho QuanIJMLC 20-
Smart Contract RepairSlither의 취약점 탐지기에 의존Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik RoychoudhuryTOSEM 20SCRepair
Demystifying Loops in Smart ContractsSlither를 통한 데이터 종속성 활용Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil DilligASE 20-
Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts루프 탐지를 위해 Slither의 CFG 사용Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang HuIEEE 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 VignaS&P 22Sailfish
SolType: Refinement Types for Arithmetic Overflow in Solidity정제 타입 시스템 구축을 위해 Slither를 프론트엔드로 사용Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu FengPOPL 22-
Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection토큰 특징(mintable, pausable 등) 추출을 위해 Slither 사용Mazorra, Bruno, Victor Adan, and Vanesa DazaMathematics 10.6 (2022)-
MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract VulnerabilitiesCFG 및 호출 그래프 추출을 위해 Slither 사용Hoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao JiangIEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022)ge-sc
Automated Auditing of Price Gouging TOD Vulnerabilities in Smart ContractsCFG 및 데이터 종속성 추출을 위해 Slither 사용Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC)Smart-Contract-Repair
Modeling and Enforcing Access Control Policies for Smart ContractsSlither의 데이터 종속성 확장Jan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf ReussnerIEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022SolidityAccessControlEnforcement
Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision FusionCFG 추출을 위해 Slither 사용Weichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan HuSensors 2023, 23, 7246-
Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code Reuse코드 특징(CFG, 함수, 매개변수 타입 등) 추출을 위해 Slither 사용Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin XiaACM Transactions on Software Engineering and Methodology, 2023-
Smart Contract Parallel Execution with Fine-Grained State Accesses상태 접근 그래프 구축을 위해 Slither 사용Xiaodong Qi, Jiao Jiao, Yi LiInternational Conference on Distributed Computing Systems (ICDCS), 2023-
Bad Apples: Understanding the Centralized Security Risks in Decentralized EcosystemsSlither 기반 내부 분석 구현Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing GuoACM Web Conference April 2023-
Identifying Vulnerabilities in Smart Contracts using Interval AnalysisSlither 기반 4개의 탐지기 생성Ştefan-Claudiu Susan, Andrei ArusoaieFROM 2023-
Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (open access에 PDF 없음)Slither의 CFG 및 AST에 의존Maha Ayub , Tania Saleem , Muhammad Janjua , Talha AhmadTOSEM 2023SmartMuv

학술 연구에 Slither를 사용하는 경우 Crytic $10,000 연구상 신청을 고려해 보세요.

카테고리