Este es el repositorio del código y los conjuntos de datos utilizados en el documento Detección de vulnerabilidades de contratos inteligentes impulsada por modelos de lenguaje grande: nuevas perspectivas, aceptado por la conferencia IEEE Trust, Privacy and Security (TPS) 2023.
Si encuentra útil este repositorio, ¡danos una estrella! Gracias: )
Si desea ejecutar su propio conjunto de datos, cambie a la rama "liberar":
git checkout release
Obtenga la API GPT-4 desde https://platform.openai.com/account/api-keys
Reemplace OPENAI_API_KEY = "Ingrese su clave API de openai" en src/model.py (línea 4) con su clave API.
Configure el entorno Python importando Environment.yml como un entorno Conda.
Permanecer en la carpeta base de GPTLens
python src/run_auditor.py --backend=gpt-4 --temperature=0.7 --topk=3 --num_auditor=1
Parámetro | Descripción |
---|---|
backend | La versión de GPT |
temperature | El hiperparámetro que controla la aleatoriedad de la generación. |
topk | Identificar k vulnerabilidades por cada auditor |
num_auditor | El número total de auditores independientes. |
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 | Descripción |
---|---|
backend | La versión de GPT |
temperature | El hiperparámetro que controla la aleatoriedad de la generación. |
auditor_dir | El directorio de registros generados por el auditor. |
num_critic | El número total de críticos independientes. |
shot | Ya sean pocos disparos o cero disparos. |
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 | Descripción |
---|---|
auditor_dir | El directorio de registros generados por el auditor. |
critic_dir | El directorio de registros generados por el crítico. |
strategy | La estrategia para generar la puntuación final. |
Algunas actualizaciones:
28/09 : Observamos que los resultados de los auditores pueden variar en gran medida en diferentes períodos de tiempo. Por ejemplo, GPT-4 pudo identificar fácilmente la vulnerabilidad en CVE-2018-19830.sol el 16 de septiembre, pero tuvo dificultades para detectarla el 28 de septiembre.
{
" 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. "
},
Subimos un conjunto de resultados que obtuvimos el 28 de septiembre usando GPT-4 con 1 auditor, 1 crítico y 3 resultados por cada contrato (ver src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928). La puntuación compuesta inferior a 5 puede considerarse que no constituye una vulnerabilidad.
26/10 : Observamos que la salida de la crítica también puede ser diferente (-.-) en diferentes períodos de tiempo, incluso con la misma entrada y la temperatura establecida en 0 (generación determinista). Esto podría deberse a la actualización de GPT-4 (?). Para que la puntuación sea consistente, agregamos algunos ejemplos de tomas para indicaciones críticas. Subimos un conjunto de resultados de la crítica con un mensaje de pocas tomas que se obtuvo el 26 de octubre usando GPT-4 (consulte src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_few_1026).
Este repositorio se actualizará continuamente para que la generación sea más consistente y sólida.
@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 tiene alguna pregunta, puede abrir un problema o contactarme ([email protected]) y le responderé tan pronto como vea el problema o envíeme un correo electrónico.