2.11 Snort 主動響應
Snort 2.9進行了許多更改以更好地處理內聯操作,其中包括:
- 所有回應的單一機制
- 完全編碼的重置或icmp無法訪問的數據包
- 更新了靈活的響應規則選項
- 更新了反應規則選項
- 添加了阻止和阻止規則操作
這些更改概述如下。
2.11.1 啟用主動響應
這將在刪除會話時啟用主動響應(Snort將發送TCP RST或ICMP無法訪問/端口)。
./configure --enable-active-response / -DACTIVE_RESPONSE
preprocessor stream5_global:
max_active_responses <max_rsp>,
min_response_seconds <min_sec>
<max_rsp> ::= (0..25)
<min_sec> ::= (1..300)
主動響應將基于觸發數據包進行編碼。TTL將設置為在會話拾取時捕獲的值。
2.11.2 配置 Sniping
配置嘗試在會話的當前窗口內登陸TCP RST的嘗試次數(以便接收TCP接受)。此序列“分層”實際上僅在被動模式下有用。在串聯模式下,重置將直接放入流中,以代替觸發包,因此無需進行插拔。
每次嘗試(快速連續發送)都具有不同的序列號。每個活動響應實際上都會導致發送此數量的TCP重置。類似地,將TCP數據(發送給React)相乘。當且僅當嘗試為大于0時,才發送最多1個不可達的ICMP 。
./configure --enable-active-response
config response: [device <dev>] [dst_mac <MAC address>] attempts <att>
<dev> ::= ip | eth0 | etc.
<att> ::= (1..20)
<MAC address> ::= nn:nn:nn:nn:nn:nn
(n is a hex number from 0-F)
設備ip將執行網絡層注入。指定接口并避免使用內核路由表等可能是一個更好的選擇。
如果設備是eth0,eth1,eth2等,則dst_mac將更改響應目標MAC地址。否則,響應目標MAC地址是從數據包派生的。例:
config response: device eth0 dst_mac 00:06:76
5F:E3 attempts 2
2.11.3 Flexresp
將flexresp和flexresp2替換為flexresp3。
- Flexresp被刪除;這些功能不再可用:
./configure --enable-flexresp / -DENABLE_RESPOND -DENABLE_RESPONSE
config flexresp: attempts 1
- Flexresp2已刪除;這些功能已棄用,無法使用,并將在以后的版本中刪除:
./configure --enable-flexresp2 / -DENABLE_RESPOND -DENABLE_RESPONSE2
config flexresp2_interface: eth0
config flexresp2_attempts: 4
config flexresp2_memcap: 1000000
config flexresp2_rows: 1000
Flexresp3是新增功能:resp rule option關鍵字用于配置激發規則的活動響應。
./configure --enable-flexresp3 / -DENABLE_RESPOND -DENABLE_RESPONSE3 alert tcp any any -> any 80 (content:"a"; resp:<resp_t>; sid:1;)resp_t包括所有flexresp和flexresp2選項:<resp_t> ::= \ rst_snd | rst_rcv | rst_all | \ reset_source | reset_dest | reset_both | icmp_net | \ icmp_host | icmp_port | icmp_all
2.11.4 React
react是一個規則選項關鍵字,可以在會話中發送HTML頁面,然后將其重置。這是建立在:
./configure --enable-react / -DENABLE_REACT
可以從文件中讀取要發送的頁面:
config react: <block.html>
否則使用默認值:
<default_page> ::=
"HTTP/1.1 403 Forbidden\r\n"
"Connection: close\r\n"
"Content-Type: text/html; charset=utf-8\r\n"
"\r\n"
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\r\n"
" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\r\n"
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\r\n"
"<head>\r\n"
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\r\n"
"<title>Access Denied</title>\r\n"
"</head>\r\n"
"<body>\r\n"
"<h1>Access Denied</h1>\r\n"
"<p>%s</p>\r\n"
"</body>\r\n"
"</html>\r\n";
請注意,該文件必須包含整個響應,包括所有HTTP標頭。實際上,響應并不嚴格限于HTTP。您可以制作任意內容的二進制有效負載。
創建此類響應時,請注意大小。盡管可以使用任意大的響應進行響應,但TCP會話的響應將需要考慮到接收方的窗口最多只能接受一定數量的數據。發送超過此限制將導致數據被截斷。通常,響應越小,成功的可能性就越大。
配置規則后,將加載頁面和所選消息,默認為:
<default_msg> ::=
"You are attempting to access a forbidden site.<br />"
"Consult your system administrator for details.";
參考網址中的單個格式運算符。
這是一個示例規則:
drop tcp any any -> any $HTTP_PORTS (
content: "d"; msg:"Unauthorized Access Prohibited!";
react: <react_opts>; sid:4;)
<react_opts> ::= [msg] [, <dep_opts>]
這些選項已棄用:
<dep_opts> :: = [block | warn],[proxy <port#>]
僅當會話的另一端是端口80或可選的代理端口時,原始版本才將網頁發送到會話的一端。新版本始終將頁面發送給客戶端。如果不發送任何頁面,則可以使用resp選項。不推薦使用的選項將被忽略。
2.11.5 規則動作
引入了block和sblock動作作為drop和sdrop的同義詞,以幫助避免由于負載(例如,缺少用于傳入數據包的可用緩沖區)而丟棄的數據包與由于Snort分析而被阻止的數據包之間的混淆。
Snort安裝使用中文手冊