Tích hợp “Mod Security” cho Web Application Server để chống lại SQL Injection và tấn công XSS

Tram Ho

GIỚI THIỆU

  • Mod Security là một module tường lửa có thể tích hợp với các Web Application Server (máy chủ ứng dụng web) như Apache, IIS, Nginx cho phép phân tích và ghi nhật ký các luồng dữ liệu HTTP/S.Với sự đóng góp từ dự án ModSecurity Core Rule Set của tổ chức OWASP đã giúp ModSecurity trở nên mạnh mẽ và linh động hơn trong việc phân tích các hành vi có nguy cơ xâm hại an ninh ứng dụng web.
  • Mod Security đứng trước Web Server, làm nhiệm vụ như một firewall để kiểm soát truy cập vào ra Web Server. Các thông tin đi từ bên ngoài vào và bên trong ra sẽ được kiểm soát chặt chẽ để tránh những thông tin có thể gây hại cho Web Server hay là việc rò rỉ các thông tin đặc biệt từ Web Server đến Client.

  • Mod Security có thể :
  1. Request filtering: tất cả các request gửi đến web server đều được phân tích và càn lọc (filter) trước khi chúng được đưa đến các modules khác để xử lý.
  2. Anti-evasion techniques: paths và parameters được chuẩn hóa trước khi phân tích để chống evasion techniques.
  3. Understanding of the HTTP protocol: ModSecurity là web application firewall nên nó có khả năng hiểu được HTTP protocol. ModSecurity có khả năng càn lọc dựa trên các thông tin ở HTTP header hay có thể xem xét đến từng parameters hay cookies của các requests…
  4. POST payload analysis: ngoài việc càn lọc dựa trên HTTP header, ModSecurity có thể dựa trên nội dung (payload) của POST request.
  5. Audit logging: mọi request đều có thể được ghi lại (bao gồm cả POST) để người quản trị có thể theo dõi nếu cần.
  6. HTTPS filtering: ModSecurity có thể phân tích HTTPS.
  7. Compressed content filtering: ModSecurity sẽ phân tích sau khi đã decompress các request data.
  • Và trong bài viết này chúng ta sẽ tiến hành tích hợp Mod Security cho Apache Web Server để chống lại SQL Injection và tấn công XSS.

1. SQL Injection và tấn công XSS khi chưa tích hợp Mod Security

Để thử nghiệm SQL Injection và tấn công XSS thì mình sử dụng Damn Vulnerable Web Application (DVWA) một ứng dụng mã nguồn PHP tập hợp sẵn các lỗi logic về bảo mật trong đó có SQL Injection và XSS.
Sau khi tải mã nguồn từ : https://github.com/ethicalhack3r/DVWA, giải nén vào thư mục C:xampphtdocs, khởi chạy và đăng nhập bằng tài khoản username/password: admin/password thì giao diện trang web như sau:

1.1 Thử nghiệm SQL Injection

Vào SQL Injection nhập vào %' or '0'='0 và submit

Kết quả sẽ nhận được thông tin của tất cả các users có trong cơ sở dữ liệu. Bởi vì câu truy vấn lúc này được hiểu là : SELECT * FROM users WHERE user_id = '%' or '0'='0'

1.2 Thử nghiệm XSS

Vào XSS stored và submit đoạn script sau: <script>alert("Hacked! – KMA")</script>:

Sau khi submit đoạn script trên thì mỗi lần truy cập vào, trang web sẽ hiện một thông báo cho người dùng như sau:

Qua một vài thao tác đơn giản có thể thấy được lỗi SQL Injection và XSS rất dễ dàng bị khai thác. Vì vậy cần có phương pháp để chống lại các dạng tấn công này.
Có rất nhiều phương pháp để chống lại tấn công SQL Injection và XSS nhưng trong bài viết này mình chỉ đề cập đến phương pháp tích hợp tường lửa và cụ thể là Mod Security trên Apache.

2 Cài đặt và cấu hình Mod Security

2.1 Cài đặt

Truy cập vào https://www.apachelounge.com/download/ và tải về mod_security tương ứng.

Giải nén và tìm 2 file mod_security2.soyajl.dll trong thư mục vừa giải nén.

  • copy mod_security2.so vào ...apachemodules
  • copy yajl.dll vao ...apachebin

Mở file httpd.conf của Xampp và thêm vào các dòng sau:

LoadModule security2_module modules/mod_security2.so

SecRuleEngine DetectionOnly

<IfModule security2_module>

SecRuleEngine On

SecDefaultAction "phase:2,deny,log,status:403"

Include conf/sqlinjection.conf

Include conf/xss.conf

</IfModule>

2.2 Tạo file conf để thiết lập rules

Tiến hành tạo 2 file sqlinjection.confxss.conf trong thư mục apacheconf của Xampp.

Clone toàn bộ rules SQL Injection vào file sqlinjection.confrules XSS Injection vào file xss.conf.

Tiến hành restart lại Xampp Apache. Thử nghiệm lại tấn công SQL Injection và XSS như ở phần 1. Kết quả như hình:

Và đồng thời file nhật ký ghi nhận được request xấu từ người dùng đã bị chặn lại:

Video demo:

 

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo