สิ่งที่ผมรู้ หากคุณอ่าน คุณจะรู้ตามผมไปด้วย

18-06-2007

การโจมตีแบบเอสคิวแอล อินเจคชัน (SQL Injection Attacks)

Filed under: SQL Injection Attacks — ejeepss @ 13:42:51

การโจมตีแบบเอสคิวแอล อินเจคชัน ผมได้ลองศึกษาและทำงานวิจัยนี้ พบว่ามีขอบเขตน่าสนใจ และเป็นการโจมตีที่เข้าตามตรอก ออกตามประตูอย่างแท้จริงๆ หมายความว่า หากเว็บแอพพลิเคชั่นคุณเปิดให้บริการ แน่นอนคุณต้องเปิดพอร์ต 80 เพื่อให้บริการเว็บ แต่พอร์ต 80 นี้เอง เป็นช่องทางในการโจมตีได้ และผมได้ทดลองกับเว็บจริงๆ พบว่าหลาย ๆ เว็บแอพพลิเคชั่นที่ให้บริการบนอินเทอร์เน็ตปัจจุบัน ยังมีรูรั่วด้านนี้ เป็นจำนวนมาก อาจเนื่องมาจากนักพัฒนามุ่งเนื้องานจนลืมนึกถึง Non Function ของระบบ จึงหวังว่าบทความนี้อาจช่วยให้ท่านรอดพ้นจากการโจมตีในรูปแบบนี้ได้

การโจมตีเครื่องคอมพิวเตอร์แม่ข่ายที่ให้บริการฐานข้อมูล ที่ทำงานในลักษณะเว็บแอพพลิเคชั่น โดยที่ผู้ไม่ประสงค์ดีป้อนอักขระ อักษร หรือชุดคำสั่งลงบนหน้าเว็บเพจที่ให้บริการ แสดงดังภาพที่ 1 โดยอาศัยช่องโหว่ของฐานข้อมูล เพื่อบังคับให้ฐานข้อมูลทำงานบางสิ่งบางอย่าง เช่น ลบข้อมูลในฐานข้อมูล หยุดการให้บริการของฐานข้อมูล หรือแม้กระทั่งหยุดการทำงานของเครื่องคอมพิวเตอร์แม่ข่าย

sqlias_1.jpg
ภาพที่ 1. ภาพรวมของการโจมตีแบบเอสคิวแอล อินเจคชัน

การพัฒนาระบบงานในลักษณะเว็บแอพพลิเคชั่น นักพัฒนาส่วนใหญ่จะมุ่งเน้นที่การพัฒนาระบบงานโดยอาจละเลยหรือไม่ได้ให้ความสนใจในเรื่องความปลอดภัยเท่าที่ควร ทำให้ผู้ไม่ประสงค์ดีสามารถโจมตีเว็บแอพพลิเคชั่น ในขั้นตอนการตรวจสอบการเข้าสู่ระบบ (Authentication) หรือป้อนคำสั่งโจมตีผ่านทางฟอร์มกรอกข้อมูลต่าง ๆ ผ่านเว็บบราวเซอร์ แสดงดังภาพที่ 2

sqlias_2.jpg
ภาพที่ 2 แสดงการป้อนคำสั่งเอสคิวแอล อินเจคชัน ผ่านทางหน้าจอการเข้าระบบ

การพัฒนาระบบงานในลักษณะเว็บแอพพลิเคชั่น นักพัฒนาส่วนใหญ่จะมุ่งเน้นที่การพัฒนาระบบงานโดยอาจละเลยหรือไม่ได้ให้ความสนใจในเรื่องความปลอดภัยเท่าที่ควร ทำให้ผู้ไม่ประสงค์ดีสามารถโจมตีเว็บแอพพลิเคชั่น ในขั้นตอนการตรวจสอบการเข้าสู่ระบบ (Authentication) หรือป้อนคำสั่งโจมตีผ่านทางฟอร์มกรอกข้อมูลต่าง ๆ ผ่านเว็บบราวเซอร์ แสดงดังภาพที่ 3

sqlias_3.jpg
ภาพที่ 3 แสดงการป้อนคำสั่งเอสคิวแอล อินเจคชัน ผ่านทางหน้าจอการเข้าระบบ

ผู้ไม่ประสงค์ดีสามารถบิดเบือนคำสั่งเอสคิวแอล สำหรับการเข้าสู่ระบบได้ โดยป้อน ‘or 1=1– ในช่องรหัสผู้ใช้ เมื่อเว็บแอพพลิเคชั่นได้รับคำสั่งเอสคิวแอล จะนำคำสั่งไปรวมกับชุดคำสั่งในภาษาต่าง ๆ เช่น ภาษาเอเอสพี (ASP) ภาษาเจเอสพี (JSP) โดยแสดงตัวอย่างฟังก์ชั่นโปรแกรมภาษาจาวาที่ตรวจสอบสิทธิ์การเข้าใช้ระบบงาน (Authentication) ดังภาพที่ 4

sqlias_4.jpg
ภาพที่ 4 แสดงฟังก์ชั่นตรวจสอบสิทธิ์การเข้าใช้ระบบงานในภาษาจาวา

ในภาพที่ 5 แสดงการเปรียบเทียบคำสั่งเอสคิวแอลปกติกับคำสั่งเอสคิวแอลที่ถูกบิดเบือน ในส่วนของคำสั่งเอสคิวแอลปกติ เมื่อผู้ใช้งานเข้าใช้ระบบงาน โดยทำการป้อนรหัสผู้ใช้ คือ admin แต่ผู้ไม่ประสงค์ดีสามารถบิดเบือนคำสั่งเอสคิวแอลปกติ เป็นคำสั่งเอสคิวแอล อินเจคชัน โดยป้อนคำสั่ง ‘ OR 1=1 — ลงในช่องรหัสผู้ใช้แทนรหัสผู้ใช้ admin และสามารถป้อนรหัสผ่านเป็นค่า ใด ๆ ได้เนื่องจากเมื่อฐานข้อมูลประมวลผลคำสั่งเอสคิวแอล อินเจคชัน โดยเมื่อพบคำสั่ง “–” ฐานข้อมูลจะไม่ประมวลผลคำสั่งอื่น ๆ ต่อจากคำสั่ง “–” เนื่องจากเป็นคำสั่งคอมเมนต์ (Comment) ที่ฐานข้อมูลอนุญาติให้นักพัฒนาระบบงานเขียนสิ่งต่าง ๆ นอกเหนือจากคำสั่งเอสคิวแอลได้

sqlias_5.jpg
ภาพที่ 5 การเปรียบเทียบคำสั่งเอสคิวแอลที่รวมเข้ากับภาษาอื่นระหว่างคำสั่งเอสคิวแอลปกติกับคำสั่งเอสคิวแอลที่ถูกบิดเบือนด้วยคำสั่งเอสคิวแอล อินเจคชัน

คำสั่งเอสคิวแอลที่ถูกบิดเบือนด้วยคำสั่งเอสคิวแอล อินเจคชันนั้น จะพยายามเปลี่ยนแปลงเงื่อนไขคำสั่งเอสคิวแอลให้มีสถานะเป็นจริง (True) เช่น คำสั่งเรียกดูรายชื่อผู้ใช้ระบบที่มีชื่อว่า admin หรือ 1=1 (1=1 สถานะเป็นจริง) ซึ่งทำให้ฐานข้อมูลประมวลผลผิดพลาดและแสดงความผิดพลาดกลับมาสู่เว็บบราวเซอร์ ดังภาพที่ 2-6 โดยจะแสดงถึงเทคโนโลยีที่ใช้ในเชื่อมต่อฐานข้อมูล รวมทั้งชื่อฐานข้อมูล ชื่อฟิลด์ที่ใช้ รวมทั้งแสดงข้อผิดพลาดอื่น ๆ ซึ่งเป็นข้อมูลที่เป็นประโยชน์ของผู้ไม่ประสงค์ดีในการโจมตีเว็บแอพพลิเคชั่นต่อไป

sqlias_6.jpg
ภาพที่ 6 ผลลัพท์ที่เกิดขึ้นจากการโจมตีแบบเอสคิวแอล อินเจคชัน

จากภาพที่ 6 แสดงให้เห็นถึงเทคโนโลยีที่ใช้ในการเชื่อมต่อฐานข้อมูล และชนิดของฐานข้อมูล ซึ่งจากภาพที่ 6 เว็บแอพพลิเคชั่นใช้ฐานข้อมูลไมโครซอฟต์ ซีควอลเซิร์ฟเวอร์ ดังนั้นหากผู้ไม่ประสงค์ดีต้องการโจมตีในรูปแบบเอสคิวแอล อินเจคชัน เพื่อหยุดการทำงานของฐานข้อมูล สามารถใช้คำสั่ง ‘ OR 1=1 ; exec master..xp_cmdshell ‘iisreset /stop’– ลงในช่องรหัสผู้ใช้แทนรหัสผู้ใช้ admin โดยภายในคำสั่งเอสคิวแอล อินเจคชันนี้ได้บังคับให้ฐานข้อมูลเรียกใช้คำสั่ง iisrest /stop ในระบบปฏิบัติการ (OS) ซึ่งเป็นคำสั่งหยุดการทำงานของเว็บแอพพลิเคชั่น ทำให้ผู้ใช้งานไม่สามารถเข้าระบบได้ ผลลัพท์ที่ได้แสดงดังภาพที่ 7

sqlias_7.jpg
ภาพที่ 7 แสดงผลลัพท์จากคำสั่งหยุดการทำงานของเว็บแอพพลิเคชั่น

ขอบคุณทุกท่านที่เสียสละเวลาอ่าน

Reference

Ke Wei et.al. Preventing SQL Injection Attacks in Stored Procedures. In Proceedings of the 2006
Australian Software Engineering Conference (ASWEC’06), 2006.

K. Spett. SQL Injection White paper Are you web applications vulnerable, 2005

R. A. McClure and I. H. Kr¨uger. SQL DOM: compile time checking of dynamic SQL
statements. In Proceedings of the 27th International Conference on Software
Engineering, pages 88–96, 2005.

Sam M.S. NG. Sql block. Available from: http://www.sqlblock.com

S. Kost. An Introduction to SQL Injection Attacks for Oracle Developers , January 2004.

S. W. Boyd and A. D. Keromytis. SQLrand: Preventing SQL injection attacks. In Proceedings of
the 2nd Applied Cryptography and Network Security (ACNS) Conference, pages 292–302, June 2004.

W. Xu, S. Bhatkar, and R. Sekar. Practical Dynamic Taint Analysis for Countering
Input Validation Attacks on Web Applications, 1994

V.B. Livshits and M.S. Lam, Finding Secutiry Vulnerabilities in Java Application
with Static Analysis, 2005

W. G. Halfond and A. Orso. AMNESIA: Analysis and Monitoring for NEutralizing SQL-
Injection Attacks. In Proceedings of 20th ACM International Conference on Automated
Software Engineering (ASE),Nov. 2005.

ไม่มีความเห็น »

ขณะนี้ยังไม่มีความเห็น

RSS feed for comments on this post. TrackBack URL

แสดงความเห็น

Powered by WordPress