
مُفَزِّز ليس ذكياً جداً: إطار fuzzing متقدم مصمم لاكتشاف الثغرات في كود C/C++.
مُشوش غير ذكي جداً
مارشال ويتيكر
oxagast
كلما زاد تعقيد النظام، زادت احتمالية وجود مشاكل داخل ذلك النظام.
--قانون ويتيكر
تبعيات التجميع:
automake autoconf-archive zlib1g-dev g++ gcc (و libgtk2.0-dev إذا كنت ترغب في دعم GTK)
التجميع:
لينكس:
$ aclocal && autoconf && automake -a && ./configure && make && make check
أو، إذا كنت ترغب في تجربة مشوش استدعاءات النظام:
$ aclocal && autoconf && automake -a && ./configure --enable-syscalls && make && make check
إذا كنت ترغب في تعطيل الواجهة الأمامية لـ GTK يمكنك فعل:
$ aclocal && autoconf && automake -a && ./configure --disable-gtk && make && make check
فري بي إس دي
بافتراض أنك قمت بتثبيت g++ من المنافذ (كما ستحتاج إليه لـ C++11):
$ aclocal && autoconf && automake -a && ./configure && make && make check
أوبن بي إس دي:
بافتراض أنك قمت بتثبيت g++ من المنافذ (كما ستحتاج إليه لـ C++11):
$ CXX=$(find / -name 'eg++' 2>/dev/null | grep ports | head -n 1) AUTOCONF_VERSION=2.69 AUTOMAKE_VERSION=1.15 autoreconf -fmi
ويندوز:
تم تصميم ملفات ويندوز الثنائية ليتم تجميعها باستخدام MinGW-W64 (نظرًا لأننا نستخدم threading، قم بتنزيل نسخة من MinGW-W64 g++ مع seh). يمكنك محاولة التجميع بعد تثبيت MinGW-W64 g++ مع seh (فقط) بالنقر فوق البرنامج النصي المضمن make_win.bat. إذا فشل ذلك، فمن المحتمل أن يكون السبب هو البيئة، لذا جرب ما يلي.
(اذهب إلى المكان الذي قمت بتثبيت MinGW-W64 فيه وانقر على mingw-64.bat)
windres metadata.rc -O coff -o metadata.res
g++.exe src/common.cpp src/bin2hex.cpp src/popen2.cpp src/main.cpp src/help.cpp src/match_fault.cpp src/sys_string.cpp src/man_read.cpp src/randomizer.cpp src/trash.cpp src/log.cpp metadata.res src/version.h -I./ -I./include -std=c++11 -lstdc++ -lpthread -O2 -o ansvif.exe -static -static-libgcc -static-libstdc++
gcc src/win/printf.c -o printf.exe
ملاحظة: لم تعد ملفات cygwin.dll الخارجية مطلوبة حيث أننا الآن نترجم باستخدام g++ من MinGW. في ويندوز 7، يتم تثبيت Powershell v2 افتراضيًا، ومع ذلك، يتطلب هذا البرنامج على الأقل Powershell v5. يتضمن ويندوز 10 Powershell v5. يمكنك الذهاب إلى موقع Microsoft وتنزيل Windows Management Framework (الذي يتضمن إصدارات أحدث من Powershell هنا:
https://www.microsoft.com/en-us/download/details.aspx?id=50395
الاختبار:
إذا كنت ترغب في تجربة الكود المثال، يمكنك تجميع faulty.c باستخدام:
$ gcc faulty.c -o faulty
يمكنك أيضًا ببساطة تشغيل make check.
الاستخدام:
ملاحظة مهمة: سيحتاج مستخدمو ويندوز إلى تشغيل ansvif.exe من Powershell حتى يعمل!
$ ./find_suid /usr/bin/ /bin/ /sbin/
$ ./ansvif -[tm] [template/manpage] -c /path/to/executable -b buffersize
أمثلة:
لينكس/بي إس دي:
$ ulimit -c unlimited
$ ./ansvif -m mount -c /bin/mount -e examples/mount_e.txt -x examples/mount_o.txt\
-f 8 -b 2048
$ ./ansvif -t examples/blank.txt -F tmp/tmphtml -x examples/htmltags.txt -c /usr/bin/iceweasel -b\
128 -A "file:///home/username/src/ansvif/tmp/tmphtml" -f 2 -n -R "sleep 3 && killall\
iceweasel" -S ">"
$ cat examples/linux_syscalls_implemented.list | xargs -P \
`cat examples/linux_syscalls_implemented.list | wc -l` -I {calls} ./ansvif -t examples/space.txt \
-B "{calls} " -c ./syscalls -o syscall_crash -f 1 -z -d -b 16
ويندوز:
PS C:\ansvif\bin\ansvif_win> .\ansvif -t ..\..\examples\space -F ..\..\tmp\tmphtml -x `
..\..\examples\htmltags -c `
'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' `
-b 128 -A "file:///C:\\Users\marsh\OneDrive\Documents\Code\ansvif\tmp\tmphtml" `
-f 2 -n -S ">" -R "sleep 2 ; Stop-Process -Name chrome"
الخيارات:
ansvif
-t يجب أن يحتوي هذا الملف على وسيطات سطر الأوامر سطرًا بسطر كما هو موضح في المثال.
-e يجب أن يحتوي هذا الملف على متغيرات البيئة سطرًا بسطر كما هو موضح في المثال
يمكنك عادة الحصول عليها عن طريق فعل شيء مثل:
$ strings /bin/mount | perl -ne 'print if /[A-Z]=$/' > mount_envs
-c يحدد مسار الأمر.
-p يحدد موقع صفحة الدليل (كرقم صحيح، عادة 1 أو 8)
-m يحدد صفحة الدليل الخاصة بالأمر.
-D يقوم بتفريغ ما تم العثور عليه في صفحة الدليل.
-f عدد الخيوط التي سيتم استخدامها. الافتراضي هو 2.
-b يحدد حجم المخزن المؤقت للتشويش عليه. 256-2048 كافية عادة.
-r يستخدم فقط بيانات قمامة عشوائية.
-o يكتب المخرجات إلى ملف سجل.
-z يجعل حجم المخزن المؤقت عشوائيًا من 1 إلى ما هو محدد بواسطة -b.
-x أشياء أخرى لوضعها. يمكن وضع أسماء المستخدمين وما شابه هنا.
-S الفاصل بين الخيارات.
-s تحديد الأحرف المستثناة. الافتراضيات هي <>\\n |&\[]\()\{}:; والخط الجديد إلزامي.
-T مهلة للخيوط.
-W مهلة للخيوط.
-L مستخدم غير مميز للتشغيل به إذا كان الجذر.
-A ضع ما بعد هذا دائمًا بعد الأمر للتشغيل.
-B ضع ما بعد هذا دائمًا قبل الأمر للتشغيل.
-F ملف لتغذيته للبرنامج الذي سيتم وضع -x مع بيانات التشويش العادية فيه.
-n لا تستخدم أبدًا بيانات عشوائية في التشويش.
-R قم بتشغيل هذا الأمر بعد كل تشويشة.
-C رمز خطأ غير قياسي للكشف عنه.
-V استخدم Valgrind إذا كان مثبتًا.
-1 حاول أن تسبب خطأ مرة، إذا لم يحدث، قم بإرجاع رمز الخطأ 64. مفيد للبرمجة النصية.
-P استخدم % لتمثيل الثنائي في التشويش.
-M الحد الأقصى للوسيطات لاستخدامها في التشويش.
-y اختصار لـ -b 0 وعادة ما يكون مفيدًا فقط مع -A أو -B.
-K استمر في التشويش بعد تعطل الهدف.
-E أمر يتم تشغيله قبل البرنامج المشوش.
-0 لا توجد أحرف NULL في التشويش.
-N اختصار لـ -R "pkill prog".
-v مطوّل.
-d بيانات التصحيح.
-h يعرض صفحة المساعدة.
-i يعرض معلومات الإصدار.
ansvif_gtk
-l اختصار لـ -p ./ansvif
-p موقع ملف ansvif الثنائي
التوصيات: يوصى بأنه إذا كنت تقوم بعمليات تشويش طويلة أو تشويش ملفات، إذا أمكن، ضع الملفات (بما في ذلك الملف الثنائي الذي تقوم بتشويشه إذا أمكن) في الذاكرة. هذا يعني، ضعها في مكان مثل /var/run/shm حيث يكون اهتزاز القرص في حده الأدنى، ويكون التشويش أسرع إلى حد ما، خاصة إذا تم التعامل مع ملفات كبيرة. كن محذرًا مع ذلك: ستفقد ملفاتك المشوشة إذا كانت في shm وأعدت تشغيل الجهاز!
لا تقم بتشغيل هذا الكود في بيئة إنتاج! إذا حاولت تعيين مخرجات faulty.c إلى suid(0) فـيرجى القيام بذلك في جهاز افتراضي. أو على الأقل جهاز لا تهتم به. بخلاف ذلك، فقط العب واستمتع!
ملاحظات:
يجب أن يكون مستخدمو ويندوز قد شغلوا ansvif من Powershell. يجب أن تكون تعليمات لينكس وويندوز مستقرة نسبيًا. تشويش استدعاءات النظام تحت لينكس قيد التطوير النشط.
شكر وتقدير
شكرًا لـ dll999 على أفكار تشويش استدعاءات النظام. شكرًا لـ moo من #2600 على 2600net لبعض التوصيات في مقالة الويكي. شكرًا لله أعلم كم شخص على IRC وStackOverflow. شكرًا لـ DarkSt0rm لإصلاح خطأ في ملف Makefile.