← Back to Blog

무료 스마트 컨트랙트 보안 도구 비교: Slither vs Mythril vs Semgrep

2026-03-29 Slither Mythril Semgrep 보안도구 정적분석 스마트컨트랙트

English summary: This post compares the three most widely used open-source smart contract security tools — Slither (static analysis), Mythril (symbolic execution), and Semgrep (pattern matching). We cover installation, example output, detection capabilities, speed, and when to use each tool. ContractScan wraps all three in a unified scan.


왜 도구가 여러 개 필요한가

각 도구는 서로 다른 방법론을 사용합니다:

도구 하나로 모든 취약점을 잡을 수 없습니다. The DAO 해킹도 당시 사용 가능했던 도구들이 놓쳤던 사례입니다.


Slither — 정적 분석의 표준

Trail of Bits가 개발한 Slither는 Solidity 보안 분석의 사실상 표준입니다.

설치 및 실행

pip install slither-analyzer

# 단일 파일 스캔
slither contracts/Vault.sol

# 특정 탐지기만 실행
slither contracts/Vault.sol --detect reentrancy-eth,unprotected-ether-withdrawal

# JSON 출력 (CI 통합용)
slither contracts/Vault.sol --json results.json

실제 출력 예시

INFO:Detectors:
Vault.withdraw() (contracts/Vault.sol#12-18) sends eth to arbitrary user
        Dangerous calls:
        - (success,None) = msg.sender.call{value: amount}() (contracts/Vault.sol#15)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#suicidal

Reentrancy in Vault.withdraw() (contracts/Vault.sol#12-18):
        External calls:
        - (success,None) = msg.sender.call{value: amount}() (contracts/Vault.sol#15)
        State variables written after the call(s):
        - balances[msg.sender] = 0 (contracts/Vault.sol#17)

Slither 강점/약점

항목 평가
속도 ⚡ 빠름 (수초)
Reentrancy 탐지 ✅ 우수
접근 제어 ✅ 우수
오라클 조작 ⚠️ 제한적
False positive 낮음
학습 곡선 낮음

60개 이상의 내장 탐지기가 있으며, 커스텀 탐지기 작성도 가능합니다.


Mythril — 심볼릭 실행 엔진

ConsenSys가 개발한 Mythril은 심볼릭 실행(Symbolic Execution)으로 실행 가능한 모든 경로를 탐색합니다. (주의: MythX ≠ Mythril. MythX는 Mythril을 포함한 클라우드 서비스였으나 2026-03-31 종료. Mythril 자체는 오픈소스로 계속 사용 가능합니다.)

설치 및 실행

pip install mythril

# 소스 파일 분석
myth analyze contracts/Vault.sol

# 더 깊은 분석 (시간 더 걸림)
myth analyze contracts/Vault.sol --execution-timeout 300

# EVM 바이트코드 직접 분석
myth analyze --bin-runtime 0x608060...

실제 출력 예시

==== Reentrancy ====
SWC ID: 107
Severity: High
Contract: Vault
Function name: withdraw()
PC address: 148

The contract account state is changed after an external call.

Initial State:
  Account: [attacker], balance: 0x1, nonce:0, storage: {}

Transaction Sequence:
  Caller: [attacker], calldata: , value: 0x1
  ...

SWC (Smart Contract Weakness Classification) 표준에 따라 결과를 분류합니다. MythX와 호환되는 분류 체계입니다.

Mythril 강점/약점

항목 평가
속도 🐢 느림 (수분~수십분)
복잡한 로직 탐지 ✅ 우수
바이트코드 분석 ✅ 가능
False positive 중간
학습 곡선 중간

대형 컨트랙트에서는 타임아웃이 발생할 수 있습니다. 대신 복잡한 상태 전환을 수반하는 취약점에서 강점을 보입니다.


Semgrep — 패턴 매칭과 커스터마이징

Semgrep은 원래 일반 코드 보안 분석 도구지만 Solidity 룰셋을 지원합니다. 팀 고유의 취약점 패턴을 정의할 때 특히 유용합니다.

설치 및 실행

pip install semgrep

# 공개 Solidity 룰셋 사용
semgrep --config=p/solidity contracts/

# 특정 룰셋
semgrep --config=p/smart-contracts contracts/Vault.sol

커스텀 룰 작성 예시

# 커스텀 룰: tx.origin 사용 탐지
rules:
  - id: tx-origin-auth
    patterns:
      - pattern: require(tx.origin == ...)
      - pattern: if (tx.origin == ...)
    message: |
      tx.origin으로 인증하면 피싱 공격에 취약합니다.
      msg.sender를 사용하세요.
    languages: [solidity]
    severity: WARNING

Semgrep 강점/약점

항목 평가
속도 ⚡ 빠름
커스터마이징 ✅ 우수
알려진 패턴 탐지 ✅ 우수
깊은 로직 분석 ❌ 미지원
학습 곡선 낮음 (기본) / 중간 (커스텀 룰)

세 도구 종합 비교

기준 Slither Mythril Semgrep
분석 방식 정적 분석 심볼릭 실행 패턴 매칭
속도 빠름 느림 빠름
Reentrancy ⚠️
접근 제어
오라클 조작 ⚠️
커스텀 룰 ⚠️
CI/CD 적합성 ⚠️
MythX 대체 부분적 부분적

현실적인 권장 조합

혼자 개발하는 경우 (인디 개발자, 빠른 배포):

Slither → CI 통합 → 배포 전 ContractScan 통합 스캔

팀 개발 (기업, 멀티시그 관리):

Slither + Semgrep (커스텀 룰) → PR 자동 검사 → 배포 전 Mythril 깊은 분석

고가치 프로토콜:

위 조합 모두 + 외부 감사 (Certik, Trail of Bits, OpenZeppelin Audits)

통합 스캔: 하나로 실행하기

세 도구를 따로 설치하고 관리하기 번거롭다면, ContractScan이 이 세 엔진을 통합해 단일 스캔으로 제공합니다.

# ContractScan GitHub Action — 세 엔진 동시 실행
- uses: contractscan/action@v1
  with:
    path: contracts/
    engines: slither,semgrep,ai
    fail-on: high

AI 분석 레이어가 정적 도구들이 놓친 비즈니스 로직 문제를 추가로 잡아냅니다.


다음 편에서는 이 도구들을 GitHub Actions에 실제로 통합하는 방법을 단계별로 설명합니다. 브랜치 보호 규칙 설정부터 PR 코멘트 자동 생성까지 전체 워크플로우를 다룹니다.