II. GIỚI THIỆU CHUNG VỀ SNORT
3. Tập luật (rulesets) trong Snort
Giống như virus, hầu hết hành động xâm nhập có vài loại signature. Thông tin về những signature này dùng để tạo Snort rules. Những rule này lấy cơ sở từ dấu hiệu kẻ xâm nhập (signature). Snort rules có thể được sử dụng để kiểm tra những phần khác nhau của gói dữ liệu. Snort 1.x có thể phân tích ở những header ở lớp 3 và 4 nhưng không thể phân tích ở giao thức lớp ứng dụng. Snort phiên bản 2.x có hỗ trợ phần header lớp ứng dụng. Những rule được áp dụng trong một kiểu nào đó đến tất cả các gói phụ thuộc vào loại đó.
Một rule có thể sử dụng để phát ra một thông điệp cảnh báo, ghi một thông điệp, hay, trong những thuật ngữ của Snort, pass gói dữ liệu
(không làm gì cả). Snort rules được viết theo cú pháp dễ hiểu nhất. Hầu hết những rules được viết trên một dòng đơn. Tuy nhiên bạn cũng có thể
mở rộng trên nhiều dòng bằng cách dùng một ký tự “\” vào cuối dòng. Rules thường đặt trong một file cấu hình, chẳng hạn như là snort.conf.
Bạn cũng có thể sử dụng nhiều file bằng cách gom chúng trong một file cấu hình chính.Tập luật của Snort đơn giản để ta hiểu và viết, nhưng cũng đủ mạnh để có thể phát hiện tất cả các hành động xâm nhập trên mạng.
Có 3 hành động chính được SNORT thực hiện khi so trùng 1 packet với các mẫu trong rules: - pass: loại bỏ packet mà SNORT bắt được.
- log: tuỳ theo dạng logging được chọn, packet sẽ được ghi nhận theo.
- alert: sinh ra một alert tùy theo dạng alert được chọn và log toàn bộ packet dùng dạng logging đã chọn. Các option phổ biến của SNORT:
1. content: Search the packet payload for the a specified pattern. 2. flags: Test the TCP flags for specified settings.
3. ttl: Check the IP header's time-to-live (TTL) field. 4. itype: Match on the ICMP type field.
5. icode: Match on the ICMP code field.
6. minfrag: Set the threshold value for IP fragment size.
8. ack: Look for a specific TCP header acknowledgement number. 9. seq: Log for a specific TCP header sequence number.
10. logto: Log packets matching the rule to the specified filename. 11. dsize: Match on the size of the packet payload.
12. offset: Modifier for the content option, sets the offset into the packet payload to begin the content search. 13. depth: Modifier for the content option, sets the number of bytes from the start position to search through. 14. msg: Sets the message to be sent when a packet geneger an event.
SNORT có thể chạy tốt trên các platform mà LIBPCAP hổ trợ.
3.1.Cấu trúc của một rule:
Tất cả các rule đều có 2 phần logic: rule header và rule options.
Hình 4.7: Cấu trúc Rule
Rule header chứa thông tin về hoạt động mà rule để lấy. Nó cũng chứa tiêu chuẩn cho việc so sánh một luật dựa vào gói dữ liệu. Rule option thường chứa một thông điệp cảnh báo và thông tin về thông điệp sẽ được sử dụng để phát sinh cảnh báo. Rule option cũng chứa tiêu
chuẩn cho việc so sánh một luật dựa vào gói dữ liệu. Một rule có thể phát hiện một loại hay nhiều loại hành vi xâm nhập. Rule “thông minh” là rule có thể áp dụng lên nhiều dấu hiệu xâm nhập.
Cấu trúc chung của rule header như sau:
Hình 4.8: Rule Header
Action dùng để xác định loại hành động mà nó lấy về khi tiêu chuẩn gặp được và một rule được so sánh chính xác một gói dữ liệu. Những
hoạt động điển hình là sinh ra một cảnh báo hoặc ghi thông điệp hoặc diện chứng cho rule khác.
Protocol dùng để áp dụng rule lên gói chỉ với một giao thức riêng. Đây là tiêu chuẩn đầu tiên giám sát trong rule. Bạn cũng có thể sử
dụng những thành phần khác để ngăn chặn những địa chỉ từ một mạng đầy đủ. Chú ý rằng có 2 trường địa chỉ trong rule. Địa chỉ nguồn và đích
được xác định dựa trên trên trường direction. Cho một ví dụ, nếu trường direction là “→”, địa chỉ phía bên trái là nguồn, địa chỉ bên phải là
đích.
Trong giao thức TCP/UDP, port xác định cổng nguồn và đích của gói khi rule áp dụng lên đó. Trong trường hợp những giao thức lớp network như IP và ICMP, port numbers không có ý nghĩa.
Cho ví dụ, rule sau đây sẽ sinh ra cảnh báo khi nó phát hiện gói ping ICMP (ICMP ECHO REQUEST) với TTL bằng 100: alert icmp any any -> any any (msg: "Co thang dang ping"; sid: 313131;)
Phần nằm trước dấu ngoặc đơn gọi là rule header. Phần trong dấu ngoặc đơn là rule option. Header chứa những phần sau:
+ Một rule action (hành động của luật). Trong rule trên, action là “alert”, có nghĩa là một cảnh báo sẽ sinh ra khi điều kiện bắt gặp. Nhớ rằng
+ Protocol (giao thức). Ở đây là ICMP, nghĩa là rule chỉ áp dụng lên tất cả gói ICMP. Trong Snort detection engine, nếu giao thức của gói không phải ICMP, rule sẽ không làm gì trên gói đó để tiết kiệm thời gian xử lý của CPU. Thành phần protocol là rất quan trọng khi bạn muốn áp
dụng Snort rule chỉ trên những gói của một loại riêng biệt.
+ Địa chỉ nguồn và cổng nguồn. Trong ví dụ này cả hai đều là “any”, có nghĩa là rule sẽ áp dụng lên tất cả các gói đến từ nhiều nguồn. Dĩ nhiên port number sẽ không áp dụng lên gói ICMP. Port number chỉ thích hợp trong trường hợp protocol là TCP hay UDP.
+ Direction. Trong trường hợp này, nó là ký hiệu → từ trái sang phải. Nói lên địa chỉ và port number bên trái dấu → là nguồn còn bên phải là đích. Điều đó cũng có nghĩa rằng rule sẽ áp dụng lên gói đi từ nguồn đến đích. Bạn cũng có thể dùng dấu ← để định nghĩa địa chỉ nguồn/đích cho gói. Ký tự <> cũng có thể sử dụng để áp dụng rule lên gói đi từ 2 bên.
+ Địa chỉ đích là cổng đích. Trong ví dụ này cả hai đều là “any”, có nghĩa là rule sẽ áp dụng lên tất cả các gói không quan tâm đến địa chỉ đích.
Direction trong rule không đóng vai trò gí cả bởi vì rule được áp dụng lên tất cả các gói ICMP di chuyển cả hai bên, do đã sử dụng từ khóa “any”
trong cả hai thành phần địa chỉ nguồn và đích.
3.2. Rule Option:
Rule option theo sau rule header và được đặt trong cặp dấu ngoặc đơn. Có thể một lựa chọn hay nhiều lựa chọn truyền vào cùng dấu . Nếu bạn sử dụng nhiều lựa chọn, dạng lựa chọn này là AND. Hành động trong rule header chỉ được gọi khi tất cả những tiêu chuẩn trong lựa chọn là đúng. Bạn đã sử dụng option như msg và ttl trong ví dụ trước rồi đó. Tất cả những lựa chọn được định nghĩa bởi từ khóa. Những Rule option chứa các đối số. Thường thì những lựa chọn có 2 phần: một từ khóa và một đối số. Những đối số truyền vào từ lựa chọn từ khóa bằng
một dấu “:”. Chẳng hạn như: msg: "Detected confidential";
Lựa chọn msg là từ khóa và “Detected confidential” là đối số cho từ khóa này. Sau đây là những từ khóa thông dụng . Nó hoạt động trên những
giao thức riêng, cho nên có ý nghĩa khác nhau đi theo giao thức.
III.TRIỂN KHAI HỆ THỐNG IDS BẰNG SNORT 1. Những điều cần lưu ý :
Một thử thách khi sử dụng một ứng dụng mã nguồn mở như Snort là thường xuyên có nhiều phiên bản mới. Những phiên bản mới này có thể có thêm các chức năng mà bạn muốn sử dụng. Vấn đề duy nhất là thỉnh thoảng các chức năng này làm cho cách thực hiện các việc cũ bị thay đổi hoặc bị thay thế (ví dụ như tiền xử lí portscan2 và conversation bị thay thế bằng flow-portscan). Hãy kiểm tra các phiên bản và chức năng mới này trước khi nâng cấp. Thỉnh thoảng, các chức năng mới cũng có một số lỗi. Tuy nhiên, việc kiểm tra mã nguồn mở phiên bản beta cùng với các công ty và nhà phát triển được thực hiện bởi Sourcefire (một công ty bán phiên bản thương mại của Snort) đã loại trừ hầu hết các lỗi trước khi chúng được phát hành.
Làm thế nào để bạn biết được mình bị tấn công hay bị hack.Theo khái niệm về phòng thủ theo chiều sâu (defense-in-depth), mỗi thiết bị trên mạng đóng một vai trò về bảo mật và các cách khác nhau có thể được triển khai để phát hiện hoặc ngăn chặn các cuộc tấn công. Việc triển khai NIDS không phải là tất cả những gì cần để có thể bảo mật cho hệ thống của bạn. Không có một thiết bị đơn nào có thể làm việc đó.
NIDS là một lớp phòng thủ khác. Bạn vẫn cần cài đặt các bản vá bảo mật cho phần mềm hệ thống của bạn. Bạn vẫn cần cách li các hệ thống đối mặt với Internet thành các mạng riêng biệt (thường được gọi là DMZ). Bạn vẫn cần kiểm tra các log hệ thống. Một NIDS cung cấp sớm một cảnh báo rằng một người nào đó đang thăm dò bạn hoặc một sự tấn công đang được thực hiện vào hệ thống. Nếu bạn chỉ có hệ thống Windows trong mạng , việc sử dụng các luật mà theo dõi những sự tấn công vào hệ thống Unix sẽ chỉ là gây ra các cảnh báo nhầm. Nếu bạn đang chạy server web Apache, loại trừ các luật cảnh báo về Microsoft IIS mà có thể không ảnh hưởng đến server web của bạn
Thật không thực tế khi mong đợi sẽ xem được tất cả các lưu lượng giữa tất cả các hệ thống trên mạng một cách hiệu quả với NIDS. Vì vậy sự ưu tiên của các hệ thống và các mạng là cần thiết.
Các hệ thống cung cấp các dịch vụ cho Internet là lựa chọn đầu tiên. Những hệ thống này nguy hiểm hơn so với các mạng bên trong. Chúng cũng có thể cung cấp các dịch vụ cho khách hàng hoặc đối tác của bạn, điều cực kì quan trọng đối với mục đích của tổ chức của bạn. Quy tắc đầu tiên là cách li bất kì hệ thống nào cung cấp các dịch vụ cho cộng đồng Internet thành các mạng độc lập mà giới hạn truy cập đến các mạng bên trong. Cách sắp xếp này làm cho lưu lượng mạng dễ kiểm soát hơn. Cũng có một nhóm các server cung cấp các dịch vụ cho những người làm việc : print server, file server, mail server và cơ sở dữ liệu... Tác động của các cảnh báo nhầm gia tăng khi theo dõi lưu lượng mạng LAN bên trong. Việc trao đổi bình thường giữa các hệ thống Window này có thể tạo ra một khối lượng lớn các cảnh báo này. Hệ thống có giá trị nhất chính là cơ sở dữ liệu. Bạn có thể bổ sung cho cái thiếu của NIDS bằng các nhà quản trị mạng, bao gồm việc thực hiện tốt khi xây dựng hệ thống, sử dụng các phần mềm chống virus, và kiểm tra các log hệ thống. Điều này không có nghĩa là chúng ta sẽ bỏ qua các máy trạm, laptop, và các thành phần khác của mạng bên trong. Người ta đề nghị rằng lưu lượng giữa những hệ thống này và Internet nên được kiểm soát bằng NIDS. Nếu bạn có một kết nối WAN đến các đối tác, chi nhánh, một bộ cảm biến trên các kết nối này là cần thiết.
Vị trí chính xác của bộ cảm biến được xác định dễ hơn bằng cách tìm kiếm những chỗ nghẽn cổ chai – kết nối giữa các mạng này là điểm rất tốt. Điểm giữa mạng của bạn và Internet là một sự lựa chọn dễ dàng. Như đã đề cập ở trên, các kết nối WAN là các điểm quan trọng. Hãy nhớ đặt các server bên trong vào các mạng riêng biệt để lưu lượng giữa các mạng chứa người sử dụng và các server có thể được kiểm soát.
1.2. Tạo các điểm kết nối:
Những thiết bị switch tốc độ cao chỉ chuyển lưu lượng đến những cổng trong cuộc trao đổi – làm cho việc nghe trộm cuộc trao đổi đó với bộ cảm biến NIDS là không thể. Một vài nhà quản trị cắm một hub nhỏ vào đường truyền lưu lượng mà họ muốn xem. Tuy cách này vẫn hoạt động nhưng nó không tin cậy bằng các switch dành cho doanh nghiệp.
Có rất nhiều thiết bị phần cứng có thể tạo một bản sao của lưu lượng di chuyển trên mạng. Một vài là sản phẩm thương mại và những cái khác có thể được xây dựng theo các hướng dẫn trên Internet. Giải pháp thương mại thường được sử dụng, nhưng có một điểm lỗi tiềm tàng đối với các cáp được nghe trộm.
Một giải pháp tốt hơn là sử dụng các switch của Cisco. Nó có thể tạo ra các sao chép của lưu lượng từ một hoặc nhiều cổng và gửi nó ra một cổng được chỉ định mà bạn sẽ cắm bộ cảm biến vào. Đây được gọi là SPAN port (Switched Port Analyzer) của Cisco. Bạn có thể thu thập được lưu lượng từ một cổng đơn, tập hợp lưu lượng từ nhiều cổng, thậm chí là các cổng trên các switch ở xa.
1.3. Lưu lượng mã hóa:
Bạn có thể muốn sử dụng Snort để giám sát các giao dịch thương mại điện tử quan trọng. Lưu lượng này được mã hóa bằng SSL - làm cho giao dịch được bảo mật hơn. Khi đó, Snort không thể đối chiếu nội dung của một gói tin được mã hóa với các dấu hiệu trong file luật. Mục đích của việc mã hóa lưu lượng là làm cho nó không thể bị can thiệp hoặc giám sát.
Một giải pháp cho phép lưu lượng web vẫn được mã hóa nhưng cho phép Snort đối chiếu với các dấu hiệu xâm nhập là sử dụng một proxy SSL. Proxy SSL có nhiều tên như Content Switch, SSL Accelerator, và SSL Proxy. Thiết bị này nằm giữa client và server và giải quyết nhiệm vụ mã hóa lưu lượng. Lưu lượng từ web server đến proxy SSL không được mã hóa còn lưu lượng từ proxy và web client thì được mã hóa. Đặt bộ cảm biến Snort giữa web server và proxy sẽ cho phép lưu lượng được giám sát.Một ưu điểm khác của cách thực thi này là khả năng chuyển trách nhiệm mã hóa của CPU cho một thiết bị ủy quyền, cho phép web server hoạt động hiệu quả hơn. Các proxy SSL cũng thường thực hiện các nhiệm vụ khác như cân bằng tải hoặc xác thực.
1.4. Bảo mật bộ cảm biến Snort:
Một điều hiển nhiên rằng bảo vệ hệ thống chịu trách nhiệm giám sát và duy trì sự bảo mật cho các mạng là một việc cực kì quan trọng. Bạn không chỉ cần bảo vệ hệ thống NIDS mà còn phải bảo vệ các server syslog, server xác thực, các công cụ giám sát và quản trị. Một kiểu triển khai là mạng quản trị. Mạng này có một firewall riêng và các sự truy cập đến nó chịu sự điều khiển chặt chẽ. Firewall chỉ mở những cái cần cho việc giám sát lưu lượng.
Việc quản lý chặt chẽ hệ thống Snort là rất quan trọng. Các hệ điều hành nên được cấu hình theo chuẩn công nghiệp và thường xuyên cập nhật các bản vá lỗi, cập nhật. Xét cho cùng, một bộ cảm biến IDS có thể truy cập đến hầu hết các hệ thống nhạy cảm của bạn – một tình huống nguy hiểm.
1.5. Chọn hệ điều hành:
Có nhiều việc để suy nghĩ và đưa ra quyết định như sau:
Khả năng hỗ trợ: Rất thông thường, hãy quyết định chọn hệ điều hành nào được sử dụng dựa trên những gì mà bạn biết. Chọn một hệ điều hành
mà bạn biết cấu hình và bảo quản hiệu quả. Nếu bạn biết rõ về Windows nhưng không biết gì về Linux, hãy sử dụng Windows. Hầu như những tài nguyên web được sử dụng để chạy Snort thiên về cài đặt nền tảng Linux.
Sự hoạt động: Mọi người thừa nhận rằng mạng trên Linux và BSD thì nhanh hơn mạng Windows. Theo kinh nghiệm của các chuyên gia bảo mật,
dường như bộ cảm biến Linux có thể giám sát mức độ băng thông cao hơn Windows với một cấu hình định sẵn. Điều đó làm cho bạn cảm thấy Snort được viết cho hệ điều hành Unix.
Sự ổn định: Người ta đã từng cho rằng Linux và BSD thì ổn định hơn Windows nhiều. Điều đó thật sự không thật đúng đối với các hệ thống
Windows được cấu hình và vá lỗi tốt.
Bảo mật: Có nhiều việc làm để bảo mật cho hệ thống Windows. Số lượng các bản vá lỗi cho các dịch vụ Windows là rất nhiều. Cũng có các bản