ICMPv6 คืออะไร? ทำไมจึงสำคัญ?
ICMPv6 (Internet Control Message Protocol version 6) เป็นโปรโตคอลหลักของ IPv6 ที่ทำหน้าที่จัดการข้อความควบคุมและรายงานข้อผิดพลาด แตกต่างจาก IPv4 ที่ ICMP เป็นเพียงเสริม ICMPv6 จำเป็นต่อการทำงานของ IPv6 รวมถึง:
- Neighbor Discovery Protocol (NDP) - แทน ARP (Address Resolution)
- Router Discovery - หา Default Gateway
- Path MTU Discovery - หาขนาดแพ็กเก็ตสูงสุด
- Multicast Listener Discovery (MLD) - จัดการ Multicast
คุณสมบัติความปลอดภัย built-in ของ ICMPv6
ICMPv6 มีกลไกป้องกันพื้นฐาน:
- Hop Limit = 255 ทุกแพ็กเก็ต ICMPv6 ต้องมี Hop Limit = 255 ต้องไม่ถูก Forward ผ่าน Router (ป้องกัน Spoofing จากภายนอก)
- Link-local Source Address หลายประเภทต้องใช้ Link-local Address เป็น Source
แต่ ไม่เพียงพอ ต้องมีการป้องกันเพิ่มเติม
ความเสี่ยงและการโจมตีผ่าน ICMPv6
1. Reconnaissance / Network Mapping
- Ping Sweep (ICMPv6 Echo Request) - สแกนหาโฮสต์ที่ใช้งานอยู่
- Router Solicitation/Advertisement - ระบุโครงสร้างเครือข่าย
- Neighbor Solicitation/Advertisement - ระบุอุปกรณ์ใน Link เดียวกัน
2. Man-in-the-Middle (MITM) / NDP Spoofing
- Router Advertisement (RA) Spoofing - โจมตีส่ง RA ปลอม → อุปกรณ์ส่งทราฟฟิกไปโจมตี (Rogue Router)
- Neighbor Advertisement (NA) Spoofing - ปลอม MAC Address → MITM / DoS
- Duplicate Address Detection (DAD) DoS - ส่ง NS ปลอม → อุปกรณ์ไม่ได้ IP
3. Denial of Service (DoS)
- ICMPv6 Flood - จมโฮสต์/เราเตอร์ด้วย Echo Request
- Fragmentation Attack - ส่ง Fragment มากจน Buffer เต็ม
- RA Flood - จมเครือข่ายด้วย RA ปลอม
4. Path MTU Discovery Blackhole
หากบล็อก ICMPv6 Packet Too Big (Type 2) → PMTUD ล้มเหลว → แพ็กเก็ตใหญ่ส่งไม่ถึง → Retry Loop → Performance Down
IPv6 Security: IPsec และ SEND
IPsec ใน IPv6
- IPv6 รองรับ IPsec แบบ Mandatory (แต่ไม่ได้ Enforce ให้ใช้)
- สอง Header: Authentication Header (AH) - ความสมบูรณ์/ต้นทาง, Encapsulating Security Payload (ESP) - เข้ารหัส
- ใช้ได้ทั้ง Transport Mode และ Tunnel Mode
Secure Neighbor Discovery (SEND - RFC 3971)
- ใช้ Cryptographically Generated Addresses (CGA) ยืนยันตัวตนเจ้าของ Address
- ใช้ RSA Key Pairs ลงนามข้อความ NDP
- ป้องกัน NDP Spoofing (RA/NA Spoofing) ได้จริง
- แต่ การนำไปใช้งานน้อยมาก (Complex, Performance, Key Management)
แนวทางป้องกันและ Best Practices
ระดับ Network (Router/Firewall)
- RA Guard - บล็อก RA จากพอร์ตที่ไม่ใช่ Router (Cisco:
ipv6 nd raguard) - ND Inspection / Snooping - Validate NS/NA, Binding Table (Cisco:
ipv6 nd inspection) - DHCPv6 Guard - ป้องกัน Rogue DHCPv6 Server
- Source Guard - ตรวจ Source Address ตรง Binding
- จำกัด Rate ICMPv6 (Rate Limiting) ป้องกัน Flood
- บล็อก ICMPv6 ที่ไม่จำเป็นที่ Edge (แต่ อย่าบล็อกทั้งหมด - ต้องปล่อย Packet Too Big, Parameter Problem, Echo Reply)
ระดับ Host/OS
- ปิด IPv6 หากไม่ใช้ (แต่ Windows/Linux ใหม่ ๆ ใช้ IPv6 ภายในระบบ)
- ใช้ Firewall Host-based (Windows Firewall, nftables, pf) กรอง ICMPv6
- Enable SEND หากรองรับ (Linux:
ndisc6, Windows: จำกัด) - อัปเดต OS/Kernel เป็นประจำ (Patch NDP Vulnerabilities)
การจัดการ ICMPv6 ที่ควรอนุญาต (Minimum)
| Type | Code | คำอธิบาย | ทิศทาง |
|---|---|---|---|
| 1 | 0 | Destination Unreachable | In/Out |
| 2 | 0 | Packet Too Big (สำคัญสำหรับ PMTUD) | In |
| 3 | 0 | Time Exceeded | In |
| 4 | 0-1 | Parameter Problem | In/Out |
| 128 | 0 | Echo Request (Ping) | Out (In: จำกัด Rate) |
| 129 | 0 | Echo Reply | In |
| 133-136 | - | NDP (RS, RA, NS, NA) | Link-local only |
IPv6 ปลอดภัยกว่า IPv4 หรือไม่?
ไม่ได้แน่ชัด - IPv6 มี IPsec mandatory แต่ไม่ได้บังคับใช้ SEND ยากต่อการปรับใช้ NAT ไม่ใช่ Security Feature (IPv6 ไม่ต้อง NAT แต่ต้องใช้ Firewall Stateful) โจมตีใหม่เฉพาะ IPv6 (NDP Spoofing, RA Flood, Fragmentation) 出现了 結論: IPv6 ต้อง Hardening เหมือน IPv4 ไม่ได้ปลอดภัยด้วยตัวเอง
ควรปิด IPv6 เพื่อความปลอดภัยหรือไม่?
ไม่แนะนำ - Windows/Linux ใช้ IPv6 ภายใน (Loopback, Teredo, ISATAP) การปิดสนิทอาจทำให้บริการล้มเหลว ควร: จัดการ Firewall IPv6 ให้ถูกต้อง, ใช้ RA Guard/ND Inspection, Monitor IPv6 Traffic