Sử dụng thêm một thiết bị phát hiện và phòng chống xâm nhập (IDS/IPS) để bổ trợ cho

Một phần của tài liệu Xây dựng hệ thống bảo vệ ứng dụng web dựa trên tường lửa modsecurity và iptables (Trang 55 - 85)

(IDS/IPS) để bổ trợ cho thiết bị tường lửa, đồng thời bảo vệ tốt hơn cho vùng máy chủ bên trong để ngăn chặn các các hình thức tấn công như:

• Các cuộc tấn công từ chối dịch vụ (DOS/DDOS) vào hệ thống máy chủ

• Các cuộc tấn công vào các giao thức như HTTP, HTTPs, FTP, DNS, SMTP…

3 - Sử dụng một tường lửa ứng dụng web để bảo vệ hệ thống website được tốt hơn (do những hạn chế của thiết bị IPS không thể phân tích được các yêu cầu HTTP nên không thể ngăn chặn được các tấn công như SQL Injection, XSS, CSRF, …):

• Che dấu thông tin phiên bản, phần mềm mà hệ thống đang sử dụng vận hành nhằm chống lại tấn công http fingerprinting, dò quét điểm yếu

• Chặn các lệnh SQL độc hại như “or 1=1”, “union” ... để chống tấn công SQL Injection

• Chặn các thông điệp từ máy khách có các từ như “javascript:”, “vbscript:” ... để ngăn chặn tấn công XSS

• Giới hạn số yêu cầu tới máy chủ Web nhằm hạn chế tấn công từ chối dịch vụ

• Giới hạn các cổng dịch vụ, chỉ mở các cồng cần thiết như 80, 443, 53, 22, 25, 110 trên máy chủ Web

• Ngăn chặn tấn công Directory Traversal bằng việc không cho phép sử dụng từ ..

• Ngăn chặn các yêu cầu xấu nhằm lộ mã nguồn trang web.

Do mô hình của HVKTMM là mô hình nhỏ, mới chỉ có một máy chủ web, đồng thời đã sử dụng một thiết bị IPS rồi, do đó việc sử dụng thêm một thiết bị tường lửa ứng dụng web của CheckPoint, Imperva nữa thì không hợp lý. Vì vậy ta có thể xây dựng một tường lửa ứng dụng dựa trên các phần mềm

chủ Web. Do đó giải pháp đưa ra ở đây là ta sẽ sử dụng các phần mềm tường lửa nguồn mở. Trong bài đồ án này em sử dụng tường lửa ModSecurity và Iptables với cá lý do:

• Cả 2 phần mềm đều là phần mềm nguồn mở do đó có nhiều tài liệu hướng dẫn, triển khai.

• Đồng thời 2 phần mềm này đều miễn phí, vì vậy có thể dễ dàng tải về sử dụng

• Chọn phần mềm tường lửa ModSecurity vì ModSecurity là một dạng tường lửa ứng dụng Web, do đó có thể ngăn chặn được các hình thức tấn công phổ biến hiện nay như SQL Injection, XSS, Directory Traversal, Http fingerprinting....

• Chọn phần mềm tường lửa Iptables vì Iptables là một tường lửa được tích hợp sẵn trong các phiên bản hệ điều hành Linux do đó khi sử dụng Iptables sẽ không làm giảm hiệu năng của hệ thống. Đồng thời do tường lửa Iptables có thể chặn gói tin ở mức IP do đó có thể hỗ trợ để hạn chế các cuộc tấn công từ chối dịch vụ (DoS, DdoS).

• Về tính năng, cả hai tường lửa hoạt động tốt, có thể ngăn chặn tốt các tấn công như các thiết bị tường lửa ứng dụng web của Imperva và Checkpoint.

3.4. Giới thiệu tường lửa Iptables và ModSecurity

3.4.1. Tường lửa Iptables

3.4.1.1. Khái niệm

Iptables là một tường lửa ứng dụng lọc gói dữ liệu rất mạnh, miễn phí và có sẵn trên Linux.. Netfilter/Iptables gồm 2 phần là Netfilter ở trong nhân Linux và Iptables nằm ngoài nhân. Iptables chịu trách nhiệm giao tiếp giữa người dùng và Netfilter để đẩy các luật của người dùng vào cho Netfiler xử lí. Netfilter tiến hành lọc các gói dữ liệu ở mức IP. Netfilter làm việc trực tiếp trong nhân, nhanh và không làm giảm tốc độ của hệ thống.

Iptables do Netfilter Organiztion viết ra để tăng tính bảo mật trên hệ thống Linux. Iptable cung cấp các tính năng sau:

• Tích hợp tốt với kernel của Linux.

• Có khả năng phân tích package hiệu quả.

• Lọc package dựa vào MAC và một số cờ trong TCP Header

• Cung cấp chi tiết các tùy chọn để ghi nhận sự kiện hệ thống

• Cung cấp kỹ thuật NAT

• Có khả năng ngăn chặn một số cơ chế tấn công theo kiểu DoS

Hình 3.3: Kiến trúc Netfilter/Iptables 3.4.1.2. Xử lí gói trong IPtables

Tất cả mọi gói dữ liệu đều được kiểm tra bởi iptables bằng cách dùng các bảng tuần tự xây dựng sẳn (queues). Có 3 loại bảng này gồm:

Mangle: Chịu trách nhiệm thay đổi các bít chất lượng dịch vụ trong TCP header như TOS ( type of servie). TTL (Time to live) và MARK.

Filter: Chịu trách nhiệm lọc gói dữ liệu. Nó gồm 3 quy tắc nhỏ (chain) để giúp ta thiết lập các nguyên tắc lọc gói gồm:

- Forward chain: Lọc gói khi đi đến các server khác.

- Input chain: Lọc gói khi đi vào khỏi server

- Output chain: Lọc gói khi đi ra khỏi server

NAT:Gồm 2 loại:

- Pre-routing chain: Thay đổi địa chỉ đích (Destination) của gói dữ liệu khi cần thiết .

- Post-routing chain: Thay đổi địa chỉ nguồn (Source) của gói dữ liệu khi cần thiết .

Hình 3.5: Một ví dụ về đường đi của gói dữ liệu

Đầu tiên gói dữ liệu đến mạng A, tiếp dó được kiểm tra bởi mangle tables: PREROUTING Chain (nếu cần). Tiếp theo là kiểm tra gói dữ liệu bởi NAT tables: PREROUTING chain để kiểm tra xem gói dữ liệu có cần DNAT hay không? DNAT sẽ thay đổi địa chỉ đích của gói dữ liệu. Rồi gói dữ liệu được vận chuyển đi.

Nếu gói dữ liệu đi vào một mạng được bảo vệ, thì nó sẽ được lọc bởi FORWARD chain của filter tables và nếu cần gói dữ liệu sẽ được SNAT

Nếu gói dữ liệu được định hướng đi vào bên trong firewall. Nó sẽ được kiểm tra bởi INPUT chain của NAT trong mangle tables (nếu cần), tiếp đó là kiểm tra trong OUTPUT chain của NAT tables để xem DNAT (DNAT sẽ thay đổi địa chỉ đích) có cần hay không và OUTPUT chain của filter tables sẽ kiểm tra gói dữ liệu nhằm phát hiện các gói dữ liệu không được phép gửi đi. Cuối cùng trước khi gói dữ liệu được đưa ra Internet, SNAT and QoS sẽ được kiểm tra trong POSTROUTING chain .

3.4.1.3. Những Modun Kernel cần thiết

Modun Kernel cần thiết để hoạt động một vài chương trình ứng dụng của iptables .Một số modun iptables_nat module, ip_conntrack_ftp module,

• iptables_nat module cần cho một số loại NAT

• ip_conntrack_ftp module cần cho việc thêm vào giao thức FTP.

• ip_conntrack module giữu trạng thái liên kết với giao thức TCP

• ip_nat_ftp module cần được tải cho máy chủ FTP sau một firewall NAT.

Chú ý: file /etc/sysconfig/iptables không cập nhật những Modun tải về, vì vậy chúng ta phải thêm vào những trạng thái đó vào file /etc/rc.local và chạy nó tại cuối mỗi lần boot lại .

Những đoạn mã trong phần này bao gồm những trạng thái được lưu trong file

/etc/rc.local:

# File: /etc/rc.local

# Module to track the state of connections modprobe ip_conntrack

# Load the iptables active FTP module, requires ip_conntrack modprobe

# ip_conntrack_ftp

# Load iptables NAT module when required modprobe iptable_nat # Module required for active an FTP server using NAT modprobe ip_nat_ftp

3.4.2. Tường lửa ModSecurity

3.4.2.1. Khái niệm

ModSecurity là một bộ máy phát hiện và phòng chống xâm nhập dành cho ứng dụng web (hoặc 1 web application firewall). Hoạt động như một module của máy chủ web Apache, mục đích của ModSecurity là tăng cường bảo mật cho các ứng dụng web, bảo vệ chúng khỏi các loại tấn công đã biết và chưa biết.

3.4.2.2. Các khả năng của ModSecurity

- 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ý.

- Anti-evasion techniques : paths và parameters được chuẩn hoá trước khi phân tích để chống evasion techniques.

- Understanding of the HTTP protocol : mod_security là web application firewall nên nó có khả năng hiểu được HTTP protocol. Mod_security 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 ...vv.

- POST payload analysis: ngoài việc cản lọc dựa trên HTTP Header, mod_security có thể dựa trên nội dung của POST requests.

- Audit logging : mọi requests đều có thể được ghi lại (bao gồm cả POST ) để chúng ta có thể xem xét sau nếu cần.

- HTTPS filtering: mod_security có thể phân tích HTTPS.

- Compressed content filtering: mod_security sẽ phân tích sau khi đã decompress các request data.

ModSecurity hoạt động dựa trên 4 nguyên tắc:

- Flexibility (tính linh hoạt): ModSecurity có thể dễ dàng cho chúng ta xây dựng cho các nhân hay một tổ chức có nhu cầu chặn, đánh giá và phân tích lưu lượng HTTP. ModSecurity đạt được sự linh hoạt là ở chỗ cung cấp một luật mạnh về ngôn ngữ, cái cho phép một các chính xác những hành động kết hợp với những tính năng đặc biệt để áp dụng những luật cần thiết.

- Passiveness (tính thụ động): ModSecurity hạn chế những tương tác không cần thiết đến những hoạt động của hệ thống đến khi xấy dựng các luật cho ModSecurity.

- Predictability (tính có thể đoán trước)

- Feature quality over quantity (Tính năng chất lượng hơn số lượng)

Thành phần chính của ModSecurity là rule engine, nó được thiết kế để làm việc với giao thức HTTP một cách linh hoạt và mềm dẻo, dễ dàng sử dụng cho người quản trị.

Ngoài ra với những người mới bắt đầu, chưa quen với việc tạo rule, Breach Security cung cấp một tập hợp các core rule đáp ứng cho những chức năng bảo vệ chung như:

- HTTP protection – Phát hiện các hành vi vi phạm đối với giao thức HTTP và cách sử dụng các chính sách cục bộ.

- Common Web Attacks Protection – Phát hiện và phòng chống lại các cuộc tấn công phổ biến.

- Automation detection – Phát hiện và phòng chống các chương trình bots, quét cổng, và một số các hành động có hại khác.

- Trojan Protection – Phát hiện sự truy cập vào của Trojan - Error Hiding – Che dấu các lỗi đã được gửi đến máy chủ.

3.4.2.3. Quá trình xử lý

Hình 3.6: Quá trình xử lý của ModSecurity

Modsecurity cho phép ta đặt rule tại một trong năm thời điểm trong chu kỳ xử lý của Apache như sau:

- Phase Request Header: Rule được đặt tại đây sẽ được thực hiện ngay sau khi Apache đọc request header, lúc này phần request body vẫn chưa được đọc.

- Phase Request Body: Đây là thời điểm các thông tin chức năng chung đưa vào được phân tích và xem xét, các rule mang tính application-oriented thường được đặt ở đây. Ở thời điểm này ta đã nhận đủ các request argument và phần request body đã được đọc. ModSecurity hỗ trợ ba loại mã hoá request body:

-- multipart/form-data dùng để truyền file -- text/xml dùng để phân tich dữ liệu XML .

- Phase Response Header: Đây là thời điểm ngay sau phần response header được gửi trả về cho client. Ta đặt rule ở đây nếu muốn giám sát quá trình sau khi phần response được gửi đi.

- Phase Response Body: đây là thời điểm ta muốn kiểm tra những dữ liệu HTML gửi trả về

- Phase logging: Đây là thời điểm các hoạt động log được thực hiện, các rules đặt ở đây sẽ định rõ việc log sẽ như thế nào, nó sẽ kiểm tra các error message log của Apache. Đây cũng là thời điểm cuối cùng để ta chặn các kết nối không mong muốn, kiểm tra các response header mà ta không thể kiểm tra ở phase 3 và phase 4.

3.4.2.4. File cấu hình

Mod_security là tường lửa ứng dụng web thuộc loại rules-based, nghĩa chúng ta cần thiết lập các luật (rules) để mod_security hoạt động. Các rules này được thể hiện dưới dạng các chỉ thị (directives) và có thể đặt trực tiếp trong file cấu hình Apache (thông thường là httpd.conf).

Khi chúng ta không biết chắc chắn mod_security đã được kích hoạt hay chưa thì có thể đặt các cấu hình:

<IfModule>

#Modsecurity configuration #...

</IfModule>

Ngoài ra có thể đặt các cấu hình này vào một file riêng, chẳng hạn modsecurity.conf và sau đó chúng ta cần thêm vào httpd.conf:

3.4.2.5. Ghi nhật ký (Logging) a. Nhật ký gỡ rối(Debug Loging)

Sử dụng SecFilterDebugLog directive lựa chọn file để ghi lại các thông tin debug

SecFilterDebugLog logs/modsec_debug_log

Ta có thể thay đổi mức độ chi tiết các thông tin được log thông qua directive:

SecFilterDebugLevel 4

Giá trị log có thể thay đổi từ 0-9 :

0 - none (this value should always be used on production systems) 1 - significant events (these will also be reported in the error_log)

2 - info messages

3 - more detailed info messages ...

b. Ghi nhật ký giám sát (Audit Logging)

Apache log ít thông tin vì thế nó không cho phép chúng ta có thể lần ngược các bước của kẻ tấn công. Mod_security hỗ trợ audit loging với đầy đủ thông tin và từ đó có thể lần ngược lại quá trình của kẻ tấn công, cũng như là chỉnh sửa các rules cho hợp lý tránh bị “false positive”. Có 2 directives:

SecAuditEngine On

Dưới đây là một ví dụ của audit log :

==378bfd37==============================

Request: conmaz.com 203.160.1.170 - - [20/Feb/2006:02:21:52 --0600] "GET /favicon.ico HTTP/1.1" 403 285 "-" "-" - "-" --- GET /favicon.ico HTTP/1.1 Cookie: rocker=r0xker Host: conmaz.com Connection: Keep-Alive

mod_security-message: Access denied with code 403. Pattern match "^$" at HEADER("User-Agent")

mod_security-action: 403 HTTP/1.1 403 Forbidden Content-Length: 285

Keep-Alive: timeout=5, max=29 Connection: Keep-Alive

Content-Type: text/html; charset=iso-8859-1 --378bfd37--

Khi SecFilterScanPOST on thì POST payload sẽ luôn được kèm theo trong audit log

c. Tuỳ biến thông tin nhật ký

SecAuditEngine chấp nhận 4 giá trị sau :

On – log tất cả các requests

Off – không log

RelevantOnly – chỉ log những gì được sinh ra bởi các filtering rules

DynamicOrRelevant – log những request tạo ra nội dung động hoặc những requests được sinh ra bởi các filtering rules.

Ngoài ra mod_security còn hỗ trợ log dựa vào status code , ví dụ ta cần log lại những requests gây ra lỗi 5xx :

SecAuditLogRelevantStatus ^5

3.5. Triển khai phần mềm tường lửa ModSecurity kết hợp với Iptables để bảo vệ hệ thống Web

Các nguy cơ có thể đến với hệ thống máy chủ Web là:

• Các lỗi Zero-day tồn tại trong các phiên bản Apache, MySQL mà hệ thống đang chạy.

• Các nguy cơ tồn tại trong mã nguồn của WebSite dễ gây ra các tấn công vào các lỗ hổng đó như SQL Injection, Command Injection, Cookies Injection dẫn đến thông tin tài khoản quản trị, tài khoản của người sử dụng bị lộ dẫn đến kẻ tấn công có thể sửa đổi nội dung làm sai lệch thông tin.

• Đồng thời đối với tổ chức xã hội, hệ thống Web luôn cập nhật các bản tin, do đó các nguy cơ tấn công từ bên trong (từ vùng Internal, vùng VPN) là cũng có thể xảy ra.

• Nguy cơ bị tấn công từ chối dịch vụ (DoS, DdoS) làm cho hệ thống không còn khả năng phục vụ các yêu cầu chính đáng.

• Tấn công vào các dịch vụ khác trong hệ thống để tấn công vào máy chủ Web.

Trong quá trình triển khai, ta sẽ xây dựng trực tiếp tường lửa IPtables và tường lửa ModSecurity lên máy chủ web, nhiệm vụ của hai phần mềm tường lửa như sau nhằm ngăn chặn một số dạng tấn công cơ bản:

• Xây dựng Chroot Jail để giới hạn phạm vi của website

• Giới hạn các cổng dịch vụ được mở

• Giới hạn số icmp đến máy chủ web

• Giới hạn số yêu cầu HTTP trong một thời điểm

• Ngăn chặn tấn công SQL Injection

• Ngăn chặn tấn công XSS

• Chặn một số mã trả lời

• Chặn tấn công Directory Traversal

• Chặn tấn công PHP Code Injection

• Chặn tấn công Web Leacher

• Chặn tấn công dò quét điểm yếu.

Tất cả việc cài đặt và cấu hình được sử dụng hoàn toàn trên hệ điều hành Centos 5.4

3.5.1. Cài đặt ModSecurity và Iptables trực tiếp trên máy chủ Web

Công việc đầu tiên là ta tiến hành cài đặt các dịch vụ Web, MySQL, PHP:

# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel- release-5-3.noarch.rpm

# wget http://rpms.famillecollet.com/el5.i386/remi-release-5- 6.el5.remi.noarch.rpm

# rpm -Uvh epel-release-5* remi-release-5*

# wget http://dag.wieers.com/rpm/packages/rpmforge- release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm # rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

Một phần của tài liệu Xây dựng hệ thống bảo vệ ứng dụng web dựa trên tường lửa modsecurity và iptables (Trang 55 - 85)

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

(85 trang)
w