
Securify 2.0은 Ethereum Foundation 및 Chainsecurity가 지원하는 Ethereum Smart Contracts의 보안 스캐너입니다. Securify의 핵심 연구는 ETH 취리히의 안전하고 신뢰할 수 있으며 지능형 시스템 실험실에서 수행되었습니다.
인기있는 Securify Security Scanner의 후계자입니다 (여기에서는 이전 버전을 찾을 수 있습니다).
컨테이너를 만들려면 :
sudo docker build -t securify .
컨테이너를 실행하려면 :
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
참고 : 0.5.12 와 다른 견고성 버전으로 Docker를 통해 코드를 실행하려면 Dockerfile 상단에서 변수 ARG SOLC=0.5.12 수정하여 버전을 가리 킵니다. 올바른 버전으로 빌드 한 후에는 오류가 발생하지 않아야합니다.
다음 지침은 파이썬이 이미 설치되어 있다고 가정합니다. 그 외에도 Securify는 시스템에 solc , souffle 및 graphviz 설치해야합니다.
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
여기에서 https://souffle-lang.github.io/download.html을 따르십시오
어느 시점에서나 깨질 수 있으므로 불안정한 버전을 선택하지 마십시오.
sudo apt install graphviz
전제 조건이 설치된 후이 프로젝트에서 스크립트를 실행할 파이썬 가상 환경을 설정할 수 있습니다.
프로젝트의 루트 폴더에서 다음 명령을 실행하여 가상 환경을 설정하고 활성화하십시오.
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
python 버전이 실제로 3.7 인지 확인하십시오.
python --version
LD_LIBRARY_PATH 설정 :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
마지막으로 <securify_root> 폴더에서 다음 명령을 실행하여 프로젝트의 종속성을 설치하십시오.
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
이제 Securify 프레임 워크 사용을 시작할 준비가되었습니다.
기억하십시오 : 프레임 워크의 스크립트를 실행하기 전에 다음 명령으로 가상 환경을 활성화해야합니다.
source venv/bin/activate
현재 Securify2는 수입 명세서를 포함하지 않는 정액 계약, 즉 계약 만 지원합니다.
지역 계약을 분석하려면 간단히 실행됩니다.
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
또는 Etherscan.io API를 사용하여 블록 체인에서 다운로드하십시오.
securify <contract_address> --from-blockchain [--key <key-file>]
이 기능을 사용하려면 Etherscan.io의 API-Key가 필요합니다.
특정 심각도 수준에 대한 계약을 분석하려면 실행됩니다.
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
사용 가능한 모든 패턴을 실행하려면 :
securify --list
| ID | 패턴 이름 | 심각성 | 슬라이더 ID | SWC ID | 의견 |
|---|---|---|---|---|---|
| 1 | 토다운트 | 비판적인 | - | SWC-114 | |
| 2 | Todreceiver | 비판적인 | - | SWC-114 | |
| 3 | Todtransfer | 비판적인 | - | SWC-114 | |
| 4 | 제한되지 않은 작품 | 비판적인 | - | SWC-124 | |
| 5 | RightToleftOverride | 높은 | rtlo | SWC-130 | |
| 6 | ShadowedStateVariable | 높은 | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | 제한되지 않은 스스로 파괴 | 높은 | suicidal | SWC-106 | |
| 8 | 비 초기화 된 상태 평가 가능 | 높은 | uninitialized-state | SWC-109 | |
| 9 | 비 초기화 주도 | 높은 | uninitialized-storage | SWC-109 | |
| 10 | 제한되지 않은 DelegateCall | 높은 | controlled-delegatecall | SWC-112 | |
| 11 | 다오 | 높은 | reentrancy-eth | SWC-107 | |
| 12 | erc20interface | 중간 | erc20-interface | - | |
| 13 | ERC721 인터페이스 | 중간 | erc721-interface | - | |
| 14 | 잘못된 평등 | 중간 | incorrect-equality | SWC-132 | |
| 15 | 잠긴 | 중간 | locked-ether | - | |
| 16 | Reentrancynoeth | 중간 | reentrancy-no-eth | SWC-107 | |
| 17 | Txorigin | 중간 | tx-origin | SWC-115 | |
| 18 | 핸들링되지 않은 외관 | 중간 | unchecked-lowlevel | - | |
| 19 | 무제한 흐름 | 중간 | unchecked-send | SWC-105 | |
| 20 | 비 초기화 문자 | 중간 | uninitialized-local | SWC-109 | |
| 21 | 미사용 임대 | 중간 | unused-return | SWC-104 | |
| 22 | ShadowedBuiltin | 낮은 | shadowing-builtin | - | |
| 23 | ShadowEdlocalVariable | 낮은 | shadowing-local | - | |
| 24 | CallTodeFaultConstructor? | 낮은 | void-cst | - | |
| 25 | Callinloop | 낮은 | calls-loop | SWC-104 | |
| 26 | ReentrancyBenign | 낮은 | reentrancy-benign | SWC-107 | |
| 27 | 타임 스탬프 | 낮은 | timestamp | SWC-116 | |
| 28 | 어셈블리 | 정보 | assembly | - | |
| 29 | erc20Indexed | 정보 | erc20-indexed | - | |
| 30 | 로우 벨콜 | 정보 | low-level-calls | - | |
| 31 | 이름 지정 | 정보 | naming-convention | - | |
| 32 | 용해 | 정보 | solc-version | SWC-103 | |
| 33 | 사용하지 않은 상태 | 정보 | unused-state | - | |
| 34 | TOOMANYDIGITS | 정보 | too-many-digits | - | |
| 35 | constabestates | 정보 | constable-states | - | |
| 36 | 외부 혼합 | 정보 | external-function | - | |
| 37 | StateVariablesDefaultVisibility | 정보 | - | SWC-108 |
다음 슬라이더 패턴은 Solidity Compiler (Ver. 0.5.8)에 의해 확인되므로 Securify에 의해 확인되지 않습니다.
constant-functiondeprecated-standardspragma다음 SWC 취약점은 Pragma> = 5.8과의 견고성 계약에는 적용되지 않으므로 Securify에 의해 확인되지 않습니다.