这是论文《大型语言模型驱动的智能合约漏洞检测:新视角》中使用的代码和数据集的存储库,已被 IEEE 信任、隐私和安全 (TPS) 会议 2023 接受。
如果您觉得这个存储库有用,请给我们一个星星!谢谢你: )
如果您想运行自己的数据集,请切换到“release”分支:
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 env 来设置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. "
},
我们上传了 9 月 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(确定性生成),critic 的输出在不同时间段也可能不同 (-.-)。这可能是由 GPT-4 的更新引起的(?)。为了使评分保持一致,我们添加了一些镜头示例以供评论家提示。我们上传了 10 月 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]),我会在看到问题或电子邮件后立即回复。