Một số phương pháp qua mặt bộ lọc của tường lửa Web

Một phần của tài liệu luận văn sqI injection tấn công và cách phòng tránh (Trang 45 - 51)

Chương 2 SQL Injection và các cách tấn công phổ biến

2.2. Các phương pháp tấn công phổ biến

2.2.5. Một số phương pháp qua mặt bộ lọc của tường lửa Web

Các phương pháp được đề cập chia làm hai nhóm:

o Qua mặt các phương pháp chuẩn hóa (normalization)

o Một số phương pháp khai thác điểm yếu web mới (HTTP Parameter Pollution, HTTP Parameter Fragmentation, null-byte replacement,..)

a. Qua mặt các phương pháp chuẩn hóa

Khai thác điểm yếu trong các thao tác chuẩn hóa các đối tượng request của ứng dụng WAF. Chúng ta xét ứng dụng WAF cụ thể, ví dụ ModSecurity(v2.5). Trong ứng dụng này đã triển khai các luật trong gói core rules đi kèm được lấy từ trang chủ của ứng dụng (www.modsecurity.org).

SQL Injection – Tấn cơng và cách phịng tránh

46

Hình 2.20 – from sử dụng GET

Các luật lọc được trang bị trên ModSecurity gồm có các luật được chứa trong các file sau:

Hình 2.21 – các file cấu hình modsecurity – core rule

File có tên custom_rule.conf chính là file được sử dụng để chúng ta tự định nghĩa các luật minh họa. Nội dung trong đó gồm có các luật sau:

SecRule ARGS|REQUEST_HEADERS|REQUEST_URI “@pm select update insert alter drop union” “deny,status:400,t:lowercase”

Luật trên sẽ chặn các request có chứa các từ khóa select, update, insert, alter, drop, union trong giá trị các tham số, trên URL hoặc trong giá trị các trường header của thông điệp (trường hợp này là GET).

Trường hợp các tham số đầu vào từ người dùng là hợp lệ (chú ý tới giá trị tham số và URL):

Hình 2.22 – tham số hợp lệ

Như đã trình bày về luật lọc ở trên, ứng dụng WAF của chúng ta sẽ chặn URL có dạng ?level=select&name=insert&….

SQL Injection – Tấn cơng và cách phịng tránh

48

Phương pháp qua mặt phương pháp chuẩn hóa của WAF đó là sử dụng các dấu comment khối /**/ để tách các từ khóa dễ gây chú ý như SELECT, INSERT, UNION, …

Hình 2.23 – sử dụng comment khối qua mặt ModSecurity

Như vậy, chúng ta đã thành công bước đầu khi vượt qua được WAF. Tuy nhiên, ModSecurity cung cấp một action có tên replaceComments, cho phép xóa các chuỗi comment /**/ và ngay cả /* mà khơng cần có */ trong request, ngồi ra là một số các hàm biến đổi khác như removeWhitespace, removeNull,... Chúng ta cải tiến luật lọc ban đầu như sau:

SecRule ARGS|REQUEST_HEADERS|REQUEST_URI “@pm select update insert alter drop union”

“deny,status:400,t:lowercase,t:replaceComments,t:removeWhite space,t:removeNulls”

Lúc này, request sẽ được thao tác cắt bỏ các cụm comment, các dấu cách thừa, các ký tự NULL (%00). Lúc này, các URL dạng như:

?level=se/**/lect&name=drop+table+users&gender=m%00&ag e=1+or+1=1/*

Hình 2.24 – tham số đầu vào bị lọc bởi ModSecurity

Cách thức sử dụng các chuỗi ký tự đặc biệt để cắt nhỏ các từ khóa nhằm hợp lệ hóa chúng xuất phát từ lý do một số WAF thực hiện xóa bỏ các cụm ký tự đó khỏi request. Điều cần lưu ý ở ModSecurity đó là module này không thao tác trực tiếp với request mà thực hiện thao tác trên một bản sao của nó. Do đó, tuy người dùng có thể sử dụng các chuỗi ký tự đặc biệt bất kỳ để cắt nhỏ từ khóa nhằm vượt qua WAF, ví dụ, ModSecurity sẽ khơng lọc được một request có URL như sau:

?level=opt1&name=dr#op+table+users&gender=m&age=32

Nhưng khi giá trị tham số name được chuyển tới ứng dụng web thì ở dạng “dr#op table users” nó cũng khơng thể gây hại được.

b. Sử dụng phương pháp HTTP Parameter Pollution

Mơ hình qua mặt ứng dụng WAF theo kiểu đầu độc tham số HTTP (HTTP Parameter Pollution - HPP) là cách gọi chung của một nhóm các phương pháp thao tác với tham số trong query string sao cho về mặt hình thức nó vẫn hợp lệ với các luật của ứng dụng WAF nhưng khi được chuyển cho ứng dụng Web các tham số này lại có khả năng gây hại.

Cách thức thứ nhất đó là sử dụng URL encode, hoặc một số phương pháp tương tự để thay đổi giá trị tham số, ví dụ ta có đoạn mã xử lý tham số đầu vào như sau:

$sql = “UPDATE tbl_employees SET salary = (salary - 1000) WHERE employee_id = ” + $_GET[‘id’];

Khi đó nếu giá trị tham số id trên URL được sửa thành dạng

SQL Injection – Tấn cơng và cách phịng tránh

50

“employee_id=0231 or 1=1” và rõ ràng đây là một câu lệnh

không phải ai cũng muốn thực thi.

Cách thức thứ hai, tiêu biểu hơn cả, đó là việc sử dụng nhiều lần một tham số với cùng tên, ứng với các giá trị khác nhau. Ví dụ xét query string: ?var1=val1&var1=val2; trường hợp này, ứng với mỗi mơ hình xử lý HTTP khác nhau sẽ có những hệ quả khác nhau. Bảng sau liệt kê một số kết quả trên các môi trường khác nhau:

Mơi trường Kết quả tổng qt Ví dụ kết quả

ASP.NET/IIS Tham số nhận tất cả giá

trị

var1= val1,val2

ASP/IIS Tham số nhận tất cả giá

trị

var1= val1,val2

PHP/Apache Tham số nhận giá trị

cuối cùng

var1 = val2

PHP/Zeus Tham số nhận giá trị

cuối cùng

var1 = val2

JSP,Servlet/Apache Tomcat

Tham số nhận giá trị đầu tiên

var1 = val1

Như vậy, với một truy vấn dạng như sau:

/index.aspx?page=select+1,2,3+from+table+where+id=1

Truy vấn trên có thể bị phát hiện dễ dàng, tuy nhiên truy vấn sau thì khơng:

/index.aspx?page=select+1&page=2,3+from+table+where+id= 1

Truy vấn thứ hai có thể vượt qua các phép lọc tương tự như của ModSecurity chúng ta đã xây dựng ở phần trước, và kết quả trả về của truy vấn thứ hai hồn tồn giống như mục đích của truy vấn thứ nhất.

Một phần của tài liệu luận văn sqI injection tấn công và cách phòng tránh (Trang 45 - 51)

Tải bản đầy đủ (PDF)

(96 trang)