SQL Injection เป็นเทคนิคที่ใช้ประโยชน์จากส่งคำสั่ง SQL ผ่านทางเว็บแอพพลิเคชันเพื่อไปโจมตีระบบฐานข้อมูลหลังบ้าน โดยอาศัยช่องโหว่ของการใส่ข้อมูล input ของผู้ใช้ ซึ่งการโจมตีรูปแบบนี้ถูกค้นพบมานานหลาย 10 ปีแล้ว แต่ยังคงนำความปวดหัวมาให้แก่เหล่าผู้ดูแลระบบฐานข้อมูลมาจนถึงปัจจุบันนี้
หลายคนยังไม่ตระหนักด้วยว่า SQL Injection สามารถทำได้ทั้งสองทาง คือ สามารถใช้เพื่อดึงข้อมูลออกมาจากฐานข้อมูล และยังใช้เพื่อแก้ไข รวมทั้งอัพโหลดข้อมูลไปที่ฐานข้อมูลได้ด้วย แฮ็คเกอร์บ้างคนสามารถใช้ SQL Injection ในการอัพโหลดมัลแวร์ขึ้นไปยังระบบฐานข้อมูล แล้วให้มัลแวร์นั้นกระจายต่อไปยังระบบที่มีการซื้อขาย (Point-of-Sale Endpoint) เพื่อขโมยหรือเปลี่ยนแปลงข้อมูลการเงินต่างๆ
Michael Sabo จาก DB Networks บริษัทชื่อดังทางด้านระบบความปลอดภัยของข้อมูลในประเทศอเมริกา กล่าวว่า “คุณมักจะได้ยินบ่อยๆว่า ลองทำแบบนี้สิ แบบนั้นสิ เดี๋ยวก็แก้ปัญหาได้ แต่จริงๆแล้วมันไม่ได้ง่ายขนาดนั้น แต่ละวิธีสามารถใช้งานได้ดีในระดับหนึ่ง แต่ไม่สามารถจัดการปัญหาได้สมบูรณ์ เรายังไม่มีช็อตปลิดชีพ”
Sabo ยังให้ข้อมูลอีกว่า “วิธีการป้องกัน SQL Injection ยอดนิยมที่ OWASP ชอบแนะนำ คือ การเขียนโค้ดให้สมบูรณ์แบบ แต่ต่อให้เราเขียนโค้ดของแอพพลิเคชันได้ยอดเยี่ยมแค่ไหน ระบบเราก็ยังมีช่องโหว่อยู่ดี เนื่องจากซอฟต์แวร์ 3rd Party ที่ใช้เราไม่สามารถแก้ไขอะไรได้เลย ยกตัวอย่าง Ruby on Rails ใครจะไปรู้ล่ะว่า Framework พื้นฐานจะมีช่องโหว่อยู่ มันทำให้ 250,000 เว็บไซต์ตกอยู่ในความเสี่ยงของ SQL Injection เนื่องจากนักพัฒนาโปรแกรมเหล่านั้นสร้างเว็บไซต์บน Framework ที่ไม่สมบูรณ์แบบ นอกจากนี้ ตัว RDBMS ของ Oracle เองก็มีช่องโหว่สำหรับ SQL Injection เช่นกัน ต่อให้ไม่สนใจโค้ดที่เขียน ระบบของเราก็มีช่องโหว่อยู่ดี”
3 สิ่งที่ Sabo แนะนำเพื่อช่วยลดความเสี่ยงของการถูก SQL Injection ได้แก่
- เราต้องทราบว่า ฐานข้อมูลเราอยู่ที่ไหน มีข้อมูลอะไรอยู่บ้าง และมันเชื่อมต่อกับแอพพลิเคชันอย่างไร “หลายบริษัทไม่ค่อยใส่ใจระบบฐานข้อมูลมากนัก หรือต่อให้พวกเขารู้เกี่ยวกับฐานข้อมูลทั้งหมดก็เถอะ ปัญหาที่พบบ่อยอีกอย่างก็คือ ฐานข้อมูลเหล่านั้นถูกเปิดเผยออกมาในระบบเครือข่ายตรงที่ที่ไม่ควรจะเปิดเผย นี่ไม่ใช่บัญหาเรื่องฐานข้อมูลละ มันเป็นปัญหาทางด้านระบบเครือข่าย” — Sabo กล่าวถึงรายละเอียดยกตัวอย่าง เช่น บริษัทตั้งฐานข้อมูลมาเพื่อทดสอบอะไรบางอย่าง แต่พวกเขาดันลืมเก็บกวาดให้เรียบร้อยหลังทดสอบ บ่อยครั้งที่ฐานข้อมูลเหล่านั้นมักจะใช้รหัสผ่าน default หรือใช้ข้อมูลจริงในการทดสอบ เนื่องจากพวกเขาต้องการความสมจริง และไม่คิดว่าจะมีใครเห็นฐานข้อมูลนี้ สิ่งเหล่านี้อาจก่อให้เกิดข้อมูลรั่วไหลออกไปได้ ดังนั้นแล้ว อันดับแรก คือ เราต้องทราบว่าฐานข้อมูลทั้งหมดจริงๆในระบบเรามีอยู่ที่ไหนบ้าง มีข้อมูลอะไรอยู่ และเชื่อมต่อกับแอพพลิเคชันที่เหมาะสมเท่านั้น ช่องทางอื่นให้ปิดไปให้เรียบร้อย
- คอยติดตามการใช้งานระหว่างแอพพลิเคชันและฐานข้อมูลตลอดเวลา เราควรต้องรู้ตัวทันทีเมื่อมีทราฟฟิคแปลกปลอมเข้ามาในฐานข้อมูล ปัจจุบันนี้เรามีเครื่องมือจำพวก Database Activity Monitoring หรือ Database Firewall ให้เลือกใช้มากมาย ซึ่งช่วยให้เราสามารถติดตาม และตรวจจับทราฟฟิคที่ไม่มีสิทธิ์ก่อนที่จะมาทำร้ายระบบฐานข้อมูลของเราได้
- สิ่งสุดท้ายที่ช่วยป้องกันฐานข้อมูล คือ เครื่องมือในการป้องกันการรั่วไหลของข้อมูล (Data Leak Prevention) “เมื่อคุณเริ่มเห็นว่าข้อมูลบัตรเครดิตกำลังถูกส่งออกไปนอกระบบเครือข่าย และคุณรู้ดีว่ามันไม่ควรจะถูกส่งออกไป นั่นแหละ คุณเจอปัญหาแล้ว” — Sabo กล่าว