이는 IEEE TPS(신뢰, 개인 정보 보호 및 보안) 컨퍼런스 2023에서 승인된 대규모 언어 모델 기반 스마트 계약 취약성 탐지: 새로운 관점 논문에 사용된 코드 및 데이터 세트에 대한 저장소입니다.
이 저장소가 유용하다고 생각되면 별표를 남겨주세요! 감사합니다: )
자체 데이터세트를 실행하려면 "릴리스" 분기로 전환하세요.
git checkout release
https://platform.openai.com/account/api-keys에서 GPT-4 API를 받으세요.
src/model.py(라인 4)의 OPENAI_API_KEY = "Enter your openai API key"를 API 키로 바꾸세요.
Environment.yml을 Conda 환경으로 가져와 Python 환경을 설정합니다.
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는 9월 16일 CVE-2018-19830.sol의 취약점을 쉽게 식별할 수 있었지만 9월 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. "
},
우리는 각 계약당 감사자 1명, 비평가 1명, 출력 3개로 구성된 GPT-4를 사용하여 9월 28일에 얻은 결과 세트를 업로드했습니다(src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928 참조). 종합 점수가 5 미만이면 취약점이 아닌 것으로 간주될 수 있습니다.
10/26 : 동일한 입력과 0(결정론적 생성)으로 설정된 온도에서도 비평가의 출력이 서로 다른 기간에 따라 달라질 수 있음(-.-)을 관찰했습니다. 이는 GPT-4(?) 업데이트로 인해 발생할 수 있습니다. 채점 일관성을 유지하기 위해 비평 프롬프트에 대한 몇 가지 샷 예시를 추가했습니다. 우리는 GPT-4를 사용하여 10월 26일에 얻은 몇 번의 프롬프트로 비평가의 결과 세트를 업로드했습니다(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])해 주시면 이슈나 이메일을 확인하는 대로 답변해 드리겠습니다.