2.4 Snort如何進行事件處理
Snort提供了多種機制來調整事件處理以適合您的需求:
檢測過濾器您可以使用檢測過濾器來指定在規則生成事件之前必須超過的閾值。本節將對此進行介紹。
Rate過濾器當事件的數量或比率表示可能的攻擊時,您可以使用比率過濾器更改規則操作。
事件過濾器您可以使用事件過濾器來減少嘈雜規則的已記錄事件數。可以對其進行調整,以大大減少錯誤警報。
事件抑制您可以完全禁止記錄不感興趣的事件。
2.4.1 速率過濾
rate_filter通過允許用戶配置新的動作以在超過給定速率時在指定的時間內采取措施,從而提供了基于速率的攻擊防范。可以在同一規則上定義多個速率過濾器,在這種情況下,將按照它們出現在配置文件中的順序對其進行評估,并采取第一個適用的措施。
2.4.1.1 格式
速率過濾器用作獨立配置(規則之外),并具有以下格式:
rate_filter
gen_id <gid>, sig_id <sid>,
track <by_src|by_dst|by_rule>,
count <c>, seconds <s>,
new_action alert|drop|pass|log|sdrop|reject,
timeout <seconds>
[, apply_to <ip-list>]
下表中描述了這些選項-除apply_to(可選)外,所有選項都是必需的 。
| 選項 | 描述 |
|---|---|
track by_src /by_dst / by_rule |
通過源IP地址,目標IP地址或規則跟蹤費率。這意味著將為每個唯一的源IP地址,每個唯一的目標IP地址維護匹配統計信息,或者在規則級別匯總這些統計信息。對于與流會話相關的規則,源和目標分別表示客戶端和服務器。 track by_rule和apply_to 可能無法一起使用。 |
count c |
在超出速率過濾器限制to之前的最大匹配數(以s秒為單位)。 c必須為非零值。 |
seconds s |
在該時間段count計提。0秒表示 count是總數而不是特定速率。例如, rate_filter可用于檢測到特定服務器的連接數是否超過特定計數。0秒僅適用于內部規則(gen_id 135),其他使用會因Snort產生致命錯誤。 |
new_action alert/ drop/pass/ log/ sdrop/reject |
new_action替換規則操作時間為t秒鐘。 僅當在內聯模式下使用snort時,才能使用drop,reject和sdrop。 sdrop和拒絕是使用GIDS有條件地編譯的。 |
timeout t |
t秒后恢復為原始規則操作。如果t為0,則規則操作永遠不會還原。通過啟用 rate_filter后,一個event_filter可用于管理警報的數量規則動作。 |
apply_to <ip-list> |
將配置限制為僅由<ip-list>確定的源或目標IP地址(由track參數指示)。 track by_rule和apply_to可能無法一起使用。請注意,即使速率低于配置的限制,也會在超時期間生成事件。 |
2.4.1.2 例子
示例1-每秒最多允許來自任何一個IP地址的100次連接嘗試,并阻止來自該IP地址的其他連接嘗試10秒鐘:
rate_filter \
gen_id 135,sig_id 1,\
track by_src,\
count 100,seconds 1,\
new_action drop,timeout 10
示例2-最多允許100個來自任何一個IP地址的成功同時連接,并阻止來自該IP地址的其他連接10秒鐘:
rate_filter \
gen_id 135, sig_id 2, \
track by_src, \
count 100, seconds 0, \
new_action drop, timeout 10
2.4.2 事件過濾
通過限制指定時間間隔內記錄特定事件的次數,可以使用事件過濾來減少針對嘈雜規則的記錄警報的數量。可以對其進行調整,以大大減少錯誤警報。
事件過濾器有3種類型:
限制在第一警報米的時間間隔期間的事件,則忽略該時間間隔的其余部分的事件。
threshold在此時間間隔內, 每m次發出警報,我們會看到此事件。
both在看到事件的m次發生后,每個時間間隔發出一次警報,然后在該時間間隔內忽略任何其他事件。
2.4.2.1 格式
event_filter
gen_id <gid>, sig_id <sid>,
type <limit|threshold|both>,
track <by_src|by_dst>,
count <c>, seconds <s>
threshold
gen_id <gid>, sig_id <sid>,
type <limit|threshold|both>,
track <by_src|by_dst>,
count <c>, seconds <s>
threshold是event_filter的別名。兩種格式都是等效的,并支持以下所述的選項-所有都是必需的。 不建議使用閾值,將來的版本將不再支持該閾值。
| 選項 | 描述 |
|---|---|
gen_id < gid> |
指定關聯規則的生成器ID。 gen_id 0,sig_id 0 可用于指定適用于所有規則的“全局”閾值。 |
sig_id < sid> |
指定關聯規則的簽名ID。 sig_id 0指定“全局”過濾器,因為它適用于給定 gen_id的所有sig_id。 |
type limit/threshold/both |
在該時間間隔內對前1個事件 輸入類型限制警報,然后在其余時間間隔內忽略事件。 在此時間間隔內,每m次我們看到此事件的類型閾值警報。在看到事件的m次發生后,每個時間間隔鍵入兩次警報,然后在該時間間隔內忽略任何其他事件。 |
| `track by_src | by_dst` |
count c |
規則匹配數(以秒為單位),將導致 超出event_filter限制。 c必須為非零值。值為-1將禁用事件過濾器,并可用于覆蓋全局event_filter。 |
seconds s |
在其時間周期count計提。 s必須為非零值。 |
*注意: *只有一個
event_filter對于給定的定義GEN_ID,sig_id。如果將多個event_filter應用于特定的gen_id,sig_id對,則Snort在讀取配置信息時將以錯誤終止。
sig_id為0 的event_filter被認為是“全局”的,因為它們適用于具有給定gen_id的所有規則。如果gen_id 也為0,則該過濾器適用于所有規則。(不允許gen_id 0,sig_id!= 0)。首先應用標準過濾測試,如果它們不阻止記錄事件,則將應用全局過濾測試。規則中的閾值(不建議使用)將覆蓋全局 event_filter。全局event_filter不會覆蓋簽名或更具體的獨立event_filter中的內容。
*注意: *
event_filters可用于抑制過多的rate_filter警報,但是,永遠不會抑制超時時間的第一個new_action事件。這樣的事件表明狀態變化對于監視網絡的用戶而言很重要。
2.4.2.2 例子
將日志記錄限制為每60秒1個事件:
event_filter
gen_id 1, sig_id 1851,
type limit, track by_src,
count 1, seconds 60
將日志記錄限制為每個第3個事件:
event_filter
gen_id 1, sig_id 1852,
type threshold, track by_src,
count 3, seconds 60
將日志記錄限制為每60秒僅1個事件,但前提是我們在60秒內超過30個事件:
event_filter
gen_id 1, sig_id 1853,
type both, track by_src,
count 30, seconds 60
限制為每個IP觸發每條規則每60秒記錄1個事件(規則gen_id為1):
event_filter
gen_id 1, sig_id 0,
type limit, track by_src,
count 1, seconds 60
限制為每個IP每60秒記錄1個事件,從而觸發每個事件生成器的每個規則:
event_filter \
gen_id 0, sig_id 0, \
type limit, track by_src, \
count 1, seconds 60
Snort中的事件以通常的方式生成,事件過濾器作為輸出系統的一部分進行處理。閱讀gen-msg.map以獲取有關gen id的詳細信息。
用戶還可以使用“ config:”選項為閾值配置一個memcap:
config event_filter: memcap <bytes>
# this is deprecated:
config threshold: memcap <bytes>
2.4.3 事件抑制
事件抑制可在不從規則庫中刪除規則的情況下停止觸發指定事件。抑制使用IP列表來選擇要抑制的特定網絡和用戶。抑制測試先于標準閾值測試或全局閾值測試進行。
抑制是獨立配置,通過IP列表引用生成器,SID和IP地址。這樣就可以完全抑制規則,或者當因果流量去往或來自特定IP或IP地址組時,可以抑制規則。
您可以將多個抑制應用于非零SID。您也可以將一個event_filter和多個抑制組合到同一個非零SID。
2.4.3.1 格式
抑制配置有兩種形式:
suppress
gen_id <gid>, sig_id <sid>
suppress
gen_id <gid>, sig_id <sid>,
track <by_src|by_dst>, ip <ip-list>
| 選項 | 描述 |
|---|---|
gen_id <gid> |
指定關聯規則的生成器ID。 gen_id 0,sig_id 0 可用于指定適用于所有規則的“全局”閾值。 |
sig_id <sid> |
指定關聯規則的簽名ID。 sig_id 0指定“全局”過濾器,因為它適用于給定 gen_id的所有sig_id。 |
track by_src / by_dst |
按源IP地址或目標IP地址進行抑制。這是可選的,但如果存在,還必須提供ip。 |
ip <list> |
將抑制限制為僅由< list>確定的源或目標IP地址(由track參數指示)。如果提供了track,則還必須提供ip。 |
2.4.3.2 例子
完全禁止此事件:
suppress gen_id 1,sig_id 1852:
從此IP抑制此事件:
suppress gen_id 1,sig_id 1852,track by_src,ip 10.1.1.54
將事件抑制到此CIDR塊:
suppress gen_id 1,sig_id 1852,track by_dst,ip 10.1.1.0/24
2.4.4 事件記錄
Snort支持每個數據包/流記錄多個事件,這些事件使用不同的插入方法進行優先級排序,例如最大內容長度或使用事件隊列進行事件排序。
事件隊列的常規配置如下:
config event_queue:[max_queue [size]] [log [size]] [order_events [TYPE]]
2.4.4.1 事件隊列配置選項
配置參數“ event_queue”有三個配置選項。
max_queue
這確定事件隊列的最大大小。例如,如果事件隊列的最大大小為8,則對于單個數據包或流,將僅存儲8個事件。
預設值為8。
日志
這確定了要記錄給定數據包或流的事件數。您所記錄的不能超過指定的max_event數字。
預設值為3。
order_events
此參數確定傳入事件的排序方式。我們目前有兩種不同的方法:
優先級-最高優先級(1為最高)事件被順序排列。content_length-在解碼或預處理器警報之前對規則進行排序,而內容較長的規則在內容較短的規則之前進行排序。
排序事件的方法不會影響規則類型,例如通過,警報,日志等。
默認值為content_length。
2.4.4.2 事件隊列配置示例
默認配置:
config event_queue:max_queue 8 log 3 order_events content_length
重新配置的事件隊列的示例:
config event_queue:max_queue 10 log 3 order_events content_length
使用默認事件隊列值,但更改事件順序:
config event_queue:order_events priority
使用默認事件隊列值,但更改記錄的事件數:
config event_queue:log2
2.4.5 事件追蹤
Snort支持將與正在生成的事件相關的其他信息記錄到文件中,該信息是相對于與規則匹配的特定數據塊而言的。記錄的數據塊包括有關事件,GID,SID和與事件本身相關的其他數據的信息,以及包括大小,時間戳,從數據包中提取的可能已用于數據包的原始,歸一化和解壓縮緩沖區的數據包數據。評估規則。寫入的數據包數據量受每個條目的限制。這在調試規則中很有用。
該配置選項event_trace到snort.conf中提供了這種控制。
事件跟蹤的常規配置如下:
config event_trace: [file <filename>] [max_data <int>]
這是event_trace的兩個配置選項。
文件
這將在Snort的日志目錄中設置將跟蹤數據寫入的文件名(請參閱-l命令行選項)。
默認值為event_trace.txt。
max_data
這指定了每個數據緩沖區中要寫入文件的最大字節數。
缺省值為64字節,有效值范圍為1到65535字節。
2.4.5.1 事件跟蹤示例
默認配置:
config event_trace:文件event_trace.txt max_data 64
使用默認文件,但更改記錄的數據量:
config event_trace:max_data 128
更改事件跟蹤記錄到的文件名:
config event_trace:file snort_event_trace.out
Snort安裝使用中文手冊
推薦文章: