Este é o repositório para o código e conjuntos de dados usados no artigo Large Language Model-Powered Smart Contract Vulnerability Detection: New Perspectives, aceito pela conferência IEEE Trust, Privacy and Security (TPS) 2023.
Se você achar este repositório útil, dê-nos uma estrela! Obrigado: )
Se você deseja executar seu próprio conjunto de dados, mude para o branch "release":
git checkout release
Obtenha a API GPT-4 em https://platform.openai.com/account/api-keys
Substitua OPENAI_API_KEY = "Enter your openai API key" em src/model.py (linha 4) pela sua chave de API.
Configure o ambiente Python importando Environment.yml como um ambiente Conda.
Fique na pasta base do GPTLens
python src/run_auditor.py --backend=gpt-4 --temperature=0.7 --topk=3 --num_auditor=1
Parâmetro | Descrição |
---|---|
backend | A versão do GPT |
temperature | O hiperparâmetro que controla a aleatoriedade da geração. |
topk | Identifique k vulnerabilidades por cada auditor |
num_auditor | O número total de auditores independentes. |
python src/run_critic.py --backend=gpt-4 --temperature=0 --auditor_dir= " auditor_gpt-4_0.7_top3_1 " --num_critic=1 --shot=few
Parâmetro | Descrição |
---|---|
backend | A versão do GPT |
temperature | O hiperparâmetro que controla a aleatoriedade da geração. |
auditor_dir | O diretório de logs gerado pelo auditor. |
num_critic | O número total de críticos independentes. |
shot | Seja com poucos tiros ou zero tiros. |
python src/run_rank.py --auditor_dir= " auditor_gpt-4_0.7_top3_1 " --critic_dir= " critic_gpt-4_0_1_few " --strategy= " default "
Parâmetro | Descrição |
---|---|
auditor_dir | O diretório de logs gerado pelo auditor. |
critic_dir | O diretório de logs gerado pelo crítico. |
strategy | A estratégia para gerar a pontuação final. |
Algumas atualizações:
28/09 : Observamos que os resultados dos auditores podem variar amplamente em diferentes períodos de tempo. Por exemplo, o GPT-4 conseguiu identificar facilmente a vulnerabilidade no CVE-2018-19830.sol em 16 de setembro, mas teve dificuldade em detectá-la em 28 de setembro.
{
" 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. "
},
Carregamos um conjunto de resultados obtidos em 28 de setembro usando GPT-4 com 1 auditor, 1 crítico e 3 resultados por cada contrato (consulte src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928). A pontuação composta inferior a 5 pode ser considerada como não sendo uma vulnerabilidade.
26/10 : Observamos que a saída do crítico também pode ser diferente (-.-) em diferentes períodos de tempo, mesmo com a mesma entrada e a temperatura definida como 0 (geração determinística). Isso pode ser causado pela atualização do GPT-4 (?). Para tornar a pontuação consistente, adicionamos alguns exemplos de tiros para aviso crítico. Carregamos um conjunto de resultados da crítica com prompt de poucas fotos obtido em 26 de outubro usando GPT-4 (consulte src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_few_1026).
Este repositório será atualizado continuamente para tornar a geração mais consistente e robusta.
@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}
}
Se você tiver alguma dúvida, pode abrir um problema ou entrar em contato comigo ([email protected]), e responderei assim que ver o problema ou e-mail.