เมื่อระบบไว้วางใจผิดคน: ไขความลับของ Broken Access Control

เมื่อระบบไว้วางใจผิดคน: ไขความลับของ Broken Access Control

ลองจินตนาการว่าคุณกำลังใช้แอปพลิเคชันอะไรบางอย่าง แล้วเผลอไปเห็นข้อมูลของคนอื่นเข้า หรือเข้าถึงฟังก์ชันสำหรับผู้ดูแลระบบได้ทั้งที่คุณไม่ใช่! นี่ไม่ใช่เรื่องบังเอิญ แต่เป็นข้อบกพร่องด้านความปลอดภัยที่เรียกว่า Broken Access Control หรือการควบคุมการเข้าถึงที่ผิดพลาดนั่นเอง

ภัยเงียบนี้เกิดขึ้นเมื่อแอปพลิเคชันล้มเหลวในการตรวจสอบว่าใครมีสิทธิ์เข้าถึงอะไร ซึ่งเป็นช่องโหว่ร้ายแรงที่นักแฮกเกอร์มักใช้โจมตี

เข้าใจแก่นแท้ของ “การควบคุมการเข้าถึง”

ก่อนจะไปถึง Broken Access Control เรามาทำความเข้าใจพื้นฐานกันก่อน

ในโลกของแอปพลิเคชัน มีสองขั้นตอนสำคัญเกี่ยวกับตัวตนของผู้ใช้งาน:

หนึ่งคือ การยืนยันตัวตน (Authentication)

นี่คือกระบวนการพิสูจน์ว่าคุณคือใคร เช่น การล็อกอินด้วยชื่อผู้ใช้และรหัสผ่าน

อีกอย่างคือ การอนุญาตเข้าถึง (Authorization)

เมื่อระบบรู้แล้วว่าคุณคือใคร ขั้นตอนนี้จะตรวจสอบว่าคุณมีสิทธิ์ทำอะไรได้บ้าง เช่น ผู้ใช้ทั่วไปเข้าถึงหน้าโปรไฟล์ตัวเองได้ แต่เข้าถึงหน้าการตั้งค่าระบบไม่ได้

Broken Access Control คือความล้มเหลวในขั้นตอน การอนุญาตเข้าถึง นี่แหละ

เมื่อระบบไว้วางใจผิดคน: ภัยเงียบจาก Broken Access Control

เมื่อระบบตรวจสอบสิทธิ์ผิดพลาด หรือไม่มีการตรวจสอบเลย

มันจะอนุญาตให้ผู้ใช้งานเข้าถึงทรัพยากรหรือฟังก์ชันที่ไม่ควรได้

ทำให้ข้อมูลส่วนตัวรั่วไหล สร้างความเสียหายต่อระบบ หรือแม้แต่ควบคุมระบบได้เลยทีเดียว

ลองมาดูรูปแบบการโจมตีที่พบบ่อยๆ กัน

กลโกงที่นักแฮกเกอร์ใช้โจมตี

นักแฮกเกอร์ใช้หลากหลายวิธีในการหาประโยชน์จากข้อบกพร่องเหล่านี้:

Insecure Direct Object References (IDOR)

เป็นการที่ผู้โจมตีแก้ไขพารามิเตอร์ใน URL หรือคำขอ

เช่น เปลี่ยน user_id=123 เป็น user_id=456 เพื่อเข้าถึงข้อมูลของคนอื่น

ระบบที่ไม่มีการตรวจสอบที่เหมาะสม ก็จะแสดงข้อมูลของผู้ใช้งาน 456 ทันที

การยกระดับสิทธิ์ (Privilege Escalation)

อันนี้ร้ายแรงมาก

เกิดขึ้นเมื่อผู้ใช้งานสามารถยกระดับสิทธิ์ของตัวเองได้

อาจเป็นการยกระดับสิทธิ์แนวตั้ง (Vertical) เช่น ผู้ใช้ทั่วไปกลายเป็นผู้ดูแลระบบ

หรือยกระดับสิทธิ์แนวนอน (Horizontal) เช่น ผู้ใช้ A เข้าถึงข้อมูลของผู้ใช้ B ได้

การเข้าถึงฟังก์ชันลับ (Missing Function Level Access Control)

บางครั้ง ผู้โจมตีอาจพบ URL หรือฟังก์ชันที่ซ่อนไว้สำหรับผู้ดูแลระบบเท่านั้น

แล้วพยายามเรียกใช้งานโดยตรงโดยไม่ผ่านหน้าล็อกอินปกติ

หากไม่มีการตรวจสอบสิทธิ์ที่แข็งแกร่งบนฝั่งเซิร์ฟเวอร์ ก็อาจเข้าถึงได้สำเร็จ

การบุกรุกไดเรกทอรี (Directory Traversal)

เป็นการพยายามเข้าถึงไฟล์หรือไดเรกทอรีนอกเหนือจากที่แอปพลิเคชันควรอนุญาต

เช่น การใช้ ../../ ในพารามิเตอร์ เพื่อข้ามไปยังไดเรกทอรีรากและเข้าถึงไฟล์ระบบที่สำคัญ

การแก้ไขพารามิเตอร์ (Parameter Tampering)

แฮกเกอร์อาจแก้ไขค่าของพารามิเตอร์ที่ซ่อนอยู่ในฟอร์ม HTML หรือในคุกกี้

เพื่อหลอกแอปพลิเคชันให้ทำในสิ่งที่ไม่ได้ตั้งใจ

เช่น เปลี่ยนราคาของสินค้า หรือเปลี่ยนสถานะคำสั่งซื้อ

สร้างเกราะป้องกันให้แอปพลิเคชันของคุณ

การป้องกัน Broken Access Control ต้องอาศัยการออกแบบและการเขียนโค้ดที่รัดกุม

หัวใจสำคัญคือการตรวจสอบสิทธิ์ บนฝั่งเซิร์ฟเวอร์เสมอ ไม่ควรรอให้ฝั่งไคลเอนต์เป็นตัวตัดสินใจเรื่องความปลอดภัย

ควรใช้หลักการ “สิทธิ์ขั้นต่ำที่จำเป็น” (Principle of Least Privilege)

หมายถึงให้สิทธิ์แก่ผู้ใช้งานและระบบเท่าที่จำเป็นสำหรับการทำงานเท่านั้น

มีการจัดการเซสชันที่ปลอดภัย และมีการบันทึกการเข้าถึงเพื่อตรวจจับความผิดปกติ

การตรวจสอบความปลอดภัยอย่างสม่ำเสมอ เช่น การทดสอบเจาะระบบ (Penetration Testing) จะช่วยค้นหาช่องโหว่เหล่านี้ก่อนที่ผู้ไม่หวังดีจะเจอ

การดูแลระบบให้ปลอดภัยจาก Broken Access Control ไม่ใช่แค่เรื่องของนักพัฒนา

แต่เป็นสิ่งสำคัญที่ช่วยสร้างความไว้วางใจให้กับผู้ใช้งาน และปกป้องข้อมูลอันมีค่า

การละเลยข้อผิดพลาดเล็กๆ น้อยๆ นี้ อาจนำไปสู่ความเสียหายใหญ่หลวงที่คาดไม่ถึงได้เลยทีเดียว