Đồ án: Nghiên cứu và phát triển kỹ thuật phát hiện SQL Injection

Tổng quan về lỗ hổng SQL Injection. Trình bày chi tiết các kỹ thuật phát hiện, phương pháp khai thác và giải pháp phòng chống tấn công hiệu quả.

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Báo Cáo Đồ Án
67
1
0

Phí lưu trữ

30 Point

Tóm tắt

I. SQL Injection là gì và tầm quan trọng của phòng chống

SQL Injection là một trong những lỗ hổng bảo mật nguy hiểm nhất đối với các ứng dụng web, được xếp hạng A1 theo tiêu chuẩn OWASP (Open Web Application Security Project). Đây là kỹ thuật tấn công mà người dùng độc hại chèn các lệnh SQL độc hại vào trường nhập liệu của ứng dụng, nhằm truy cập trái phép hoặc thao tác với cơ sở dữ liệu. Với sự phát triển nhanh chóng của các ứng dụng web động, nguy cơ bị tấn công SQL Injection ngày càng tăng cao. Tấn công này có thể dẫn đến việc lấy cắp dữ liệu nhạy cảm của khách hàng, chiếm quyền điều khiển trang web, hoặc phá hủy toàn bộ cơ sở dữ liệu. Do đó, việc hiểu rõ và áp dụng các biện pháp phòng chống SQL Injection trở thành yêu cầu bắt buộc cho mọi nhà phát triển phần mềm.

1.1. Định nghĩa SQL Injection

SQL Injection là phương pháp tấn công sử dụng câu lệnh SQL độc hại được chèn vào các tham số đầu vào của ứng dụng web. Khi ứng dụng không xác thực đúng cách dữ liệu từ người dùng, các câu lệnh SQL này được thực thi trực tiếp trên cơ sở dữ liệu, cho phép kẻ tấn công thực hiện các thao tác không được phép như truy vấn, chèn, xoá hoặc sửa đổi dữ liệu quan trọng.

1.2. Mức độ nguy hiểm và hậu quả

Các cuộc tấn công SQL Injection có thể gây ra những hậu quả nghiêm trọng bao gồm: lấy cắp thông tin khách hàng, chiếm quyền quản trị, phá hủy dữ liệu, gián đoạn dịch vụ và mất uy tín của tổ chức. Các cuộc tấn công này thường nhắm vào các trường nhập liệu như login, tìm kiếm, và các biểu mẫu khác.

II. Các kỹ thuật phát hiện SQL Injection hiệu quả

Phát hiện SQL Injection sớm là chìa khóa để bảo vệ ứng dụng web. Các kỹ thuật phát hiện hiệu quả bao gồm sử dụng các signature đặc biệt để kiểm tra đầu vào, triển khai hệ thống phát hiện xâm nhập (IDS) như Snort, và sử dụng tường lửa ứng dụng web (WAF). Các công cụ tự động hóa có thể quét các lỗ hổng mà không cần thực hiện kiểm định thủ công. Ngoài ra, việc phân tích các parameter thường bị tiêm SQL, hiểu rõ cú pháp các lệnh SQL nguy hiểm, và nghiên cứu cách hoạt động của các DBMS khác nhau sẽ giúp các nhà phát triển nhận diện các cuộc tấn công tiềm ẩn một cách nhanh chóng và hiệu quả.

2.1. Sử dụng signature và pattern detection

Signature detection là phương pháp quét các mẫu tấn công SQL Injection đã biết bằng cách so sánh đầu vào với cơ sở dữ liệu chứa các signature độc hại. Phương pháp này hiệu quả cho việc phát hiện các cuộc tấn công phổ biến nhưng có thể bỏ lỡ những biến thể mới. Các signature thường bao gồm các từ khóa SQL như UNION, SELECT, DROP, INSERT kết hợp với ký tự đặc biệt.

2.2. Hệ thống IDS và công cụ Snort

IDS (Intrusion Detection System) như Snort giám sát lưu lượng mạng và phát hiện các hoạt động tấn công bất thường. Snort sử dụng các rules được định nghĩa sẵn để phát hiện SQL Injection thông qua việc phân tích các gói dữ liệu và nhận dạng các mẫu tấn công. Công cụ này cho phép cảnh báo thời gian thực và ghi lại các sự kiện bảo mật.

III. Biện pháp phòng chống SQL Injection toàn diện

Phòng chống SQL Injection hiệu quả đòi hỏi một cách tiếp cận đa lớp. Trước hết, sử dụng các truy vấn được tham số hóa (Parameterized Queries) hoặc sử dụng các thủ tục được lưu trữ (Stored Procedures) để tách biệt dữ liệu từ mã SQL. Xác thực đầu vào nghiêm ngặt bằng cách kiểm tra loại dữ liệu, độ dài, và định dạng là rất quan trọng. Escaping các ký tự đặc biệt, sử dụng Hex-encoding, và triển khai Web Application Firewall (WAF) cũng là những biện pháp bổ sung hiệu quả. Đặc biệt, PDO (PHP Data Objects) cung cấp một lớp truy xuất dữ liệu an toàn giúp ngăn chặn SQL Injection ở mức ứng dụng.

3.1. Truy vấn được tham số hóa và Stored Procedures

Parameterized Queries tách biệt cấu trúc SQL từ dữ liệu người dùng, ngăn chặn việc chèn mã độc. Stored Procedures là các thủ tục được lưu trữ sẵn trong cơ sở dữ liệu, giới hạn quyền truy cập và giảm nguy cơ tấn công. Cả hai phương pháp này đều cung cấp bảo vệ mạnh mẽ chống lại SQL Injection.

3.2. Xác thực dữ liệu đầu vào và WAF

Xác thực đầu vào bao gồm kiểm tra kiểu dữ liệu, độ dài tối đa, định dạng cho phép, và danh sách trắng các giá trị hợp lệ. Web Application Firewall (WAF) hoạt động ở tầng ứng dụng để kiểm tra và lọc các yêu cầu HTTP độc hại trước khi chúng đến cơ sở dữ liệu, mang lại lớp bảo vệ thêm cho ứng dụng.

IV. Quy trình kiểm định và best practices bảo mật

Để đảm bảo an toàn cho ứng dụng web, cần thiết lập quy trình kiểm định SQL Injection thường xuyên. Các nhà phát triển nên hiểu rõ quy trình tấn công SQL Injection: từ việc tìm kiếm các parameter dễ bị tấn công, khai thác các tính năng nâng cao của DBMS như MySQL hay MSSQL, cho đến việc bypass WAF. Các biện pháp best practices bao gồm: cập nhật các thư viện phần mềm thường xuyên, sử dụng các công cụ tự động hóa để phát hiện lỗ hổng, đào tạo nhân viên về bảo mật, và thực hiện penetration testing định kỳ. Việc áp dụng một cách tiếp cận bảo mật từ giai đoạn thiết kế (Security by Design) sẽ giúp giảm đáng kể nguy cơ bị tấn công SQL Injection.

4.1. Quy trình kiểm định tự động hóa

Các công cụ phát hiện lỗ hổng SQL Injection tự động hóa giúp quét ứng dụng web mà không cần kiểm định thủ công. Các công cụ này sử dụng các ngôn ngữ lập trình như Python hoặc Java, kết hợp với các thư viện chuyên dụng, để thử nghiệm các vector tấn công khác nhau. Kết quả quét được trình bày rõ ràng, giúp nhà phát triển xác định và khắc phục lỗ hổng nhanh chóng.

4.2. Giáo dục và cải thiện liên tục

Đào tạo nhân viên về SQL Injection và các lỗ hổng bảo mật khác là yếu tố quan trọng. Các tổ chức nên thiết lập chính sách bảo mật rõ ràng, thực hiện code review định kỳ, và khuyến khích security awareness trong toàn bộ đội ngũ. Việc cập nhật kiến thức về các phương pháp tấn công mới giúp các nhà phát triển luôn đi trước các mối đe dọa.

21/12/2025

Trích đoạn nội dung tài liệu

CHƯƠNG I: TỔNG QUAN VỀ SQL-INJECTION 1.1 TỔNG QUAN VỀ ỨNG DỤNG WEB Ngày này , các ứng dụng web đang trở nên không thể thiếu , nó hiện hữu trong mọi mặt của cuộc sống , từ nông nghiệp đến mua sắm, giải trí, tin tức ,.Và một điều nữa là cách ứng dụng web này không còn giống như những năm trước đây sử dụng kiểu web tĩnh mà sử dụng loại website động để tương tác với người dùng. Để làm được điều đó những website này phải có một cơ sở dữ liệu đáp ứng và cung cấp những thông tin cụ thể mà ở phía người dùng yêu cầu.Để website có thể tương tác với cơ sở dữ liệu thì cần có một hệ quản trị cơ sở dữ liệu nào đó để quản lý và để cho website truy xuất dữ liệu 1.1 SQL là gì ? truy vấn động SQL là gì ? SQL ( Structured Query Language) là ngôn ngữ truy vấn có cấu trúc và được sử dụng để quản lý và truy vấn thông tin từ cơ sở dữ liệu nhanh, giúp bảo trì thông tin dễ dàng. Truy vấn động SQL là những câu query được tạo tại thời điểm chạy. Ví dụ : người dùng sẽ nhập một tham số tìm kiếm và truy vấn sẽ chạy với giá trị đó.

Truy vấn SQL rất hữu ích trong việc tìm kiếm các mục mà không biết rõ tên hoặc giá trị cần tìm kiếm.Thông thường phần lớn các trang web đều có mục tìm kiếm hoặc filter , từ đó việc tác động giữa người dùng và cơ sở dữ liệu trở nên gần hơn.2 TỔNG QUAN VỀ SQL-INJECTION 1.1 KHÁI NIỆM SQL injection là một lỗ hổng trong ứng dụng web nằm bảng A1:Injection của top 10 OWASP, lỗ hổng có khả năng cho phép tấn công khai thác bằng việc sử dụng các truy vấn SQL để ‘tiêm’ thông qua các dữ liệu đầu vào các ứng dụng của web từ máy khách.Nếu khai thác thành công đọc được những dữ liệu nhạy cảm , thực hiện những thao tác thay đổi thông tin database.2 NGUYÊN NHÂN Hầu hết các dữ liệu đầu có thể là kí tự đặc biệt có thực hiện sự thay đổi dữ liệu ở phía server, một biến môi trường hoặc tham số của dịch vụ hay một chức năng nào đó trong hệ điều hành do từ phía người dùng nhập vào,hiển nhiên nguyên nhân này là do sự bất cẩn của người lập trình viên, không có thực hiện lọc dữ liệu và ràng buộc kỹ càng các dữ liệu đầu vào cho các input đầu của ứng dụng. Không giới hạn quyền kiểm soát database của user trong Database Management System - DBMS và đa số thường dùng user mặc định có toàn quyền kiểm soát database 1.3 HẬU QUẢ - Tấn công SQL injection cho phép kẻ tấn công giả mạo danh tính, xáo trộn dữ liệu hiện có hoặc nghiêm trọng hơn là xoá hết tất cả dữ liệu của ứng dụng. - SQL injection thường dẫn đến việc deface trang web một cách dễ dàng , gây ảnh hưởng tới uy tín của công ty hoặc tổ chức - Có thế tiết lộ dữ liệu bên trong không được cho phép - SQL injection có mức độ tác động nghiêm trọng - Kẻ tấn công có thể đi xa hơn không chỉ dừng lại ở viêc thay đổi database mà còn thể đọc file system, thực hiện chạy các lệnh hệ điều hành,tạo một webshell - Có thể thực hiện Remote Desktop Protocol (RDP) từ xa - Dẫn đến hậu quả ở mức cao nhất là Remote Code Execution(RCE) - Tổ chức OWASP thống kê rủi ro 10 lỗ hổng an ninh và trong đó trong nhiều năm SQL injection nằm trong top CHƯƠNG II: KHAI THÁC SQL-INJECTION 2.1 CÁC KIỂU TẤN CÔNG SQL-INJECTION Hình 1 :Các kiểu tấn công SQL- injection SQL Injection chia thành 3 loại chính: In-band SQLi : Đây là dạng tấn công đơn giản và phổ biến nhất để khai thác lỗ hổng SQL injection. Dạng này được chia ra thành 2 dạng nhỏ là Error-based và Union-based Với dạng Error-based :Việc tấn công sẽ dựa vào những thông báo lỗi được trả về khi người dùng cố tình truy vấn sai ,dựa vào thông báo lỗi, đôi khi kẻ tấn công có thể biết được thuộc tính của database thông qua lỗi được xuất trên màn hình Với dạng Union-based: Là một kỹ thuật sử dụng tính năng của toán tử UNION trong ngôn ngữ SQL cho phép kết hợp truy vấn 2 hoặc nhiều câu truy vấn SQL và trả về kết quả của những truy vấn đó trong cùng 1 kết quả Blind SQLi: Đây là kiểu tấn công SQL injection sử dụng những mệnh đề để đoán có nghĩa là dạng tấn công này sẽ không hiện ra lỗi ,việc tấn công phải lần mò từng bước để thực hiện, Có 2 dạng là : Blind-boolean-base: Kỹ thuật này dựa vào việc gửi các truy vấn tới cơ sở dữ liệu và buộc trả về các kết quả khác nhau phụ thuộc vào câu truy vấn là true hay false,cơ bản là việc so sánh đúng hoặc sai để tìm ra từng ký tự của những thông tin như tên database, tên bảng ,.Do những ký tự được trải dài với giá trị bao gồm, chữ thường chữ hoa, số và một số ký tự đặc biệt nên việc khai thác Blind-boolean-base bằng tay sẽ mất nhiều thời gian.

Blind-Time-base: Kỹ thuật này cũng giống như boolean nhưng chỉ khác nhau về cách suy diễn, kỹ thuật này dựa vào thời gian mà ứng dụng xử lý kết quả và trả về .Từ đó có thể xác định câu truy vấn cho ra kết quả true hoặc là false Hình 2: Hình Thức Tấn Công SQL-Injection Thông thường Out-of-band SQL injection Đây là dạng khai thác lọc dữ liệu từ cơ sở dữ liệu thông qua các kênh gửi đi như là giao thức DNS, HTTP. Sử dụng một số dịch vụ đang chạy trên server để trích xuất dữ liệu từ máy chủ.Việc lợi dụng một số dịch vụ trên server thì phụ thuộc vào các công nghệ sử dụng ở backend. Nguyên nhân - Thiếu xác thực đầu vào trên web - Môi trường mạng để cho phép máy chủ cơ sở dữ liệu - Có đủ quyền để gửi requests Kết quả của việc tấn công có thể bắt được bởi proxy hoặc là máy chủ lắng nghe 2.2 Những parameter thường bị tiêm sqli Một số parameter thường gặp: Id,cat,page,view,data,typeboard,prodID,uid,product_id,pr,tid,fid,userID, EventID, idCategory, section, HTTP HEADER Form (HTTP POST) Một cách dễ hiểu hơn là chúng ta sẽ chèn truy vấn vào nội dung của gói tin, ví dụ hình sau: Một trang web có thể có rất nhiều form bao gồm thấy được và không thấy được và chúng ta sẽ chèn những truy vấn vào những ô này. một vài thông tin: giao thức HTTP khi gởi dữ liệu từ phía client lên server sẽ dùng phương thức POST.

Vì vậy trước khi tấn công loại này, chúng ta cần biết một trang web sẽ gởi đi những gì sau khi chúng ta nhấn nút “Đăng nhập”. Chúng ta vẫn sẽ dùng Live HTTP headers,Burpsuite để bắt request và response phân tích 2.3 SƠ LƯỢC MỘT SỐ LỆNH TRONG SQL THƯỜNG BỊ SỬ DỤNG ĐỂ TẤN CÔNG SQL 2.1 Cú pháp câu lệnh SQL Truy cấn dữ liệu từ các bảng SELECT <columns list> FROM <table> ; Union kết hợp kết quả của hai câu truy vấn <SELECT statement> UNION <other SELECT statement>; Truy vấn sử dụng toán tử DISTINCT SELECT DISTINCT <field list> <remainder of the statement>; Truy cấn dữ liệu từ các bảng có where và order by SELECT <columns list> FROM <table> WHERE <condition> ORDER BY <name column,number column> ASC|DESC; Union kết hợp kết quả của hai câu truy vấn có sử dụng toán tử ALL <SELECT statement> UNION ALL <other SELECT statement>; Bảng 1: Bảng Cú Pháp Những Câu Lệnh Thường Bị Lạm Dụng 2.2 Toán tử DISTINCT và ALL - DISTINCT là lọc ra các dòng giá trị trùng lặp trong table - Nếu sử dụng UNION sẽ cho ra kết quả có lọc giá trị như DISTINCT, nếu muốn xuất ra toàn bộ kết quả kể cả trùng lặp thì sử dụng lệnh UNION ALL <SELECT statement> UNION ALL <other SELECT statement>; 2.3 Cách hoạt động của comment Syntax Example # Hash SELECT * FROM Employers where username = '' OR 2=2 #' AND password =''; /* C-Style SELECT * FROM Employers where username = '' OR 2=2 /*' AND password ='*/''; -- SQL SELECT * FROM Employers where username = '' OR 2=2 -- -' AND password =''; ;%00 NULL SELECT * FROM Employers where username = '' OR byte 2=2; [NULL]' AND password =''; Bảng 2: Bảng Cú Pháp Comment 2.4 TỔNG QUAN VỀ MÔ HÌNH KẾT NỐI GIỮA DATABASE VÀ WEB APPLICATION TRÊN MYSQL SERVER Hình 3: Mô Hình Kết Nối Dữ liệu Mô hình được lấy từ [1] - Application: Ứng dụng là một loại phần mềm có thể được cài đặt và chạy trên máy tính, máy tính bảng, điện thoại thông minh hoặc các thiết bị điện tử khác - Driver Manager: Trình quản lý điều khiển , là thư viện quản lý thông tin quản lý giữa ứng dụng và ODBC - DSN configuration: Đây là tên mà các ứng dụng sử dụng để yêu cầu kết nối với Nguồn dữ liệu ODBC. Nói cách khác, nó là một tên tượng trưng đại diện cho kết nối ODBC. Nó lưu trữ các chi tiết kết nối như tên cơ sở dữ liệu, thư mục, trình điều khiển cơ sở dữ liệu, UserID, mật khẩu, v.

khi thực hiện kết nối với ODBC. - Connector/ODBC:(Open Database Connectivity):cung cấp một phương pháp API cho việc sử dụng các hệ quản trị cơ sở dữ liệu,mục đích của ODBC là cung cấp cho các trình ứng dụng khả năng truy xuất dữ liệu bất kì mà không phải quan tâm đến việc hiện tại dữ liệu đang được quản lí bởi hệ quản trị cơ sở dữ liệu nào. ODBC làm được việc này bằng cách chèn một lớp trung gian vào giữa trình ứng dụng và hệ quản trị cơ sở dữ liệu.Mục đích của lớp trung gian này là chuyển đổi những câu truy vấn của trình ứng dụng thành những lệnh mà hệ quản trị cơ sở dữ liệu hiểu.Ứng dụng có thể tạo ra lệnh ODBC và hệ quản trị cơ sở dữ liệu khả năng đáp lại những lệnh đó - DBMS:Nơi tập hợp các dữ liệu có tổ chức , thường được lưu trữ và truy cập điện tử từ hệ thống máy tính.Khi cơ sở dữ liệu phức tạp hơn, chúng thường được phát triển bằng cách sử dụng các kỹ thuật thiết kế và mô hình hoá chính thức.5 QUY TRÌNH TẤN CÔNG SQL INJECTION Quy trình để tấn công SQL-Injection nếu ra các bước mà một cuộc tấn công SQL injection được bắt đầu và kết thúc [3] Hình 4: Quy Trình Tấn Công SQL-injection Bước 1: Kẻ tấn công dò quét lỗ hổng trên ứng dụng web của nạn nhân, gửi những đoạn mã độc hại tới CSDL thông qua ứng dụng web Bước 2: Máy chủ web (web server) tiếp nhận câu truy vấn và gửi nó đến máy chủ ứng dụng Bước 3: Câu truy vấn độc hại tiếp tục được chuyển từ máy chủ ứng dụng đến DBMS ( giả định web bị dính lỗ hổng SQL-Injection) .

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ