이것은 SECURIFY의 버전이며 더 이상 지원되지 않으며 더 이상 지원되지 않습니다. SECURIFY v2.0을 사용하십시오.

Securify는 Ethereum Foundation 및 Chainsecurity가 지원하는 Ethereum Smart Contracts의 보안 스캐너입니다. Securify의 핵심 연구는 ETH 취리히의 Ice Center에서 수행되었습니다.

스마트 계약에서 일반적으로 발견되는 광범위한 보안 패턴 목록을 특징으로합니다.
이 프로젝트는 모든 이더 리움 보안 커뮤니티의 기부금을 환영하는 개방형 플랫폼입니다. 새로운 패턴을 제안하고, 테스트를위한 자원 봉사 또는 새로운 패턴 개발에 기여하려면 불화 그룹을 통해 연락하십시오.
souffle BAINSERE없이 SECURIFY가 충돌합니다. 글을 쓰는 시점에서 Soufflé는 Windows에서 사용할 수 없으므로 Securify는 Windows에서도 실행되지 않아야합니다.solc Binary는 Solidity 파일을 입력으로 사용할 수 있어야합니다. Securify는 주어진 파일에 대한 올바른 버전이 설치되었다고 가정합니다. 여기에서는 solc 사용할 수 있습니다.구축하려면 :
./gradlew jarSolidity 파일에서 SECURIFY를 실행하려면 :
java -jar build/libs/securify.jar -fs src/test/resources/solidity/transaction-reordering.solpysolc.py 스크립트 (Py-Solc 필요)가 제공하는 통화 출력에 대한 보안을 실행하려면 :
java -jar build/libs/securify.jar -co out.json 일부 EVM 바이너리에서 안전을 실행하려면 (예 : solc 에 의해 생산됨) :
java -jar build/libs/securify.jar -fh src/test/resources/solidity/transaction-reordering.bin.hex전체 옵션 목록을 보려면 :
java -jar build/libs/securify.jar -h테스트를 실행하려면 (Junit4를 사용하는) :
./gradlew test 파이썬 래퍼는 solc 와 truffle 다루는 데 도움이됩니다. 요구 사항은 요구 사항 .txt 파일에 있습니다. Dockerfile 은이 래퍼를 사용하기 위해 로컬 환경을 설정하기위한 참조로 사용할 수 있습니다.
Debian 파생 상품 또는 Soufflé가 지원하는 다른 플랫폼에서는 설치가 간단해야합니다.
Soufflé가 필요하지 않은 빠른 데모를 위해 Docker를 사용할 수 있습니다.
Docker 이미지 구축 :
docker build . -t securify작은 예에서 안전을 실행하십시오.
docker run securify 마운트에 볼륨을 지정하여 분석 된 파일을 변경할 수 있으며, 포함 된 모든 *.sol 파일은 SECURIFY에 의해 처리됩니다.
docker run -v $( pwd ) /folder_with_solidity_files:/project securify --truffle 플래그를 추가하면 Securify가 의존성이 이미 설치된 트러플 프로젝트를 실행할 수 있어야합니다 (필요하면 npm install 실행하십시오). 이 깃발이 없으면 프로젝트는 solc 사용하여 편집됩니다. 전체 옵션 목록을 얻으려면 -h 추가하십시오. 특히 사용자가 트러플로부터 편집 정보를 받으려면 -v 플래그를 추가해야합니다.
JSON 출력을 받으려면 Docker는 --json 플래그를 지원하여 예쁜 출력을 억제하고 대신 JSON을 반환합니다. 진행 정보가 표시되지 않으면 -q 플래그를 추가하십시오. 따라서 순수한 JSON 출력이 발생합니다. 일치하는 라인의 지수는 0 기반이므로 라인 i 와 일치하는 것은 i+1 TH 라인이 일치 함을 의미합니다. 특히, 첫 번째 줄의 인덱스는 0입니다.
기본 끝에서 종료 테스트는 test.py 파일을 통해 실행할 수 있습니다.
python3 test . pyPIPENV를 사용하여 요구 사항을 설치할 수 있습니다.
pipenv install 또는 pip 사용 :
pip install -r requirements.txt이 테스트는 Securify가 제공 한 현재 JSON 출력을 과거의 출력과 비교 하고이 둘 사이의 차이를보고합니다.
프로젝트에 다음 .travis.yml 추가하여 새로운 커밋에 대한 보안을 실행할 수 있습니다.
services:
- docker
before_install:
- docker pull chainsecurity/securify
script:
- docker run -v $(pwd):/project chainsecurity/securify
이를 통해 보안은 의존성이 이미 설치된 트러플 프로젝트를 실행할 수 있어야합니다 (필요하다면 npm install 실행하십시오).
출력은 Clang 스타일을 느슨하게 따릅니다. 경고와 취약성 만보 고됩니다. 규정 준수 정보를 얻으려면 Docker의 --json 플래그 또는 Java 실행 파일의 -co 플래그를 사용하여 모든 분석 정보를 JSON 형식으로 얻으십시오.
Contributing.md를 참조하십시오.
다른 사용자와 논의하기 위해 불화에 가입하십시오.
Securify는 정기적으로 Chainsecurity의 감사를 돕기 위해 사용되지만 다음을 포함하여 여전히 버그가 있습니다.
computeBranches 재귀로 인해 Stackoverflowerror 예외가 발생합니다. 대부분의 경우, java 의 -Xss 옵션 (예 : java -Xss1G -jar ... 을 사용하여 스택 크기를 늘리기에 충분합니다.solc 를 통해 이진을 얻을 수없는)은 지원되지 않습니다. SMART 계약의 EVM 코드를 정적으로 분석하여 계약에 대한 중요한 의미 정보 (제어 흐름 및 데이터 흐름 사실 포함)를 유추합니다. 이 단계는 확장 가능한 데이터 로그 솔버 인 Soufflé를 사용하여 완전히 자동화됩니다. 그런 다음 SECURIFY는 유추 된 사실을 확인하여 보안 위반을 발견하거나 보안 관련 지침의 준수를 증명합니다.
Securify 스캐너의 전체 기술 세부 사항은 연구 논문에서 제공됩니다.