IST · บทที่ 2 VLAN

หัวข้อ 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) และตั้ง ให้ตรงกันทั้งสองฝั่ง:

cisco
interface gigabitEthernet 0/1
 switchport mode trunk
 switchport trunk native vlan 999

VLAN hopping

การโจมตีที่ทำให้ผู้โจมตีส่ง (หรือรับ) traffic ของ VLAN ที่ตัวเองไม่ได้อยู่ โดยไม่ผ่าน router มีสองวิธี

วิธีที่ 1: Switch spoofing

  1. พอร์ตของผู้โจมตียังอยู่ในโหมด Dynamic Auto หรือ Dynamic Desirable (ยอมเจรจา DTP)
  2. ผู้โจมตีส่ง DTP ทำตัวเป็น switch
  3. พอร์ตเจรจากลายเป็น trunk
  4. ผู้โจมตี เข้าถึงทุก VLAN บน trunk นั้น (ส่งและรับได้)

เครื่องมือ: yersinia บน Kali Linux

bash
sudo yersinia -G
sudo yersinia dtp -attack 1 -interface eth0

วิธีที่ 2: Double tagging

  1. ผู้โจมตีอยู่บน access port ที่ VLAN ตรงกับ Native VLAN ของ trunk
  2. สร้าง frame ที่มี tag สองชั้น: outer = Native VLAN, inner = VLAN เป้าหมาย
  3. switch ตัวแรก เห็น outer tag เป็น Native VLAN → ลอกออก แล้วส่งบน trunk แบบ (เกือบ) ไม่มี tag — แต่ inner tag ยังอยู่
  4. switch ตัวที่สอง เห็น tag ที่เหลือ (inner) → ส่ง frame เข้า VLAN เป้าหมาย

ข้อจำกัด: ทำได้ทิศทางเดียว ผู้โจมตีส่งเข้าไปได้ แต่คำตอบจากเหยื่ออยู่ใน VLAN เป้าหมายและกลับมาไม่ถึงผู้โจมตี

ขั้นที่ 1 / 6เริ่มต้น
VLAN ของพอร์ตผู้โจมตี
Native VLAN ของ trunk
VLAN เป้าหมาย
vlan dot1q tag native
  1. ผู้โจมตีVLAN 1
  2. SW1
  3. trunknative 1
  4. SW2
  5. เหยื่อVLAN 20

frame ณ จุดนี้

DestSrcouter · VID 1inner · VID 20DataFCS
แดง = tag ของ VLAN เป้าหมายทำได้ทิศทางเดียว
1.0×

คำอธิบายทีละขั้น

Double tagging

ผู้โจมตีต่ออยู่กับ access port ของ SW1 และต้องการส่ง frame เข้า VLAN อื่นบน SW2 โดยไม่ผ่าน router วิธีนี้อาศัยพฤติกรรมของ Native VLAN บน trunk ที่ไม่ใส่ tag

ลองใน simulation: สลับ Native VLAN ระหว่าง 1 กับ 999 แล้วดูว่า outer tag ถูกลอกหรือไม่ นั่นคือจุดเดียวที่ตัดสินว่าการโจมตีสำเร็จ

เทียบสองวิธี

Switch spoofingDouble tagging
อาศัยDTP บนพอร์ตที่ยังเป็น dynamicNative VLAN ที่ผู้โจมตีอยู่
ผลเข้าถึง ทุก VLANส่งเข้า VLAN เป้าหมาย ได้
ทิศทางสองทางทางเดียว
ป้องกันปิด DTPเปลี่ยน Native VLAN

การป้องกัน

1. ปิด DTP บน access port

cisco
interface fastEthernet 0/1
 switchport mode access
 switchport nonegotiate
  • switchport mode access — บังคับเป็น access port ไม่เจรจา
  • switchport nonegotiate — หยุดส่ง DTP

2. Native VLAN hardening

cisco
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):

cisco
vlan dot1q tag native

ก่อนและหลัง

จุดก่อน (เสี่ยง)หลัง (ปลอดภัย)
พอร์ตผู้ใช้Dynamic Auto / Desirableswitchport mode access + nonegotiate
Native VLANVLAN 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

ลำดับการตั้งค่า:

  1. Basic — ชื่อเครื่อง, รหัสผ่าน
  2. VTP — mode, domain, password
  3. Trunk / Native — ตั้ง trunk และ Native VLAN 999
  4. VLAN — สร้างบน server
  5. Access / PVLAN — กำหนดพอร์ตเข้า VLAN
  6. Verify

ทำ VTP และ trunk ก่อนสร้าง VLAN เพราะ VLAN database เดินทางผ่าน trunk: ถ้า trunk ยังไม่ขึ้น client ก็ไม่ได้รับ

คำสั่งตรวจสอบดูอะไร
show vlan briefVLAN และพอร์ตในแต่ละ VLAN
show vtp statusmode, domain, revision
show interfaces trunktrunk ที่ขึ้น, 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

  1. SW1 รับ frame: outer tag 1 ตรงกับ VLAN ของพอร์ต → ถือว่าเป็นของ VLAN 1
  2. ส่งออก trunk: VLAN 1 เป็น Native VLAN → ลอก outer tag → บน trunk เหลือ tag 20
  3. SW2 อ่าน tag: 20 → ส่งเข้า VLAN 20
  4. เหยื่อได้รับ frame — โจมตีสำเร็จ (แต่คำตอบกลับมาไม่ถึง)

Native VLAN = 999

  1. SW1 รับ frame เข้า VLAN 1
  2. ส่งออก trunk: VLAN 1 ไม่ใช่ Native VLAN → ส่งพร้อม tag 1 (outer ไม่ถูกลอก)
  3. SW2 อ่าน tag ชั้นนอก: 1 → ส่งเฉพาะใน VLAN 1 (inner tag เป็นแค่ข้อมูล)
  4. 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