
Securify 2.0 เป็นเครื่องสแกนความปลอดภัยสำหรับสัญญา Smart Ethereum ที่สนับสนุนโดยมูลนิธิ Ethereum และความปลอดภัย การวิจัยหลักที่อยู่เบื้องหลัง Securify ได้ดำเนินการที่ห้องปฏิบัติการระบบที่ปลอดภัยเชื่อถือได้และอัจฉริยะที่ ETH Zurich
เป็นผู้สืบทอดของเครื่องสแกนความปลอดภัยที่ได้รับความนิยม (คุณสามารถค้นหาเวอร์ชันเก่าได้ที่นี่)
เพื่อสร้างภาชนะ:
sudo docker build -t securify .
เพื่อเรียกใช้คอนเทนเนอร์:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
หมายเหตุ: ในการเรียกใช้รหัสผ่าน Docker ด้วยเวอร์ชันความแข็งแกร่งที่แตกต่างจาก 0.5.12 คุณจะต้องแก้ไขตัวแปร ARG SOLC=0.5.12 ที่ด้านบนของ Dockerfile เพื่อชี้ไปที่เวอร์ชันของคุณ หลังจากสร้างด้วยเวอร์ชันที่ถูกต้องคุณไม่ควรพบข้อผิดพลาด
คำแนะนำต่อไปนี้สมมติว่ามีการติดตั้งงูหลามแล้ว นอกจากนั้น 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
หลังจากการติดตั้งข้อกำหนดเบื้องต้นเราสามารถตั้งค่าสภาพแวดล้อมเสมือนจริงของ Python ซึ่งเราจะเรียกใช้สคริปต์ในโครงการนี้
ในโฟลเดอร์รูทของโครงการดำเนินการคำสั่งต่อไปนี้เพื่อตั้งค่าและเปิดใช้งานสภาพแวดล้อมเสมือนจริง:
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 Framework
ข้อควรจำ: ก่อนที่จะดำเนินการสคริปต์ของเฟรมเวิร์กคุณจะต้องเปิดใช้งานสภาพแวดล้อมเสมือนจริงด้วยคำสั่งต่อไปนี้:
source venv/bin/activate
ปัจจุบัน Securify2 สนับสนุนเฉพาะสัญญาคงที่เช่นสัญญาที่ไม่มีงบนำเข้า
เพื่อวิเคราะห์สัญญาท้องถิ่นเพียงดำเนินการ:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
หรือดาวน์โหลดจาก blockchain โดยใช้ etherscan.io API:
securify <contract_address> --from-blockchain [--key <key-file>]
ขอให้สังเกตว่าคุณต้องการ Api-Key จาก Etherscan.io เพื่อใช้ฟังก์ชั่นนี้
เพื่อวิเคราะห์สัญญากับระดับความรุนแรงที่เฉพาะเจาะจงดำเนินการ:
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
เพื่อให้ทุกรูปแบบที่มีอยู่ทำงาน:
securify --list
| รหัสประจำตัว | ชื่อลวดลาย | ความรุนแรง | SLETHER ID | SWC ID | ความเห็น |
|---|---|---|---|---|---|
| 1 | มีจำนวนมาก | วิกฤต | - | SWC-114 | |
| 2 | ผู้ที่ได้รับความนิยม | วิกฤต | - | SWC-114 | |
| 3 | เด็กวัยหัดเดิน | วิกฤต | - | SWC-114 | |
| 4 | ไม่มีข้อ จำกัด | วิกฤต | - | SWC-124 | |
| 5 | Righttoleftoverride | สูง | rtlo | SWC-130 | |
| 6 | มีเงา | สูง | shadowing-state , shadowing-abstract | SWC-119 | |
| 7 | ไม่ จำกัด ตัวเอง | สูง | suicidal | SWC-106 | |
| 8 | ไม่สามารถใช้งานได้ | สูง | uninitialized-state | SWC-109 | |
| 9 | การจัดเก็บข้อมูล | สูง | uninitialized-storage | SWC-109 | |
| 10 | unrestriscteddelegatecall | สูง | controlled-delegatecall | SWC-112 | |
| 11 | DAO | สูง | reentrancy-eth | SWC-107 | |
| 12 | ERC20Interface | ปานกลาง | erc20-interface | - | |
| 13 | ERC721Interface | ปานกลาง | 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 | unrestratectetherflow | ปานกลาง | unchecked-send | SWC-105 | |
| 20 | การไม่เข้าร่วม | ปานกลาง | uninitialized-local | SWC-109 | |
| 21 | ไม่ได้ใช้งาน | ปานกลาง | unused-return | SWC-104 | |
| 22 | เงา | ต่ำ | shadowing-builtin | - | |
| 23 | มีเงา | ต่ำ | 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 | Lowlevelcalls | ข้อมูล | low-level-calls | - | |
| 31 | การตั้งค่า | ข้อมูล | naming-convention | - | |
| 32 | การปลีกย่อย | ข้อมูล | solc-version | SWC-103 | |
| 33 | ไม่ได้ใช้งาน | ข้อมูล | unused-state | - | |
| 34 | toomanydigits | ข้อมูล | too-many-digits | - | |
| 35 | Constablestates | ข้อมูล | constable-states | - | |
| 36 | externalfunctions | ข้อมูล | external-function | - | |
| 37 | statevariablesdefaultvisibility | ข้อมูล | - | SWC-108 |
รูปแบบ slither ต่อไปนี้จะไม่ถูกตรวจสอบโดย Securify เนื่องจากพวกเขาถูกตรวจสอบโดยคอมไพเลอร์ความแข็งแกร่ง (ver. 0.5.8):
constant-functiondeprecated-standardspragmaช่องโหว่ SWC ต่อไปนี้ไม่ได้ใช้กับสัญญาความแข็งแกร่งกับ Pragma> = 5.8 ดังนั้นจึงไม่ได้ตรวจสอบโดย Securify: