هذا هو الريبو للكود ومجموعات البيانات المستخدمة في الورقة البحثية اكتشاف الثغرات الأمنية في العقود الذكية المستندة إلى نموذج اللغة الكبيرة: وجهات نظر جديدة، التي تم قبولها من قبل مؤتمر IEEE للثقة والخصوصية والأمن (TPS) لعام 2023.
إذا وجدت هذا المستودع مفيدًا، فيرجى منحنا نجمة! شكرًا لك: )
إذا كنت ترغب في تشغيل مجموعة البيانات الخاصة بك، يرجى التبديل إلى فرع "الإصدار":
git checkout release
احصل على واجهة برمجة تطبيقات GPT-4 من https://platform.openai.com/account/api-keys
استبدل OPENAI_API_KEY = "أدخل مفتاح openai API الخاص بك" في src/model.py (السطر 4) بمفتاح API الخاص بك.
قم بإعداد بيئة Python عن طريق استيراد Environment.yml باعتباره Conda env.
ابق على المجلد الأساسي لـGPTLens
python src/run_auditor.py --backend=gpt-4 --temperature=0.7 --topk=3 --num_auditor=1
المعلمة | وصف |
---|---|
backend | نسخة جي بي تي |
temperature | المعلمة المفرطة التي تتحكم في عشوائية التوليد. |
topk | تحديد نقاط الضعف لكل مدقق |
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 | نسخة جي بي تي |
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 | استراتيجية توليد النتيجة النهائية. |
بعض التحديثات:
28/09 : لاحظنا أن مخرجات المدققين يمكن أن تنحرف بشكل كبير في فترات زمنية مختلفة. على سبيل المثال، تمكن GPT-4 من التعرف بسهولة على الثغرة الأمنية في CVE-2018-19830.sol في 16 سبتمبر، لكنه واجه صعوبة في اكتشافها في 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. "
},
لقد قمنا بتحميل مجموعة من النتائج التي حصلنا عليها في 28 سبتمبر باستخدام GPT-4 مع مدقق واحد وناقد واحد و3 مخرجات لكل عقد (انظر src/logs/auditor_gpt-4_0.7_top3_1/critic_gpt-4_0_1_zero_0928). يمكن اعتبار النتيجة المركبة الأقل من 5 بمثابة ثغرة أمنية.
10/26 : لاحظنا أن مخرجات الناقد يمكن أن تكون مختلفة أيضًا (-.-) في فترات زمنية مختلفة، حتى مع نفس المدخلات ودرجة الحرارة مضبوطة على 0 (التوليد الحتمي). قد يكون السبب في ذلك هو تحديث GPT-4 (؟). لجعل التسجيل متسقًا، أضفنا بعض الأمثلة على اللقطات لتوجيه الناقد. لقد قمنا بتحميل مجموعة من نتائج الناقد بمطالبة قليلة تم الحصول عليها في 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])، وسوف أقوم بالرد بمجرد رؤية المشكلة أو مراسلتي عبر البريد الإلكتروني.