Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Các luật của Snort

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Các luật của Snort

    Giống như virut, hấu hết các hành vi xâm nhập đều có một vài dấu hiệu. Thông tin về các dấu hiệu này được sử dụng để tạo ra các luật của Snort. Bạn có thể sử dụng honey post để biết kẻ xâm nhập đang làm gì và thông tin về các công cụ và kĩ thuật của chúng. Ngoài ra, có các sơ sở dữ liệu về các điểm yếu mà kẻ xâm nhập muốn khai thác. Những cách tấn công đã biết này cũng có thể được sử dụng như là các dấu hiệu để phát hiện một người nào đó muốn tấn công hệ thống của bạn.Các dấu hiệu có thể tồn tại trong header của các gói tin. Hệ thống phát hiện xâm nhập dựa trên Snort thì dựa trên các luật. Các luật của Snort có thể được sử dụng để kiểm tra nhiều phần khác nhau của gói tin.

    Một luật có thể được sử dụng để tạo ra một thông điệp cảnh báo, ghi lại một thông điệp...,hoặc trong Snort là “pass” gói tin. Hầu hết các luật của Snort được viết theo từng dòng đơn. Tuy nhiên, bạn cũng có thể mở rộng các luật thành nhiều dòng bằng cách sử dụng kí tự gạch chéo ngược tại cuối dòng. Các luật thường được đặt trong file cấu hình, thường là snort.conf. Bạn cũng có thể sử dụng nhiều file bằng cách gom chúng lại trong một file cấu hình chính.

    Luật dở đầu tiên

    Thật ra, đây có thể là luật tệ nhất đã từng được viết, nhưng nó kiểm tra rất tốt nếu Snort đang hoạt động tốt và có thể tạo ra các cảnh báo.
    Alert ip any any à any any (msg : IP Packet detected)

    Bạn có thể dùng luật này vào cuối mỗi file snort.conf khi bạn cài đặt Snort lần đầu tiên. Luật này sẽ tạo ra cảnh báo cho mỗi gói tin Ip bắt được. Nó sẽ làm đầy không gian đĩa một cách nhanh chóng nếu như bạn vẫn để nó ở đó. Luật này dở vì nó không truyền đạt bất kì thông tin gì.Tại sao ta sử dụng luật này? Đó có thể là lần đầu tiên bạn kiểm tra để đảm bảo Snort đã được cài đặt đúng. Trong các lần tiếp theo, bạn sẽ thấy thông tin về các phần khác nhau của luật Snort.
    Luật kế tiếp tạo ra cảnh báo cho tất cả các gói tin ICMP.
    Alert icmp any any à any any (msg : “ICMP Packet found”)

    Cấu trúc của một luật

    Tất cả các luật Snort đều có hai phần chính : header và options


    Phần header chứa các thông tin về hành động mà luật sẽ thực hiện. Nó cũng chứa các tiêu chuẩn về việc so sánh một luật trên một gói tin. Phần option thường chứa một thông điệp cảnh báo và thông tin về phần nào của gói tin được sử dụng để tạo ra cảnh báo. Một luật có thể phát hiện một hoặc nhiều kiểu xâm nhập.

    Header của luật Snort
    Cấu trúc tổng quát của phần header như sau



    Trong đó :
    ·Action : xác định kiểu hành động được thực hiện khi một tiêu chuẩn được so trùng và một luật giống với gói tin dữ liệu. Hành động điển hình là việc tạo ra các cảnh báo hoặc ghi lại các thông điệp log
    ·Protocol : được sử dụng để áp dụng luật trên gói tin cho một giao thức cụ thể. Phần protocol được sử dụng để áp dụng luật trên các gói tin chỉ đối với một giao thức cụ thể. Đây là tiêu chuẩn đầu tiên được đề cập trong luật. Một vài giao thức được sử dụng như là IP, ICMP, UDP...
    ·Address : xác định đại chỉ nguồn và địa chỉ đích. Địa chỉ có thể là của một host, nhiều host hoặc là địa chỉ mạng. Lưu ý rằng trong một luật sẽ có 2 địa chỉ : địa chỉ nguồn và địa chỉ đích.
    ·Port : được áp dụng trong trường hợp TCP hay UDP, xác định cổng nguồn và đích của một gói tin mà luật được áp dụng. Trong trường hợp giao thức lớp mạng là IP và ICMP, số port là không có ý nghĩa.
    ·Direction : của luật xác định địa chỉ và cổng nào được sử dụng như là nguồn hay là đích.

    Ví dụ, xét một luật sau đây. Luật này sẽ tạo ra một thông điệp cảnh báo bất cứ khi nào nó phát hiện một gói tin ping ICMP (ICMP ECHO REQUEST) với TTL là 100, như sau :

    alert icmp any any -> any any (msg: "Ping with TTL=100"; \
    ttl: 100;)

    Phần trước dấu ngoặc đơn là header của luật, phần trong dầu ngoặc đơn là phần option. Phần header chứa các thông tin như sau:
    Rule action (Phần thực thi của luật): trong luật này, kiểu thực thi của luật là “alert”, nghĩa là một cảnh báo sẽ được tạo ra khi trùng với một dấu hiệu xn. Nhớ rằng gói tin sẽ được ghi log một cách mặc định khi cảnh báo được tạo ra. Phụ thuộc vào phần action, phần option của luật có thể chứa các tiêu chuẩn thêm vào trong luật.
    Protocol (Giao thức) : trong luật này, giao thức là ICMP, nghĩa là luật này chỉ được áp dụng trên các gói tin ICMP. Trong bộ phận phát hiện của Snort, nếu giao thức của một gói tin không phải là ICMP, phần còn lại của gói tin sẽ không được quan tâm để tiết kiệm thời gian CPU. Phần protocol đóng một vai trò qian trọng khi bạn muốn áp dụng luật Snort chỉ trên những gói tin với những kiểu cụ thể.
    Địa chỉ nguồn và cổng nguồn : trong ví dụ này, cả hai phần này đều là “any”, nghĩa là luật được áp dụng cho tất cả các gói tin đến từ một nguồn bất kì. Dĩ nhiên số cổng không liên quan gì đến gói tin ICMP. Số cổng chỉ liên quan khi giao thức được sử dụng là TCP hoặc UDP.
    Direction : Trong trường hợp này direction được thiết lập là từ trái qua phải sử dụng kí hiệu ->. Điều này chỉ ra rằng số địa chỉ và cổng ở phía bên trái là nguồn và ở phía bên phải là của đích. Nó cũng có nghĩa là luật này sẽ được áp dụng trên các gói tin di chuyển từ nguồn tới đích. Bạn cũng có thể sử dụng kí hiệu <- để đảo lại ý nghĩa của nguồn và đích. Lưu ý rằng kí hiệu <> cũng có thể được sử dụng để áp dụng luật trên cả hai hướng.
    Địa chỉ đích và cổng đích : trong ví dụ này, cả hai phần này đều là “any”, nghĩa là luật được áp dụng cho tất cả các gói tin đến từ một đích bất kì. Phần direction trong luật này không đóng một vai trò gì cả vì luật được áp dụng trên tất cả các gói tin ICMP di chuyển theo bất kì hướng nào, vì từ khóa “any” ở cả phần nguồn và đích.

    Rule Options

    Rule option theo sau rule header và được đóng gói trong dấu ngoặc đơn. Có thể có một hoặc nhiều option, được cách nhau bởi dấu phẩy. Nếu bạn sử dụng nhiều option, những option hình thành phép logic AND. Một action trong rule header chỉ được thực hiện khi tất cả các option đều đúng. Tất cả các option được định nghĩa bằng các từ khóa. Một vài option cũng chứa các tham số. Thông thường, một option có thể có 2 phần : từ khóa và đối số. Các đối số được phân biệt với từ khóa bằng dấu hai chấm. Ví dụ:


    msg: "Detected confidential";


    Trong option này thì msg là từ khóa và "Detected confidential" là đối số của từ khóa


    Phần tiếp theo là các từ khóa được sử dụng trong phần option của luật Snort.




    ack

    ack: < number>;
    TCP header chứa một trường Acknowledgement Number dài 32 bit. Trường này chỉ ra rằng sequence number kế tiếp của người gửi được mong đợi. Trường này chỉ có ý nghĩa khi cờ flag trong trường TCP được thiết lập.

    classtype

    config classification: name,description,priority
    name : tên được sử dụng cho việc phân loại. Tên được sử dụng với từ khóa classtype trong luật Snort.
    Description : mô tả ngắn về kiểu phân loại
    Priority : thứ tự ưu tiên mặc định cho sự phân loại, có thể được chỉnh sửa bằng từ khóa priority. Priority càng thấp thì độ ưu tiên càng cao.

    Các luật có thể được phân loại và xếp thứ tự ưu tiên vào trong một nhóm. Để có thể hiểu hơn về từ khóa classtype, hãy xem file classification.config trong snort.conf Mỗi dòng trong đó sẽ có cú pháp như sau :

    content

    content: <straight text>; content: <hex data>;
    Một đặc tính quan trọng của Snort là khả năng tìm thấy một mẫu dữ liệu trong một gói tin. Mẫu đó có thể tồn tại dưới dạng một chuỗi ASCII hoặc là các kí tự thập lục phân. Giống như virut, những kẻ xâm nhập cũng có các dấu hiệu và từ khóa content để có thể tìm ra các dấu hiệu trong các gói tin. Vì Snort phiên bản 1.x không hỗ trợ các giao thức ở lớp ứng dụng nên từ khóa này, cùng với từ khóa offset, cũng có thể được sử dụng để xem xét header của lớp ứng dụng.

    offset

    offset: < value>;
    Từ khóa offset được sử dụng kết hợp với từ khóa content. Sử dụng từ khóa này, bạn có thể bắt đầu tìm kiếm từ một vị trí xác định so với vị trí bắt đầu của gói tin. Sử dụng một con số như là đối số của từ khóa này.
    depth

    depth: < value>;
    Từ khóa depth cũng được sử dụng kết hợp với từ khóa content để xác định giới hạn trên của việc so sánh mẫu. Sử dụng từ khóa này, bạn có thể xác định một vị trí so với vị trí bắt đầu. Dữ liệu sau vị trí này sẽ không được tìm kiếm để so mẫu. Nếu bạn dùng cả hai từ khóa offset và depth thì bạn có thể xác định một khoảng dữ liệu thực hiện việc so sánh mẫu.
    nocase

    nocase;
    Từ khóa nocase được sử dụng kết hợp với từ khóa content. Nó không có đối số. Mục đích của nó là thực hiện việc tìm kiếm trong trường hợp vô tình.

    content-list

    content_list: < filename>;
    Từ khóa content-list được sử dụng với tên của một file như là đối số của từ khóa này. File này sẽ chứa một danh sách các chuỗi sẽ được tìm kiếm trong một gói tin. Mỗi chuỗi được đặt trên các dòng khác nhau của file.
    dsize

    dsize: [<|>] < number>;

    Từ khóa dsize được sử dụng để tìm chiều dài một phần dữ liệu của gói tin. Nhiều cách tấn công sử dụng lổ hổng tràn bộ đệm bằng cách gửi các gói tin có kích thước lớn. Sử dụng từ khóa này, bạn có thể tìm thấy các gói tin có chiều dài dữ liệu lớn hoặc nhỏ hơn một số xác định.
    flags

    flags: < flags>;
    Từ khóa flags được sử dụng để tìm ra bit flag nào được thiết lập trong header TCP của gói tin. Mỗi flag có thể được sử dụng như một đối số của từ khóa flags trong luật Snort. Những bit flag này được sử dụng bởi nhiều các công cụ bảo mật với nhiều mục đích trong đó có việc quét các cổng như nmap (http://www.nmap.org).
    fragbits

    fragbits: < flag_settings>;
    Sử dụng từ khóa này, bạn có thể tìm ra những bit RB (Reserved Bit), DF(Don't Fragment Bit), MF(More Fragments Bit) trong header IP có được bật lên hay không.
    icmp_id

    icmp_id: < number>;
    Option icmp_id được sử dụng để phát hiện một ID cụ thể được sử dụng với một gói tin ICMP.
    icmp_seq

    icmp_seq: < hex_value>;
    Option icmp_seq giống như từ khóa icmp_id.
    itype

    itype: < number>;
    Header ICMP nằm sau header IP và chứa trường type. Từ khóa itype được sử dụng để phát hiện các cách tấn công sử dụng trường type trong header ICMP của gói tin.
    icode

    icode: < number>;
    Trong gói tin ICMP, header ICMP đi sau header IP. Nó chứa một trường code. Từ khóa icode được sử dụng để phát hiện trường code trong header gói tin ICMP.
    id

    id: < number>;
    Từ khóa id được sử dụng để đối chiếu trường fragment ID của header gói tin IP. Mục đích của nó là phát hiện các cách tấn công sử dụng một số ID cố định.
    ipopts

    ipopts: < ip_option>;
    Header IPv4cơ bản dài 20 byte. Bạn có thể thêm các tùy chọn vào header này ở cuối. Chiều dài của phần tùy chọn này có thể lên đến 40 byte. Các tùy chọn được sử dụng cho các mục đích khác nhau, bao gồm:
    • Record Route (rr)
    • Time Stamps (ts)
    • Loose Source Routing (lsrr)
    • Strict Source Routing (ssrr)
    ip_proto

    ip_proto: [!] < name or number>;
    Từ khóa ip_proto sử dụng plug-in IP Proto để xác định số giao thức trong header IP. Từ khóa này cần một con số giao thức là đối số. Bạn cũng có thể sử dụng tên giao thức nếu nó có thể phân giải bằng file /etc/protocols.
    logto
    logto: < file_name>;
    Từ khóa logto được sử dụng để ghi log các gói tin vào một file đặc biệt.
    msg

    msg: < sample message>;
    Từ khóa msg được sử dụng để thêm một chuỗi kí tự vào việc ghi log và cảnh báo. Bạn có thể thêm một thông điệp trong hai dấu ngoặc kép sau từ khóa này.
    priority

    priority: < priority integer>;
    Từ khóa priority gán độ ưu tiên cho một luật.
    react

    react: <react_basic_modifier[, react_additional_modifier...]>;
    Từ khóa react được sử dụng với một luật để kết thúc một phiên, khóa một vài vị trí hoặc dịch vụ. Không phải tất cả các option với từ khóa này hoạt động. Để sử dụng từ khóa react, bạn nên biên dịch Snort với lệnh --enable-flexresp trong script cấu hình.

    reference

    reference : <id system>,<id>;
    Từ khóa reference có thể thêm một sự tham khảo đến thông tin tồn tại trên các hệ thống khác trên mạng. Nó không đóng một vai trò nào trong cơ chế phát hiện. Có nhiều hệ thống để tham khảo như CVE và Bugtraq. Những hệ thống này giữ các thông tin thêm về các kiểu tấn công đã được biết. Bằng việc sử dụng từ khóa này, bạn có thể kết nối đến các thông tin thêm trong thông điệp cảnh báo.
    resp


    Từ khóa resp là một từ khóa cực kì quan trọng. Nó có thể được sử dụng để đánh bại các hành vi của hacker bằng cách gửi các gói tin trả lời cho một host mà tạo ra một gói tin thỏa luật. Từ khóa này cũng được biết như là Flexible Response (FlexResp) và được dựa trên FlexResp plug-in. Plug-in nên được biên dịch vào Snort, sử dụng lệnh (--with-flexresp)trong script cấu hình.
    rev

    rev: < revision integer>;

    Từ khóa rev được thêm vào option của luật Snort để chỉ ra số revision của luật. Nếu bạn cập nhật luật, bạn có thể sử dụng từ khóa này để phân biệt giữa các phiên bản. Các module output cũng có thể sử dụng con số này để nhận dạng số revision.
    rpc

    rpc: < Số ứng dụng
    , Số thủ tục
    , Số phiên bản
    >
    Từ khóa rpc được sử dụng để phát hiện các yêu cầu RPC cơ bản. Từ khóa này chấp nhận 3 số như là đối số :

    sameip

    sameip;
    Từ khóa sameip được sử dụng để kiểm tra địa chỉ nguồn và đích có giống nhau hay không. Nó không có đối số.
    seq

    seq: <hex_value>;
    Từ khóa seq trong luật Snort có thể được sử dụng để kiểm tra số thứ tự sequence của gói tin TCP.

    flow


    Từ khóa flow được sử dụng để áp dụng một luật lên các gói tin di chuyển theo một hướng cụ thể. Bạn có thể sử dụng các option với từ khóa để xác định hướng. Các option sau đây có thể được sử dụng với từ khóa này :
    • to_client
    • to_server
    • from_client
    • from_server

    session

    session: [printable|all];
    Từ khóa có thể được sử dụng để gạt bỏ tất cả dữ liệu từ một phiên TCP.
    sid

    sid: < snort rules id>;
    Sử dụng SID, các công cụ như ACID có thể biểu diễn luật thật sự tạo ra một cảnh báo cụ thể.

    tag

    tag: <type>, <count>, <metric>[, direction]

    Từ khóa tag là một từ khóa rất quan trọng khác có thể được sử dụng để ghi log các dữ liệu thêm vào từ ( hoặc đến) một host xâm nhập khi một luật được kích hoạt. Dữ liệu thêm vào có thể được phân tích sau này một cách chi tiết hơn.
    tos

    tos: < number>;
    Từ khóa tos được sử dụng để phát hiện một giá trị cụ thể trong trường TOS (Type of Service) của header IP.
    ttl

    ttl: < number>;
    Từ khóa ttl được sử dụng để phát hiện giá trị Time to Live trong header IP của gói tin. Từ khóa này có thể được sử dụng với tất cả các kiểu giao thức được xây dựng trên IP như ICMP, UCP và TCP. Sử dụng từ khóa ttl, bạn có thể tìm ra nếu có một người cố gắng traceroute mạng của bạn. Vấn đề duy nhất là từ khóa cần một giá trị TTL chính xác.

    uricontent

    uricontent: [!] "content string";
    Từ khóa uricontent giống với từ khóa content ngoại trừ việc nó được sử dụng để tìm một chuỗi chỉ trong phần URI của gói tin.
    tranthanhliem@vnpro.org
    Trung tâm tin học VnPro
    Viet Professional Ltd. Co
    Cisco Authorised Training
    149/1D Ung Văn Khiêm P25 Q.Bình thạnh TPHCM
    Tel: (08) 5124257-5125314
    Fax: (08) 5124314
    Website: http://vnpro.vn
    Support forum: http://vnpro.org
Working...
X