الفرق الحمراء — الهجوم
Binary Exploitation — الذاكرة من جوّه
Stack و Heap overflows و ROP — وتعدية ASLR/DEP
- المستوى
- خبير
- المدة
- 150m
- الترتيب
- الدرس 67 من 85
BoFROPHeapASLR
استغلال الذاكرة — جذور الأمن السيبراني
تشبيه يقرّب الفكرة
بُص. الـ memory corruption عمره 30 سنة، وبرضو لسه بيكسر العالم في 2026. - طب ايه يا حضرتك؟؟ مش ASLR + DEP + Canary + CFI كلهم شغّالين؟ يا نجم الجيل.. الحمايات دي زي الأقفال — أي قفل ليه مفتاح. الزتونة إن C/C++ بيدّوا المبرمج صلاحيات ربنا من غير ما يحاسبوه على حاجة. ذاكرة البرنامج زي دفتر حسابات: الـ stack مكتب الموظف، والـ heap أرشيف عام. لو كتبت بره خانة الإدخال، هتكتب فوق عمود "التوقيع" — والبرنامج هيقفز لعنوان انت كاتبه بإيدك، مش العنوان اللي المبرمج قصده. ده استغلال الذاكرة من الآخر.
أرقام تخلّيك تفكّر: Microsoft و Google نشروا إن ~70% من الـ CVEs السنوية بتاعتهم memory safety. ده مش رقم صغير. ده يعني إن لغة C اللي عمرها 53 سنة لسه بتولد كل سنة آلاف الكوارث. ولما Google نقلت أجزاء من Android لـ Rust، الفئة دي اختفت.
بنية البرنامج في الذاكرة
- .text — التعليمات (read+execute).
- .data / .bss — متغيرات عامة.
- Heap — تخصيص ديناميكي (
malloc, new) — ينمو لأعلى. - Stack — استدعاءات الدوال — ينمو لأسفل في معظم المعماريات.
- Libraries (libc, ld) — مكتبات مشتركة.
memory layout (x86_64 Linux)
0x7ffffffff000 ─┐
│ Stack (grows down)
│
▼
...
▲
│ Heap (grows up)
┴
.bss / .data
.text (program code)
0x000000400000Stack Buffer Overflow — الكلاسيكي
C — vulnerable
#include <stdio.h>
void win() { system("/bin/sh"); }
int main() {
char buf[64];
gets(buf); // bug — لا حدّ
return 0;
}الـ stack بعد دخول main:
stack frame
high addresses
+------------------+
| return address | <-- نريد تغييره
+------------------+
| saved RBP |
+------------------+
| buf[64] | <-- gets يكتب هنا
+------------------+
low addressesلو كتبنا 72 بايت + عنوان win، الـ shell بيشتغل. كدة ببساطة.
exploit (pwntools)
from pwn import *
elf = ELF('./vuln')
p = process('./vuln')
payload = b"A"*72 + p64(elf.sym.win)
p.sendline(payload)
p.interactive()ASLR وDEP/NX
- ASLR — عناوين الـ stack/heap/libs بتكون عشوائية كل تشغيلة. عشان تتخطاها لازم info leak.
- DEP/NX — الـ stack والـ heap مش قابلين للتنفيذ. مينفعش تحط shellcode فيهم وتشغله مباشرة.
- PIE — حتى الـ .text بيبقى عشوائي.
- RELRO — بيمنع overwrite للـ GOT.
- CFI — Control Flow Integrity (Clang, MSVC).
Return-Oriented Programming (ROP)
تشبيه يقرّب الفكرة
لو ممنوعين نألف جملة جديدة (NX)، بناخد كلمات من كتاب موجود (libc) ونعيد ترتيبها بطريقتنا. كل "كلمة" هي gadget بتنتهي بـ
ret، إحنا بنسلسلهم على الـ stack.ROP chain — open/read/write a file (concept)
# اكتشف الـ gadgets
ROPgadget --binary ./libc.so.6 | grep "pop rdi"
# 0x000023b6a : pop rdi ; ret
# 0x0000241c1 : pop rsi ; pop r15 ; ret
# 0x0000114b0 : ret
# ابنِ chain بـ pwntools
rop = ROP(libc)
rop.call('open', ['/flag', 0])
rop.call('read', [3, libc.bss(), 0x100])
rop.call('write', [1, libc.bss(), 0x100])
payload = b"A"*72 + rop.chain()التنويعات
- ret2libc — استدعاء system("/bin/sh") مباشرة.
- ret2dlresolve — بيحل الـ symbols ديناميكياً من غير ما تحتاج info leak.
- SROP (Sigreturn-Oriented) — استغلال signal frame.
- JOP (Jump-Oriented) — مش بيستخدم
ret. - COP (Call-Oriented) — مع indirect calls.
Format String — قوة كاملة من حرف واحد
C — vuln
printf(user_input); // ← غلطة شائعة جداً
// لو user_input = "%x %x %x %s"
// قيم من الـ stack بتطبع — تسريب canary, libc, retaddr- %x %s %p — تسريب.
- %n — كتابة (بيكتب عدد الحروف المطبوعة لعنوان من الـ args).
- أداة fmtstr_payload في pwntools بتجهز الـ payload أوتوماتيك.
Heap Exploitation — أعمق طبقة
الـ heap allocator (ptmalloc/glibc) بيدير قوائم الـ free chunks. لو لعبت في الـ metadata بتاعتها، بتحول الموضوع لـ arbitrary write.
تكنيكات معروفة
- Use-After-Free (UAF) — استخدام pointer بعد ما تعمل له
free. - Double Free —
free(p); free(p);. - Heap overflow — كتابة فوق الـ chunk اللي بعدها.
- Tcache poisoning (glibc 2.27+) — تلويث الـ singly-linked list.
- Fastbin attack, Unsorted Bin attack, House of * (Spirit, Force, Orange...).
- Safe-Linking bypass (glibc 2.32+).
UAF concept
Object* o = new Object(0x41);
delete o;
// p لا يزال يشير إلى نفس الذاكرة
Object* fake = new Object(0x42); // غالباً نفس chunk
o->method(); // ينفّذ على fake — type confusionللتعمق: how2heap repo (shellphish) — كل تكنيك ومعاه PoC شغّال.
Kernel exploitation — مقدمة
الانتقال من user-space للـ kernel = root كامل. التكنيكات الشائعة:
- UAF / heap overflow في الـ kernel objects.
- Race conditions (DirtyCOW, DirtyPipe).
- Type confusion في الـ ioctl / netlink.
- تخطي SMEP/SMAP/KASLR/KPTI.
- kROP جوه الـ kernel.
اتدرب على: kernelpop, kernel-exploitation labs في pwn.college.
Browser & Sandbox — أعقد جبهة
- JIT compilers (V8, JSCore, SpiderMonkey) — ثغرات type confusion.
- Renderer compromise وبعدها sandbox escape عن طريق IPC.
- سلاسل Pwn2Own: من 3 لـ 5 ثغرات عشان توصل من tab للـ kernel.
- للقراءة: Project Zero blog، Phrack، Microsoft Security Response.
إزاي تطور Exploit — المنهجية
1
Triage
شغّله، تابع الـ crash، حدد نوع الـ bug (read/write/exec primitive).
2
Primitive
حول الـ bug لـ read primitive و write primitive.
3
تخطي الحمايات
ASLR → leak. NX → ROP. Canary → leak أو overwrite جزئي.
4
اختطاف الـ control flow
RIP → gadget → shell.
5
موثوقية
جربه تحت ظروف مختلفة (load, ASLR, kernel versions).
6
Weaponize
خليه يشتغل من غير تفاعل (1-click → 0-click).
الأدوات
toolkit
# debugging
gdb + pwndbg / gef / peda
windbg + retsync (Windows)
lldb (macOS/iOS)
# analysis
Ghidra, IDA Pro, Binary Ninja, radare2/cutter
angr (symbolic execution)
afl++, libFuzzer, honggfuzz (fuzzing)
# exploitation
pwntools (Python)
ROPgadget, ropper, OneGadget
checksec
patchelf (لتعديل binary للتجارب)الحماية — اللي بيخلي الاستغلال أصعب
- اللغات اللي ذاكرتها آمنة: Rust, Go, Swift — بتمنع معظم الفئات من الأصل.
- Compiler flags:
-fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now -fPIE -pie. - ASLR كامل + Kernel ASLR + kernel KPTI.
- CFI (Clang's CFI، MS Control Flow Guard).
- Shadow stack (Intel CET).
- Sandboxing (seccomp-bpf, gVisor, Firejail).
- Memory tagging (ARM MTE).
- تنويع الـ heap (Scudo, hardened_malloc).
- استبدل C/C++ ببدائل آمنة في أي حاجة بتاكل user input.
مسار التعلم
- pwn.college — مجاني، شامل من الصفر لحد الـ kernel.
- ROP Emporium — تركيز على ROP.
- HackTheBox — قسم pwn.
- OpenSecurityTraining2 — كورسات عميقة.
- Phrack Magazine, Project Zero, Exploit-DB write-ups للقراءة الجادة.
- شهادة OSED (Offensive Security Exploit Developer) للسكة الاحترافية.
خلّصت الدرس؟
علّمه علشان تفضل عارف انت فين على السكة.