802.1X และ NAC คืออะไร เสียบสาย LAN แล้วเกิดอะไรขึ้นบ้าง
802.1X ให้ switch ปิด port จนกว่า RADIUS server จะยืนยันตัวตนเครื่องได้ ไล่ EAPOL และ RADIUS ทีละ packet เทียบ EAP-TLS กับ PEAP พร้อม MAB และ posture
ปานกลาง11 นาทีในการอ่าน
SUPPLICANT AUTHENTICATOR AUTH SERVER EAPOL RADIUS udp/1812 ┌────────┐ ┌──────────────┐ ┌────────────┐ │ laptop │ │ switch │ │ RADIUS ● │ │ │─────────────│ EAPOL only │───────────│ │ │ client │ │ unauthorized │ │ │ └────────┘ └──────────────┘ └────────────┘ link up: port starts unauthorized, only EAPOL may pass
ในบทความนี้
- 802.1X คืออะไร
- 802.1X มีอุปกรณ์กี่ฝ่าย และแต่ละฝ่ายทำอะไร
- เสียบสาย LAN แล้วเกิดอะไรขึ้นบ้าง
- EAP-TLS กับ PEAP ต่างกันอย่างไร
- อุปกรณ์ที่ไม่มี supplicant เช่นเครื่องพิมพ์ เข้าเครือข่ายได้อย่างไร
- NAC คืออะไร และต่างจาก 802.1X อย่างไร
- ถ้า RADIUS server ล่ม เครื่องจะเข้าเครือข่ายได้หรือไม่
- เริ่มเปิด 802.1X ควรเช็กอะไรบ้าง
ตอบสั้น ๆ ก่อนครับ 802.1X คือมาตรฐานของ IEEE ที่ทำให้ switch หรือ access point ไม่ส่ง traffic ปกติของเครื่องที่เพิ่งต่อเข้ามา จนกว่าเครื่องนั้นจะยืนยันตัวตนกับ authentication server (ส่วนใหญ่คือ RADIUS server) ได้ ส่วน NAC (Network Access Control) คือระบบที่ใช้ผลการยืนยันตัวตนนั้น ร่วมกับข้อมูลอื่นของเครื่อง เช่น สถานะ patch หรือ antivirus มาตัดสินว่าเครื่องควรได้สิทธิ์แค่ไหน
802.1X จึงเป็นกลไกที่ port ใช้เปิดหรือปิด ส่วน NAC เป็นนโยบายที่บอกว่าเปิดให้ใคร เปิดแค่ไหน และเมื่อไรควรเปลี่ยนสิทธิ์ บทความนี้จะไล่ทีละ packet ตั้งแต่เสียบสาย LAN จนถึงตอนที่ port เปิดครับ
SUPPLICANT AUTHENTICATOR AUTH SERVER EAPOL RADIUS udp/1812 ┌────────┐ ┌──────────────┐ ┌────────────┐ │ laptop │ │ switch │ │ RADIUS ● │ │ │─────────────│ EAPOL only │───────────│ │ │ client │ │ unauthorized │ │ │ └────────┘ └──────────────┘ └────────────┘ link up: port starts unauthorized, only EAPOL may pass
802.1X คืออะไร
802.1X คือมาตรฐาน IEEE ชื่อเต็ม Port-Based Network Access Control ฉบับที่ใช้อยู่คือ IEEE 802.1X-2020 ซึ่งอนุมัติเมื่อ 30 มกราคม 2563 และเผยแพร่ 28 กุมภาพันธ์ 2563 IEEE สรุปขอบเขตไว้ว่าเป็นการให้ผู้ดูแลเครือข่ายจำกัดการใช้ port ของ LAN ให้เฉพาะอุปกรณ์ที่ผ่านการยืนยันตัวตนและได้รับอนุญาตแล้ว
ตัว 802.1X ไม่ได้กำหนดวิธีพิสูจน์ตัวตนเอง มันใช้ EAP (Extensible Authentication Protocol) ตาม RFC 3748 ซึ่งเป็น framework ที่รองรับวิธียืนยันตัวตนได้หลายแบบ และวิ่งบน data link layer ได้โดยไม่ต้องมี IP ข้อนี้สำคัญ เพราะตอนที่เครื่องเพิ่งเสียบสาย มันยังไม่มี IP address เลย EAP ที่ห่อมาใน Ethernet frame ระหว่างเครื่องกับ switch เรียกว่า EAPOL (EAP over LAN)
802.1X มีอุปกรณ์กี่ฝ่าย และแต่ละฝ่ายทำอะไร
มีสามฝ่ายครับ RFC 3748 นิยามไว้ดังนี้ (หัวข้อ 1.2)
| ฝ่าย | ใน 802.1X เรียกว่า | ตัวอย่าง | หน้าที่ |
|---|---|---|---|
| Peer | Supplicant | laptop, IP phone | ตอบคำขอ EAP และพิสูจน์ตัวตน |
| Authenticator | Authenticator | access switch, wireless AP | เริ่มขอให้ยืนยันตัวตน ส่ง EAP ต่อ และเปิดหรือปิด port |
| Backend authentication server | Authentication server | RADIUS server หรือ NAC server ที่พูด RADIUS | ตรวจ credential และตอบว่าให้เข้าหรือไม่ |
จุดที่ควรเข้าใจคือ switch ส่วนใหญ่ทำงานแบบ pass-through คือไม่ได้ตรวจ credential เอง แค่ส่ง EAP ไปมาระหว่างเครื่องกับ server RFC 3748 เขียนว่าข้อดีของแบบนี้คือ switch หรือ access point ไม่ต้องเข้าใจ authentication method ทุกแบบ และเมื่อทำงานแบบ pass-through แล้ว authenticator ต้องตัดสินผลจาก Accept/Reject ที่ server ส่งมาเท่านั้น (หัวข้อ 2.3) อยากเปลี่ยนจาก PEAP เป็น EAP-TLS ก็เปลี่ยนที่ server กับเครื่องลูกข่าย ไม่ต้องแตะ switch
เสียบสาย LAN แล้วเกิดอะไรขึ้นบ้าง
สรุปคือ port เริ่มที่สถานะ unauthorized แลก EAP กันหลายรอบผ่าน switch ไปถึง RADIUS server แล้ว port จะเปิดเมื่อ server ตอบ Access-Accept ลองไล่ทีละขั้นบน access switch ที่เปิด 802.1X ไว้ครับ (ตัวอย่างใช้คำสั่งและพฤติกรรมของ Cisco Catalyst ตาม คู่มือ IOS XE 17.9 ยี่ห้ออื่นใช้ชื่อคำสั่งต่างกันแต่ลำดับ protocol เหมือนกัน)
ขั้นที่ 1: link up และ port ยังไม่เปิด
เมื่อตั้ง port เป็น authentication port-control auto port จะเริ่มที่สถานะ unauthorized และให้ผ่านได้แค่ EAPOL frame DHCP, ARP และ traffic อื่นของเครื่องจะถูกทิ้ง ค่าเริ่มต้นของ port บน Catalyst คือ force-authorized ซึ่งแปลว่าไม่ยืนยันตัวตนเลย ถ้าลืมตั้ง port ไหน port นั้นก็เปิดตามปกติ
ขั้นที่ 2: switch ถามว่าเป็นใคร
เมื่อ link ขึ้น switch ส่ง EAP-Request/Identity ไปที่เครื่อง เครื่องตอบด้วย EAP-Response/Identity ถ้าเครื่องบูตเสร็จแล้วยังไม่ได้รับคำถามนี้ เครื่องจะส่ง EAPOL-Start เพื่อให้ switch เริ่มถามตัวตน
EAP packet มี Code สี่ค่า คือ 1 Request, 2 Response, 3 Success และ 4 Failure (RFC 3748 หัวข้อ 2.2) และ EAP เป็น protocol แบบ lock-step ที่มี packet ค้างอยู่ได้ทีละหนึ่งตัว authenticator จะส่ง Request ถัดไปไม่ได้จนกว่าจะได้ Response ที่ถูกต้อง
ขั้นที่ 3: switch ห่อ EAP ใส่ RADIUS
switch นำ EAP-Response ที่ได้ไปใส่ใน attribute ชื่อ EAP-Message แล้วส่งให้ RADIUS server ใน Access-Request (RFC 3579) EAP-Message คือ attribute หมายเลข 79 และทุก RADIUS packet ที่มี EAP-Message ต้องมี Message-Authenticator (หมายเลข 80) ด้วย เพื่อป้องกันการปลอม packet RADIUS ใช้ UDP port 1812 และ switch กับ server ยืนยันกันด้วย shared secret ที่ไม่ถูกส่งข้ามเครือข่าย
RFC 3580 กำหนดเพิ่มว่าใน 802.1X ให้ใส่ MAC address ของเครื่องไว้ใน Calling-Station-Id เป็นตัวพิมพ์ใหญ่คั่นด้วยขีด เช่น 00-10-A4-23-19-C0 ใน log ของ RADIUS server ค่านี้คือสิ่งที่ใช้ค้นว่าเครื่องไหนต่อเข้ามาที่ port ไหน
ขั้นที่ 4: server ถามกลับ และแลกกันหลายรอบ
ถ้า server จะยืนยันตัวตนด้วย EAP มันต้องตอบด้วย Access-Challenge ที่มี EAP-Message switch แกะ EAP ข้างในออกมาส่งเป็น EAPOL ให้เครื่อง เครื่องตอบ switch ห่อกลับเป็น Access-Request แบบนี้ไปเรื่อย ๆ method ที่ส่ง certificate ต้องแตก packet เป็นหลายชิ้น RFC 3748 ยกตัวอย่างว่า certificate chain ขนาด 14,960 octet ต้องใช้สิบรอบเมื่อ EAP MTU คือ 1,496 octet
ขั้นที่ 5: Access-Accept และ port เปิด
เมื่อ server ตอบ Access-Accept switch ส่ง EAP-Success ให้เครื่อง และ port เปลี่ยนเป็น authorized ให้ traffic ของเครื่องนั้นผ่านได้ตามปกติ ถ้าได้ Access-Reject switch ต้องไม่ให้เครื่องเข้าเครือข่าย
Access-Accept ไม่ได้บอกแค่ว่าผ่าน มันส่งสิทธิ์มาด้วย ตัวอย่างที่ใช้บ่อยคือกำหนด VLAN ด้วย attribute สามตัวตาม RFC 3580
Tunnel-Type = VLAN (13)
Tunnel-Medium-Type = 802
Tunnel-Private-Group-ID = "20"
VLAN ID เป็นค่า 1 ถึง 4094 แต่ส่งเป็น string ใน Tunnel-Private-Group-ID
ขั้นที่ 6: ยืนยันตัวตนซ้ำ หรือปิด session
port กลับเป็น unauthorized เมื่อ link down หรือได้รับ EAPOL-Logoff และถ้าเปิด reauthentication ไว้ server กำหนดรอบได้ด้วย Session-Timeout (attribute 27) กับ Termination-Action (attribute 29) ถ้า Termination-Action เป็น RADIUS-Request session จะไม่หลุดระหว่างยืนยันซ้ำ
EAP-TLS กับ PEAP ต่างกันอย่างไร
ต่างกันที่ฝั่งเครื่องลูกข่ายพิสูจน์ตัวตนด้วยอะไรครับ EAP-TLS ใช้ certificate ทั้งสองฝั่ง ส่วน PEAP ใช้ certificate แค่ฝั่ง server เพื่อสร้าง TLS tunnel แล้วให้เครื่องลูกข่ายยืนยันตัวตนด้วย password หรือ method อื่นข้างใน tunnel
EAP-TLS (RFC 5216 มีนาคม 2551) ใช้ TLS ทำ mutual authentication ด้วย certificate และสร้าง key ใน flow ของ RFC server ส่ง certificate ของตัวเองพร้อม certificate_request และเครื่องลูกข่ายตอบด้วย certificate ของตัวเองกับ certificate_verify EAP Type ของ EAP-TLS คือ 13 ต่อมา RFC 9190 (กุมภาพันธ์ 2565) กำหนดการใช้กับ TLS 1.3 ซึ่งมี forward secrecy เสมอ ไม่เปิดเผยตัวตนของเครื่องลูกข่าย และบังคับตรวจ revocation
PEAP (Type 25 หรือ 0x19) เป็น method ที่ Microsoft กำหนด spec ไว้ใน MS-PEAP มีสองช่วง ช่วงแรกยืนยันตัวตนของ PEAP server และสร้าง TLS session ช่วงที่สองเริ่ม EAP รอบใหม่ข้างใน TLS เพื่อยืนยันตัวตนเครื่องลูกข่าย inner method ที่ใช้บ่อยคือ EAP-MSCHAPv2 Microsoft เขียนเหตุผลไว้ตรง ๆ ว่า PEAP มีไว้สำหรับองค์กรที่ไม่อยากแบกต้นทุนของ PKI ฝั่ง client
| EAP-TLS | PEAP (inner EAP-MSCHAPv2) | |
|---|---|---|
| เครื่องลูกข่ายพิสูจน์ตัวตนด้วย | certificate + private key | username + password ใน TLS tunnel |
| certificate ที่ต้องมี | server และทุกเครื่องลูกข่าย | server เท่านั้น |
| สิ่งที่ต้องดูแล | ออก ต่ออายุ และ revoke certificate ของเครื่อง | password policy และการตั้งค่า client ให้ตรวจ certificate ของ server |
ความเห็นของผมคือ จุดที่ PEAP พลาดบ่อยไม่ได้อยู่ที่ protocol แต่อยู่ที่การตั้งค่าฝั่ง client ช่วงแรกของ PEAP มีไว้ยืนยันว่า server เป็นตัวจริง ถ้า supplicant ไม่ได้ตั้งให้ตรวจ certificate ของ server กับ CA ที่ถูกต้องและชื่อ server ที่คาดไว้ ช่วงแรกก็ไม่ได้ยืนยันอะไร และช่วงที่สองซึ่งใช้ credential ของผู้ใช้ก็จะไปคุยกับ server ตัวไหนก็ได้ที่ตอบกลับมา ถ้าเลือก PEAP ควรบังคับการตั้งค่านี้ผ่าน policy ของเครื่อง ไม่ปล่อยให้ผู้ใช้กดยอมรับ certificate เองครับ
อุปกรณ์ที่ไม่มี supplicant เช่นเครื่องพิมพ์ เข้าเครือข่ายได้อย่างไร
ใช้ MAB (MAC Authentication Bypass) ครับ คือให้ switch ใช้ MAC address ของเครื่องเป็นตัวตนแทน
ลำดับบน Catalyst คือ ถ้า 802.1X หมดเวลารอ EAPOL แล้วเปิด MAB ไว้ switch จะรอ Ethernet packet แรกจากเครื่อง เอา MAC address ใน packet นั้นเป็นตัวตน แล้วส่งใน Access-Request ไปที่ RADIUS server ถ้าระหว่างนั้นเห็น EAPOL switch จะหยุด MAB แล้วกลับไปทำ 802.1X
MAB Deployment Guide ของ Cisco ให้รายละเอียดที่ควรรู้สามเรื่อง
- ช้า: เวลารอก่อนเริ่ม MAB คือ
(max-reauth-req + 1) × tx-periodค่าเริ่มต้นของ Catalyst คือ tx-period 30 วินาที และ max-reauth-req 2 จึงรอ 90 วินาที อุปกรณ์ที่บูตผ่าน PXE หรือขอ DHCP เร็ว ๆ อาจ timeout ไปก่อน - ไม่แข็งแรง: guide เขียนว่า MAB ไม่ใช่วิธียืนยันตัวตนที่แข็งแรง และถูกเลี่ยงได้ด้วยการปลอม MAC address ของเครื่องที่ได้รับอนุญาต
- ต้องแยก request ให้ออก: MAB ส่ง Access-Request แบบ PAP โดยใช้ MAC เป็นทั้ง username และ password และ Catalyst ตั้ง Service-Type (attribute 6) เป็น 10 (Call-Check) RADIUS server ควรใช้ค่านี้แยก MAB ออกจาก login ปกติ ไม่อย่างนั้นใครพิมพ์ MAC address เป็น username และ password ก็อาจผ่านได้
เพราะ MAB ปลอมได้ง่าย สิทธิ์ที่ให้กับเครื่องที่ผ่าน MAB ควรแคบที่สุด
NAC คืออะไร และต่างจาก 802.1X อย่างไร
NAC คือการตัดสินสิทธิ์เข้าเครือข่ายจากหลายข้อมูลรวมกัน ไม่ใช่แค่ตัวตน ส่วน 802.1X เป็นแค่ช่องทางหนึ่งที่ NAC ใช้รับข้อมูลตัวตนและสั่งเปิดหรือปิด port
ข้อมูลที่ NAC ใช้เพิ่มจากตัวตนเรียกว่า posture IETF อธิบายไว้ใน RFC 5209 (มิถุนายน 2551) ซึ่งเป็นเอกสารของงาน NEA (Network Endpoint Assessment) ว่าเป็นการประเมินสถานะของเครื่องตอนขอเข้าเครือข่ายหรือระหว่างที่ต่ออยู่ เพื่อหาเครื่องที่ขาดหรือใช้ระบบป้องกันที่ล้าสมัย เช่น antivirus และ host-based firewall หรือขาด security patch สำคัญ ตัวอย่าง posture attribute ที่ RFC ยกคือเวอร์ชันของ operating system ที่ติดตั้งอยู่
ลำดับที่ใช้กันทั่วไปคือ
- เครื่องผ่าน 802.1X และได้สิทธิ์แบบจำกัดก่อน เช่น ไปได้แค่ server ที่ใช้ตรวจ posture และ server ที่ใช้แก้ไข
- agent บนเครื่องรายงาน posture ให้ NAC server
- NAC server ตัดสินว่าเครื่องผ่านเงื่อนไขหรือไม่
- NAC server สั่ง switch ให้เปลี่ยนสิทธิ์ของ session ที่มีอยู่ด้วย RADIUS CoA (Change of Authorization)
CoA กำหนดไว้ใน RFC 5176 ซึ่งเปลี่ยนทิศทางปกติของ RADIUS คือให้ server เป็นฝ่ายส่ง request ไปที่ switch ผ่าน UDP port 3799 CoA-Request ใช้เปลี่ยนสิทธิ์ของ session เช่น ส่ง Filter-ID ใหม่ ส่วน Disconnect-Request ใช้ตัด session สำหรับ Catalyst นั้น CoA สั่งได้สี่แบบ คือ reauthenticate, terminate, port shutdown และ port bounce
posture มีข้อจำกัดที่ควรรู้สองข้อ ข้อแรก RFC 5209 บอกเองว่าเครื่องที่ถูกมองว่าผ่านเงื่อนไขก็ยังอาจมีช่องโหว่ต่อภัยในเครือข่ายได้ ข้อสอง ระบบต้องเชื่อว่าเครื่องรายงานตามจริง RFC เดียวกันระบุว่า NEA ไม่ได้กำหนดวิธีตรวจจับเครื่องที่โกหกเรื่อง posture ของตัวเอง และอุปกรณ์บางชนิด เช่น เครื่องพิมพ์ อาจรัน NEA client ไม่ได้เลย
ถ้า RADIUS server ล่ม เครื่องจะเข้าเครือข่ายได้หรือไม่
ขึ้นกับการตั้งค่าครับ ถ้าไม่ได้ตั้งอะไรไว้ เครื่องที่ต้องยืนยันตัวตนใหม่จะเข้าไม่ได้ เพราะ port อยู่ที่ unauthorized
Catalyst มีตัวเลือกที่ชื่อ inaccessible authentication bypass (หรือ critical authentication) ถ้า RADIUS server ติดต่อไม่ได้ switch จะให้เครื่องเข้าเครือข่ายโดยใส่ port ไว้ในสถานะ critical-authentication ใน VLAN ที่กำหนดไว้ คู่มือเดียวกันยังแยกอีกสองกรณีที่มักตั้งคู่กัน คือ guest VLAN สำหรับเครื่องที่ไม่ตอบ 802.1X และ restricted VLAN สำหรับเครื่องที่ตอบแต่ยืนยันตัวตนไม่ผ่าน
ข้อนี้เป็นการเลือกระหว่างให้ใช้งานต่อได้กับความเข้มงวด ไม่มีคำตอบเดียว ที่ควรทำคือเลือกให้ชัดก่อนเปิดใช้จริง และมี RADIUS server มากกว่าหนึ่งตัวครับ
เริ่มเปิด 802.1X ควรเช็กอะไรบ้าง
รายการนี้เป็นสิ่งที่ผมจะเช็กก่อนเปิด 802.1X บน access switch โดยอิงจากพฤติกรรมที่อธิบายไว้ข้างบน
- รู้ว่าทุก port เป็น
force-authorizedอยู่ก่อน และ port ไหนบ้างที่จะเปลี่ยนเป็นauto - มีรายการอุปกรณ์ที่ไม่มี supplicant (เครื่องพิมพ์ กล้อง เครื่องสแกน) และแผนว่าจะใช้ MAB กับอะไร
- RADIUS server แยก MAB ออกจาก login ปกติด้วย Service-Type และให้สิทธิ์ MAB แคบ
- เลือก EAP method แล้ว ถ้าเป็น PEAP มี policy บังคับให้ client ตรวจ certificate ของ server
- ตั้ง timer (
tx-period,max-reauth-req) ให้เหมาะกับอุปกรณ์ที่บูตเร็ว - ตัดสินใจเรื่อง guest VLAN, restricted VLAN และ critical authentication ไว้ล่วงหน้า
- มี RADIUS server สำรอง และ shared secret ที่ไม่ซ้ำกันระหว่างอุปกรณ์
- ค้น log ด้วย Calling-Station-Id ได้ เวลาผู้ใช้แจ้งว่าเข้าเครือข่ายไม่ได้
แหล่งอ้างอิง
- IEEE 802.1X-2020: Port-Based Network Access Control
- RFC 3748: Extensible Authentication Protocol (EAP)
- RFC 2865: Remote Authentication Dial In User Service (RADIUS)
- RFC 3579: RADIUS Support For EAP
- RFC 3580: IEEE 802.1X RADIUS Usage Guidelines
- RFC 5216: The EAP-TLS Authentication Protocol
- RFC 9190: EAP-TLS 1.3
- RFC 9427: TLS-Based EAP Types for Use with TLS 1.3
- Microsoft MS-PEAP: Overview
- RFC 5209: Network Endpoint Assessment (NEA) Requirements
- RFC 5176: Dynamic Authorization Extensions to RADIUS
- Cisco: Configuring IEEE 802.1x Port-Based Authentication (Catalyst 9300, IOS XE 17.9.x)
- Cisco: MAC Authentication Bypass Deployment Guide
อ่านต่อ
บทความที่เกี่ยวข้อง
ความปลอดภัยเครือข่าย
CVSS EPSS และ KEV ต่างกันอย่างไร ช่องโหว่ไหนควรแพตช์ก่อน
CVSS วัดความรุนแรง EPSS ประเมินโอกาสถูกโจมตีใน 30 วัน KEV ยืนยันว่าถูกโจมตีจริง บทความนี้แก้ความเชื่อผิดหกข้อ พร้อมลำดับ triage สำหรับ firewall และ VPN gateway
ขั้นสูง10 นาที
- Vulnerability Management
- CVSS
- EPSS
- KEV
- SSVC
- Patching
ความปลอดภัยเครือข่าย
MITRE ATT&CK คืออะไร อ่าน Matrix และใช้งานฝั่งป้องกันอย่างไร
อธิบาย MITRE ATT&CK สำหรับมือใหม่ ตั้งแต่ Tactic, Technique, Procedure วิธีอ่านหน้า Technique การระบายสีด้วย Navigator และการเชื่อมกับ D3FEND
เริ่มต้น9 นาที
- MITRE ATT&CK
- D3FEND
- Detection engineering
- Threat intelligence
- SOC
ความปลอดภัยเครือข่าย
Prompt Injection คืออะไร ทำไมข้อความที่ซ่อนในอีเมลถึงสั่ง LLM ได้
ทดลองกับ email assistant จำลองทีละขั้น ดูว่าคำสั่งที่ซ่อนในอีเมลยึดการทำงานของ LLM อย่างไร และ control จาก OWASP LLM01, NIST, ATLAS ที่ช่วยจำกัดความเสียหาย
ปานกลาง11 นาที
- Prompt injection
- OWASP LLM Top 10
- AI security
- NIST AI 100-2
- MITRE ATLAS
- LLM agents