Trích Yếu
Intrusion Detection System (IDS) là hệ thống phòng chống và phát hiện xâm nhập thông minh nhất hiện nay. IDS phát hiện những tín hiệu, biểu hiện, hành vi của người xâm nhập trước khi có thể gây thiệt hại đến hệ thống mạng như làm cho dịch vụ mạng ngừng hoạt động hay mất dữ liệu. Từ đó chúng ta có thể ngăn chặn thông qua các biện pháp kỹ thuật khác nhau.
Đề tài của chúng tôi với mục tiêu là xây đựng một hệ thống Snort – IDS trên hệ điều hành Ubuntu, hệ thống này với mục đích phát hiện và phòng chống các hành động tấn công và thâm nhập trong mạng. Do đó đề tài tập trung nghiên cứu vào phương thức hoạt động và vận hành của hệ thống Snort – IDS đồng thời đưa ra cách cài đặt và thiết lập một hệ thống IDS hoàn chỉnh trên hệ điều hành Ubuntu. Bên cạnh đó chúng tôi đưa ra giải pháp nhằm tăng cường khả năng hoạt động và vận hành của hệ thống thông qua việc sử dụng barnyard để tăng cường khả năng ghi lại log của hệ thống và oinkmaster để tự động liên tục cập nhật rule.
Ngoài việc sử dụng hệ thống rule có sẵn, đề tài tìm hiểu cách tạo ra rule theo yêu cầu nhằm giám sát và kiểm tra đối với một luồng thông tin cụ thể khi mà hệ thống rule của snort không thể đáp ứng.
Thông qua việc nghiên cứu, đề tài của chúng tôi đưa một cái nhìn tổng quan về hệ thống Host-based IDS và Network-based IDS, về sự khác và giống nhau của hai hệ thống từ đó có thể ứng dụng trong mô hình mạng thực tế.
Mục Lục
Trích Yếu. ii
Mục Lục. ii
Lời Cảm Ơn. ii
Nhận Xét Của Người Hướng Dẫn. ii
Nhập Đề. 2
I. Nguyên Lý Hoạt Động Của Snort 2
1. Quá trình khởi động của snort 2
2. Xử lý gói tin trong snort 2
3. Detection Engine. 2
4. Khảo sát Detection Engine. 2
5. Snort Inline Mode. 2
II. Preprocessor. 2
1. Preprocessor frag3. 2
2. Preprocessor stream5. 2
3. Một số preprocessor khác. 2
III. Hệ Thống Rule Trong Snort 2
1. Tổng quan về rule trong snort 2
2. Cấu trúc rule. 2
3. Thứ tự các rule trong rule base của snort 2
4. Oinkmaster. 2
IV. Snort Output Plug-in. 2
1. Output log và alertvới tốc độ nhanh. 2
2. Output log và alert vào database. 2
3. Output log và alert vào Unix syslog. 2
4. Output log và alert vào một file cụ thể. 2
5. Output log và alert vào file CSV 2
6. Output log và alert ra nhiều dạng khác nhau. 2
V. Network-Based và Host-Based IDS. 2
1. Nework-Based IDS. 2
2. Host-Based IDS. 2
3. Triển Khai IDS Trong Mạng. 2
VI. Các Hình Thức Khai Thác Và Tấn Công Hệ Thống Phổ Biến. 2
1. Port scan. 2
2. DOS (Denial of Services). 2
3. ARP Spoofing. 2
VII. Cài Đặt Snort 2
1. Một số tùy chọn khi biên dịch snort 2
2. Cấu trúc database của snort 2
3. Cài đặt Snort với Snort Report (Single Snort Sensor). 2
4. Cài đặt Snort với BASE (Single Snort Sensor). 2
5. Cài đặt snort với BASE (Multiple SnortSensors). 2
6. Cài đặt Snort inline. 2
VIII. Lab Kiểm Tra Hoạt Động Của Snort 2
1. Rule để kiểm tra hoạt động của snort 2
2. Rule phát hiện truy cập web. 2
3. Phát hiện portscan trong Snort 2
4. Phát hiện DOS với snort 2
5. Phát hiện ARP attack. 2
Kết Luận. 2
Tài Liệu Tham Khảo. 2
Nhập Đề
Khái niệm tấn công một máy tính bằng việc tác động trực tiếp vào máy đó đã trở thành quá khứ khi mà ngày nay con người có thể truy cập vào một máy chủ ở cách xa mình nửa vòng trái đất để lấy thông tin website, mail Hacker cũng làm những công việc tương tự nhưng họ tận dụng những lỗ hỏng của hệ thống nhằm chiếm quyền sử dụng hay ngăn chặn sự truy cập của người dùng khác vào hệ thống đó.
Nhằm ngăn chặn những truy nhập trái phép vào hệ thống người ta sử dụng những thiết bị bảo mật như Firewall hay các thuật toán mã hóa. Thế nhưng đối với những máy chủ chạy những dịch vụ như web, mail thì những công cụ bảo mật này vẫn chưa hoàn hảo vì đây là những máy chủ được mọi người từ bên ngoài truy cập (public server). Hacker sẽ lợi dụng chính những dịch vụ này để tấn công vào hệ thống. Điều đó là nguyên nhân dẫn đến sự cần thiết sử dụng công cụ IDS (Intrusion Detection System) với mục đích là dò tìm và nghiên cứu các hành vi bất thường và thái độ của người sử dụng trong mạng, phát hiện ra các hành vi lạm dụng đặc quyền để giám sát hệ thống mạng.
102 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 7347 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Xây dựng hệ thống ids – Snort trên hệ điều hành linux, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
Ví dụ: output alert_syslog: LOG_AUTH LOG_ALERT
Output log và alert vào một file cụ thể
Snort hỗ trợ fast alert và alert full mode, fast alert sẽ xuất alert ra với chỉ một dòng vào file log. Dạng log này sẽ nhanh hơn so với full alert mode vì snort không cần in ra toàn bộ header của gói tin vào file log như với full alert mode.
output alert_fast: alert.fast
output alert_full: alert.full
Output của fast alert có dạng sau đây
11/05-22:08:59.705515 [**] [1:469:3] ICMP PING NMAP [**] [Classification: Attempted Information Leak][Priority: 2] {ICMP} 192.168.206.129 -> 192.168.100.5
Output log và alert vào file CSV
Snort cho phép xuất log ra thành file CSV (comma-separated value)
Cú pháp như sau: output alert_csv: [ [ []]]
filename: tên của log file
format: định dạng của file log. File log được xuất ra theo option mặc định sau đây:
timestamp
siggenerator
sigid
sigrev
msg
proto
src
srcport
dst
dstport
ethsrc
ethdst
ethlen
tcpflags
tcpseq
tcpack
tcplen
tcpwindow
ttl
tos
id
dgmlen
iplen
icmptype
icmpcode
icmpid
icmpseq
limit: kích thước giới hạn của file log
Ví dụ:
output alert_csv: /var/log/snort/csv.out timestamp,msg,srcip,sport,dstip,dport,protoname,itype,icode
Phần output được định dạng như sau:
"2004-11-06 00:32:05",ICMP PING NMAP,192.168.206.129,,192.168.100.5,,"ICMP",8,0
"2004-11-06 00:32:10",ICMP PING NMAP,192.168.206.129,,192.168.100.5,,"ICMP",8,0
"2004-11-06 00:35:35",SNMP request tcp,192.168.206.129,36252,192.168.100.5,161,"TCP",,
Output log và alert ra nhiều dạng khác nhau
Người dùng có thể cấu hình để snort xuất ra theo nhiều dạng log như ví dụ dưới đây:
output log_tcpdump: tcpdump.log
output database: log, mysql, user=root password=test dbname=db host=localhost
output alert_unified: filename snort.alert, limit 128
output log_unified: filename snort.log, limit 128
Network-Based và Host-Based IDS
Nhân tố làm cho snort trở nên hoạt động hiệu quả chính là vị trí và phạm vi mà snort hoạt động, trước khi tiến hành cài đặt snort ta cần phải quan tâm đến là hệ thống snort IDS đang bảo vệ đối tượng nào:
Một server riêng lẻ
Một hệ thống gồm nhiều server
Một subnet
Nework-Based IDS
Snort là một hệ NIDS, snort chuyển trạng thái card mạng sang chế độ promiscuous và xem xét từng gói tin mà snort bắt được và cảnh báo trên gói tin đó. Muốn NIDS hiệu quả thì NIDS cần kết hợp với span sport. Span port cho phép tất cả traffic trong mạng được sao chép và chuyển đến NIDS, điều này làm cho NIDS có thể giám sát được tất cả traffic trong mạng, do đó hiệu quả của việc trong việc sử dụng NIDS là rất lớn.
NIDS giám sát và giữ lại traffic theo giời gian thực ngay khi dữ liệu di qua mạng. NIDS thường sử dụng 2 interface một dùng để giám sát và giữ lại traffic, một interface còn lại dùng cho việc quản lý. Interface dùng để giám sát và giữ lại traffic thường sẽ không được gán địa chỉ, chính điều này làm cho nó trở thành một đối tượng trong suốt trong mạng và tránh bị phát hiện.
Ứng dụng mà snort NIDS sử dụng để monitor và capture traffic là libpcap. Libpcap là một thư viện được dùng bởi tcpdump, libpcap được thiết kế để thu thập dữ liệu của các gói tin từ kernel của hệ điều hành. Libpcap cung cấp dữ liệu cho NIDS từ đó có thể phân tích được nội dung dữ liệu, phát hiện được dấu hiệu của sự tấn công, công cụ dùng để tấn công…
Phương pháp và NIDS thường dùng để phát hiện phòng chống tấn công là:
Mẫu dữ liệu từ những cuộc tấn công trước
Tần số truy xuất vào hệ thống
Những sự kiện diễn ra không như bình thường
NIDS sẽ trở thành một vấn đề khó khăn khi triển khai nếu switch mà hệ thống mạng đang sử dụng không có span port và span sport không phải lúc nào cũng được hỗ trợ trên switch.
Host-Based IDS
Giống như network-based IDS, host-based IDS cũng có khả năng giám sát và giữ lại các gói tin. Thay vì hoạt động ở chế độ promiscuous mode giống như NIDS. HIDS chỉ giữ lại những gói tin của riêng cho host đó và HIDS có thể được cài lên nhiều hệ điều hành khác nhau, tuy nhiên không phải hệ điều hành nào củng có thể cài IDS. HIDS có thể giám sát từng host trong mạng ở mức độ chi tiết hơn so với NIDS. HIDS có thể giám sát từng port, từng sự kiện diễn ra trong host như sự thay đổi về quyền của user, sự thay đổi về những file quan trọng trong hệ thống. Ngoài ra HIDS có thể kiểm tra sự toàn vẹn của những file hệ thống cũng như giám sát những tiến trình khả nghi. Về phương pháp phát hiện và phòng chống tấn công HIDS hầu như giống so với NIDS.
Sau đây là bảng so sánh giữa HIDS và NIDS
Ưu điểm
Nhược điểm
Host-based
Có thể kiểm tra được liệu sự tấn công đã thành công hay thất bại.
Việc hoạt động không bị ảnh hưởng bởi băng thông hay mã hóa.
Biết được chi tiết tình trạng của host và có thể ngăn cản được sự tấn công
Có thể giám sát được một sự kiện cụ thể
Không phụ thuộc vào hệ thống switch
Ảnh hưởng đến tài nguyên của host.
Hoạt động phụ thuộc vào hệ điều hành.
Tốn kém khi mở rộng
Network-based
Cho phép triển khai trên toàn mạng với chi phí rẻ hơn so với HIDS
NIDS hoạt động ở chế độ thời gian thực
NIDS có thể phát hiện những cuộc tấn không thành công hoặc những hành động cố tình gây hại đến hệ thống.
NIDS độc lập với hệ điều hành. NIDS không phụ thuộc vào hệ điều hành được cài đặt trên host.
Thách thức trong việc triển khai trong môi trường switch.
Không thể chủ động ngăn cản tấn công.
Bảng so sánh giữa HIDS và NIDS
Triển Khai IDS Trong Mạng
Cách kết nối IDS vào mạng
Có nhiều cách để kết nối IDS vào mạng nhằm đảm bảo rằng IDS có thể giám sát và giử lại traffic hiệu quả nhất có thể. Nhưng bằng cách này hay cách khác traffic cần được tập trung vào IDS để dễ dàng cho việc phân tích.
Có 3 phương pháp chính sau đây:
Hình 1: IDS kết nối vào span port của switch
Hình 2: IDS được kết nối vào network TAP để monitor traffic
Hình 3: IDS được đặt inline
Trong hình trên, đường màu đỏ dùng để monitor traffic và đường đứt nét dùng cho việc quản lý IDS.
Trong hình 1, span port được sử dụng để giám sát và giử lại traffic, span port là một chức năng của switch, span port có thể được cấu hình đề chuyển tất cả traffic trên switch vào span port. Bằng cách này IDS có thể thấy được tất cả các traffic lưu thông trên mạng. Mặc dù hub có thể được dùng cho trường hợp này nhưng hub không phải là một sự lựa chọn tốt nhất.
Trong hình 2, IDS được kết nối vào network tap, network sẽ sao chép traffic và gửi đến IDS. Network TAP rất hữu hiệu trong việc khi hệ thống switch trong mạng không có span port. Network TAP hỗ trợ nhiều tốc độ traffic khác nhau từ 1Gbps đến 10 Gbps.
Trong hình 3, IDS sử dụng 3 interface và đặt trong chế độ inline có nghĩa là tất cả các traffic phải đi vào IDS sau đó mới được chuyển vào mạng. Nếu IDS kết nối vào span port thì đôi khi gói tin có thể bị bỏ sót, với trường hợp này thì tất cả các gói tin đi vào mạng đều được IDS giám sát và có thể giảm tải cho switch.
Vị trí triển khai snort
Tùy vào tính quan trọng và nhu cầu bảo mật mà của từng network segment là ta đưa ra từng chính sách cho từng network segment trong mạng. Ta có thể đặt snort tại một số vị trí sau đây:
Giám sát traffic trong vùng DMZ
Snort có thể được triển khai sau một SSL proxy hoặc trên một VPN server để IDS có thể giám sát được traffic sau khi được giải mã.
IDS có thể được triển khai trong mạng LAN
Đối với những server quan trọng như web, mail, database ta có thể triển khai HIDS.
Triển khai IDS bên ngoài router hoặc firewall để giám sát traffic trước khi đi và trong mạng.
IDS có thể được dùng để giám sát traffic để giám sát trafic giữa các subnet
Các Hình Thức Khai Thác Và Tấn Công Hệ Thống Phổ Biến
Port scan
Giới thiệu
Phương pháp scan port thường được thực hiện trực tiếp trên một host hoặc một mạng nhằm mục đích nhận biết các dịch vụ mà host đó cung cấp. Ví dụ: web server thường mở port 80, FTP server thường mở port 21…Attacker có thể dựa trên thông tin thu nhận được để tìm cách tấn công, khai thác vào server đó.
Nguyên lý
Dựa trên phương thức truyền thông TCP ta có thể scan xem server mở port nào cũng như đóng port nào.
Sau đây là hai phương pháp scan port phổ biến:
SYN Scan: Máy attacker sẽ gửi hàng loạt các gói tin TCP có port đích lần lượt là các port cần scan của server cần khai thác. Đặc điểm của các gói tin TCP này là chỉ bật cờ SYN như bước đầu trong quá trình bắt tay 3 bước của giao thức TCP. Từ đó server khi nhận được những gói tin này thì sẽ trả về gói SYN ACK nếu port đó có mở và attacker sẽ biết được dịch vụ nào đang được bật ở server đó.
ACK Scan: đây là phương pháp scan thường được dùng kết hợp với SYN Scan nhằm phát hiện sự có mặt của Firewall trong hệ thống. Nguyên tắc của ACK Scan là attacker sẽ gửi các gói TCP có bật cờ ACK lên. Server nhận được gói ACK sẽ trả về gói RST, khi đó attacker sẽ nhận biết được không có sự giám sát về session trong hệ thống. Còn khi có sự xuất hiện của một Firewall lớp Transport hay Multilayer Firewall thì những gói tin ACK gửi vào như thế chắc chắn sẽ bị drop.
Scan port về mức độ không gọi là nguy hiểm cho hệ thống và lại có tính tương đồng với việc truy cập bình thường.
Nguyên lý về sfPortscan preprocessor trong Snort
Nguyên lý chung để phát hiện có cá nhân scan port của một máy nào đó trong hệ thống đó là dựa trên những gói tin từ chối khi có truy cập đến những port không mở trên hệ thống (gói tin RST của TCP khi port đó đóng). Việc xuất hiện những gói tin từ chối đó là rất ít khi vì khi một người bình thường truy nhập sẽ chỉ sử dụng đúng chức năng của máy chủ đó như truy cập website ở web server, mail ở mail server … chứ không kết nối đến những port khác ở các server thông dụng đó. Và càng bất thường hơn nếu hàng loạt các gói tin từ chối được gửi về trong một thời gian ngắn (do chương trình scan port như Nmap gửi hàng loạt gói tin một lúc). Snort sẽ dựa vào những yếu tố đó để phát hiện port scan đối với hệ thống.
Cấu hình preprocessor sfportscan
Trong file snort.conf ta bỏ dấu # ở dòng sau đây để kích hoạt chức năng phát hiện port scan
preprocessor sfportscan: proto {all} memcap {10000000} sense-level {low}
proto: chỉ ra giao thức theo dõi.
TCP
UDP
ICMP
ALL
memcap: dung lượng tối đa (byte) để lưu trữ những phát hiện port scan.
sense-level: các mức độ phát hiện port scan
low: chỉ theo dõi dựa trên các gói tin từ chối từ máy bị scan port và số lượng gói tin trong một khoảng thời gian đặt trước (60 giây) do đó có tính chính xác khá cao. Tuy nhiên nếu không có các gói tin từ chối gửi về (trong trường hợp máy bị scan port theo kiểu ACK scan có thiết bị quản lý session như Firewall lớp 4 thì các gói tin gửi vào sẽ bị drop và không có gói tin trả lời ) thì mức độ này không báo động.
medium: theo dõi số lượng kết nối nên sẽ khắc phục được nhược điểm của mức độ low đó là vẫn phát hiện dù không có gói tin từ chối trả về. Tuy nhiên mức độ này sẽ thiếu chính xác đối với những dịch vụ mà một máy có thể tạo ra nhiều kết nối như NAT.
high: liên tục theo dõi một host trong hệ thống để tính toán và ước lượng khả năng scan port đối với host đó.
DOS (Denial of Services)
Giới thiệu
Một cuộc tấn công từ chối dịch vụ (tấn công DoS) hay tấn công từ chối dịch vụ phân tán (tấn công DDoS) là sự cố gắng làm cho tài nguyên của một máy tính không thể sử dụng được nhằm vào những người dùng của nó. Mặc dù phương tiện để tiến hành, động cơ, mục tiêu của tấn công từ chối dịch vụ là khác nhau, nhưng nói chung nó gồm có sự phối hợp, sự cố gắng ác ý của một người hay nhiều người để chống lại Internetsite hoặc service (dịch vụ Web) vận hành hiệu quả hoặc trong tất cả, tạm thời hay một cách không xác định. Thủ phạm tẩn công từ chối dịch vụ nhằm vào các mục tiêu site hay server tiêu biểu như ngân hàng, cổng thanh toán thẻ tín dụng và thậm chí DNS root servers.
Nguyên lý
Teardrop
Như ta đã biết, tất cả các dữ liệu chuyển đi trên mạng từ hệ thống nguồn đến hệ thống đích đều phải trải qua 2 quá trình: dữ liệu sẽ được chia ra thành các mảnh nhỏ ở hệ thống nguồn, mỗi mảnh đều phải có một giá trị offset nhất định để xác định vị trí của mảnh đó trong gói dữ liệu được chuyển đi. Khi các mảnh này đến hệ thống đích, hệ thống đích sẽ dựa vào giá trị offset để sắp xếp các mảnh lại với nhau theo thứ tự đúng như ban đầu. Lợi dụng sơ hở đó, ta chỉ cần gửi đến hệ thống đích một loạt gói packets với giá trị offset chồng chéo lên nhau. Hệ thống đích sẽ không thể nào sắp xếp lại các packets này, nó không điều khiển được và có thể bị crash, reboot hoặc ngừng hoạt động nếu số lượng gói packets với giá trị offset chồng chéo lên nhau quá lớn.
SYN Attack
Trong SYN Attack, hacker sẽ gởi đến hệ thống đích một loạt SYN packets với địa chỉ ip nguồn không có thực. Hệ thống đích khi nhận được các SYN packets này sẽ trả lời các gói SYN này đồng thời lưu các request này vào bộ nhớ để xử lý. Với hàng loạt gói tin như thế được chờ xử lý sẽ làm cho hệ thống quá tải, reboot … đạt được mục đích của tấn công DOS.
Land Attack
Land Attack cũng gần giống như SYN Attack, nhưng thay vì dùng các địa chỉ IP không có thực, hacker sẽ dùng chính địa chỉ IP của hệ thống nạn nhân. Điều này sẽ tạo nên một vòng lặp vô tận giữa trong chính hệ thống nạn nhân đó.
Smurf Attack
Smurf Attack, cần có ba thành phần: hacker (người ra lệnh tấn công), mạng khuếch đại (sẽ nghe lệnh của hacker) và hệ thống của nạn nhân. Hacker sẽ gởi các gói tin ICMP đến địa chỉ broadcast của mạng khuếch đại. Điều đặc biệt là các gói tin ICMP packets này có địa chỉ ip nguồn chính là địa chỉ ip của nạn nhân . Khi các packets đó đến được địa chỉ broadcast của mạng khuếch đại, các máy tính trong mạng khuếch đại sẽ tưởng rằng máy tính nạn nhân đã gởi gói tin ICMP packets đến và chúng sẽ đồng loạt gởi trả lại hệ thống nạn nhân các gói tin phản hồi ICMP packets. Hệ thống máy nạn nhân sẽ không chịu nổi một khối lượng khỗng lồ các gói tin này và nhanh chóng bị ngừng hoạt động, crash hoặc reboot.
Tất các Host trong mạng khuếch đại trả lời cho máy nạn nhân cùng lúc
Packet với địa chỉ nguồn là địa chỉ của nạn nhân được gửi tới mạng khuếch đại
ARP Spoofing
Mỗi thiết bị trong hệ thống mạng của chúng ta có ít nhất hai địa chỉ. Một địa chỉ là Media Access Control (MAC) và một địa chỉ Internet Protocol (IP). Địa chỉ MAC là địa chỉ của card mạng gắn vào bên trong thiết bị, nó là duy nhất. Địa chỉ IP có thể thay đổi theo người sử dụng tùy vào môi trường mạng. ARP là một giao thức của lớp 2, chức năng của nó dùng để định vị một host trong một segment mạng bằng cách phân giải địa chỉ IP ra địa chỉ MAC. ARP thực hiện điều đó thông qua một tiến trình broadcast gói tin đến tất cả các host trong mạng, gói tin đó chứa địa chỉ IP của host cần giao tiếp. Các host trong mạng đều nhận được gói tin đó và chỉ duy nhất host nào có địa chỉ IP trùng với địa chỉ IP trong gói tin mới trả lời lại, còn lại sẽ tự động drop gói tin.
Ví dụ: ARP Request: máy tính A sẽ hỏi toàn mạng : " ai có địa chỉ IP này? "
ARP Reply: máy tính B trả lời máy tính A : "tôi có IP đó, địa chỉ MAC của tôi là..."
Kỹ thuật ARP Spoffing lợi dụng điểm yếu của giao thức này đó là không có sự xác thực khi gửi các gói tin ARP, tức là không biết được ai gửi các gói tin đó. Người tấn công sẽ giả các gói tin ARP reply với địa chỉ IP là của một máy trong mạng nhưng địa chỉ MAC lại là giả hoặc là MAC của máy tấn công. Như vậy máy nạn nhân khi nhận được các gói tin giả này sẽ tưởng nhầm đối tác của mình có địa chỉ MAC do người tấn công gửi đến dẫn đến sai lệch trong việc gửi/nhận thông tin.
Cài Đặt Snort
Một số tùy chọn khi biên dịch snort
--enable-debug bật chức năng report lỗi (chỉ dùng cho developer)
--enable-dynamicplugin load dynamically preprocessors, detection engine và rules libraries
--enable-inline sử dụng libipq interface cho snort inline mode
--with-mysql=DIR hỗ trợ mysql (nếu có sử dụng ACID với mysql)
--with-mysql-libraries=DIR chỉ định vị trí mysql client library.
--with-mysql-includes chỉ định vị trí mysql header files.
--with-odbc=DIR hỗ trợ ODBC databases
--with-postgresql=DIR hỗ trợ Postgresql databases (nếu có sử dụng ACID với Postgres SQL)
--with-oracle=DIR hỗ trợ Oracle databases (nếu có sử dụng ACID với Oracle)
--with-libpq-includes=DIR chỉ định thư mục include của Postgres SQL
--with-libpq-libraries=DIR chỉ định thư mục library của Postgres SQL đồng bật chức năng hỗ trợ output plugin module cho Postgres SQL
--with-libpcap-includes=DIR chỉ định đường dẫn đến file include của libpcap
--with-libpcap-libraries=DIR chỉ định đường dẫn đến file library của libpcap
Cấu trúc database của snort
Cài đặt Snort với Snort Report (Single Snort Sensor)
Mô hình mạng
Các gói tin cần chuẩn bị:
snortreport-1.3.1.tar.gz
jpgraph-3.0.7.tar.gz
snort-2.8.6.1.tar.gz
snortrules-snapshot-2861.tar.gz
barnyard2-1.8.tar.gz
Máy sử dụng: Máy ảo VM-Ware cài đặt hệ điều hành Ubuntu Server 10.04.1
Bước 1: chuẩn bị đối với hệ điều hành
Cài đặt các chương trình cần thiết cho máy làm IDS thông qua các lệnh sau đây:
Các công cụ scan network
sudo aptget install nmap
sudo aptget install nbtscan
sudo aptget install apache2
Các gói dùng cho Web Server
sudo aptget install php5
sudo aptget install php5mysql
sudo aptget install php5gd
Các thư viện hỗ trợ
sudo aptget install libpcap0.8dev
sudo aptget install libpcre3dev
sudo aptget install g++
Cài đặt MySQL
sudo aptget install mysqlserver
sudo aptget install libmysqlclient16dev
Trong quá trình cài đặt MySQL có yêu cầu password cho user root, tạm gọi là PASS.
Bước 2: Cài đặt Snort Report
Cài đặt JpGraph: đây là công cụ hỗ trợ cho phần biểu đồ thống kê trên Snort Report. Sau khi chép file jpgraph-3.0.7.tar.gz vào thư mục chứa các file cài đặt trong máy ta thực hiện các câu lệnh sau đây:
sudo mkdir /var/www/jpgraph
sudo tar zxvf jpgraph3.0.7.tar.gz
sudo cp r jpgraph3.0.7/src /var/www/jpgraph/
Cài đặt Snort Report: công cụ hỗ trợ cho Snort trong việc trình bày các báo cáo cũng như báo động trong quá trình kiểm tra dữ liệu của Snort. Chép file snortreport-1.3.1.tar.gz vào thư mục trong máy và thực hiện câu lệnh sau đây:
sudo tar zxvf snortreport1.3.1.tar.gz C /var/www/
Sau đó thực hiện liên kết giữa Snort Report và cơ sở dữ liệu trong MySQL bằng cách hiệu chỉnh các file cấu hình của Snort Report:
sudo vi /var/www/snortreport1.3.1/srconf.php
Sửa các dòng sau đây:
$pass = "YOURPASS";
Thành:
$pass = "PASS"; (PASS là password đã chọn trong phần cài đặt MySQL)
define("NMAP_PATH", "/usr/local/bin/nmap v");
define("NBTSCAN_PATH", "/usr/local/bin/nbtscan");
Thành:
define("NMAP_PATH", "/usr/bin/nmap v");
define("NBTSCAN_PATH", "/usr/bin/nbtscan");
define("JPGRAPH_PATH", "../../jpgraph/");
Thành:
define("JPGRAPH_PATH", "../jpgraph/src/");
Lưu lại và thoát khỏi file cấu hình.
Bước 3: Cài đặt Snort
Copy file cài đặt vài máy IDS và thực hiện các câu lệnh sau đây:
sudo tar zxvf snort2.8.6.tar.gz
cd snort2.8.6
sudo ./configure prefix=/usr/local/snort
sudo make
sudo make install
sudo mkdir /var/log/snort
sudo groupadd snort
sudo useradd g snort snort
sudo chown snort:snort /var/log/snort
Sau đó ta thực hiện tạo database trong MySQL:
echo "create database snort;" | mysql u root p
mysql u root p D snort < ./schemas/create_mysql
Tiếp theo ta tạo một user để quản trị nhằm hạn chế những rủi ro khi sử dụng user root trong việc quản trị cơ sở dữ liệu.
echo "grant create, insert, select, delete, update on snort.* to snort@localhost identified by 'PASS2'" | mysql u root p
Bước 4: Cài đặt tập Rule mới nhất cho Snort
Copy tập tin snortrules-snapshot-2861.tar.gz vào máy và thực hiện các câu lệnh sau:
sudo tar zxvf snortrulessnapshot2860_s.tar.gz C /usr/local/snort
sudo mkdir /usr/local/snort/lib/snort_dynamicrules
sudo cp /usr/local/snort/so_rules/precompiled/DebianLenny/i386/2.8.6.0/* /usr/local/snort/lib/snort_dynamicrules
Bước 5: Cài đặt Barnyard
Barnyard: công cụ dùng để tăng khả năng xử lý của Snort. Barnyard giúp Snort tập trung thực hiện chức năng chính của mình đó là rà soát và phân tích dữ liệu để phòng chống tấn công.
Copy tập tin barnyard2-1.8.tar.gz vào máy và thực hiện các câu lệnh sau:
sudo tar zxvf barnyard21.8.tar.gz
cd barnyard21.8
sudo ./configure withmysql
sudo make
sudo make install
sudo cp etc/barnyard2.conf /usr/local/snort/etc
sudo mkdir /var/log/barnyard2
sudo chmod 666 /var/log/barnyard2
sudo touch /var/log/snort/barnyard2.waldo
sudo chown snort.snort /var/log/snort/barnyard2.waldo
Cấu hình barnyard thông qua file barnyard2.conf:
sudo vi /usr/local/snort/etc/barnyard2.conf
Sửa các dòng sau trong tập tin cấu hình:
config reference_file: /etc/snort/reference.config
config classification_file: /etc/snort/classification.config
config gen_file: /etc/snort/genmsg.map
config sid_file: /etc/snort/sidmsg.map
#config hostname: thor
#config interface: eth0
#output database: log, mysql, user=root password=test dbname=db host=localhost
Thành:
config reference_file: /usr/local/snort/etc/reference.config
config classification_file: /usr/local/snort/etc/classification.config
config gen_file: /usr/local/snort/etc/genmsg.map
config sid_file: /usr/local/snort/etc/sidmsg.map
config hostname: localhost
config interface: eth0
output database: log, mysql, user=snort password=PASS2 dbname=snort host=localhost
Bước 6:
Cấu hình IP interface của IDS theo mô hình mạng
Bước 7: Khởi động Snort
Chỉnh sửa file cấu hình của Snort:
sudo vi /usr/local/snort/etc/snort.conf
Sửa đổi các dòng sau đây:
dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/
dynamicengine /usr/local/lib/snort_dynamicengine/libsf_engine.so
dynamicdetection directory /usr/local/lib/snort_dynamicrules
Thành:
dynamicpreprocessor directory /usr/local/snort/lib/snort_dynamicpreprocessor/
dynamicengine /usr/local/snort/lib/snort_dynamicengine/libsf_engine.so
dynamicdetection directory /usr/local/snort/lib/snort_dynamicrules
preprocessor http_inspect: global iis_unicode_map unicode.map 1252 compress_depth 20480 decompress_depth 20480
Thành:
preprocessor http_inspect: global iis_unicode_map unicode.map 1252
Xóa dòng:
inspect_gzip
Tìm dòng:
#output log_unified: filename snort.log, limit 128
Thêm dòng này vào sau nó:
output unified2: filename snort.u2, limit 128
Lưu lại và thoát khỏi file cấu hình.
Như vậy là đã hoàn thành phần cài đặt Snort với Snort Report.
Thử nghiệm Snort với Snort Report
Chỉnh sửa file snort.conf để chỉ phát hiện gói tin ICMP đi từ máy 172.16.1.100 đến máy 172.16.1.200
Chỉnh sửa lại file icmp.rules
Thực hiện lệnh ping từ máy 172.16.1.100 đến máy 172.16.1.200
Xem alert qua snort report:
Cài đặt Snort với BASE (Single Snort Sensor)
Mô hình mạng
Cấu hình card mạng
#vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet manual
ifconfig eth0 up
auto eth1
iface eth1 inet static
address 192.168.5.15
netmask 255.255.255.0
Cài những gói hỗ trợ cho snort
Dùng lệnh apt-get install để cài các gói sau đây :
libpcap0.8-dev
libmysqlclient15-dev
mysql-client-5.1
mysql-server-5.1
bison
flex
apache2
php5
libapache2-mod-php5
php5-gd
php5-mysql
libtool
libpcre3-dev
php-pear
Cài đặt snort từ file binary và cấu hình mysql
Cài đặt snort từ file binary
#apt-get install snort-mysql
Cấu hình mysql
#mysql -u root -p
Tạo database, tạo user và cấp quyền cho user
mysql> create database snort;
mysql> grant create, insert, select, delete, update on snort.* to snort@localhost identified by 'toot';
mysql> exit
Chuyển vào thư mục nơi chứa template dành cho database và tạo database
*Nếu cài snort từ source code thì file create_mysql sẽ chứa trong thư mục schemas
#cd /usr/share/doc/snort-mysql/
#zcat create_mysql.gz | mysql -u root -p snort
Kiểm tra lại database và tables đã tạo
mysql> show databases;
mysql> use snort
mysql> show tables;
Chỉnh lại file cấu hình snort để chạy với mysql
#vi /etc/snort/snort.conf
line 50: var HOME_NET 192.168.3.0/24
line 692: #output log_tcpdump: tcpdump.log
*Nếu muốn snort xuất trực tiếp vào mysql và không cần thông qua barnyard ta cấu hình như sau:
line 699: output database: log, mysql, user=snort password=toot dbname=snort host=localhost
*Nếu dùng barnyard để xuất vào mysql database ta cấu hình như sau:
line 732: output unified2: filename snort.log, limit 128
Chú ý: Không nên dùng cùng lúc snort và barnyard để xuất trực tiếp vào mysql database. Điều này sẽ làm cho alert bị lặp lại.
Cài adodb và BASE
Tải base và abobd5 từ trang web Phiên bản của base đang sử dụng là 1.4.5 và với adodb là 5.11
Giải nén và chuyển 2 thư mục này đến thư mục /var/www
#mv adodb5 /var/www
#mv base /var/www
#chmod 757 /var/www/base
Chỉnh lại file cấu hình php5 như sau:
#vi /etc/php5/apache2/php.ini
line 68: extension=mysql.so
line 69: extension=gd.so
line 111: error_reporting
line 112: Default Value: E_ALL & ~E_NOTICE
Nếu dùng base 1.4.x trước khi cài base cần cài thêm những gói sau:
#pear install Mail Mail_mime
# pear install Image_Canvas-0.3.2
# pear install Image_Color
# pear install Image_Graph-0.8.0
# pear install Numbers_Words-0.16.2
Dùng lệnh “pear –list” để liệt kiểm tra lại
Khởi động lại Apache
#/etc/init.d/apache2 restart
Cài đặt BASE
Bước 1: điền vào đường dẫn đến thư mực adodb5 /var/www/adodb5
Bước 2: điền vào thông tin về database
Database type = MySQL
Database name = snort
Database Host = localhost
Database username = snort
Database Password = toot
Bước 3:điền vào Admin User Name và Password
Bước 4: bấm vào Create BASE AG.
Sau khi bấm nút Now continue to step 4 thì việc cài đặt hoàn tất.
Cài đặt và cấu hình Barnyard
Download barnyard2-1.8.tar.gz từ trang website
Biên dịch và cài đặt
#tar –xzvf barnyard2-1.8.tar.gz
#cd barnyard2-1.8
#./configure --with-mysql
#make
#make install
Di chuyển vào trong thư mục barnyard2-1.8 và chép file cấu hình vào thư mục /etc/snort/
#cp etc/barnyard2.conf /etc/snort/
Tạo thư mục chứa log cho barnyard
#mkdir /var/log/barnyard2
Chỉnh lại file cấu hình barnyard2.conf như sau
#vi /etc/snort/barnyard2.conf
line 60: config hostname: mysensor
line 61: config interface: eth0
line 309: output database: log, mysql, user=snort password=toot dbname=snort host=localhost
Kiểm tra sự hoạt động của snort và tạo file log cho barnyard2
#snort -c /etc/snort/snort.conf -i eth0
#touch /var/log/snort/barnyard.waldo
Khởi động barnyard
# /usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf \
-G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map \
-d /var/log/snort -f snort.log -w /var/log/snort/barnyard.waldo
Khởi động snort
* Nếu cài snort từ source code thì dùng lệnh snort -D -c /etc/snort/snort.conf -l /var/log/snort/ để khởi động snort chạy như một daemon
*Nếu cài snort từ file binary ta khởi động snort cho snort chạy
#/etc/init.d/snort start
Khi khởi động snort, ta có thể gặp cảnh báo như sau:
#/etc/init.d/snort start
* Starting Network Intrusion Detection System snort
* /etc/snort/db-pending-config file found
* Snort will not start as its database is not yet configured.
* Please configure the database as described in
* /usr/share/doc/snort-{pgsql,mysql}/README-database.Debian
* and remove /etc/snort/db-pending-config
Đó là lỗi để lại trong quá trình cài đặt, tiến hành đổi tên file db-pending-config thành một file khác.
#mv /etc/snort/db-pending-config /etc/snort/db-pending-config.orig
Cấu hình barnyard2 và snort chạy mặc định sau khi khởi động
Cấu hình cho snort
#vi /etc/rc.local
ifconfig eth1 up
Cấu hình cho barnyard
Tạo file barnyard2.conf file trong thư mục /etc/init/ và điền vào đoạn code sau:
# rc - System V runlevel compatibility
# This task runs the old System V-style rc script when changing between
# runlevels.
description "Barnyard2 for Snort support"
author "bil b@unc.edu"
start on started networking
#start on startup
#start on (startup
# and filesystem
# and started udev)
#stop on runlevel [!023456]
respawn
exec /usr/local/bin/barnyard2 \
-c /etc/snort/barnyard2.conf \
-G /etc/snort/gen-msg.map \
-S /etc/snort/sid-msg.map \
-d /var/log/snort -f snort.log \
-w /var/log/snort/barnyard.waldo
Sử dụng oinkmaster để cập nhật rules
Lấy oinkcode
Đăng kí một tài khoản tại trang web
Lấy oinkcode từ trang web, oinkcode có dạng 9026b536810c168b9e25v10888e9935696160b15
Chỉnh lại file cấu hình oinkmaster như sau:
#vi /etc/oinkmaster.conf
line 11: #url =
line 12: url =
Tạo thư mục chứa rules và backup rules
#mkdir /etc/snort/rules
#mkdir /etc/snort/backup
Download rules từ trang web giải nén và chép rules vào thư mục /etc/snort/rules
Lập danh sách rule cần disable khi cập nhật
#cd /etc/
#/usr/share/oinkmaster/makesidex.pl /etc/snort/rules > autodisable.conf
Tạo user cho crontab để cập nhật tự động
#useradd snort
#chown -R snort /etc/snort/rules
#chown -R snort /etc/snort/backup
#chown -R snort var/run/oinkmaster
#chmod 757 /etc/snort/
Manually update rules
#su snort
#oinkmaster -C /etc/oinkmaster.conf -C /etc/autodisable.conf -o /etc/snort/rules -b /etc/snort/backup 2>&1
Automatically update rules
#su oinkmaster
#crontab -e
6 0 * * * oinkmaster -C /etc/oinkmaster.conf -C /etc/autodisable.conf -o /etc/snort/rules -b /etc/snort/backup 2>&1
Cài đặt snort với BASE (Multiple SnortSensors)
Mô hình mạng
Cấu hình trên central database server
Cài đặt và cấu hình mysql database
#apt-get install mysql-server mysql-client
Tạo database trên mysql
#mysql -u root -p
mysql> create database snort;
mysql> grant create, insert, select, delete, update on snort.* to snort identified by 'toot';
mysql> exit;
Kiểm tra lại những user được quyền truy cập mysql server
#mysql -u root -p
mysql> select user,host from mysql.user;
Tạo tables cho database snort
Di chuyển vào thư mục schemas dùng file create_mysql để tạo tables cho database snort
#cat create_mysql | mysql -u root -p snort
Cho chép truy cập mysql server từ remote client
#vi /etc/mysql/my.cnf
line 52 : bind-address = 192.168.3.1
#service mysql restart
Cài đặt Apache and PHP
#apt-get install apache2 php5-mysql libphp-adodb php-mail-mime php-mail
#apt-get install libapache2-mod-php5 php5-gd
Cài abobd5 và base
Tải base and abobd5 từ trang web Phiên bản của base đang sử dụng là 1.4.5 và với adodb là 5.11.
Giải nén bằng lệnh tar hoặc unzip và chuyển 2 thư mục này đến thư mục /var/www
#mv adodb5 /var/www
#mv base /var/www
#chmod 757 /var/www/base
Chỉnh lại file cấu hình php5 như sau:
#vi /etc/php5/apache2/php.ini
line 68: extension=mysql.so
line 69: extension=gd.so
line 111: error_reporting
line 112: Default Value: E_ALL & ~E_NOTICE
Cài thêm những gói sau đây để hỗ trợ đồ họa cho base
# pear install Image_Canvas-0.3.2
# pear install Image_Color
# pear install Image_Graph-0.8.0
# pear install Numbers_Words-0.16.2
#pear install Mail Mail_mime
Dùng lệnh “pear –list” để liệt kiểm tra lại
Cài đặt BASE
Bước 1: điền vào đường dẫn đến thư mực adodb5 /var/www/adodb5
Bước 2: điền vào thông tin về database
Database type = MySQL
Database name = snort
Database Host = localhost
Database username = snort
Database Password = toot
Bước 3: Điền vào Admin User Name và Password
Bước 4: bấm vào Create BASE AG.
Sau khi bấm nút Now continue to step 4 thì việc cài đặt hoàn tất.
Cài đặt Oinkmaster để cập nhật rule tự động
Lấy oinkcode
#apt-get install oinkmaster
Đăng kí một tài khoản tại trang web
Lấy oinkcode, oinkcode có dạng 9026b536810c168b9e25v10888e9935696160b15
Chỉnh lại file cấu hình oinkmaster
#vi /etc/oinkmaster.conf
line 11: #url =
line 12: url =
Tạo thư mục chứa rules và backup rules
#mkdir /etc/snort/rules
#mkdir /etc/snort/backup
Download rules từ trang web giải nén và chép rules vào thư mục /etc/snort/rules
Lập danh sách rule cần disable khi cập nhật
#cd /etc/
#/usr/share/oinkmaster/makesidex.pl /etc/snort/rules > autodisable.conf
Tạo user cho crontab để cập nhật tự động
#useradd snort
#chown -R snort /etc/snort/rules
#chown -R snort /etc/snort/backup
#chmod 777 /etc/snort/
Manually update rules
#su snort
#oinkmaster -C /etc/oinkmaster.conf -C /etc/autodisable.conf -o /etc/snort/rules -b /etc/snort/backup 2>&1
Automatically update rules
#su oinkmaster
#crontab -e
6 0 * * * oinkmaster -C /etc/oinkmaster.conf -C /etc/autodisable.conf -o /etc/snort/rules -b /etc/snort/backup 2>&112 0 * * * tar czfP /etc/snort/rules.tar.gz /etc/snort/rules
Cài đặt trên snort remote sensor
Cấu hình kết nối ssh không cần password
Central database server
#ssh-keygen -t rsa
Snort remote sensor
#ssh-keygen -t rsa
#scp /root/.ssh/id_rsa.pub root@192.168.3.1:/root/.ssh/
Central database server
#cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
#/etc/init.d/ssh restart
Set up the connection to the server to do this manually with SSH
ssh -N -f -L 3306:192.168.3.1:3306 root@192.168.3.1
Cài đặt snort từ source code
Download snort từ website và giải nén
# tar –xzvf snort-2.8.6.1.tar.gz
#./configure -enable-dynamicplugin --with-mysql
#make
#make install
Tạo thư mực chứa file cấu hình và log cho snort
# mkdir -p /var/log/snort /etc/snort
Di chuyển vào thư mục biên dịch snort và chép file cấu hình vào thư mục /etc/snort/rules
# cd etc/
# cp * /etc/snort/
Cài đặt snort rules
Download snort rules từ website
#tar -xzvf snortrules-snapshot-2860.tar.gz
# cp -r rules /etc/snort/
Chỉnh lại file cấu hình snort
#vi /etc/snort/snort.conf
line 25: var HOME_NET 192.168.2.0/24
line 28: var EXTERNAL_NET !$HOME_NET
line 60: var RULE_PATH /etc/snort/rules
line 267: #output log_tcpdump: tcpdump.log
*Nếu muốn snort xuất trực tiếp vào mysql và không cần thông qua barnyard ta cấu hình như sau:
line 270: output database: log, mysql, user=snort password=toot dbname=snort host=192.168.3.1 sensor_name=sensor_01
*Nếu dùng barnyard để xuất vào mysql database ta cấu hình như sau:
line 275: output unified2: filename snort.log, limit 128
Chú ý: Không nên dùng cùng lúc snort và barnyard để xuất trực tiếp vào mysql database. Điều này sẽ làm cho alter bị lặp lại.
Cài đặt Barnyard
Download barnyard2-1.8.tar.gz từ website
Tiến hành biên dịch và cài đặt
#apt-get install libmysqlclient15-dev libpcap0.8-dev
#cd barnyard2-1.8
#./configure –with-mysql
#make
#make install
Di chuyển vào thư mục barnyard2-1.8
#cp etc/barnyard2.conf /etc/snort
#mkdir /var/log/barnyard2
Chỉnh sửa lại file cấu hình barnyard
#vi /etc/snort/barnyard2.conf
line 60: config hostname: sensor_01
line 61: config interface: eth0
line 309: output database: alert, mysql, user=snort password=toot dbname=snort host=192.168.3.1
Tạo file log cho barnyard
#touch /var/log/snort/barnyard.waldo
Khởi động baryard2
#/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf \
-G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map \
-d /var/log/snort -f snort.log -w /var/log/snort/barnyard.waldo
Sử dụng oinkmaster cập nhật từ central database server
Cài oinkmaskter
#apt-get install oinkmaster
Chỉnh lại file cấu hình oinkmaster như sau:
#vi /etc/oinkmaster.conf
line 11: #url =
Tạo thư mục chứa rules và backup rules
#mkdir /etc/snort/rules
#mkdir /etc/snort/backup
Download rules từ trang web giải nén và chép rules vào thư mục /etc/snort/rules
Lập danh sách rule cần disable khi cập nhật
#cd /etc/
#/usr/share/oinkmaster/makesidex.pl /etc/snort/rules > autodisable.conf
Tạo user cho crontab để cập nhật tự động
#useradd snort
#chown -R snort /etc/snort/rules
#chown -R snort /etc/snort/backup
#chmod 777 /etc/snort
Manually update rules
#su snort
# oinkmaster -o /etc/snort/rules -b /etc/snort/backup -u scp://root@192.168.3.1:/etc/snort/rules.tar.gz 2>&1
Automatically update rules
#su oinkmaster
#crontab -e
6 0 * * * oinkmaster -o /etc/snort/rules -b /etc/snort/backup -u scp://root@192.168.3.1:/etc/snort/rules.tar.gz 2>&1
Cấu hình snort và barnyard chạy mặc định
/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf \
-G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map \
-d /var/log/snort -f snort.log -w /var/log/snort/barnyard.waldo
Cài đặt Snort inline
Mô hình mạng
Cấu hình card mạng
Load bridge module từ kernel
#modprobe bridge
Cài bridge utility
#apt-get install bridge-utils
auto lo
iface lo inet loopback
# brigde interface
auto br0
iface br0 inet manual
bridge_ports eth1 eth2
bridge_maxwait 0
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.2.10
netmask 255.255.255.0
Cấu hình để load bridge kernel mỗi khi khởi động
# crontab -e
@reboot root lsmod | grep bridge > /dev/null || /sbin/modprobe bridge;
Cài những gói hỗ trợ cho snort
Cập nhật trước khi cài đặt
# apt-get update
Dùng lệnh apt-get install để cài các gói sau đây :
libpcap0.8-dev libmysqlclient15-dev
mysql-client-5.1
mysql-server-5.1
bison
flex
apache2
php5
libapache2-mod-php5
php5-gd
php5-mysql
libtool
libpcre3-dev
php-pear
iptables-dev
Cài đặt libnet
Download libnet từ website ftp://ftp.port80.se/gentoo/distfiles/libnet-1.0.2a.tar.gz
và tiến hành biên dịch và cài đặt
# cd Libnet-1.0.2a
# ./configure
# make
# makeinstall
Cài đặt snort từ source code
Download snort từ website và giải nén
# tar –xzvf snort-2.8.6.1.tar.gz
#./configure -enable-dynamicplugin --with-mysql --enable-inline#make
#make install
Tạo thư mực chứa file cấu hình và log snort
# mkdir -p /var/log/snort /etc/snort
Di chuyển vào thư mục biên dịch snort và chép file cấu hình vào thư mục /etc/snort/rules
# cd etc/
# cp * /etc/snort/
Cài đặt snort rules
Download snort rules từ website
#tar -xzvf snortrules-snapshot-2860.tar.gz
# cp -r rules /etc/snort/ ; cp -r so_rules /etc/snort/ ; cp -r preproc_rules /etc/snort/
Chỉnh lại file cấu hình snort
#vi /etc/snort/snort.conf
line 25: var HOME_NET 192.168.2.0/24
line 28: var EXTERNAL_NET !$HOME_NET
line 60: var RULE_PATH /etc/snort/rules
line 61: var SO_RULE_PATH /etc/snort/so_rules
line 62: var PREPROC_RULE_PATH /etc/snort/preproc_rules
line 267: #output log_tcpdump: tcpdump.log
line 275: #output unified2: filename snort.log, limit 128
line 270: output database: log, mysql, user=snort password=toot dbname=snort host=localhost
Login và cấu hình mysql
#mysql -u root -p
Tạo database, tạo user và cấp quyền cho user
mysql> create database snort;
mysql> grant create, insert, select, delete, update on snort.* to snort@localhost identified by 'toot';
mysql> exit
Di chuyển vào thư mục nơi chứa template dành cho database và tạo database
#cat create_mysql | mysql -u root -p snort
Kiểm tra lại database và tables
mysql> show databases;
mysql> use snort
mysql> show tables;
Cài adodb và base
Tải base and abobd5 từ trang web Phiên bản của base đang sử dụng là 1.4.5 và với adodb là 5.11
Giải nén và chuyển 2 thư mục này đến thư mục /var/www
#mv adodb5 /var/www
#mv base /var/www
#chmod 757 /var/www/base
Chỉnh lại file cấu hình php5 như sau:
#vi /etc/php5/apache2/php.ini
line 68: extension=mysql.so
line 69: extension=gd.so
line 111: error_reporting
line 112: Default Value: E_ALL & ~E_NOTICE
Cài thêm những gói sau đây để hỗ trợ đồ họa cho base
# pear install Image_Canvas-0.3.2
# pear install Image_Color# pear install Image_Graph-0.8.0# pear install Numbers_Words-0.16.2
#pear install Mail Mail_mime
Dùng lệnh “pear –list” để liệt kiểm tra lại
Khởi động lại Apache
#/etc/init.d/apache2 restart
Cài đặt BASE
Bước1: điền vào đường dẫn đến thư mực adodb5 /var/www/adodb5
Bước 2: điền vào thông tin về database
Database type = MySQL
Database name = snort
Database Host = localhost
Database username = snort
Database Password = toot
Bước 3:điền vào Admin User Name và Password
Bước 4: bấm vào Create BASE AG.
Sau khi bấm nút Now continue to step 4 thì việc cài đặt hoàn tất.
Cấu hình snort và iptables
Tạo file tên là snortd với nội dung như sau :
#!/bin/bash
#
# snort_inline
start(){
# Start daemons.
echo "Starting ip_queue module..."
lsmod | grep ip_queue >/dev/null || /sbin/modprobe ip_queue;
#
echo "Starting iptables rules..."
# iptables traffic sent to the QUEUE:
# accept internal localhost connections
iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -s 192.168.2.11 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# send all the incoming, outgoing and forwarding traffic to the QUEUE
iptables -A INPUT -j QUEUE
iptables -A FORWARD -j QUEUE
iptables -A OUTPUT -j QUEUE
# Start Snort_inline
echo "Starting snort inline...."
/usr/local/bin/snort -c /etc/snort/snort.conf -Q -D -v -l /var/log/snort
# -Q -> process the queued traffic
# -D -> run as a daemon
# -v -> verbose
# -l -> log path
# -c -> config path
}
stop() {
# Stop daemons.
# Stop Snort_Inline
echo "Shutting down snort inline..."
killall snort
# Remove all the iptables rules and
# set the default Netfilter policies to accept
echo "Removing iptables rules..."
iptables -F
# -F -> flush iptables
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# -P -> default policy
echo "Snort Inline Stopped"
}
restart(){
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart|}"
exit 1
esac
Di chuyển file snortd vào thư mục /etc/init.d/
Sau đó có thể khởi động snort với lệnh sau: /etc/init.d/snortd start
Cấu hình để script snortd chạy khi khởi động
# update-rc.d snortd defaults 95
Kiểm tra sự hoạt động của snort inline
Tạo một rule có tên là pingtest.rules và lưu vào thư mục /etc/snort/rules với nội dung như sau:
drop icmp any any -> 192.168.1.1 any ( msg:”Ping gateway”; sid:778899 )
Khai báo rule này vào file cấu hình snort : include $RULE_PATH/pingtest.rules
Khởi động lại snort: /etc/init.d/snortd restart
Từ Client ping đến gateway 192.168.1.1 và ghi nhận kết quả như sau:
Ghi nhận trên base
Nội dung ghi nhận được
Kết quả trên client
Lab Kiểm Tra Hoạt Động Của Snort
Rule để kiểm tra hoạt động của snort
Sau quá trình cài đặt hoàn tất IDS Snort thì công việc đầu tiên cần làm đó chính là kiểm tra hoạt động của Snort thông qua một rule thử nghiệm. Ở đây nhóm chúng tôi tạo một rule trong file local.rules như sau để kiểm tra Snort.
alert tcp any any any 80 (msg:“Testing Web Act”;sid:100001;)
Rule này có ý nghĩa yêu cầu Snort báo động khi bắt được gói tin có IP nguồn và IP đích bất kỳ, port nguồn và port đích có một port bất kỳ và một port là port 80 (http). Sau đó dùng một máy trong mạng để truy cập vào web server thì ta được kết quả như sau:
Ghi nhận kết quả từ BASE
Như vậy Snort đã phát hiện và báo động đúng theo yêu cầu của chúng tôi đặt ra.
Rule phát hiện truy cập web
Rule của snort có thể được dùng trong việc quản lý việc truy cập vào những website có nội dung không lành mạnh và phát hiện truy nhập đến trang web không được phép
Ở đây nhóm chúng tôi dùng trang web để thử nghiệm rule như sau:
alert tcp 172.16.1.0/24 any -> any 80 (msg:“Co truy nhap vao web Tuoi Tre”;content:“.tuoitre.vn”;nocase;http_header;sid:1000002;)
Rule này có ý nghĩa sẽ báo động khi có truy cập web (http) có nội dung “.tuoitre.vn”. Ở đây dùng “.tuoitre.vn” nhằm đảm bảo tất cả những trang có dạng *.tuoitre.vn đều sẽ kích hoạt báo động vì tùy chọn content chỉ kích hoạt rule khi nội dung hoàn toàn trùng khớp. Tùy chọn nocase nhằm đảm bảo dù trong nội dung có thay đổi cách viết hoa/thường đều được phát hiện (ví dụ: .TuoiTRe.vn).
Và đây là kết quả khi dùng một máy trong mạng truy cập vào trang
Ghi nhận kết quả từ BASE
Nội dung gói tin mà đã kích hoạt rule
Phát hiện portscan trong Snort
Dùng Nmap để scan port một máy trong hệ thống
Ta thu được báo động trên Snort như sau:
Phát hiện DOS với snort
Slowloris là một tool dung cho DDOS, đây là kĩ thuật tương tự như SYN flood mục đích làm cạn kiệt tài nguyên máy chủ nhưng diễn ra ở lớp HTTP. Attacker gửi yêu cầu HTTP đến máy chủ, nhưng không gửi toàn bộ yêu cầu, mà chỉ gửi một phần mục đích để không bị server ngắt kết nối. Với hàng trăm kết nối như vậy, attacker chỉ tốn rất ít tài nguyên, nhưng đủ để làm treo máy chủ, không thể tiếp nhận các kết nối từ người dùng hợp lệ.
Dùng tool slowloris với câu lệnh như sau để thực hiện tấn công đến server
# ./slowloris.pl -dns www.local.com -port 80 -timeout 2000 -num 500 –tcpto
Sau khi quan sát qua công cụ base để xem các alert, nhận thấy rằng không có alert nào được ghi nhận vì trong rule based của snort chưa có rule để nhận dạng slowloris.
Do đó cần tạo 1 rule để nhận dạng sự tấn công của slowloris như sau:
alert tcp any any -> $HOME_NET 80 \
(msg: "DDOS Possible by Slowloris Tool"; \
flow:to_server,established; \
content:"GET /"; depth:5; \
content:"User-Agent\: Mozilla/4.0 (compatible\; MSIE 7.0\; Windows NT 5.1\; Trident/4.0"; \
offset:30; depth:90; \
threshold: type threshold, track by_src, count 100, seconds 30; \
classtype: attempted-dos; \
sid:887799;)
Khai báo rule mới trong file snort.conf : include $RULE_PATH/slowloris.rules
Chạy lại tool slowloris lần 2 và ghi nhận alert trên base:
Quan sát gói tin mà snort ghi nhận được như sau:
Ta thấy được rằng snort ghi nhận lại gói tin thông qua dấu hiệu nhận biết bên trong rule, chủ yếu là trường content của rule.
Phát hiện ARP attack
Các bước thực hiện ARP Spoofing bằng chương trình Cain & Abel
Bước 1: Lựa chọn các máy cần đầu độc ARP
Bước 2: Khởi động việc đầu độc ARP
Gói tin sau đây sẽ được gửi cho máy nạn nhân, theo nội dung gói tin thì sau khi nhận được máy nạn nhân sẽ ghi nhận vào bảng ARP của mình địa chỉ IP 192.168.1.1 có MAC là 00-0c-29-c8-6a-57 (là địa chỉ MAC của máy tấn công).
Mục tiêu của ARP Spoofing
Man in the middle
Người tấn công sẽ gửi gói tin ARP Reply giả mạo bằng địa chỉ MAC của chính máy mình, đồng thời kích hoạt chức năng chuyển tiếp các gói tin. Như vậy khi các máy nạn nhân đã bị khống chế bởi kỹ thuật ARP Spoofing thì tất cả các gói tin gửi cho máy đối tác với địa chỉ IP đúng nhưng MAC đã bị sửa đổi sẽ đi qua máy tấn công rồi mới chuyển tiếp cho máy đối tác thật sự một các trong suốt (không bị phát hiện bởi bên gửi và bên nhận). Kết quả của tấn công Man in the middle là hacker sẽ thu được mọi thông tin nạn nhận trao đổi với đối tác cũng như ngoài internet, những thông tin nhạy cảm như mật khẩu email, mật khẩu tài khoản ngân hàng …
Cụ thể sau khi thực hiện bước đầu độc ARP như đã nhắc đến ở phần trước thì cũng bằng chương trình Cain & Abel ta thu nhận được tài khoản và mật khẩu của người dùng đang đăng nhập vào Yahoo Messenger.
Cấu hình Snort để phát hiện ARP Spoofing
Bật tính năng nhận dạng arp spoofing trong file snort.conf:
preprocessor arpspoof
preprocessor arpspoof_detect_host: 192.168.1.1 00:0d:70:b3:3a:90
Nguyên tắc cơ bản để phát hiện ARP Spoofing chính là so sánh với bảng liên hệ giữa IP và MAC do người quản trị đặt ra, nếu có gói tin gửi thông tin sai về MAC của một địa chỉ IP thì sẽ kích hoạt báo động.
Khởi động lại snor và tiến hành poison 2 máy 192.168.4.20 và 192.168.4.40 bằng công cụ cain
Dùng cain để đầu độc arp 2 máy
Trên máy 192.168.4.20 ta ghi nhận sự thay đổi của bảng arp bằng lệnh ip nei show
Bằng công cụ BASE ghi nhận alert từ snort:
Snort dùng preprocessor để phát hiện arp spoofing nên sẽ không có thông tin về source và destination. arpspoof preprocessor chỉ alert không MAC address không đúng với IP address được ánh xạ trong file cấu hình.
Kết Luận
Sau 14 tuần nghiên cứu Đề tài “Xây dựng hệ thống IDS – Snort trên hệ điều hành Linux”, nhóm chúng tôi đã nghiên cứu và tìm hiểu được nguyên lý hoạt động của các thành phần trong snort cũng như toàn bộ hệ thống snort, cách thức snort vận hành và đưa ra cảnh báo về hành động xâm nhập diễn ra trong mạng. Đề tài đưa ra giải pháp trong việc triển khai IDS sensor trong mạng, sự khác nhau về đặc điểm cũng như công dụng giữa HIDS và NIDS, các thức snort output log và alert cũng như cách cấu hìnhsnort từ đó người dùng snort có thể xây dựngmột hệ thống snort – IDS cơ bản từ single snort sensor cho đến multiple snort sensor trên hệ điều hành Ubuntu. Bên cạnh đó, ngoài việc sử dụng rule được viết bởi nhà phát triển, đề tài của chúng tôi tìm hiểu về rule trong snort và cách xây dựng một rule trong snort. Qua đó người dùng snort có thể xây dựng rule phù hợp với nhu cầu của hệ thống mạng hiện tại.
Tuy nhiên trong quá trình nghiên cứu đề tài chúng tôi gặp khó khăn trong việc triển khai hệ thống snort - IDS do thiếu switch và network tap. Ngoài ra việc thiếu kiến thức trong lập trình và linux nên chúng tôi mất khá nhiều thời gian tìm hiểu, nghiên cứu và giải quyết vấn đề. Do thời gian nghiên cứu hạn chế chúng thôi không có thời gian nghiên cứu đi sâu tập trung vào tìm ra nguyên nhân các lỗi và sự cố
Nếu có điều kiện được mở rộng đề tài cũng như điều kiện về thiết bị nghiên cứu chúng tôi sẽ tập trung vào nghiên cứu và tìm hiểu cách khắc phục các sự cố trong snort, điều chỉnh snort ở mức độ cao hơn để tương thích với yêu cầu bảo mật của từng hệ thống mạng.
Tài Liệu Tham Khảo
Rafeeq Ur Rehman, (2003) Advanced IDS Techniques Using Snort, Apache, MySQL, PHP, and ACID, Prentice Hall PTR, USA, 275 pages
Stuart McClure, Joel Scambray and George Kurtz, (2009) Hacking Exposed 6: Network Security Secret & Solutions, Mc Graw Hill, USA, 720 pages
Kerry J. Cox and Christopher Gerg, (2004) Managing Security with Snort and IDS Tools, O'Reilly, USA, 288 pages
Jay Beale and Snort Team, (2007) Snort Intrusion Detection and Prevention Toolkit, Syngress Publishing, Syngress Publishing, 769 pages
Charlie Scott,Paul Wolfe, and Bert Hayes, (2004) Snort For Dummies, Wiley Publishing, Indiana, 385 pages
Jon Erickson, (2008) Hacking: The Art of Exploitation 2nd Edition, No Starch, 480 pages
Snort Forum Site,
Network Security Articles for Window Server 2003, 2008 & Vista,
IBM ISS Customer Support Migration to IBM Tivoli Software Support,
HVAOnline,
Forum Trung Tâm Đào Tạo Mạng Máy Tính Nhất Nghệ,
Forum Vietnamese Professionals (Trung Tâm VnPro),
Các file đính kèm theo tài liệu này:
- KLTN_Snort_ver10.1 (1).docx