خط أنابيب اختبار تشويش مدفوع بنموذج لغوي كبير (LLM) يعمل بواسطة وكيل Taskflow من GitHub Security Lab
خط أنابيب fuzzing مدفوع بنماذج اللغة الكبيرة (LLM) بأسلوب OSS-Fuzz لمشاريع C/C++ الأصلية. AFL++ للتنفيذ، clang+lcov للتغطية، وكيل LLM لكتابة الـ harness، وقرارات التغذية الراجعة للتغطية، والفرز، وإعداد التقارير.
يحتوي هذا المستودع على fuzzing taskflow الخاص بـ
GitHub Security Lab Taskflow Agent.
يعتمد على المستودع المرافق
seclab-taskflows
لبعض اللبنات المشتركة
(taskflow الخاص بـ fetch_source_code، وصناديق أدوات local_file_viewer / gh_file_viewer،
وmodel_config الافتراضي) — يتم تثبيت تلك تلقائيًا
كاعتمادية Python.
المساهمات مرحّب بها! يُرجى الاطلاع على CONTRIBUTING.md للإرشادات.
aptgh)pip install git+https://github.com/GitHubSecurityLab/seclab-taskflows-fuzzing
يستدعي هذا الحزمتين seclab-taskflow-agent و seclab-taskflows (الحزمة الأم)
بشكل تتابعي، لذا فإن كل إشارة نقطية بالصيغة
seclab_taskflows.taskflows.audit.*،
seclab_taskflows.toolboxes.local_file_viewer،
seclab_taskflows.toolboxes.gh_file_viewer، و
seclab_taskflows.configs.model_config تُحلّ من توزيعة الحزمة الأم
عند التشغيل.
خط المعالجة هذا هو خط تهيئة (fuzzing) مستقل بالكامل. عند إعطائه مستودع GitHub لمشروع أصلي بلغة C/C++، فإنه سيقوم بما يلي:
.afl موجّه بـ AFL++، وملف ثنائي .cmplog موجّه بـ
AFL++ CMPLOG، وملف ثنائي .cov موجّه بتغطية clang،خط المعالجة هذا بأسلوب OSS-Fuzz من حيث الجوهر: فهو يستخدم العديد من التقنيات نفسها (مُحوِّلات وقواميس خاصة بكل صيغة، وربط الرموز الواعي بالبنية، وتحسينات الحاضنة المدفوعة بالتغطية، وتقارير قابلة للقراءة آليًا، والانهيارات المُزالة التكرار عبر تجزئة المكدس) لكنه أصغر بكثير ومكتفٍ ذاتيًا.
# Inside the codespace (or a host with python + git available):
./scripts/fuzzing/run_fuzzing.sh tukaani-project/xz
هذه هي الواجهة بأكملها. البرنامج النصي مستقل؛ سيقوم بتثبيت AFL++
عند التشغيل الأول، ثم يدير بقية سير المهام. تُكتب ملفات الإخراج
إلى ~/.local/share/seclab-taskflow-agent/seclab-taskflows/.
تبدأ لوحة المعلومات تلقائيًا في الخلفية؛ في Codespace، يتم إعادة توجيه المنفذ 8765
تلقائيًا — افتحه في أي متصفح لمشاهدة التقدم مباشرةً.
لإجراء اختبار سريع، استخدم هدفًا صغيرًا:
./scripts/fuzzing/run_fuzzing.sh DaveGamble/cJSON
ثلاث طبقات، من الأعلى إلى الأسفل:
┌────────────────────────────────────────────────────────────────────┐
│ scripts/fuzzing/run_fuzzing.sh │
│ shell driver; chains the taskflow stages with `set +e` │
└────────────────────┬───────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────┐
│ src/seclab_taskflows/taskflows/fuzzing/*.yaml │
│ LLM agent prompts; one YAML per pipeline stage │
└────────────────────┬───────────────────────────────────────────────┘
│ (calls MCP tools)
▼
┌────────────────────────────────────────────────────────────────────┐
│ src/seclab_taskflows/mcp_servers/ │
│ ├ fuzz_context.py persistence (SQLite via SQLAlchemy) │
│ └ fuzz_runner.py subprocess wrappers (AFL, clang, lcov, ...) │
│ │
│ scripts/fuzzing/dashboard.py │
│ read-only HTML view of fuzz_context.db │
└────────────────────────────────────────────────────────────────────┘
قواعد التصميم الأساسية:
fuzz_context.db.run_afl_for، compile_harness، store_crash، إلخ.afl-clang-lto++ -fsanitize=address,undefined (الملف الثنائي .afl) و
باستخدام clang++ -fprofile-instr-generate -fcoverage-mapping (الملف
الثنائي .cov). الملف الثنائي .afl يقوم بالفحص العشوائي؛ الملف الثنائي .cov
يعيد تشغيل طابور AFL لإنتاج تغطية حقيقية لأسطر المصدر/الدوال/الفروع. ملف ثالث،
خالٍ من الـ sanitizer وهو .cmplog (afl-clang-lto++ مع
AFL_LLVM_CMPLOG=1) يُمرَّر إلى afl-fuzz -c حتى تتمكن مرحلة CMPLOG/RedQueen
في AFL++ من حل القيم السحرية والمجاميع الاختبارية. جميع البناءات الثلاثة
إلزامية: فشل بناء CMPLOG يُفشل بناء الـ harness، و
run_afl_for يرفض التشغيل بدون ملف ثنائي .cmplog. إذا
لم يكن afl-clang-lto++ مثبتاً، تستخدم بناءات AFL++ الأمر
afl-clang-fast++ بدلاً منه ويُرجع compile_harness تحذيراً. برامج
التشغيل C++ تربط مكتبة C++ القياسية، لذا تعمل harnesses ومكتبات C و C++ معاً؛
لا تزال ملفات .c تُترجم كـ C (-x c).