หัวข้อ 8 · 18 นาที
Native VLAN และ VLAN hopping
นึกภาพก่อน
ไปรษณีย์ภายในบริษัทใช้ซองสีบอกแผนก ยกเว้นแผนกหนึ่งที่ตกลงกันว่า "ซองที่ไม่มีสี = แผนกธุรการ" ถ้าสาขา A เข้าใจว่าซองไม่มีสีคือธุรการ แต่สาขา B เข้าใจว่าคือบัญชี จดหมายธุรการจะไปโผล่ที่บัญชี
และถ้ามีคนใส่ซองสองชั้น: ชั้นนอกไม่มีสี ชั้นในสีของแผนกผู้บริหาร สาขาแรกแกะชั้นนอกออกตามปกติ สาขาที่สองเห็นซองสีผู้บริหารก็ส่งให้
เรื่องแรกคือ Native VLAN mismatch เรื่องที่สองคือ double tagging
Native VLAN
- VLAN บน trunk ที่ frame ไม่ถูกใส่ tag (untagged)
- default คือ VLAN 1
- มีไว้เพื่อ backward compatibility กับอุปกรณ์ที่ไม่รู้จัก 802.1Q และใช้กับ control traffic เช่น CDP, PAgP, DTP
- frame ที่ไม่มี tag เมื่อมาถึง trunk จะถูกจัดเข้า Native VLAN ของฝั่งรับ
Native VLAN mismatch
สองฝั่งของ trunk ตั้ง Native VLAN ไม่ตรงกัน เช่น ฝั่งหนึ่ง 999 อีกฝั่ง 1:
- frame ของ VLAN 999 ออกจากฝั่งแรกแบบไม่มี tag → ฝั่งที่สองจัดเข้า VLAN 1
- traffic รั่วข้าม VLAN โดยไม่ผ่าน Layer 3
- CDP แจ้งเตือน — ตรวจด้วย
show cdp neighbors detail
Best practice
เปลี่ยน Native VLAN เป็น VLAN ที่ ไม่มีใครใช้ (เช่น 999) และตั้ง ให้ตรงกันทั้งสองฝั่ง:
interface gigabitEthernet 0/1
switchport mode trunk
switchport trunk native vlan 999
VLAN hopping
การโจมตีที่ทำให้ผู้โจมตีส่ง (หรือรับ) traffic ของ VLAN ที่ตัวเองไม่ได้อยู่ โดยไม่ผ่าน router มีสองวิธี
วิธีที่ 1: Switch spoofing
- พอร์ตของผู้โจมตียังอยู่ในโหมด Dynamic Auto หรือ Dynamic Desirable (ยอมเจรจา DTP)
- ผู้โจมตีส่ง DTP ทำตัวเป็น switch
- พอร์ตเจรจากลายเป็น trunk
- ผู้โจมตี เข้าถึงทุก VLAN บน trunk นั้น (ส่งและรับได้)
เครื่องมือ: yersinia บน Kali Linux
sudo yersinia -G
sudo yersinia dtp -attack 1 -interface eth0
วิธีที่ 2: Double tagging
- ผู้โจมตีอยู่บน access port ที่ VLAN ตรงกับ Native VLAN ของ trunk
- สร้าง frame ที่มี tag สองชั้น: outer = Native VLAN, inner = VLAN เป้าหมาย
- switch ตัวแรก เห็น outer tag เป็น Native VLAN → ลอกออก แล้วส่งบน trunk แบบ (เกือบ) ไม่มี tag — แต่ inner tag ยังอยู่
- switch ตัวที่สอง เห็น tag ที่เหลือ (inner) → ส่ง frame เข้า VLAN เป้าหมาย
ข้อจำกัด: ทำได้ทิศทางเดียว ผู้โจมตีส่งเข้าไปได้ แต่คำตอบจากเหยื่ออยู่ใน VLAN เป้าหมายและกลับมาไม่ถึงผู้โจมตี
- ผู้โจมตีVLAN 1
- SW1
- trunknative 1
- SW2
- เหยื่อVLAN 20
frame ณ จุดนี้
คำอธิบายทีละขั้น
Double tagging
ลองใน simulation: สลับ Native VLAN ระหว่าง 1 กับ 999 แล้วดูว่า outer tag ถูกลอกหรือไม่ นั่นคือจุดเดียวที่ตัดสินว่าการโจมตีสำเร็จ
เทียบสองวิธี
| Switch spoofing | Double tagging | |
|---|---|---|
| อาศัย | DTP บนพอร์ตที่ยังเป็น dynamic | Native VLAN ที่ผู้โจมตีอยู่ |
| ผล | เข้าถึง ทุก VLAN | ส่งเข้า VLAN เป้าหมาย ได้ |
| ทิศทาง | สองทาง | ทางเดียว |
| ป้องกัน | ปิด DTP | เปลี่ยน Native VLAN |
การป้องกัน
1. ปิด DTP บน access port
interface fastEthernet 0/1
switchport mode access
switchport nonegotiate
switchport mode access— บังคับเป็น access port ไม่เจรจาswitchport nonegotiate— หยุดส่ง DTP
2. Native VLAN hardening
interface gigabitEthernet 0/1
switchport trunk native vlan 999
switchport trunk allowed vlan remove 999
- เปลี่ยน Native VLAN เป็น VLAN ที่ ไม่มีพอร์ตของผู้ใช้ → ไม่มีใครอยู่ใน Native VLAN ให้ทำ double tagging
- เอา VLAN 999 ออกจากรายการที่ trunk ยอมให้ผ่าน
อีกทางคือบังคับใส่ tag ให้ Native VLAN ด้วย (จากไฟล์ Inter-VLAN Routing):
vlan dot1q tag native
ก่อนและหลัง
| จุด | ก่อน (เสี่ยง) | หลัง (ปลอดภัย) |
|---|---|---|
| พอร์ตผู้ใช้ | Dynamic Auto / Desirable | switchport mode access + nonegotiate |
| Native VLAN | VLAN 1 (มีผู้ใช้) | VLAN 999 (ไม่มีผู้ใช้) |
| VLAN บน trunk | ทุก VLAN | เฉพาะที่จำเป็น |
ติดตั้งหลาย switch
Topology ของ Lab Corp ในสไลด์: SW1 เป็น VTP server ส่วน SW2 และ SW3 เป็น client มี VLAN Sales 10, IT 20, HR 30 และ Native 999
ลำดับการตั้งค่า:
- Basic — ชื่อเครื่อง, รหัสผ่าน
- VTP — mode, domain, password
- Trunk / Native — ตั้ง trunk และ Native VLAN 999
- VLAN — สร้างบน server
- Access / PVLAN — กำหนดพอร์ตเข้า VLAN
- Verify
ทำ VTP และ trunk ก่อนสร้าง VLAN เพราะ VLAN database เดินทางผ่าน trunk: ถ้า trunk ยังไม่ขึ้น client ก็ไม่ได้รับ
| คำสั่งตรวจสอบ | ดูอะไร |
|---|---|
show vlan brief | VLAN และพอร์ตในแต่ละ VLAN |
show vtp status | mode, domain, revision |
show interfaces trunk | trunk ที่ขึ้น, Native VLAN, VLAN ที่อนุญาต |
show cdp neighbors detail | เพื่อนบ้าน และคำเตือน Native VLAN mismatch |
show interfaces status | สถานะและ VLAN ของทุกพอร์ต |
ตัวอย่างไล่ทีละขั้น
โจทย์: ผู้โจมตีอยู่บน access port VLAN 1 ของ SW1 trunk ระหว่าง SW1 กับ SW2 ใช้ Native VLAN 1 เหยื่ออยู่ VLAN 20 บน SW2 ผู้โจมตีส่ง frame ที่มี outer tag 1 และ inner tag 20 เกิดอะไรขึ้น แล้วถ้า Native VLAN เป็น 999 ล่ะ
Native VLAN = 1
- SW1 รับ frame: outer tag 1 ตรงกับ VLAN ของพอร์ต → ถือว่าเป็นของ VLAN 1
- ส่งออก trunk: VLAN 1 เป็น Native VLAN → ลอก outer tag → บน trunk เหลือ tag 20
- SW2 อ่าน tag: 20 → ส่งเข้า VLAN 20
- เหยื่อได้รับ frame — โจมตีสำเร็จ (แต่คำตอบกลับมาไม่ถึง)
Native VLAN = 999
- SW1 รับ frame เข้า VLAN 1
- ส่งออก trunk: VLAN 1 ไม่ใช่ Native VLAN → ส่งพร้อม tag 1 (outer ไม่ถูกลอก)
- SW2 อ่าน tag ชั้นนอก: 1 → ส่งเฉพาะใน VLAN 1 (inner tag เป็นแค่ข้อมูล)
- frame ไม่ถึง VLAN 20 — โจมตีล้มเหลว
จุดที่มักพลาด
1. คิดว่า Native VLAN คือ VLAN ที่ถูกเข้ารหัสหรือปลอดภัยกว่า
ตรงข้าม เป็น VLAN เดียวที่ ไม่มี tag และเป็นช่องโจมตี
2. คิดว่า double tagging ได้ผลทุกกรณี
ได้ผลเฉพาะเมื่อผู้โจมตีอยู่ใน VLAN เดียวกับ Native VLAN ของ trunk
3. คิดว่า double tagging รับคำตอบกลับได้
ทิศทางเดียว
4. สลับว่ามาตรการใดกันอะไร
switchport nonegotiate กัน switch spoofing · เปลี่ยน Native VLAN กัน double tagging
5. ตั้ง Native VLAN 999 ฝั่งเดียว
ต้องตั้ง ทั้งสองฝั่ง ไม่เช่นนั้นกลายเป็น mismatch
ที่มา: Vlan.pdf หน้า 20–22, 29–39 · มาตรฐานและเทคโนโลยีเครือข่าย (2).pdf หน้า 7