Giải pháp sử dụng Snort để phát hiện một số kiểu tấn công phổ biến hiện nay vào các ứng dụng Web
1. Giới thiệu
Theo số liệu thống kê từ công ty bảo mật hàng đầu hiện nay Acunetix, thời gian gần đây số lượng các cuộc tấn công vào ứng dụng web đã tăng lên nhanh chóng (75% các cuộc tấn công được thực hiện là ở lớp ứng dụng web) [Xem 1]. Trong đó hai kĩ thuật tấn công được các hacker sử dụng phổ biến là cross-site scripting và sql injection [Xem 2] và hình dưói đây:
Nguồn: acunetix.com
Kiểu tấn công cross-site scripting (hay còn gọi là xss) được các hacker tiến hành bằng cách nhúng các thẻ script vào một url (uniform resource locator) và tìm cách lừa người dùng nhấn vào những liên kết này. Khi đó đoạn mã độc hại này sẽ được thực thi trên máy tính của nạn nhân. Kĩ thuật thực hiện các cuộc tấn công kiểu này không có gì phức tạp và chủ yếu là hacker lợi dụng sự tin cậy giữa người dùng và server (bởi vì các url dường như xuất phát từ nguồn đáng tin cậy) cùng với việc không thẩm tra kĩ càng dữ liệu vào/ra ở phía server để từ chối phục vụ những url bị chèn thêm các mã độc hại. Còn SQL Injection liên quan đến một kĩ thuật chèn các từ khoá, các lệnh của ngôn ngữ SQL (là ngôn ngữ dùng để truy vấn, thao tác trên một cơ sở dữ liệu quan hệ) vào dữ liệu đầu vào của các ứng dụng web để điều khiển quá trình thực thi câu lệnh SQL ở server.
Bài báo này mô tả một kĩ thuật để phát hiện các kiểu tấn công SQL injection và cross-site scripting dùng Snort. Phần một của bài báo sẽ giới thiệu về snort . Phần 2 của bài này sẽ mô tả cách viết các luật cho snort để chống lại hai kiểu tấn công nói trên.
2. Vậy snort là gì?
Snort là một kiểu IDS (Instruction Detection System). Nói ngắn gọn IDS là một hệ thống được cài đặt trên mạng (hay máy tính) của bạn và nhiệm vụ của nó là giám sát những gói tin vào ra hệ thống của bạn. Nếu một cuộc tấn công được phát hiện bởi Snort thì nó có thể phản ứng bằng nhiều cách khác nhau phụ thuộc vào cấu hình mà bạn thiết lập, chẳng hạn như nó có thể gởi thông điệp cảnh báo đến nhà quản trị hay loại bỏ gói tin khi phát hiện có sự bất thường trong các gói tin đó.
Tuy nhiên snort cũng có điểm yếu. Đó là tương tự như các bộ quét virus (virus scanner), snort chỉ có thể chống lại các cuộc tấn công một cách hiệu quả nếu như nó biết được dấu hiệu (signature) của các cuộc tấn công đó. Dựa vào điểm này, các hacker "cao thủ" có thể điều chỉnh các cuộc tấn công để thay đổi signature của cuộc tấn công đó. Từ đó các cuộc tấn công này có thể "qua mặt" được sự giám sát của snort.
Như vậy có thể thấy rằng, để snort hoạt động một cách hiệu quả thì một trong những yếu tố quan trọng cần phải chú ý là các luật viết cho snort. Khi snort hoạt động, nó sẽ đọc các tập luật, giám sát luồng dữ liệu chạy qua hệ thống và sẽ phản ứng nếu có bất kì luồng dữ liệu nào phù hợp với tập luật của nó. Cụ thể hơn, tập luật có thể được tạo ra để giám sát các nỗ lực quyét cổng (scanning), tìm dấu vết (footprinting), hoặc nhiều phương pháp khác mà các hacker dùng để tìm cách chiếm quyền hệ thống. Tập luật này có thể được tạo ra bởi người dùng hoặc người dùng có thể truy cập đến trang chủ của snort là: http://www.snort.org để lấy về.
Bây giờ chúng ta hãy xem một luật được viết cho snort và tìm hiểu xem snort hiểu chúng như thế nào.
alert icmp !$HOME_NET any -> $HOME_NET any (msg:"IDS152 - PING BSD";
content: "|08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17|"; itype: 8;
depth: 32;)
Phần đầu của luật mô tả cách hành động (rule's action) là alert, giao thức (ICMP) và địa chỉ IP nguồn, đích cũng như thông tin về port. Phần này gọi là “rule header”. Ở đây, $HOME_NET chỉ là một biến đại diện cho mạng của bạn và nó có thể được khai báo như sau: var HOME_NET 192.168.1.1/24
Phần còn lại của luật, được biết như “rule option”, chứa thông điệp báo động và thông tin sẽ được snort sử dụng để kiểm tra xem liệu luật đó có phù hợp (match) với gói tin không. Để hiểu rõ hơn chúng ta sẽ xem chi tiết của một lệnh ping sau đây:
07/23-09:46:41.866911 192.168.1.10 -> 192.168.1.1 ICMP TTL:50 TOS:0x0 ID:2403
ID:8474 Seq:256 ECHO
36 12 7B 39 1B C6 0B 00 08 09 0A 0B 0C 0D 0E 0F 6.{9............
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./
30 31 32 33 34 35 36 37 01234567
Khi snort giám sát các gói tin xuyên qua mạng của ta. Luật trên của chúng ta yêu cầu snort thẩm tra tất cả các gói tin ICMP nào không phải bắt nguồn từ mạng của ta “!$HOME_NET” và đến mạng của ta “->HOME_NET”. Thông số depth trong luật được gán là 32, nghĩa là snort sẽ tìm trong 32 byte đầu của gói tin để tìm kiếm nội dung có trong trường “content”. Nếu nội dung của trường “content” trong luật phù hợp với nội dung trong gói tin (ở trong trường hợp này là từ byte số 9 đến byte 24), snort sẽ phát sinh ra một thông báo, thông báo này sẽ được log lại. Nội dung của thông báo được log lại là: "IDS152 - PINGBSD". Trường “itype” chỉ kiểu của một gói tin ICMP, trong trường hợp này là 8 tức là một gói tin ICMP có kiểu echo request.
3. Kết luận
Trong phần một của bài này đã giới thiệu hai kiểu tấn công phổ biến hiện nay vào lớp ứng dụng web đó là kiểu cross-site scripting và sql injection. Đồng thời phần này cũng giới thiệu ngắn gọn snort, một trong những IDS được sử dụng nhiều nhất cho đến thời điểm này và cách snort hiểu các luật như thế nào.
Phần 2 của bài này sẽ mô tả cách thiết kế các luật để chống lại các kiểu tấn công trên.
Tài liệu tham khảo:
1. http://www.acunetix.com/websitesecurity/webapp-security.htm
2. http://www.acunetix.com/websitesecurity/cross-site-scripting.htm
3. http://www.securityfocus.com
-------------------------------------------------------
Nguyễn Tăng Hưng
Bộ phận an ninh mạng - Trung tâm đào tạo quản trị & an ninh mạng Athena.
Địa chỉ: 2 Bis Đinh Tiên Hoàng, DaKao, Quận 1, Tp HCM :: Điện thoại: 8244041
Website: www.athena.edu.vn