
برنامج C مثال يحتوي على كود ضعيف لأنواع شائعة من الثغرات الأمنية. يمكن استخدامه لعرض مفاهيم Fuzzing.
ملاحظة: تم تغيير اسم الملف من imgRead.c إلى dvcp.c، إذا كنت تشاهد فيديوهات فسترى imgRead.c ولكن في مستودع GitHub سترى dvcp.c، يرجى استخدام اسم الملف الصحيح.
قناتي على يوتيوب: https://www.youtube.com/user/MrHardik05/featured?view_as=subscriber
ما هو؟
هذا برنامج C بسيط قمت بترميزه لشرح الأنواع الشائعة من الثغرات الأمنية مثل:
يحتوي برنامج C هذا على كود ضعيف لجميع الثغرات المذكورة أعلاه ويمكنك استخدام أي أداة تشويش (fuzzer) مثل AFL أو libafl أو libfuzzer أو hongfuzz أو winafl أو jackalope أو أي أداة أخرى تريدها.
كيفية الترجمة (البناء)
فقط اكتب "make" في موجه الأوامر. ملف Makefile مرفق معه.
كيفية إنشاء ملف إدخال لـ AFL؟
فقط أنشئ ملف إدخال تجريبي كما يلي وسيتولى AFL الباقي:
echo "IMG" >input/1.txt
سيقوم AFL تلقائيًا بإنشاء حالات اختبار جديدة واكتشاف معظم الثغرات المذكورة أعلاه. هذا هو جمال AFL :)
كيفية استخدام التشويش مع AFL؟
1. أولاً قم بترجمة هذا البرنامج باستخدام الأمر التالي:
afl-gcc -g -fsanitize=address dvcp.c -o dvcp2. قم بتشغيل هذا الأمر:
afl-fuzz -i input -o output -m none -- ./dvcp @@
كيفية استخدام التشويش مع honggfuzz
1. أولاً قم بترجمة هذا البرنامج باستخدام الأمر التالي:
hfuzz-gcc -g -fsanitize=address dvcp.c -o dvcp
2. قم بتشغيل هذا الأمر:
hongfuzz -i input -- ./dvcp ___FILE___
كيفية استخدام التشويش مع libfuzzer
تحتاج إلى تعديل كود C، يمكنك الحصول على الكود المحدّث من هنا: https://github.com/hardik05/Damn_Vulnerable_C_Program/blob/master/dvcp_libfuzzer.c
1. قم بترجمة البرنامج باستخدام الأمر التالي:
clang -fsanitize=fuzzer,address,undefined -g dvcp_libfuzzer.c -o dvcp_libfuzzer
2. قم بتشغيل هذا الأمر للتشويش:
./dvcp_libfuzzer
يمكنك مشاهدة الدروس المرئية هنا:
قائمة تشغيل التشويش الكاملة:
الفيديوهات الفردية أدناه:
لينكس
LibAFL
[Fuzzing with libAFL] كيفية تثبيت libAFL على النظام وما هي المكونات المختلفة؟ -> https://www.youtube.com/watch?v=ztGfxbvcrms
[Fuzzing with libAFL] مقدمة إلى libAFL ForkServer، تشغيل أداة التشويش libAFL forkserver. -> https://www.youtube.com/watch?v=Ed1anYoGTyA
[Fuzzing with libAFL] تشويش برنامج C الضعيف عمدًا باستخدام أداة التشويش libAFL forkserver -> https://www.youtube.com/watch?v=ad_4zroiS_g
[Fuzzing with libAFL] استخدام وضع الذاكرة المشتركة مع أداة التشويش libAFL forkserver -> https://www.youtube.com/watch?v=GXD_qkISyfY
AFL++
[Fuzzing with AFLplusplus] تثبيت AFLplusplus وتشويش برنامج C بسيط -> https://www.youtube.com/watch?v=9wRVo0kYSlc
[Fuzzing with AFLplusplus] كيفية تشويش ملف ثنائي بدون كود مصدري على لينكس في الوضع المستمر (persistent mode) -> https://www.youtube.com/watch?v=LGPJdEO02p4
AFL
[Fuzzing with AFL] كيفية تثبيت AFL على أوبونتو -> https://www.youtube.com/watch?v=r7ucv2kN4j4
[Fuzzing with AFL] تشويش برنامج C بسيط باستخدام AFL -> https://www.youtube.com/watch?v=NiGC1jxFx78&t=66s
[Fuzzing with AFL] إيجاد أنواع مختلفة من الثغرات باستخدام AFL -> https://www.youtube.com/watch?v=m1RkShHzx_8&t=151s
[Fuzzing with AFL] فرز الانهيارات باستخدام crashwalk وإيجاد السبب الجذري باستخدام GDB -> https://www.youtube.com/watch?v=5R2gPkCXZkM
[Fuzzing with AFL] تشويش ملف ثنائي بدون كود مصدري باستخدام AFL في وضع Qemu. -> https://www.youtube.com/watch?v=np3sLLFQs6I
Honggfuzz
[Fuzzing with honggfuzz] تشويش برنامج C بسيط باستخدام HongFuzz -> https://www.youtube.com/watch?v=6OBXJtEe-d8
[Fuzzing with honggfuzz] Hongfuzz, checksec(pwntools), ASAN -> https://www.youtube.com/watch?v=Lr8pLQRTHac
Libfuzzer
[Fuzzing with libfuzzer] كيفية تشويش برنامج C بسيط باستخدام LibFuzzer -> https://www.youtube.com/watch?v=hFva8kJQwnc&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp
[Fuzzing with libfuzzer,AFL] كيفية تشويش برنامج libfuzzer harness باستخدام AFL -> https://www.youtube.com/watch?v=HfEqm3TrfwM&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp&index=2
كيفية إعادة إنتاج ثغرات OpenSSL CVE-2022-3602 و CVE-2022-3786 واستخدام libfuzzer -> https://www.youtube.com/watch?v=vhTuXph1dtY
Radamsa
[Fuzzing with Radamsa] تشويش برنامج C بسيط باستخدام Radamsa -> https://youtu.be/1FRsXVNpynQ
ويندوز
WinAFL
[Fuzzing with WinAFL] تشويش برنامج C بسيط باستخدام WinAFL -> https://www.youtube.com/watch?v=Va_Wtxf3DMc
[Fuzzing with WinAFL] ما هي دالة التشويش (fuzzing function)، وكيف تتأكد من أن كل شيء يعمل بشكل صحيح؟ -> https://www.youtube.com/watch?v=HLORLsNnPzo
أحتاج المزيد من قوالب ويندوز (harness) للتشويش باستخدام winafl
بالتأكيد، تحقق من هنا -> https://github.com/hardik05/winafl-harness
أريد تجربة شيء مختلف ربما بعض المُبدِّلات (mutators) المختلفة عن المُبدِّلات الافتراضية في winafl..
نعم، يمكنك تجربة هذا -> https://github.com/hardik05/winafl-powermopt
سيتم رفع المزيد كلما أنشأتها.
OSS-Fuzz من جوجل
كيف يعمل OSS-Fuzz: دليل لاختبار التشويش لمشاريع المصدر المفتوح -> https://www.youtube.com/watch?v=OBxCDsJ-0aM
لماذا أنشأت هذا؟
يستغرق الأمر الكثير من الوقت للوافدين الجدد وحتى الأشخاص ذوي الخبرة لفهم الأنواع المختلفة من الثغرات. لقد واجهت هذه المشكلة بنفسي وقررت مشاركة ما تعلمته.
إذا تعلمت شيئًا منه، أرسل لي ملاحظة شكر. هذا كل ما أحتاجه. أيضًا إذا كنت تريد تحسين أو إصلاح شيء ما، فإن طلبات السحب (PR) مرحب بها!
المؤلف؟
تويتر: https://twitter.com/hardik05
البريد الإلكتروني: راسلني عبر الرسائل الخاصة على تويتر :)
ملاحظات؟
الاقتراحات والتعليقات مرحب بها دائمًا. إذا وجدت أي مشكلة أو كان لديك إصلاح أو ميزة جديدة، أرسل طلب سحب (pull request).