นี่คือ repo สำหรับโค้ดและชุดข้อมูลที่ใช้ในเอกสาร Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives ซึ่งได้รับการยอมรับโดยการประชุม IEEE Trust, Privacy and Security (TPS) ปี 2023
หากคุณพบว่าพื้นที่เก็บข้อมูลนี้มีประโยชน์ โปรดให้ดาวแก่เรา! ขอบคุณ: )
หากคุณต้องการเรียกใช้ชุดข้อมูลของคุณเอง โปรดเปลี่ยนไปใช้สาขา "release":
git checkout release
รับ GPT-4 API จากhttps://platform.openai.com/account/api-keys
แทนที่ OPENAI_API_KEY = "ป้อนคีย์ API ของ openai" ใน src/model.py (บรรทัดที่ 4) ด้วยคีย์ API ของคุณ
ตั้งค่าสภาพแวดล้อม Python โดยการนำเข้า Environmental.yml เป็น Conda env
อยู่ในโฟลเดอร์ฐาน GPTLens
python src/run_auditor.py --backend=gpt-4 --temperature=0.7 --topk=3 --num_auditor=1
พารามิเตอร์ | คำอธิบาย |
---|---|
backend | เวอร์ชันของ GPT |
temperature | ไฮเปอร์พารามิเตอร์ที่ควบคุมการสุ่มของการสร้าง |
topk | ระบุช่องโหว่ k รายการต่อผู้ตรวจสอบแต่ละราย |
num_auditor | จำนวนผู้ตรวจสอบบัญชีอิสระทั้งหมด |
python src/run_critic.py --backend=gpt-4 --temperature=0 --auditor_dir= " auditor_gpt-4_0.7_top3_1 " --num_critic=1 --shot=few
พารามิเตอร์ | คำอธิบาย |
---|---|
backend | เวอร์ชันของ GPT |
temperature | ไฮเปอร์พารามิเตอร์ที่ควบคุมการสุ่มของการสร้าง |
auditor_dir | ไดเร็กทอรีของบันทึกที่ส่งออกโดยผู้ตรวจสอบ |
num_critic | จำนวนนักวิจารณ์อิสระทั้งหมด |
shot | ไม่ว่าจะยิงน้อยหรือยิงศูนย์ |
python src/run_rank.py --auditor_dir= " auditor_gpt-4_0.7_top3_1 " --critic_dir= " critic_gpt-4_0_1_few " --strategy= " default "
พารามิเตอร์ | คำอธิบาย |
---|---|
auditor_dir | ไดเร็กทอรีของบันทึกที่ส่งออกโดยผู้ตรวจสอบ |
critic_dir | ไดเร็กทอรีของบันทึกที่นักวิจารณ์ส่งออก |
strategy | กลยุทธ์ในการสร้างคะแนนสุดท้าย |
การอัปเดตบางอย่าง:
09/28 : เราสังเกตเห็นว่าผลลัพธ์ของผู้ตรวจสอบสามารถเปลี่ยนแปลงไปอย่างมากในช่วงเวลาที่ต่างกัน ตัวอย่างเช่น GPT-4 สามารถระบุช่องโหว่ใน CVE-2018-19830.sol เมื่อวันที่ 16 กันยายนได้อย่างง่ายดาย แต่ตรวจพบได้ยากในวันที่ 28 กันยายน
{
" function_name " : " UBSexToken " ,
" vulnerability " : " Unexpected Behaviour " ,
" criticism " : " The reasoning is correct. The function name does not match the contract name, which means it is not the constructor and can be called by anyone at any time. This can lead to the totalSupply and owner of the token being reset, which is a serious vulnerability. " ,
" correctness " : 9,
" severity " : 9,
" profitability " : 9,
" reason " : " The function name does not match the contract name. This indicates that this function is intended to be the constructor, but it is not. This means that anyone can call the function at any time and reset the totalSupply and owner of the token. " ,
" code " : " function UBSexToken() {n owner = msg.sender;n totalSupply = 1.9 * 10 ** 26;n balances[owner] = totalSupply;n} " ,
" label " : " Access Control " ,
" file_name " : " 2018-19830.sol " ,
" description " : " The UBSexToken() function of a smart contract implementation for Business Alliance Financial Circle (BAFC), an tradable Ethereum ERC20 token, allows attackers to change the owner of the contract, because the function is public (by default) and does not check the caller's identity. "
},
เราอัปโหลดชุดผลลัพธ์ที่เราได้รับเมื่อวันที่ 28 กันยายน โดยใช้ GPT-4 โดยมีผู้ตรวจสอบ 1 คน นักวิจารณ์ 1 คน และผลลัพธ์ 3 รายการต่อสัญญาแต่ละฉบับ (ดู src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928) คะแนนรวมที่น้อยกว่า 5 ถือว่าไม่มีช่องโหว่
10/26 : เราสังเกตเห็นว่าผลลัพธ์ของนักวิจารณ์อาจแตกต่างกัน (-.-) ในช่วงเวลาที่แตกต่างกัน แม้ว่าจะมีอินพุตเดียวกันและตั้งอุณหภูมิไว้ที่ 0 (การสร้างตามที่กำหนด) ปัญหานี้อาจเกิดจากการอัพเดต GPT-4 (?) เพื่อให้การให้คะแนนมีความสม่ำเสมอ เราได้เพิ่มตัวอย่างช็อตเล็กๆ น้อยๆ สำหรับคำวิจารณ์ เราอัปโหลดชุดผลลัพธ์ของนักวิจารณ์พร้อมข้อความเตือนไม่กี่ช็อตที่ได้รับเมื่อวันที่ 26 ตุลาคมโดยใช้ GPT-4 (ดู src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_few_1026)
ที่เก็บนี้จะได้รับการอัปเดตอย่างต่อเนื่องเพื่อให้การสร้างมีความสอดคล้องและมีประสิทธิภาพมากขึ้น
@misc{hu2023large,
title={Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives},
author={Sihao Hu and Tiansheng Huang and Fatih İlhan and Selim Furkan Tekin and Ling Liu},
year={2023},
eprint={2310.01152},
archivePrefix={arXiv},
primaryClass={cs.CR}
}
หากคุณมีคำถามใด ๆ คุณสามารถเปิดปัญหาหรือติดต่อฉัน ([email protected]) และฉันจะตอบกลับทันทีที่ฉันเห็นปัญหาหรืออีเมล