1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số phương pháp bảo mật cho máy chủ Apache. Cài đặt và thử nghiệm module ModSecurity

53 1,8K 20

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 53
Dung lượng 684,69 KB

Nội dung

Một số phương pháp bảo mật cho máy chủ Apache. Cài đặt và thử nghiệm module ModSecurity CHƯƠNG I. TỔNG QUAN MÁY CHỦ WEB APACHE 1. Giới thiệu về máy chủ web (web server) 2. Máy chủ web Apache 3. Một số biện pháp bảo mật cho máy chủ web Apache CHƯƠNG II. MODULE MODSERCURITY. (có tất tần tật)

Trang 1

HỌC VIỆN KỸ THUẬT MẬT MÃ

KHOA AN TOÀN THÔNG TIN

BÀI TẬP LỚN MÔN AN TOÀN MẠNG MÁY TÍNH

NGHIÊN CỨU MỘT SỐ PHƯƠNG PHÁP BẢO

MẬT CHO MÁY CHỦ WEB APACHE.

CÀI ĐẶT VÀ THỬ NGHIỆM MODULE

MODSECURITY.

Cán bộ hướng dẫn: Cao Minh Tuấn Sinh viên thực hiện:

Lớp: AT9A

Hà Nội, 06 - 2016

Trang 2

HỌC VIỆN KỸ THUẬT MẬT MÃ

KHOA AN TOÀN THÔNG TIN

BÀI TẬP LỚN MÔN AN TOÀN MẠNG MÁY TÍNH

Nghiên cứu một số phương pháp bảo mật

cho máy chủ Web Apache.

Cài đặt và thử nghiệm Module ModSecurity.

Nhận xét của cán bộ hướng dẫn:

Điểm chuyên cần:

Điểm báo cáo:

Xác nhận của giáo viên:

Trang 3

MỤC LỤC

Trang 4

DANH MỤC HÌNH ẢNH VÀ BẢNG BIỂU

Trang 5

LỜI NÓI ĐẦU

Sự phát triển của công nghệ thông tin hiện nay cùng với sự phát triển nhanh chóng của Internet và thương mại điện tử Nhu cầu cần có một kênh thông tin đại diện cho Nhà nước, các doanh nghiệp, cá nhân trở nên cần thiết

Do vậy, các website và ứng dụng web đang trở nên phổ biến và đồng nghĩa với việc nguy cơ mất an toàn thông tin tăng theo Chuyện gì sẽ xảy ra nếu một website bị hack? Nó đồng nghĩa với việc kênh thông tin của Nhà nước, doanh nghiệp cá nhân bị mất kiểm soát, rò rỉ nhưng thông tin bí mật hay tổn thất về kinh

tế … Để giải quyết vấn đề này, việc bảo mật cho website là điều cần thiết

Bài viết này:

Nghiên cứu một số phương pháp bảo mật cho máy chủ Web Apache Cài đặt và thử nghiệm Module ModSecurity.

Cung cấp cho bạn một số phương pháp để bảo vệ web server mà cụ thể là Apache Server Đồng thời tìm hiểu chi tiết hơn về Module ModSecurity, một Module quan trọng cho Web Server để phòng chống các cuộc tấn công từ hacker

Bài viết gồm 2 nội dung chính:

Chương I Tổng quan máy chủ Web Apache

Chương II Module ModSecurity

Nhóm sinh viên thực hiện:

- Phạm Quốc Đạt

- Nguyễn Việt Tiến

- Hoàng Quang Thụy

- Nguyễn Thành Đạt

- Mai Trọng HoàngChúng em xin được cảm ơn thầy Cao Minh Tuấn đã giảng dạy và giúp đỡ chúng

em thực hiện đề tài này!

Hà Nội, 06 – 2016

Trang 6

CHƯƠNG I TỔNG QUAN MÁY CHỦ WEB APACHE

1 Giới thiệu về máy chủ web (web server)

Cũng giống như những phần mềm khác mà chúng ta cài đặt trên máy tính, Web server là một ứng dụng phần mềm Nó được cài đặt, và chạy trên máy tính – máy chủ dùng làm Web Server, nhờ có chương trình này mà người sử dụng có thể truy cập đến các thông tin của trang Web từ một máy tính khác ở trên mạng (Internet, Intranet)

Máy chủ Web Server là máy chủ có dung lượng lớn, tốc độ cao, được dùng để lưu trữ thông tin như một ngân hàng dữ liệu, chứa những website đã được thiết kế cùng với những thông tin liên quan khác (các mã Script, các chương trình, và các file Multimedia)

Web Server có khả năng gửi đến máy khách những trang Web thông qua môi trường Internet (hoặc Intranet) qua giao thức HTTP – giao thức được thiết kế

để gửi các file đến trình duyệt Web (Web Browser), và các giao thức khác

Tất cả các Web Server đều có một địa chỉ IP (IP Address) hoặc cũng có thể

có một Domain Name Giả sử khi bạn đánh vào thanh Address trên trình duyệt của bạn một dòng http://www.abc.com.vn sau đó gõ phím Enter bạn sẽ gửi một yêu cầu đến một Server có Domain Name là www.abc.com.vn Server này sẽ tìm trang Web có tên là index.html (trang chủ) rồi gửi nó đến trình duyệt của bạn

Bất kỳ một máy tính – máy chủ nào cũng có thể trở thành một Web Server bởi việc cài đặt lên nó một chương trình phần mềm Server và sau đó kết nối vào Internet

Khi máy tính của bạn kết nối đến một Web Server và gửi đến yêu cầu truy cập các thông tin từ một trang Web nào đó, Web Server Software sẽ nhận yêu cầu và gửi lại cho bạn những thông tin mà bạn mong muốn

Web Server Software còn có thể được tích hợp với CSDL (Database), hay điều khiển việc kết nối vào CSDL để có thể truy cập và kết xuất thông tin từ CSDL lên các trang Web và truyền tải chúng đến người dùng

2 Máy chủ web Apache

Apache hay chương trình máy chủ HTTP là một chương trình dành cho

máy chủ đối thoại qua giao thức HTTP Apache chạy trên các hệ điều hành tương

tự như Unix, Microsoft Windows, Novell Netware và các hệ điều hành khác Apache đóng một vai trò quan trọng trong quá trình phát triển của mạng web thế giới (World Wide Web)

Được phát triển bởi Apache Software Foundation, là một open-source Web server miễn phí, tuy nhiên Apache không hề thua kém các phần mềm máy chủ web khác Ngược lại, Apache rất ổn định, linh hoạt và mạnh mẽ, được coi là sự-lựa-chọn-tốt-nhất cho các giải pháp web server

Apache web server mang lại nhiều ưu điểm Có thể kể đến:

Trang 7

- Linh hoạt, mạnh mẽ (Apache có 3 chế độ làm việc : winnt, prefork và worker Mạnh mẽ với worker, ổn định với prefork, winnt là mức hoạt động thấp nhất).

- Hỗ trợ đầy đủ những giao thức HTTP trước đây như HTTP/1.1

- Có thể cấu hình và mở rộng các module

- Cung cấp source code đầy đủ với license không hạn chế

- Chạy được trên đa dạng Hệ điều hành (Window, Unix, Linux, Netware 5.x,

3 Một số biện pháp bảo mật cho máy chủ web Apache

Theo theo thống kê tháng 9 của Netcraft, Apache là máy chủ web được dùng nhiều nhất trên Internet (chiếm đến 64,52% thị phần) Cho nên đây là mục tiêu hàng đầu của các Hacker Việc bảo mật cho máy chủ web Apache là vô cùng quan trọng, tránh việc mất quyền điều khiển cũng như mất mát dữ liệu

Dưới đây là một số phương pháp làm tăng tính an toàn khi sử dụng máy chủ web Apache:

- Web server Apache là dịch vụ duy nhất hiện hữu trên hệ thống

- Chỉ có những modules nào tuyệt đối cần thiết mới được cho phép hoạt động

- Server nên giảm thiểu tối đa vấn đề tiết lộ những thông tin của chính server - Apache server phải chạy bằng UID/GID riêng biệt (tín chỉ cá nhân, tín chỉ nhóm), không được dùng bất cứ process nào khác của hệ thống

- Các process của Apache phải có giới hạn nhất định đến hệ thư mục (chrooting);

- Không được có bất cứ chương trình dạng shell nào hiện hữu trong môi trường chrooted (/bin/sh, /bin/csh, v v )

Trang 8

Cập nhật liên tục

Việc Apache chạy trên hệ điều hành không có nghĩa là bạn không cần cập nhật Những lỗ hổng mới và những nguy cơ bảo mật luôn thường trực Bạn nên thường xuyên cập nhật để vá những lỗ hổng và sửa những lỗi bảo mật đó

Nếu đã cài đặt Apache cùng với trình quản lý gói của bản phân phối, bạn

có thể thực hiện cập nhật rất dễ dàng Và nếu cài đặt từ nguồn, cần đảm bảo rằng quá trình cập nhật sẽ không làm thay đổi module hay những thành phần phụ của website Ngoài ra nếu sử dụng PHP thì trong quá trình cập nhật Apache bạn phải đồng thời cập nhật cả hai

Vận hành Apache theo từng đối tượng

Apache thường được cài đặt cho nhiều nhóm hay nhiều người dùng Một trong những người hay mắc lỗi nhất là root user (có quyền như admin) mà hậu quả là tạo ra một số lỗi rất nghiêm trọng Hay nói theo cách khác cả Apache và MySQL đều do cùng một đối tượng người dùng hay nhóm người dùng vận hành Nếu một người gây ra lỗ hổng, thì người khác có thể phải hứng chịu hậu quả Biện pháp tốt nhất để tránh tình trạng này đó là đảm bảo Apache được vận hành như một Apache dành cho một người dùng hay một nhóm nhất định Để thực hiện điều này, bạn chỉ cần mở file httpd.conf và kiểm tra những dòng có dạng:

User Group

Sau đó thay đổi các mục này thành:

User apache Group apache

Nếu gặp lỗi xảy ra trong khi thay đổi có nghĩa là nhóm hay người dùng khai báo không tồn tại và bạn cần phải tạo mới

Tắt bỏ những dịch vụ không cần thiết

Có một vài dịch vụ hay tính năng bạn sẽ muốn tắt bỏ hoặc chặn Tất cả những dịch vụ này có thể được hủy bỏ trong file httpd.conf Những dịch vụ/tính năng này có thể gây ra một số lỗi sau:

- Directory browsing: Dịch vụ này được hủy bỏ trong một thẻ Directory (thường được khởi chạy trong gốc tài liệu) bằng cách sử dụng Options Directive và cài đặt nó với “-Indexing”

- Server side Includes: Đây là một công cụ khác có thể hủy bỏ trong thẻ Directory bằng cách sử dụng Options Directive và cài đặt nó với “-Includes”

- CGI execution: Nếu website không sử dụng đến CGI, bạn nên tắt bỏ dịch vụ này bằng cách sử dụng Options Directive và cài đặt nó với “-ExecCGI” trong tag thư mục

- Symbolic links: Cài đặt công cụ này trong một thẻ Directory với FollowSymLinks”

Trang 9

“ None: Bạn có thể tắt bỏ mọi tùy chọn (theo những cách trên) bằng cách sử dụng “None” với Option Directive.

Hủy bỏ những module không sử dụng

Apache gồm có rất nhiều module Để xem có bao nhiêu module đang chạy, dùng lệnh grep –n LoadModule httpd.conf từ trong thư mục cấu hình Apache Lệnh này sẽ hiển thị cho bạn mọi module mà Apache đang tải cùng với vị trí dòng của những module này Để hủy bỏ những module không cần thiết, bạn chỉ cần bổ sung kí tự “#” vào đầu dòng của module cần tắt bỏ

Giới hạn truy cập

Giả sử bạn có một mạng intranet chứa nhiều thông tin quan trong của công ty và bạn không muốn cho người ngoài mạng riêng của mình truy cập vào nhóm thông tin này Để làm được điều đó, bạn chỉ cần giới hạn truy cập vào mạng nội bộ của bạn bằng cách bổ sung đoạn mã dưới đây vào file httpd.conf trong thẻ Directory của bạn:

Order Deny, Allow Deny from all Allow from 192.168.1.0/16

Trong đó 192.168.1.0/16 là địa chỉ mạng nội bộ của bạn Sau khi thực hiện thay đổi trong file httpd.conf, bạn cần khởi động lại Apache để áp dụng các thay đổi này

Hạn chế yêu cầu

Tấn công từ chối dịch vụ (DoS) luôn có thể xay ra khi bạn cho phép khối lượng yêu cầu lớn trên Apache Apache có một lệnh điều hướng là LimitRequestBody được đặt trong thẻ thư mục Số lượng giới hạn phụ thuộc vào nhu cầu của website Theo mặc định thì LimitRequestBody được đặt giá trị vô hạn

Sử dụng module mod_security

Một trong những module quan trọng nhất của Apache là mod_security Module này xử lý nhiều tác vụ, gồm lọc, lọc biểu thức thông thường, mã hóa URL

và ẩn địa chỉ server Việc cài đặt mod_security cũng khá phức tạp Trước tiên

bạn phải bổ sung hai lệnh điều hướng unique_id và security2 vào vùng module của Apache Sau đó chạy lệnh:

service apache2 configtest

Khi nhận được thông báo Syntax OK là bạn đã cài đặt thành công

(*Chi tiết cài đặt và sử dụng mod_sercurity sẽ được giới thiệu ở phần II)

Không cho phép duyệt tìm bên ngoài tài liệu gốc

Trang 10

Việc cho phép duyệt bên ngoài tài liệu gốc có thể gây ra nhiều vấn đề Nếu không cần thiết phải bật dịch vụ này, tốt nhất bạn nên tắt bỏ nó Trước tiên, bạn

sẽ phải hiệu thẻ Directory của thư mục gốc như sau:

Ẩn số phiên bản của Apache

Một trong những biện pháp phòng ngừa tốt nhất đó là giấu những thông tin

về dịch vụ của bạn đến mức có thể Một trong những thông tin cần ẩn đi đó là số phiên bản của Apache Làm như vậy bạn sẽ ngăn những người dùng không mong muốn có thể xâm nhập một cách nhanh chóng vào máy chủ web của bạn Bạn chỉ cần bổ sung đoạn mã sau vào trong thẻ Directory của tài liệu gốc:

ServerSignature Off ServerTokens Prod

Ẩn file cấu hình httpd.conf

Một trong những biên pháp bảo mật tốt nhất đó là làm ẩn đi file httpd.conf Bởi vì file này chứa nhiều thông tin cấu hình cũng như những cài đặt Nếu mọi người không thấy nó, nghĩa là họ không thể thay đổi nội dung bên trong, và tất nhiên những cài đặt của bạn vẫn được giữ nguyên Để ẩn đi file httpd.conf bạn chỉ cần sử dụng lệnh sau:

chattr +i /path/to/httpd.conf

Trong đó /path/to/httpd.conf là đường dẫn tới file cấu hình Apache

Trang 11

CHƯƠNG II MODULE MODSERCURITY.

1 Tổng quan về ModSecurity

1.1 Giới thiệu

Mod_Security là một module mở rộng cho các chương trình web server như Apache, Nginx, IIS và hoạt động như một firewall tại lớp ứng dụng web Cùng với sự gia tăng về phương pháp tấn công web thì mod_security cũng đã cập nhật những rule và đưa ra nhiều cách phòng chống trong mã nguồn của chương trình Một số tính chất mà mod_security có thể dùng làm Web Application Firewall:

Tính thụ động (Passivity)

ModSecurity sẽ không thực thi các tác vụ nếu như người quản trị viên không chỉ định công việc cụ thể cho chương trình, việc này là khá quan trọng trong một ứng dụng có nhiệm vụ phân tích nguy cơ như ModSecurity Mọi cảnh báo sẽ được thực hiện thông qua cơ chế phân tích và quyết định tương tác với

hệ thống sẽ do người quản trị thực hiện

Buffering

Chức năng buffer (đệm) đóng vai trò khá quan trọng trong cơ chế hoạt động của ModSec Việc này có ý nghĩa khi các request gởi đến ứng dụng web thì phải thông qua ModSecurity trước khi đến ứng dụng xử lý và những response cũng sẽ được phân tích trước khi trả về phía client Cơ chế này là cách duy nhất để có thể ngăn chặn các cuộc tấn công thời gian thực, các dữ liệu mà ModSecurity nhận được và phân tích sẽ được lưu trữ trong RAM (bao gồm request body và response data)

Trang 12

ModSecurity hỗ trợ ghi nhật ký các gói tin HTTP: request headers, request body, response header, response body nhằm hỗ trợ người quản trị phân tích nguy cơ mà hệ thống đang gặp phải để có thể ra quyết định kiểm soát

Rule Engine

Các tập mẫu trong ModSecurity đóng vai trò quan trọng trong việc phát hiện các dạng tấn công và thực hiện phòng chống ModSecurity cùng phát triển với dự án OWASP phát triển các mẫu để phân tích và phòng chống các tấn công hệ thống web (Tham khảo https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project)

Các phân nhóm mà CRS hỗ trợ:

• HTTP Protection

• Real-time Blacklist Lookups

• Web-based Malware Detection

• HTTP Denial of Service Protections

• Common Web Attacks Protection

• Automation Detection

• Integration with AV Scanning for File Uploads

• Tracking Sensitive Data

• Trojan Protection

• Identification of Application Defects

• Error Detection and Hiding

1.3 Cấu trúc rules

Tất cả các hoạt động trong ModSecurity hầu hết sẽ liên quan đến hai phần chính là: cấu hình (configuration) và các tập luật (rule) Phần cấu hình chỉ định cách thức xử lý dữ liệu, trong khi các rule sẽ quyết định thực hiện các hành vi (action) với dữ liệu đã được xử lý

Một ví dụ về rule: SecRule ARGS "<script>" log,deny,status:404

Cấu trúc chuẩn của một rule trong ModSecurity bao gồm 3 phần chính:

SecRule VARIABLES OPERATOR ACTIONS

VARIABLES: xác định vị trí dữ liệu mà ModSecurity sẽ tìm kiếm mẫu Trong ví

dụ trên, tham số ARGS nhằm chỉ định tìm kiếm mẫu trong tất cả các tham số trong request

OPERATOR: chỉ định cách mà ModSecurity sẽ tìm kiếm mẫu Các operator được dùng theo dạng Regular expression nhằm tạo nên cơ chế phân tích linh động cho các rule

ACTIONS: chỉ định hành động mà ModSecurity sẽ thực hiện khi có một mẫu được

so trùng Trong ví dụ trên, phần action được viết log, deny, status:404 có nghĩa là: khi trùng mẫu <script> trong gói tin thì thực hiện ghi log, deny gói tin bằng cách sử dụng mã trạng thái 404 (Not found)

Trang 13

1.4 Quy trình xử lý

Trong ModSecurity mỗi phiên phân tích sẽ thực hiện lần lượt qua 5 bước (pha), tại mỗi bước ModSecurity sẽ thực thi các rule tương ứng nhằm phát hiện và phòng chống các khai thác

Hình : Quy trình xử lý của ModSecurity

Request Header (1)

Đây là bước đầu tiên trong quá trình thực hiện phân tích gói tin Mục đích của bước này nhằm cho phép người viết rule tương tác với các request trước khi thực hiện các yêu cầu trong phần HTTP body Phần này khá quan trọng để phân tích các khai thác dựa vào HTTP method cũng như dựa vào URL như SQL Injection, Reflect XSS, Local file include …

Request body (2)

Bước 2 là quá trình kiểm tra chính trong quá trình client gởi request đến server, phần này sẽ có hiệu quả khi người dùng cố sử dụng phương thức POST hoặc PUT để upload tập tin lên phía server Việc kiểm tra này bảo đảm dữ liệu

Trang 14

đưa lên server là an toàn, tránh tình trạng upload mã độc hoặc các dạng tấn công nhưng Stored XSS, Ajax Injection …

Response headers (3)

Những request đã được xử lý tại server sẽ được trả về cho ModSecurity kiểm tra trạng thái trong phần respone header Trước khi phần respone body được đọc thì ModSecurity sẽ dựa vào tập rule để xác định có cần kiểm tra nội dung dữ liệu trong phần body hay không

Ví dụ: mã trạng thái trả về là 404 (Not found) thì lúc này sẽ không cần kiểm tra nội dung gói tin trả về

Response body (4)

Sau khi ModSecurity đã hoàn thành việc kiểm tra tại respone header thì nội dung trong phần body sẽ được kiểm tra so trùng với mẫu trong tập lệnh Việc này

là khá hiệu quả để phát hiện và phòng chống xâm nhập trong trường hợp bước 1

và 2 không phát hiện được tấn công

Ví dụ: trong khai thác SQL injection, nếu hacker cố gắng sử dụng một số công nghệ evasion thì việc phát hiện khi request là khó khăn Khi khai thác thành công, ModSecurity sẽ phân tích kết quả trong gói tin trả về để phát hiện nếu như câu truy vấn thành công

Logging (5)

Việc ghi log sẽ ghi nhận các cảnh báo cũng như quy trình làm việc của ModSecurity

1.5 Khuyến cáo khi triển khai thực tế

Nhằm bảo đảm tính tính linh động trong việc phát hiện cũng như bảo vệ theo thời gian thực, ModSecurity cần sử dụng một lượng tài nguyên CPU và RAM để bảo đảm hoạt động đúng mục đích khi triển khai Việc sử dụng tài nguyên phụ thuộc nhiều vào phần cấu hình và cách triển khai trên từng hệ thống khác nhau Dưới dây là một số điểm chính cần chú ý:

ModSecurity sẽ phân tích các cú pháp mà apache sẽ thực hiện, vì thế hệ thống của bạn sẽ có thể tăng tiêu thụ tài nguyên CPU để thực hiện tác vụ

Việc phân tích linh động trong một số trường hợp sẽ cần một lượng tài nguyên khá lớn để phân tích Ví dụ: XML, JSON, AJAX …

Việc quản lý dữ liệu upload từ phía client yêu cầu thêm tài nguyên I/O (như HDD), trong một số trường hợp sẽ gây ra tình trạng trùng lặp dữ liệu trên hệ thống

Dữ liệu trong request và resopone được lưu trữ đệm trong RAM để thực hiện các tác vụ chặn theo thời gian thực

Mỗi rule trong phần cấu hình sẽ sử dụng CPU (cho phần operartor) và RAM (dùng để chuyển đổi dữ liệu đầu vào trước khi qua phiên phân tích)

Trang 15

Việc sử dụng các Regular expression sẽ tốn các tài nguyên nhiều hơn.Các hoạt động I/O sẽ tăng cao cho việc ghi nhật ký trong quá trình hoạt động của ModSecurity (full transaction loging).

Khi triển khai thực tế ModSecurity, bạn cần chú ý đến những điều trên để

có thể xác định được tài nguyên cần thiết để ModSecurity hoạt động ổn định Trong trường hợp bạn không thể thay đổi tài nguyên phần cứng, thì tôi khuyên bạn nên thường xuyên theo dõi trạng thái hoạt động của hệ thống, rút ra những kinh nghiệm nhằm điều chỉnh hoặc giảm bớt chức năng, ruleset phù hợp mà vẫn đảm bảo an toàn cho việc hoạt động Nếu như tổ chức mà bạn đang quản lý sử dụng một số công nghệ ảo hóa thì việc điều chỉnh tài nguyên sẽ thuận tiện hơn

Có thể thực hiện trên các Distro khác như Ubuntu, Fedora…

- Thực hiện tải mã nguồn về:

wget

http://www.modsecurity.org/download/modsecurity-apache_2.5.11.tar.gz

01:52:06 (161 KB/s) - `modsecurity-apache_2.5.11.tar.gz' saved [1338425/1338425]

- Thực hiện tra tính toàn vẹn của mã nguồn (việc này không bắt buộc nhưng chúng ta nên có thói quen kiểm tra để đảm bảo rằng mã nguồn đã không bị can thiệp vào dưới bất kỳ hình thức nào) Có thể sử dụng MD5 hay PGP để làm việc này Ở đây sử dụng PGP

+ Đầu tiên cần download chữ ký

wget

http://www.modsecurity.org/download/modsecurity-apache_2.5.11.tar.gz.asc

02:04:38 (14.8 MB/s) - `modsecurity-apache_2.5.11.tar.gz.asc' saved [189/189]

+ Download Publick Key:

gpg keyserver pgp.mit.edu recv-key E77B534D

gpg: Total number processed: 1

Trang 16

yum install httpd-devel (hoặc apt-get install apache2-dev)

+ libxml2: Kiểm tra bằng cách:

yum install libxml2-devel (hoặc apt-get install libxml2-dev)

+ pcre: Kiểm tra bằng cách:

whereis pcre

pcre: /usr/include/pcre.h /usr/share/man/man3/pcre.3.gz

Nếu chưa có thì chúng ta phải cài thêm gói pcre-devel :

yum install pcre-devel (hoặc apt-get install pcre-dev)

+ mod_unique_id: Là mod thường đã được biên dịch cùng Apache Có thể

kiểm tra lại bằng cách tìm trong httpd.conf dòng:

LoadModule unique_id_module modules/mod_unique_id.so

Nếu chưa có, chúng ta phải thêm vào với nội dung như trên

– Chuyển vào thư mục chứa mã nguồn và tiến hành biên dịch:

cd modsecurity-apache_2.5.11/apache2/

+ Tạo Make file:

Trang 17

configure: creating /config.status

config.status: creating Makefile

config.status: creating build/apxs-wrapper

config.status: creating mlogc-src/mlogc-batch-load.pl

config.status: creating t/run-unit-tests.pl

config.status: creating t/run-regression-tests.pl

config.status: creating t/gen_rx-pm.pl

config.status: creating t/csv_rx-pm.pl

config.status: creating t/regression/server_root/conf/httpd.confconfig.status: creating /tools/rules-updater.pl

config.status: creating mlogc-src/Makefile

config.status: creating mod_security2_config.h

+ Tiến hành biên dịch:

make

Sau khi biên dịch thành công file mod_security2.so sẽ được tạo ra trong thư mục libs

- Tích hợp ModSecurity vào Apache

Để Apache nhận ra sự tồn tại của ModSecurity chúng ta cần copy

mod_security2.so đến thư mục chứa modules của apache, đối với distro CentOS

LoadModule security2_module modules/mod_security2.so

- Quy định file cấu hình ModSecurity

Chúng ta có thể cấu hình trực tiếp các thông số và rule của ModSecurity vào file httpd.conf Nhưng để cho rõ ràng và đảm bảo không sai sót trong quá trình thực hiện – gây ảnh hưởng Apache, Chúng ta nên tạo một file cấu hình riêng và sau

đó include vào Trong CentOS các file cấu hình riêng mặc định chứa trong /etc/httpd/conf.d/

Trang 18

# rule thu nghiem block tat ca request co uri chua "hacker"

SecRule REQUEST_URI "hacker"

</IfModule>

Thực hiện thử nghiệm để kiểm tra hoạt động của ModSecurity Tiến hành tạo 2 file trong thư mục web, hacker.html và index.html chẳng hạn Khi chúng ta truy cập vào file index.html thì trình duyệt trả về kết quả bình thường Còn khi truy cập vào hacker.html thì trình duyệt báo lỗi :

SecRule được sử dụng để tạo các rule cho ModSecurity Cú pháp rất đơn giản

SecRule Target Operator [Actions]

Target (mục tiêu): Quy định cụ thể mục tiêu của request hoặc response

mà chúng ta muốn kiểm tra Trong ví dụ kiểm cơ bản được đưa ra trong phần

trước, sử dụng biến có tên REQUEST_URI, trong đó có các URI được request

trên server, để nhận diện và chặn bất cứ Client nào truy cập vào các vị

trí /hacker.html Hiện có hơn 70 biến có thể được sử dụng để tạo rule.

Ngoài ra còn có một loại biến đặc biệt được gọi là biến collection có thể

chứa nhiều đối số Một ví dụ về collection làARGS, trong đó có chứa tất cả các

đối số được truyền trong một chuỗi truy vấn hoặc thông qua một request POST

Phần Operator xác định phương pháp và so sánh khớp dữ liệu để kích

hoạt Action Với Operator, mặc định là @rx

Cuối cùng, Actions (hành động) là một danh sách các hành động được

thực hiện nếu phù hợp (matching) rule Action có thể là allow (cho phép) hoặc deny (từ chối) các request; và quy định cụ thể các mã trạng thái (status code) khi trả về (response) cho client Nếu không có action nào được quy định, các action mặc định của action SecDefaultAction sẽ được sử dụng (rule chứa action này thường được khai báo đầu tiên)

Để làm rõ hơn, chúng ta xem ví dụ Giả sử chúng ta là một chủ doanh nghiệp nhỏ bán sách dạy nấu ăn ở định dạng file PDF trên website Để lôi kéo khách hàng mua sách, chúng ta cung cấp một chương mẫu có chứa các công thức nấu ăn ngon nhất trong cuốn sách, mà họ có thể tải về miễn phí để xem trước khi quyết định mua

Công việc kinh doanh đang ổn định, nhưng sau đó đột nhiên chúng ta nhận được đơn khiếu nại qua email nói rằng trang web của chúng ta rất chậm hoặc không truy cập được

Trang 19

Khi nhìn vào log chúng ta nhận thấy rằng, một IP kết nối tới server web tràn ngập với các request cho các chương mẫu Các chuỗi user-agent thấy được

có tên Red Bullet Downloader User-agent này của các chương trình Download

nhanh

Giải pháp đưa ra để giải quyết vấn đề này là dùng Mod Securiry để ngăn chặn các user-agent này download Rules được viết như sau

SecRule REQUEST_HEADERS:User-Agent "Red Bullet" "deny,nolog"

Trong ví dụ trên, REQUEST_HEADERS là một Collection chứa tất cả các

trường trong thông điệp header (message header) được gởi đến bởi client và trong header này chứa User-agent Vì vậy, ta sử dụng từ khoá cho user-agent là

“Red Bullet” vì từ Red Bullet này thường xuyên xuất hiện trong các header được gởi đển từ client Và Action là deny – là từ chối và nolog là không ghi lại log

2.2.1.1 Biến và bộ chọn lọc Collection

Hiện khoản hơn 70 biến có sẵn ModSecurity sử dụng hai loại biến: biến Standard, đơn giản chỉ chứa một giá trị duy nhất, và biến Collection, có thể chứa nhiều hơn một giá trị Một ví dụ về một Collection là REQUEST_HEADERS, trong

đó chứa tất cả các trường trong thông điệp header mà Client gởi tới Server, chẳng hạn như User-agent hoặc Referer

Để truy cập vào một trường trong collection, chúng ta ghi tên collection, tiếp theo là dấu hai chấm và sau đó là tên của trường hoặc tuỳ chọn mà chúng ta muốn truy cập Ví dụ:

SecRule REQUEST_HEADERS:Referer "bad-referer.com"

Trong trường hợp kiểm tra toàn bộ dữ liệu trên tất cả các collection Ví dụ, nếu chúng ta muốn kiểm tra sự hiện diện của chuỗi script có thể sử dụng rules sau đây:

SecRule ARGS "script"

Nếu muốn kiểm tra thêm các chuỗi truy vấn được gửi là

username=john&login=yes, chúng ta có thể mở rộng rule bằng cách.

SecRule ARGS:john|ARGS:login "script"

Các collection có sẵn trong ModSecutity 2.5

Trang 20

2.2.1.2 Chuyển đổi giữa các Collection

TX Collection còn được gọi là các Transaction collection Chúng ta có thể

sử dụng nó để tạo ra các biến phục vụ riêng cho mình

SecRule REQUEST_URI “passwd” “pass,setvar:tx.hackscore=+5”

SecRule TX:HACKSCORE “@gt 10” deny

Trong hai rule đầu tiên sử dụng action setvar để thiết lập các biến collection Thực hiện tạo biến hackscore và tăng giá trị lên 5 nếu rule được thực thi (matching rule) Đến khi biến hackscore có giá trị bằng 10 thì thực thi rule thứ hai sẽ được thực thi với action là deny

(Có thể loại bỏ biến bằng cách sử dụng setvar cú pháp setvar:!tx.hackscore)

Có ba collection có thể được sử dụng cho mục đích này:

– IP

– SESSION

– USER

Collection IP được sử dụng để lưu trữ thông tin về IP của người sử dụng

Nó có thể được sử dụng để lưu trữ IP ở các trường hợp như: Số lần truy cập không thành công vào tài nguyên trên server, hoặc số lượng các request của người dùng…

Trước khi sử dụng một trong các collection, chúng ta cần khởi tạo nó Điều này được thực hiện bằng cách sử dụng các action initcol:

SecAction initcol:ip=%{REMOTE_ADDR},nolog,pass

Để thực hiện được rule trên, phải chắc chắn đã khai báo đường dẫn đến thư mục lưu trữ cho ModSecurity

SecDataDir /var/log/httpd/modsec_data

Trang 21

2.2.1.4 Kiểm tra nhiều biến

ModSecurity có thể kiểm tra nhiều biến cùng một lúc, mục đích để kết hợp

so sánh (matching) một chuỗi

SecRule ARGS|REQUEST_HEADERS "park" deny

Dấu (|) được sử dụng để tách các tên biến Nó cũng có nhiều chức năng logic giống như “or” trong lập trình

2.2.1.5 Sử dụng dấu “ khi viết rule

Chúng ta xem xét các rule sau:

SecRule REQUEST_URI "secret" "deny"

SecRule REQUEST_URI secret deny

SecRule REQUEST_URI "secret place" deny

Hai rule đầu đều đúng và có tác dụng như nhau Dấu (“) được sử dụng để chứa các cụm từ cách nhau bởi có dấu space Các đơn từ thì có thể dùng hoặc

Sử dụng (“) còn để nhóm các thông điệp ghi log

SecRule REQUEST_URI "secret place" "deny,log,msg:'Someone tried

to access the secret place!'"

Nếu chúng ta muốn đặt dấu (‘) trong thông điệp cần ghi log Thực hiện chèn dấu (\) trước dấu (‘)

SecRule REQUEST_URI "secret place" "deny,log,msg:'Someone\'s trying to hack us!'"

2.2.1.6 Tạo rule kết chuỗi – chain

Để kết hợp nhiều rule hoạt động liên tiếp với nhau, ta sử dụng chain

Ví dụ: Người quản trị web server muốn chặn một số người download nhiều file gây ảnh hưởng đến web server, nhưng một số khách hàng khác cũng download mà không gây ảnh hưởng đến webserver bởi họ chỉ download vài file

là xong và ta không chặn những người này Và người quản trị server quyết định chặn những người có user-agent có chứa “Red Bullet” và IP của người này nằm trong dãy IP của một ISP xác định Với từ chain trong action Sử dụng nó, chúng

ta có thể tạo ra một chain rule mà nếu phù hợp tất cả các rule trong chain thì action của chain sẽ được thực hiện

Ví dụ đây là rule cấm người dùng với user-agent có từ “Red Bullet”

SecRule REQUEST_HEADERS:User-agent “Red Bullet” deny

Rule thứ hai là chỉ những client nằm trong dãy IP 192.168.1.0-192.168.1.255:

Trang 22

Có thể thêm nhiều rule vào chain rule Nếu chúng ta muốn thêm điều kiện là các rule chỉ hoạt động trước 6:00 giờ tối, ta sẽ thêm một rule thứ ba.

SecRule REQUEST_HEADERS:User-agent “Red Bullet” “chain,deny”

SecRule REMOTE_ADDR “^192\.168\.1\.” “chain”

SecRule TIME_HOUR “@lt 18”

Từ @lt viết tắt của “less-than” là nhỏ hơn Thuộc cú pháp so sánh số (matching number), sẽ được trình bày chi tiết ở phần 2.2.3

2.2.1.7 Rule IDs

Chúng ta có thể quản lý các rule bằng cách đặt ID cho mỗi rule

SecRule ARGS "login" "deny,id:1000"

Một số cú pháp thông thường

– SecRuleRemoveById: Gỡ bỏ rule có ID là

– SecRuleUpdateActionById: Cập nhật rule có ID là

Trang 23

2.2.2.Giới thiệu về biểu thức chính quy – Regular expressions

Trường hợp trên đối với một ký tự u, nếu có nhiều hơn một ký tự chúng ta

có thể nhóm lại bởi hai dấu ngoặc đơn () Ví dụ với hai từ previous và previously

Cú pháp sẽ là previous(ly)?

Trang 24

SecRule REMOTE_HOST "\.microsoft\.com$" deny

Cả hai rule đề có tác dụng như sau là chặn các host truy cập từ xa từ tập đoàn Microsoft Mục tiêu của @rx mà bỏ qua rule thứ hai bởi hai rule đều có mục đích như nhau

Trang 25

Có 5 giai đoạn (phase)

Một rule được thực hiện đúng từng phase theo thứ tự Điều này có nghĩa

là ModSecurity duyệt tất cả các rule trong phase 1 (“REQUEST_HEADERS”) Sau đó, đến phase 2…

Trong mỗi phase, rule được xử lý theo thứ tự mà chúng xuất hiện trong các tập tin cấu hình Chúng ta có thể hiểu khi có action, ModSecurity sẽ duyệt các tập tin năm lần, một lần cho từng phase

Trong thời gian xử lý ModSecurity chỉ xem xét rule thuộc pha hiện đang xử

lý, và những rule được áp dụng theo thứ tự chúng xuất hiện trong các tập tin cấu hình

Phase LOGGING đặc biệt ở chỗ nó luôn luôn được thực hiện cả khi request đã được cho phép hay từ chối trong các phase trước đó Ngoài ra, một

Trang 26

khi phase LOGGING bắt đầu, chúng ta không thể thực hiện bất kỳ action ngăn chặn nào vì response đã được gửi cho người truy cập.

Vì vậy, chúng ta phải cẩn thận không để cho bất kỳ action nào trái quy định được truyền vào rule ở phase 5 Nếu không sẽ gây lỗi làm Apache không khởi động được Nếu chúng ta đặt rule sau đây trước các rule thuộc phase 5 sẽ ngăn chặn được lỗi này xảy ra (nhưng phải đặt sau các rule của phase trước đó)

SecDefaultAction "phase:5,pass"

2.2.5.Chức năng chuyển đổi

ModSecurity cung cấp một số chức năng chuyển đổi mà chúng ta có thể

áp dụng cho các biến và các collection Những biến đổi được thực hiện trên một bản sao của dữ liệu được kiểm tra, có nghĩa là các HTTP request hoặc response ban đầu vẫn được giữ nguyên, không thay đổi

Chức năng này rất quan trọng Nếu chúng ta muốn phát hiện tấn công XSS (cross-site scripting), chúng ta phải phát hiện mã JavaScript bất kể trường hợp nó được viết in hay viết thường Để làm điều này, chức năng chuyển đổi có thể được áp dụng để so sánh một chuỗi viết hoa với chuỗi viết thường

SecRule ARGS "<script" "deny,t:lowercase"

Rule trên sẽ chặn tất cả các URL chứa chuỗi >;<;script bất kể chữ hoa thường, vd sCript; >;<;scripT

Ngày đăng: 26/06/2016, 00:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w