Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
echidna — 이더리움 스마트 계약 퍼저 | Kitploit
도구/GitHubGitHub/crytic/echidna
Vulnerability AnalysisFuzzing
GitHubcrytic/echidna

echidna

이더리움 스마트 계약 퍼저

저장소 보기웹사이트
3.2k4321343일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
# Echidna: 빠른 스마트 컨트랙트 퍼저 <a href="https://raw.githubusercontent.com/crytic/echidna/master/echidna.png"><img src="https://assets.kitploit.com/production/public/readmes/2659/763a0b6f546e53fe33e871cd7359ba47272d81be37527f1cceaa827256af0337.png" width="75"/></a>

![Build Status](https://github.com/crytic/echidna/workflows/CI/badge.svg)

Echidna는 버그를 먹어치우며 전기 감도가 매우 높은 이상한 생명체입니다 (Jacob Stanley에게 사과의 뜻을 전하며)

더 진지하게 말하자면, Echidna는 이더리움 스마트 컨트랙트의 퍼징/속성 기반 테스트를 위해 설계된 Haskell 프로그램입니다. 이는 [컨트랙트 ABI](https://docs.soliditylang.org/en/develop/abi-spec.html)를 기반으로 한 정교한 문법 기반 퍼징 캠페인을 사용하여 사용자 정의 술어나 [Solidity 단언문](https://docs.soliditylang.org/en/develop/control-structures.html#error-handling-assert-require-revert-and-exceptions)을 반증합니다. Echidna는 모듈성을 염두에 두고 설계되었기 때문에, 새로운 변이를 포함하거나 특정 사례에서 특정 컨트랙트를 테스트하도록 쉽게 확장할 수 있습니다.

## 기능

* 실제 코드에 맞춘 입력 생성
* 더 깊은 버그를 찾기 위한 선택적 코퍼스 수집, 변이 및 커버리지 안내
* 퍼징 캠페인 전에 유용한 정보를 추출하기 위해 [Slither](https://github.com/crytic/slither)로 구동
* 퍼징 캠페인 후 어떤 라인이 커버되었는지 식별하기 위한 소스 코드 통합
* 대화형 터미널 UI, 텍스트 전용 또는 JSON 출력
* 빠른 트리아지를 위한 자동 테스트 케이스 최소화
* 개발 워크플로에 원활한 통합

.. 그리고 [아름다운 고해상도 수제 로고](https://raw.githubusercontent.com/crytic/echidna/master/echidna.png).

<a href="https://i.imgur.com/saFWti4.png"><img src="https://assets.kitploit.com/production/public/readmes/2659/ec117cf17d5b4eeb75f52a3654df19ba615818f232d5e9238093cf010431fedc.png" width="650"/></a>

## 사용법

### 테스트 러너 실행

Echidna의 핵심 기능은 `echidna`라는 실행 파일로, 컨트랙트와 불변성 목록(항상 참으로 유지되어야 하는 속성)을 입력으로 받습니다. 각 불변성에 대해 컨트랙트에 대한 무작위 호출 시퀀스를 생성하고 불변성이 유지되는지 확인합니다. 불변성을 반증할 방법을 찾으면, 그렇게 하는 호출 시퀀스를 출력합니다. 찾지 못하면, 컨트랙트가 안전하다는 어느 정도의 보증을 얻을 수 있습니다.

### 불변성 작성

불변성은 `echidna_`로 시작하는 이름을 가지며, 인자가 없고, 불리언을 반환하는 Solidity 함수로 표현됩니다. 예를 들어, `20` 아래로 절대 내려가서는 안 되는 `balance` 변수가 있다면, 다음과 같이 컨트랙트에 추가 함수를 작성할 수 있습니다:```solidity
function echidna_check_balance() public returns (bool) {
    return(balance >= 20);
}
```
To check these invariants, run:```sh
$ echidna myContract.sol
```
테스트가 포함된 예제 컨트랙트는 [tests/solidity/basic/flags.sol](https://github.com/crytic/echidna/blob/master/tests/solidity/basic/flags.sol)에서 확인할 수 있습니다. 실행하려면 다음을 수행해야 합니다:```sh
$ echidna tests/solidity/basic/flags.sol
```
Echidna는 `echidna_sometimesfalse`를 반증하는 호출 시퀀스를 찾아야 하며, `echidna_alwaystrue`에 대한 반증 입력을 찾을 수 없어야 합니다.

### 테스트 모드

위 예제는 기본 **property** 모드를 사용하지만, Echidna는 구성 파일의 `testMode` 또는 CLI의 `--test-mode`를 통해 구성되는 여러 테스트 모드를 지원합니다:

* **`property`** (기본값): `bool`을 반환하는 `echidna_` 접두사 함수를 테스트합니다.
* **`assertion`**: `assert()` 및 Foundry의 `assertX` 헬퍼(`assertTrue`, `assertEq` 등)로부터의 어서션 실패를 감지합니다.
* **`foundry`**: Foundry 스타일 테스트를 실행하며, 명명 규칙을 따릅니다: `test` 접두사 단위 및 퍼즈 테스트(`testFail` 접두사 테스트는 revert가 예상됨)와 `invariant` 또는 `statefulFuzz` 접두사 상태 기반 불변성. `check` 및 `prove` 접두사 함수는 심볼릭 진입점이지만, 이 모드는 퍼징 캠페인이므로 다른 테스트 함수와 마찬가지로 퍼징됩니다.
* **`verification`**: 단일 트랜잭션을 사용하여 컨트랙트의 각 함수를 심볼릭하게 검증합니다. `check` 및 `prove` 접두사 함수는 항상 진입점으로 사용됩니다.
* **`overflow`**: 정수 오버/언더플로를 감지합니다 (Solidity >= 0.8.0).
* **`optimization`**: `int256`을 반환하는 `echidna_` 접두사 함수의 반환 값을 최대화합니다 (property 모드와 동일한 구성 가능한 접두사 사용).
* **`exploration`**: 속성을 확인하지 않고 커버리지를 수집합니다.

### 커버리지 수집 및 시각화

캠페인을 완료한 후, Echidna는 `corpusDir` 구성 옵션으로 지정된 특수 디렉터리에 커버리지를 최대화하는 **코퍼스**를 저장할 수 있습니다. 이 디렉터리에는 두 개의 항목이 포함됩니다: (1) Echidna가 재생할 수 있는 JSON 파일이 있는 `coverage`라는 디렉터리와 (2) 커버리지 주석이 포함된 소스 코드의 복사본인 `covered.txt`라는 일반 텍스트 파일.

`tests/solidity/basic/flags.sol` 예제를 실행하면, Echidna는 `coverage` 디렉터리에 몇 개의 직렬화된 트랜잭션 파일과 다음 줄이 포함된 `covered.$(date +%s).txt` 파일을 저장합니다:```text
*r  |  function set0(int val) public returns (bool){
*   |    if (val % 100 == 0)
*   |      flag0 = false;
  }

*r  |  function set1(int val) public returns (bool){
*   |    if (val % 10 == 0 && !flag0)
*   |      flag1 = false;
  }
```
우리 도구는 코퍼스의 각 실행 트레이스를 다음과 같은 "라인 마커"로 표시합니다:

* 실행이 STOP으로 끝난 경우 `*`
* 실행이 REVERT로 끝난 경우 `r`
* 실행이 out-of-gas 오류로 끝난 경우 `o`
* 실행이 그 밖의 다른 오류(0으로 나누기, 단언 실패 등)로 끝난 경우 `e`

### 스마트 컨트랙트 빌드 시스템 지원

Echidna는 [crytic-compile](https://github.com/crytic/crytic-compile)을 사용하여 [Foundry](https://book.getfoundry.sh/), [Hardhat](https://hardhat.org/), [Truffle](https://archive.trufflesuite.com/)을 비롯한 다양한 스마트 컨트랙트 빌드 시스템으로 컴파일된 컨트랙트를 테스트할 수 있습니다. 현재 컴파일 프레임워크로 Echidna를 호출하려면 `echidna .`를 사용하세요.

그뿐만 아니라, Echidna는 복잡한 컨트랙트를 테스트하는 두 가지 모드를 지원합니다. 첫째, [기존 네트워크 상태를 활용](https://secure-contracts.com/program-analysis/echidna/advanced/state-network-forking.html)하여 이를 Echidna의 기반 상태로 사용할 수 있습니다. 둘째, Echidna는 CLI에서 해당 Solidity 소스를 전달하여 알려진 ABI를 가진 모든 컨트랙트를 호출할 수 있습니다. 이 기능을 켜려면 설정에서 `allContracts: true`를 사용하세요.

### Echidna 단기 집중 과정

우리의 [Building Secure Smart Contracts](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial) 저장소에는 예제, 레슨, 연습 문제를 포함한 Echidna 단기 집중 과정이 있습니다.

### GitHub Actions 워크플로에서 Echidna 사용하기

GitHub Actions 워크플로의 일부로 `echidna`를 실행하는 데 사용할 수 있는 Echidna 액션이 있습니다. 사용 방법과 예제는 [crytic/echidna-action](https://github.com/crytic/echidna-action) 저장소를 참조하세요.

### 설정 옵션

Echidna의 CLI를 사용하여 테스트할 컨트랙트를 선택하고 설정 파일을 로드할 수 있습니다.```sh
$ echidna contract.sol --contract TEST --config config.yaml
```
구성 파일을 통해 사용자는 EVM 및 테스트 생성 매개변수를 선택할 수 있습니다. 기본 옵션이 포함된 완전하고 주석이 달린 구성 파일의 예시는
[tests/solidity/basic/default.yaml](https://github.com/crytic/echidna/blob/master/tests/solidity/basic/default.yaml)에서 확인할 수 있습니다.
사용 가능한 구성 옵션에 대한 더 자세한 정보는 [문서](https://secure-contracts.com/program-analysis/echidna/configuration.html)를 참조하십시오.

Echidna는 세 가지 다른 출력 드라이버를 지원합니다. 기본 `text`
드라이버, `json` 드라이버, 그리고 모든 `stdout` 출력을 억제해야 하는 `none` 드라이버가 있습니다. JSON 드라이버는 전체 캠페인을 다음과 같이 보고합니다.```
Campaign = {
  "success"      : bool,
  "error"        : string?,
  "tests"        : [Test],
  "seed"         : number,
  "coverage"     : Coverage
}
Test = {
  "contract"     : string,
  "name"         : string,
  "status"       : string,
  "error"        : string?,
  "testType"     : string,
  "transactions" : [Transaction]?
}
Transaction = {
  "contract"     : string,
  "function"     : string,
  "arguments"    : [string]?,
  "gas"          : number,
  "gasprice"     : number
}
```
`Coverage`는 특정 커버리지 증가 호출을 설명하는 dict입니다. 이러한 인터페이스는 추후에 좀 더 사용자 친화적으로 변경될 수 있습니다. `testType`은 `property`, `assertion`, `optimization`, `exploration`, `call` 중 하나이며, `status`는 항상 `fuzzing`, `shrinking`, `solved`, `passed`, `error` 중 하나를 가집니다.

### 성능 문제 디버깅

Echidna의 성능 문제를 진단하는 한 가지 방법은 프로파일링을 활성화하여 `echidna`를 실행하는 것입니다.
기본 프로파일링으로 Echidna를 실행하려면 원래의 `echidna` 명령에 `+RTS -p -s`를 추가하세요:```sh
$ nix develop # alternatively nix-shell
$ cabal --enable-profiling run echidna -- ... +RTS -p -s
$ less echidna.prof
```
이것은 가장 많은 CPU와 메모리 사용량을 차지하는 함수를 보여주는 보고서 파일(`echidna.prof`)을 생성합니다.

기본 프로파일링이 도움이 되지 않는다면, 더 [고급 프로파일링 기법](https://haskell.foundation/hs-opt-handbook.github.io/src/Measurement_Observation/Haskell_Profiling/eventlog.html)을 사용할 수 있습니다.

우리가 관찰한 성능 문제의 일반적인 원인:

- 핫 패스에서 호출되는 비용이 큰 함수
- 썽크를 축적하는 지연 데이터 생성자
- 핫 패스에서 사용되는 비효율적인 데이터 구조

이러한 사항을 확인하는 것이 좋은 시작점입니다. 특정 계산이 너무 지연되어 메모리를 누수한다고 의심된다면, `Control.DeepSeq`의 `force`를 사용하여 평가되도록 할 수 있습니다.

## 제한 사항 및 알려진 문제

EVM 에뮬레이션과 테스트는 어렵습니다. Echidna는 최신 릴리스에서 몇 가지 제한 사항이 있습니다. 일부는 [hevm](https://github.com/argotorg/hevm)에서 상속된 것이고, 일부는 설계/성능 결정의 결과이거나 단순히 우리 코드의 버그입니다. 해당 이슈와 상태("수정 안 함", "보류", "검토 중", "수정됨")를 포함하여 여기에 나열합니다. "수정됨"인 이슈는 다음 Echidna 릴리스에 포함될 것으로 예상됩니다.

| 설명 | 이슈 | 상태 |
| :---        | :---: | :---:  |
| Vyper 지원이 제한적임 | [#652](https://github.com/crytic/echidna/issues/652) | *수정 안 함* |
| 테스트를 위한 라이브러리 지원이 제한적임 | [#651](https://github.com/crytic/echidna/issues/651) | *수정 안 함* |

## 설치

### 사전 컴파일된 바이너리

시작하기 전에 Slither가 [설치](https://github.com/crytic/slither)되어 있는지 확인하세요 (`pip3 install slither-analyzer --user`).
Linux 또는 MacOS에서 Echidna를 빠르게 테스트하려면, Ubuntu에서 빌드된 정적으로 링크된 Linux 바이너리와 대부분 정적인 MacOS 바이너리를 [릴리스 페이지](https://github.com/crytic/echidna/releases)에서 제공합니다. [CI 파이프라인](https://github.com/crytic/echidna/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush)에서도 동일한 유형의 바이너리를 얻을 수 있으며, Linux 또는 MacOS용 바이너리를 찾으려면 커밋을 클릭하기만 하면 됩니다.

### Homebrew (macOS / Linux)

Mac 또는 Linux 머신에 Homebrew가 설치되어 있다면, `brew install echidna`를 실행하여 Echidna와 모든 종속성(Slither, crytic-compile)을 설치할 수 있습니다.

`brew install --HEAD echidna`를 실행하여 최신 `master` 브랜치 코드를 컴파일하고 설치할 수도 있습니다.

자세한 정보는 [`echidna` Homebrew Formula](https://formulae.brew.sh/formula/echidna) 페이지에서 확인할 수 있습니다. Formula 자체는 [homebrew-core 저장소](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/echidna.rb)의 일부로 유지 관리됩니다.

### Docker 컨테이너

미리 빌드된 Docker 컨테이너를 사용하는 것을 선호한다면, GitHub Actions를 통해 자동 빌드되는 [docker 패키지](https://github.com/orgs/crytic/packages?repo_name=echidna)를 확인하세요. `echidna` 컨테이너는 `ubuntu:noble`을 기반으로 하며, Echidna를 사용하기에 작으면서도 충분히 유연한 이미지를 목표로 합니다. 미리 빌드된 `echidna` 버전과 함께 `slither`, `crytic-compile`, `solc-select`, `nvm`, 그리고 `foundry`(`forge`, `cast`, `anvil`, `chisel` 포함)를 200 MB 미만으로 제공합니다.

컨테이너 이미지는 현재 x86 시스템에서만 빌드됩니다. Mac M1 시스템과 같은 ARM 장치에서 실행하는 것은 CPU 에뮬레이션으로 인한 성능 손실 때문에 권장되지 않습니다.

Docker 컨테이너 이미지에는 다양한 태그를 사용할 수 있습니다:

| 태그           | 태그의 빌드
|---------------|-------------
| `vx.y.z`      | 릴리스 `vx.y.z`에 해당하는 빌드
| `latest`      | 최신 Echidna 태그 릴리스.
| `edge`        | 기본 브랜치의 가장 최근 커밋.
| `testing-foo` | `foo` 브랜치를 기반으로 한 테스트 빌드.

최신 Echidna 버전으로 컨테이너를 대화형으로 실행하려면, 다음과 같은 명령을 사용할 수 있습니다. 현재 디렉터리를 컨테이너 내부의 `/src`로 매핑하고, `echidna`를 사용할 수 있는 셸을 제공합니다:```sh
$ docker run --rm -it -v "$(pwd)":/src ghcr.io/crytic/echidna/echidna
```
그렇지 않고 Echidna의 최신 버전을 로컬에서 빌드하려면 Docker를 사용하는 것을 권장합니다. 이 저장소를 복제한 디렉터리 내에서 다음 명령을 실행하여 Docker 컨테이너 이미지를 빌드하세요:```sh
$ docker build -t echidna -f docker/Dockerfile --target final-ubuntu .
```
그런 다음, `echidna` 이미지를 로컬에서 실행할 수 있습니다. 예를 들어, solc
0.5.7을 설치하고 `tests/solidity/basic/flags.sol`을 확인하려면 다음을 실행하면 됩니다:```sh
$ docker run -it -v "$(pwd)":/src echidna bash -c "solc-select install 0.5.7 && solc-select use 0.5.7 && echidna /src/tests/solidity/basic/flags.sol"
```
Docker 이미지에는 포괄적인 스마트 컨트랙트 개발 및 테스트를 위한 Foundry 도구도 포함되어 있습니다. 컨테이너 내에서 `forge`, `cast`, `anvil`, `chisel`을 직접 사용할 수 있습니다:```sh
# Run an interactive shell with Foundry tools available
$ docker run -it -v "$(pwd)":/src echidna bash

# Inside the container, you can use Foundry commands:
$ forge --version
$ cast --version
$ anvil --version
$ chisel --version

# Example: Initialize a new Foundry project
$ forge init my-project
$ cd my-project
$ forge build
$ forge test
```
### Stack을 사용한 빌드

소스에서 빌드하는 것을 선호한다면 [Stack](https://docs.haskellstack.org/en/stable/)을 사용하세요. `stack install`은 `~/.local/bin`에 `echidna`를 빌드하고 컴파일합니다. libreadline과 libsecp256k1(recovery가 활성화된 상태로 빌드됨)에 링크해야 하며, 이들은 원하는 패키지 관리자로 설치할 수 있습니다. 또한 최신 릴리스의 [libff](https://github.com/scipr-lab/libff)도 설치해야 합니다. 자세한 내용은 [CI 테스트](https://github.com/crytic/echidna/blob/master/.github/scripts/install-libff.sh)를 참고하세요.

일부 Linux 배포판은 Haskell이 필요로 하는 특정 항목에 대한 정적 라이브러리를 제공하지 않습니다. 예를 들어 Arch Linux에서는 `-static` 플래그를 사용하기 때문에 `stack build`가 링킹 오류로 실패할 수 있습니다. 이 경우 `--flag echidna:-static`을 사용하여 동적으로 링크된 바이너리를 생성하세요.

링킹과 관련된 빌드 오류가 발생하면 `--extra-include-dirs`와 `--extra-lib-dirs`를 조정해 보세요.

### Nix를 사용한 빌드 (Apple M1 시스템에서 네이티브로 작동)

[Nix 사용자](https://nixos.org/download/)는 다음 명령으로 최신 Echidna를 설치할 수 있습니다:```sh
$ nix-env -i -f https://github.com/crytic/echidna/tarball/master
```
With flakes가 활성화된 상태에서, 이 저장소에서 바로 Echidna를 실행할 수 있습니다:```sh
$ nix run github:crytic/echidna # master
$ nix run github:crytic/echidna/v2.1.1 # specific ref (tag/branch/commit)
```
Nix가 아닌 macOS 시스템용 독립 실행형 릴리스를 빌드하려면, 다음 명령이 Echidna를 대부분 정적 바이너리로 빌드합니다. 이는 Linux 시스템에서 완전 정적 바이너리를 생성하는 데에도 사용할 수 있습니다.```sh
$ nix build .#echidna-redistributable
```
Nix는 `crytic-compile`과 `solc`를 포함하여 개발에 필요한 모든 의존성을 자동으로 설치합니다. Echidna 개발을 빠르게 시작하는 방법:```sh
$ git clone https://github.com/crytic/echidna
$ cd echidna
$ nix develop # alternatively nix-shell
[nix-shell]$ cabal run echidna
[nix-shell]$ cabal run tests
[nix-shell]$ cabal new-repl
```
### 테스트 스위트 실행하기

`cabal run tests`는 Haskell 스위트이며, Echidna가 프로세스 내에서 수행하는 모든 것을 커버합니다.

MCP 서버는 대신 프로세스 외부에서 테스트되며, 실제 캠페인을 시작하고 에이전트 클라이언트가 하는 방식으로 구동합니다. 해당 스위트는 Python으로 작성되었으며, `$PATH`에 `echidna`가 필요합니다:```sh
$ pip install -r tests/mcp/requirements-test.txt
$ pytest tests/mcp -v
```
`ECHIDNA_MCP_URL`로 직접 시작한 캠페인을 가리키거나, `ECHIDNA_MCP_PORT`로 다른 포트를, 또는 `ECHIDNA_BIN`으로 특정 바이너리를 가리킬 수 있습니다. 동일한 인터페이스를 통해 에이전트가 캠페인을 구동하는 예시는 [examples/](https://github.com/crytic/echidna/blob/master/examples/README.md)에 있습니다.

## Echidna의 공개적 사용

### 속성 테스트 스위트

다음은 Echidna를 테스트에 사용하는 스마트 컨트랙트 프로젝트의 일부 목록입니다:

* [Curvance](https://github.com/curvance/Curvance-CantinaCompetition/tree/CodeFAQAndAdjustments/tests/fuzzing)
* [Primitive](https://github.com/primitivefinance/rmm-core/tree/main/contracts/crytic)
* [Uniswap-v3](https://github.com/search?q=org%3AUniswap+echidna&type=commits)
* [Balancer](https://github.com/balancer/balancer-core/tree/master/echidna)
* [MakerDAO vest](https://github.com/makerdao/dss-vest/pull/16)
* [Optimism DAI Bridge](https://github.com/makerdao/optimism-dai-bridge/blob/master/contracts/test/DaiEchidnaTest.sol)
* [WETH10](https://github.com/WETH10/WETH10/tree/main/contracts/fuzzing)
* [Yield](https://github.com/yieldprotocol/fyDai/pull/312)
* [Convexity Protocol](https://github.com/opynfinance/ConvexityProtocol/tree/dev/contracts/echidna)
* [Aragon Staking](https://github.com/aragon/staking/blob/82bf54a3e11ec4e50d470d66048a2dd3154f940b/packages/protocol/contracts/test/lib/EchidnaStaking.sol)
* [Centre Token](https://github.com/circlefin/stablecoin-evm/tree/release-2024-03-15T223309/echidna_tests)
* [Tokencard](https://github.com/tokencard/contracts/tree/master/tools/echidna)
* [Minimalist USD Stablecoin](https://github.com/usmfum/USM/pull/41)

### 보안 리뷰

다음은 Echidna를 사용하여 취약점을 발견한 공개 보안 리뷰를 보여줍니다

- [Advanced Blockchain](https://github.com/trailofbits/publications/blob/master/reviews/AdvancedBlockchain.pdf)
- [Amp](https://github.com/trailofbits/publications/blob/master/reviews/amp.pdf)
- [Ampleforth](https://github.com/trailofbits/publications/blob/master/reviews/ampleforth.pdf)
- [Atlendis](https://github.com/trailofbits/publications/blob/master/reviews/2023-03-atlendis-atlendissmartcontracts-securityreview.pdf)
- [Balancer](https://github.com/trailofbits/publications/blob/master/reviews/2021-04-balancer-balancerv2-securityreview.pdf)
- [Basis](https://github.com/trailofbits/publications/blob/master/reviews/basis.pdf)
- [Dai](https://github.com/trailofbits/publications/blob/master/reviews/mc-dai.pdf)
- [Frax](https://github.com/trailofbits/publications/blob/master/reviews/FraxQ22022.pdf)
- [Liquity](https://github.com/trailofbits/publications/blob/master/reviews/LiquityProtocolandStabilityPoolFinalReport.pdf)
- [LooksRare](https://github.com/trailofbits/publications/blob/master/reviews/LooksRare.pdf)
- [Maple](https://github.com/trailofbits/publications/blob/master/reviews/2022-03-maplefinance-securityreview.pdf)
- [Optimism](https://github.com/trailofbits/publications/blob/master/reviews/2022-11-optimism-securityreview.pdf)
- [Opyn](https://github.com/trailofbits/publications/blob/master/reviews/Opyn.pdf)
- [Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf)
- [Origin](https://github.com/trailofbits/publications/blob/master/reviews/origin.pdf)
- [Paxos](https://github.com/trailofbits/publications/blob/master/reviews/paxos.pdf)
- [Primitive](https://github.com/trailofbits/publications/blob/master/reviews/Primitive.pdf)
- [RocketPool](https://github.com/trailofbits/publications/blob/master/reviews/RocketPool.pdf)
- [Seaport](https://github.com/trailofbits/publications/blob/master/reviews/SeaportProtocol.pdf)
- [Set Protocol](https://github.com/trailofbits/publications/blob/master/reviews/setprotocol.pdf)
- [Shell protocol](https://github.com/trailofbits/publications/blob/master/reviews/ShellProtocolv2.pdf)
- [Sherlock](https://github.com/trailofbits/publications/blob/master/reviews/Sherlockv2.pdf)
- [Pegasys Pantheon](https://github.com/trailofbits/publications/blob/master/reviews/pantheon.pdf)
- [TokenCard](https://github.com/trailofbits/publications/blob/master/reviews/TokenCard.pdf)
- [Uniswap](https://github.com/trailofbits/publications/blob/master/reviews/UniswapV3Core.pdf)
- [Yearn](https://github.com/trailofbits/publications/blob/master/reviews/YearnV2Vaults.pdf)
- [Yield](https://github.com/trailofbits/publications/blob/master/reviews/YieldProtocol.pdf)
- [88mph](https://github.com/trailofbits/publications/blob/master/reviews/88mph.pdf)
- [0x](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf)

### 트로피

다음 보안 취약점은 Echidna에 의해 발견되었습니다. 우리의 도구를 사용하여 보안 취약점을 발견한 경우, 관련 정보와 함께 PR을 제출해 주세요.

| 프로젝트 | 취약점 | 날짜 |
|--|--|--|
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | 주문을 채울 수 없다면, 취소할 수도 없다 | 2019년 10월
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | 주문을 0으로 부분적으로 채울 수 있다면, 1개의 토큰으로도 부분적으로 채울 수 있다 | 2019년 10월
[0x Protocol](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) | cobbdouglas 함수는 유효한 입력 매개변수가 사용될 때 revert되지 않는다 | 2019년 10월
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | 공격자는 공개 풀에서 자산을 훔칠 수 없다 | 2020년 1월
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | 공격자는 joinPool로 무료 풀 토큰을 생성할 수 없다 | 2020년 1월
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) | joinPool-exitPool을 호출해도 무료 풀 토큰이 생기지 않는다 | 2020년 1월
[Balancer Core](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) |  exitswapExternAmountOut을 호출해도 무료 자산이 생기지 않는다 | 2020년 1월
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | [트로브를 닫으려면 발행된 LUSD 전액을 보유해야 한다](https://github.com/liquity/dev/blob/echidna_ToB_final/packages/contracts/contracts/TestContracts/E2E.sol#L242-L298) | 2020년 12월
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | [트로브가 부적절하게 제거될 수 있다](https://github.com/liquity/dev/blob/echidna_ToB_final/packages/contracts/contracts/TestContracts/E2E.sol#L242-L298) | 2020년 12월
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | 초기 상환(redeem)이 예기치 않게 revert될 수 있다 | 2020년 12월
[Liquity Dollar](https://github.com/trailofbits/publications/blob/master/reviews/Liquity.pdf) | 상환 없이 redeem을 해도 여전히 성공을 반환할 수 있다 | 2020년 12월
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | 사용자가 보유한 것보다 더 많은 토큰을 전송할 수 있다 | 2020년 11월
[Origin Dollar](https://github.com/trailofbits/publications/blob/master/reviews/OriginDollar.pdf) | 사용자 잔액이 총 공급량보다 클 수 있다 | 2020년 11월
[Yield Protocol](https://github.com/trailofbits/publications/blob/master/reviews/YieldProtocol.pdf) | 토큰 매수 및 매도에 대한 산술 계산이 부정확하다 | 2020년 8월

### 연구

또한 Echidna를 사용하여 스마트 컨트랙트 퍼징 논문의 연구 예제를 재현하여 얼마나 빠르게 해결책을 찾을 수 있는지 보여줄 수 있습니다. 이 모든 것은 노트북 컴퓨터에서 몇 초에서 1~2분 내에 해결될 수 있습니다.

| 출처 | 코드
|--|--
[Using automatic analysis tools with MakerDAO contracts](https://forum.openzeppelin.com/t/using-automatic-analysis-tools-with-makerdao-contracts/1021) | [SimpleDSChief](https://github.com/crytic/echidna/blob/master/tests/solidity/research/vera_dschief.sol)
[Integer precision bug in Sigma Prime](https://github.com/muellerberndt/sabre#example-2-integer-precision-bug) | [VerifyFunWithNumbers](https://github.com/crytic/echidna/blob/master/tests/solidity/research/solcfuzz_funwithnumbers.sol)
[Learning to Fuzz from Symbolic Execution with Application to Smart Contracts](https://files.sri.inf.ethz.ch/website/papers/ccs19-ilf.pdf) | [Crowdsale](https://github.com/crytic/echidna/blob/master/tests/solidity/research/ilf_crowdsale.sol)
[Harvey: A Greybox Fuzzer for Smart Contracts](https://arxiv.org/abs/1905.06944) | [Foo](https://github.com/crytic/echidna/blob/master/tests/solidity/research/harvey_foo.sol), [Baz](https://github.com/crytic/echidna/blob/master/tests/solidity/research/harvey_baz.sol)

### 학술 출판물

| 논문 제목 | 학회 | 출판 날짜 |
| --- | --- | --- |
| [echidna-parade: Diverse multicore smart contract fuzzing](https://agroce.github.io/issta21.pdf) | [ISSTA 2021](https://conf.researchr.org/home/issta-2021) | 2021년 7월 |
| [Echidna: Effective, usable, and fast fuzzing for smart contracts](https://agroce.github.io/issta20.pdf) | [ISSTA 2020](https://conf.researchr.org/home/issta-2020) | 2020년 7월 |
| [Echidna: A Practical Smart Contract Fuzzer](https://github.com/trailofbits/publications/blob/master/papers/echidna_fc_poster.pdf) | [FC 2020](https://fc20.ifca.ai/program.html) | 2020년 2월 |

Echidna를 학술 작업에 사용하고 있다면, [Crytic $10k Research Prize](https://blog.trailofbits.com/2019/11/13/announcing-the-crytic-10k-research-prize/)에 지원하는 것을 고려해 보세요.

## 도움 받기

Echidna를 사용하거나 확장하는 데 도움이 필요하면 [Empire Hacking](https://slack.empirehacking.nyc/)의 #ethereum 슬랙 채널에 편하게 들러주세요.

* 다음의 간단한 [Echidna invariants](https://github.com/crytic/echidna/blob/master/tests/solidity/basic/flags.sol)를 검토하여 시작하세요

* 더 자세한 질문은 Echidna 개발 팀에 직접 [이메일](mailto:[email protected])을 보내는 것을 고려하세요

## 라이선스

Echidna는 [AGPLv3 라이선스](https://github.com/crytic/echidna/blob/master/LICENSE)에 따라 라이선스가 부여되고 배포됩니다.
도구 다운로드