これは、IEEE Trust, Privacy and Security (TPS) カンファレンス 2023 で承認された論文「Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives」で使用されているコードとデータセットのリポジトリです。
このリポジトリが役に立ったと思われる場合は、スターを付けてください。ありがとう: )
独自のデータセットを実行したい場合は、「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 環境としてインポートして、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のアップデート(?)が原因かもしれません。スコアに一貫性を持たせるために、批評家に向けていくつかのショット例を追加しました。 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]) にご連絡ください。問題または電子メールを確認次第、すぐに返信させていただきます。