FixVibe
Covered by FixVibecritical

การแทรก SQL: การป้องกันการเข้าถึงฐานข้อมูลโดยไม่ได้รับอนุญาต

การแทรก SQL (SQLi) เป็นช่องโหว่ร้ายแรงที่ผู้โจมตีแทรกแซงการสืบค้นฐานข้อมูลของแอปพลิเคชัน ด้วยการแทรกไวยากรณ์ SQL ที่เป็นอันตราย ผู้โจมตีสามารถเลี่ยงผ่านการตรวจสอบสิทธิ์ ดูข้อมูลที่ละเอียดอ่อน เช่น รหัสผ่านและรายละเอียดบัตรเครดิต หรือแม้แต่โจมตีเซิร์ฟเวอร์ที่ซ่อนอยู่ได้

CWE-89

ผลกระทบของการฉีด SQL

การแทรก SQL (SQLi) ช่วยให้ผู้โจมตีสามารถแทรกแซงการสืบค้นที่แอปพลิเคชันทำกับฐานข้อมูล ZXCVFIXVIBTOKEN0ZXCV ผลกระทบหลัก ได้แก่ การเข้าถึงข้อมูลที่ละเอียดอ่อนโดยไม่ได้รับอนุญาต เช่น รหัสผ่านผู้ใช้ รายละเอียดบัตรเครดิต และข้อมูลส่วนบุคคล [S1]

นอกเหนือจากการขโมยข้อมูลแล้ว ผู้โจมตียังสามารถแก้ไขหรือลบบันทึกฐานข้อมูลได้ ซึ่งนำไปสู่การเปลี่ยนแปลงพฤติกรรมของแอปพลิเคชันอย่างต่อเนื่องหรือการสูญเสียข้อมูล [S1] ในกรณีที่มีความรุนแรงสูง SQLi สามารถยกระดับเพื่อประนีประนอมโครงสร้างพื้นฐานแบ็คเอนด์ เปิดใช้งานการโจมตีแบบปฏิเสธการให้บริการ หรือจัดให้มีแบ็คดอร์ถาวรเข้าสู่ระบบขององค์กร ZXCVFIXVIBTOKEN1ZXCV[S2]

สาเหตุหลัก: การจัดการอินพุตที่ไม่ปลอดภัย

สาเหตุหลักของการฉีด SQL คือการวางตัวเป็นกลางที่ไม่เหมาะสมขององค์ประกอบพิเศษที่ใช้ในคำสั่ง SQL [S2] สิ่งนี้เกิดขึ้นเมื่อแอปพลิเคชันสร้างแบบสอบถาม SQL โดยเชื่อมต่ออินพุตที่ได้รับอิทธิพลจากภายนอกเข้ากับสตริงแบบสอบถามโดยตรง [S1][S2]

เนื่องจากอินพุตไม่ได้ถูกแยกออกจากโครงสร้างแบบสอบถามอย่างเหมาะสม ล่ามฐานข้อมูลอาจดำเนินการบางส่วนของอินพุตของผู้ใช้เป็นโค้ด SQL แทนที่จะถือว่าเป็นข้อมูลตามตัวอักษร [S2] ช่องโหว่นี้สามารถแสดงออกมาในส่วนต่างๆ ของการสืบค้น รวมถึงคำสั่ง SELECT, ค่า INSERT หรือคำสั่ง UPDATE [S1]

การแก้ไขและการบรรเทาผลกระทบอย่างเป็นรูปธรรม

ใช้แบบสอบถามแบบกำหนดพารามิเตอร์

วิธีที่มีประสิทธิภาพมากที่สุดในการป้องกันการแทรก SQL คือการใช้เคียวรีแบบกำหนดพารามิเตอร์ หรือที่เรียกว่าคำสั่งที่เตรียมไว้ [S1] แทนที่จะเชื่อมสตริงเข้าด้วยกัน นักพัฒนาควรใช้กลไกที่มีโครงสร้างที่บังคับใช้การแยกข้อมูลและโค้ด [S2]

หลักการสิทธิพิเศษน้อยที่สุด

แอปพลิเคชันควรเชื่อมต่อกับฐานข้อมูลโดยใช้สิทธิ์ขั้นต่ำที่จำเป็นสำหรับงาน [S2] บัญชีแอปพลิเคชันเว็บไม่ควรมีสิทธิ์ระดับผู้ดูแลระบบ และควรจำกัดไว้เฉพาะตารางหรือการดำเนินการที่จำเป็นสำหรับฟังก์ชัน [S2]

การตรวจสอบอินพุตและการเข้ารหัส

แม้ว่าจะไม่ใช่การแทนที่การกำหนดพารามิเตอร์ การตรวจสอบอินพุตจะให้การป้องกันในเชิงลึก [S2] แอปพลิเคชันควรใช้กลยุทธ์ที่เป็นที่ยอมรับ โดยตรวจสอบว่าอินพุตตรงกับประเภท ความยาว และรูปแบบที่คาดไว้ [S2]

วิธีทดสอบ FixVibe

FixVibe ครอบคลุมการแทรก SQL ผ่านโมดูลสแกนเนอร์ active.sqli ที่มีรั้วรอบขอบชิดแล้ว การสแกนที่ทำงานอยู่จะทำงานหลังจากการยืนยันและรับรองความเป็นเจ้าของโดเมนเท่านั้น การตรวจสอบจะรวบรวมข้อมูลจุดสิ้นสุด GET ที่มีต้นกำเนิดเดียวกันด้วยพารามิเตอร์การสืบค้น สร้างการตอบสนองพื้นฐาน ค้นหาความผิดปกติบูลีนเฉพาะของ SQL และรายงานเฉพาะการค้นพบหลังจากการยืนยันเวลาในช่วงระยะเวลาล่าช้าหลายช่วง การสแกนพื้นที่เก็บข้อมูลยังช่วยตรวจจับสาเหตุที่แท้จริงก่อนหน้านี้ผ่าน code.web-app-risk-checklist-backfill ซึ่งจะทำเครื่องหมายการเรียก SQL แบบดิบที่สร้างขึ้นด้วยการแก้ไขเทมเพลต