Chương 4 TRIỂN KHAI THỬ NGHIỆM
4.3. Cài đặt tường lửa ứng dụng web ModSecurity
Để bảo vệ các máy chủ từ các cuộc tấn công khác nhau, tôi đã nghiên cứu về tường lửa và tường lửa ứng dụng web ModSecurity. Trong phần này thực hiện triển khai một số thiết lập tường lửa, cài đặt tường lửa ứng dụng web ModSecurity và cấu hình tập luật cho mod_security sử dụng bộ luật Core rules set của OWASP nhằm phát hiện, ngăn chặn tấn công vào các lỗi phổ biến trên ứng dụng web. Qúa trình thực hiện như sau: Bước 1: Cài đặt các thư viện cần thiết trước khi cài đặt ứng dụng:
[root@vanbien ~]# yum install openssl openssl-devel pcre pcre-devel libxml2 libxml2- devel curl-devel pcre pcre-devel expat expat-devel
Bước 2: Tải mod_security từ trang chủ về máy chủ:
[root@vanbien ~]# cd /usr/local/src [root@vanbien src]# mkdir modsecurity2 [root@vanbien src]# cd modsecurity2 [root@vanbien modsecurity2]# wget
[root@vanbien modsecurity2]# tar xzfv modsecurity-2.9.0.tar.gz [root@vanbien modsecurity2]# cd modsecurity-2.9.0
Bước 3: Tiến hành cài đặt mod_security:
[root@vanbien modsecurity-2.9.0]# ./configure make
make install
Bước 4: Cấu hình Modsecurity
Trước khi thực hiện cấu hình ModSecurity, tôi sẽ tạo một danh sách các thư mục theo một định dạng sẵn. Việc này giúp tôi quản lý dễ dàng các dữ liệu mà modSecurity tạo ra, đồng thời hỗ trợ trong việc bảo trì và cập nhật các luật mới cho ModSecurity. Các tập tin cấu hình: /opt/modsecurity /etc
Nhật ký: /opt/modsecurity/var/log
Các tập tin tạm thời: /opt/modsecurity/var/tmp Tập tin tải lên: /opt/modsecurity/var/upload
Thực hiện tạo tập tin modsecurity.conf trong thư mục /etc/httpd/conf.d với nội dung: <IfModule mod_security2.c>
Include /opt/modsecurity/etc/main.conf Include /opt/modsecurity/etc/rules.conf </IfModule>
Tạo một tập tin cấu hình mẫu cho ModSecurity dựa vào tập tin đề nghị có sẵn, tại thư mục chứa mã nguồn Modsecurity thực hiện lệnh sao chép như sau:
[root@vanbien modsecurity-2.9.0]# cp /usr/local/src/mosecurity2/modsecurity-2.9.0 modsecurity.conf-recommended /opt/modsecurity/etc/main.conf
Chép tập tin unicode.mapping tới thư mục sau:
[root@vanbien ~]# cp /usr/local/src/modsecurity2/modsecurity-2.9.0/unicode.mapping /opt/modsecurity/etc/
Bước 5: Thêm những dòng sau vào bên dưới dòng LoadModulefile trong file /etc/httpd/conf/httpd.conf:
LoadFile /usr/local/lib/libxml2.so
LoadModule security2_module /usr/lib/apache/mod_security2.so Include /etc/httpd/conf.d/modsecurity.conf
Lưu và khởi động lại Apache với lệnh: service httpd restart
Bước 6: Kiểm tra hoạt động của Modsecurity
Sau khi hoàn thành phần cấu hình, tôi sẽ kiểm tra hoạt động của ModSecurityuriy bằng một luật đơn giản như sau:
SecRule REQUEST_URI "dangerous" "id:'900721'phase:1,deny,status:406"
Luật trên hoạt động trong trường hợp khi một người dùng cố truy cập vào URI có chứa mẫu nguy hiểm, thì Modsecurity sẽ trả về mã lỗi 406.
[root@vanbien ~]# curl -I http://www.hoangchinhthang.com/?user=1 order by 1,2,4 HTTP/1.1 406 Not Acceptable
Date: Tue, 16 Jun 2015 09:11:07 GMT Server: Apache
Connection: close
Content-Type: text/html; charset=iso-8859-1 curl: (6) Couldn't resolve host '1,2,4'
Bước 7: Cấu hình tập luật cho ModSecurity sử dụng tập luật được phát triển bởi OWASP:
[root@vanbien modsecurity-2.9.0]# mkdir /etc/modsecurity2 [root@vanbien modsecurity-2.9.0]# cd /etc/modsecurity2
[root@vanbien modsecurity2]# wget https://github.com/SpiderLabs/owasp- modsecurity-crs/archive/master.zip
[root@vanbien modsecurity2]# unzip master
[root@vanbien modsecurity2]# mv owasp-modsecurity-crs-master/* .
[root@vanbien modsecurity2]# rm -rf master.zip owasp-modsecurity-crs-master
Chép tập tin modsecurity_crs_10_setup.conf đến thư mục opt/modsecurity:
[root@vanbien modsecurity2]# cp modsecurity_crs_10_setup.conf.example /opt/modsecurity/modsecurity_crs_10_setup.conf
[root@vanbien modsecurity2]# mkdir -p /opt/modsecurity/etc/crs/activated_rules
Tạo liên kết giữa base_rules, optional_rules với activated_rules
[root@vanbien modsecurity2]# for f in 'ls base_rules/' ; do sudo ln -s
/etc/modsecurity2/base_rules/$f /opt/modsecurity/etc/crs/activated_rules/$f ; done [root@vanbien modsecurity2]# for f in 'ls optional_rules/' ; do sudo ln -s
/etc/modsecurity2/optional_rules/$f /opt/modsecurity/etc/crs/activated_rules/$f ; done
Chỉnh sửa tập tin cấu hình modsecurity trong /etc/httpd/conf.d:
[root@vanbien modsecurity2]# vi /etc/httpd/conf.d/modsecurity.conf <IfModule mod_security2.c>
Include /opt/modsecurity/etc/main.conf
Include /opt/modsecurity/etc/modsecurity_crs_10_setup.conf Include /opt/modsecurity/etc/crs/activated_rules/*.conf </IfModule>
Bước 8: Kiểm tra hoạt động của modsecurity
[root@vanbien activated_rules]# tail -f /var/log/httpd/error_log
[Wed Jun 17 11:01:07.004120 2015] [:notice] [pid 29216:tid 139831424718784] ModSecurity: StatusEngine call: "2.9.0,Apache/2.4.12 (Unix)
Open,1.5.1/1.5.1,8.20/8.20 2011-10-
21,(null),2.9.2,73df89cdb92a3eaebd84113418437c233c3636e4"
[Wed Jun 17 11:01:15.027120 2015] [:notice] [pid 29216:tid 139831424718784] ModSecurity: StatusEngine call successfully sent. For more information visit: http://status.modsecurity.org/
Bước 9: Tạo tập luật chặn tấn công Session Hijacking và đưa vào activated_rules: [root@vanbien modsecurity2]# cd /opt/modsecurity/etc/crs/activated_rules
[root@vanbien activated_rules]# touch modsecurity_ session_hijacking.conf Thêm các luật phòng chống session_hijacking vào tập tin
modsecurity_session_hijacking.conf
[root@vanbien activated_rules]# vi modsecurity_ session_hijacking.conf
Sau đó lưu lại, thử nghiệm và kiểm tra tập tin log trong /opt/modsecurity/var/log: [17/Jun/2015:21:44:19 +0700]
[www.hoangchinhthang.com/sid#1159438][rid#7fe4d0013 140][/][2] Warning. Operator EQ matched 1 at SESSION:IS_NEW. [file "/opt/modsecu
rity/etc/crs/activated_rules/ modsecurity_ session_hijacking.conf"] [line " 24"] [id "981054"] [msg "Invalid SessionID Submitted."]
Đến đây mọi tiến trình cài đặt mod_security đã xong. Tiếp theo, tôi cấu hình cho tường lửa iptables được tích hợp sẵn trên bản phân phối của Linux trên máy chủ cơ sở dữ liệu để chỉ cho phép máy chủ web và máy chủ ứng dụng kết nối đến máy chủ cơ sở dữ liệu thông qua cổng 3306.
/sbin/iptables -A INPUT -i eth0 -s 123.30.209.22 -p tcp –destination-port 3306 -j ACCEPT