Mô hình dùng snort sensor cài đặt trên firewall pfSense dùng để chống tấn công mạng
Hình 4.22-Mô hình bảo vệ phát hiện tấn công kết hợp pfSense cùng với Snort sensor
Hình 4.23-Mô hình bảo vệ mạng với DMZ
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
4.1.3.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). 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 và hình dưóiđây:
Hình 4.24-Tỉ lệ nguồn tấn công mạng (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.
Trong phần 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.
4.1.3.2 Khái quát Snort
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ề.
Hãy khảo sát 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, đíchcũngnhư 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ư“ruleoption”, 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.
4.1.3.3 Cài đặt và cấu hình Snort trên tường lửa pfSense
Mở trình duyệt và nhập IP của pfSense, Ví dụ trong bài này dùng IP:
https://192.168.15.30
Trang đăng nhập sẽ hiện ra :
Hình 4.25-Đăng nhập vào pfSense
Nhập vào username và password. Mình sử dụng như mặc định :
- Username: admin
- Password: pfsense
Sau khi login thành công, bạn sẽ được chuyển qua Dashboard.
Hình 4.26-Dashboard của pfSense
Hình 4.27-Menu Package Manager trong pfSense
Ở Package Manager, truy cập vào Available packages tab. Ở Available packages tab, tìm Snort và install package Snort.
Hình 4.28-Cài đặt snort
Trong ví dụ này, ta dùng version Snort là 3.2.9.10 để cài đặt. Bấm Install và chờ đợi tiến trình cài đặt hoàn thành.
Hình 4.29-Chọn Snort
Ở tab setting Global, chọn Snort Subscriber Rules và thực hiện những cấu hình sau:
- Enable Snort VRT – Yes
- Snort Oinkmaster Code – Enter you OikCode
Nếu không có Oinkcode, hãy truy cập trang web của Snort, (https://www.snort.org/users/sign_up) tạo account và lấy Oinkcode miễn phí.
Hình 4.30-Nhập Oinkcode
Truy cập Rules Update Settings, và thực hiện những cấu hình sau:
- Update Interval – chọn khoảng thời gian gửi gói tin update Interval
Hình 4.31- Cấu hình update time.
Đến General Settings và thực hiện những cấu hình sau :
- Remove Blocked Hosts Interval – 1 Hour
- Remove Blocked Hosts After Deinstall – No
- Keep Snort Settings After Deinstall – Yes
- Startup/Shutdown LoggingUpdate Interval – no
Hình 4.32- Cấu hình Block.
Ở mục Updates tab, bấm vào nút Updates rules để download Rule Snort.
Hình 4.33- Update rules để tải Rule Snort.
Ở tab Snort, bấm vào nút add và thực hiện những cấu hình sau :
- Interface – chọn Interface chạy dịch vụ Snort
Hình 4.34- Thiết lập Interface để Snort kiểm soát lưu thông mạng.
Đến mục Alert Settings, và thực hiện những cấu hình sau :
- Send Alerts to System Log – Yes
- Block Offenders – Enable if you want to block offenders
- Kill States – Yes
- Which IP to Block – BOTH
Hình 4.35- Thiết lập trạng thái log của Snort.
Sau khi kết thúc cấu hình, bấm vào nút Save.
Ở màn hình giao diện Snort, tiến hành edit Interface :
Hình 4.36- Chỉnh sửa interface WAN (em0).
- Resolve Flowbits – Yes
- Use IPS Policy – Yes
- IPS Policy Selection – Connectivity
Hình 4.37- enable tính năng IPS và chọn policy tên Connectivity.
Sau khi kết thúc cấu hình, bấm vào nút Save, và Start service Snort ở Interface này.
Hình 4.38- Hoàn tất quá trình chỉnh sửa card WAN.
Như vậy là chúng ta đã hoàn thành cài đặt và cấu hình service Snort trên Interface.