Il s'agit du dépôt du code et des ensembles de données utilisés dans l'article Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives, accepté par la conférence IEEE Trust, Privacy and Security (TPS) 2023.
Si vous trouvez ce référentiel utile, donnez-nous une étoile ! Merci: )
Si vous souhaitez exécuter votre propre ensemble de données, veuillez passer à la branche « release » :
git checkout release
Obtenez l'API GPT-4 depuis https://platform.openai.com/account/api-keys
Remplacez OPENAI_API_KEY = "Entrez votre clé API openai" dans src/model.py (ligne 4) par votre clé API.
Configurez l'environnement Python en important Environment.yml en tant qu'environnement Conda.
Restez sur le dossier de base GPTLens
python src/run_auditor.py --backend=gpt-4 --temperature=0.7 --topk=3 --num_auditor=1
Paramètre | Description |
---|---|
backend | La version de GPT |
temperature | L'hyper-paramètre qui contrôle le caractère aléatoire de la génération. |
topk | Identifier k vulnérabilités pour chaque auditeur |
num_auditor | Le nombre total d’auditeurs indépendants. |
python src/run_critic.py --backend=gpt-4 --temperature=0 --auditor_dir= " auditor_gpt-4_0.7_top3_1 " --num_critic=1 --shot=few
Paramètre | Description |
---|---|
backend | La version de GPT |
temperature | L'hyper-paramètre qui contrôle le caractère aléatoire de la génération. |
auditor_dir | Le répertoire des journaux générés par l'auditeur. |
num_critic | Le nombre total de critiques indépendants. |
shot | Que ce soit quelques tirs ou une invite de tir zéro. |
python src/run_rank.py --auditor_dir= " auditor_gpt-4_0.7_top3_1 " --critic_dir= " critic_gpt-4_0_1_few " --strategy= " default "
Paramètre | Description |
---|---|
auditor_dir | Le répertoire des journaux générés par l'auditeur. |
critic_dir | Le répertoire des journaux générés par le critique. |
strategy | La stratégie pour générer le score final. |
Quelques mises à jour :
28/09 : Nous avons observé que les résultats des auditeurs peuvent dériver considérablement à différentes périodes. Par exemple, GPT-4 a pu facilement identifier la vulnérabilité dans le CVE-2018-19830.sol le 16 septembre, mais a eu du mal à la détecter le 28 septembre.
{
" 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. "
},
Nous avons téléchargé un ensemble de résultats que nous avons obtenus le 28 septembre en utilisant GPT-4 avec 1 auditeur, 1 critique et 3 sorties pour chaque contrat (voir src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928). Un score composite inférieur à 5 peut être considéré comme n’étant pas une vulnérabilité.
10/26 : Nous avons observé que la sortie du critique peut également être différente (-.-) à différentes périodes de temps, même avec la même entrée et la température réglée à 0 (génération déterministe). Cela pourrait être dû à la mise à jour de GPT-4 (?). Pour rendre la notation cohérente, nous avons ajouté quelques exemples de plans pour les invites critiques. Nous avons téléchargé un ensemble de résultats du critique avec une invite à quelques tirs obtenue le 26 octobre en utilisant GPT-4 (voir src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_few_1026).
Ce dépôt sera continuellement mis à jour pour rendre la génération plus cohérente et robuste.
@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}
}
Si vous avez des questions, vous pouvez soit ouvrir un problème, soit me contacter ([email protected]), et je vous répondrai dès que je verrai le problème ou par e-mail.