Snort預處理器之sfPortscan

1 sfPortscan 預處理器簡介

由 Sourcefire 開發的 sfPortscan 模塊,旨在檢測網絡攻擊的第一階段:偵察(Reconnaissance)。在偵察階段,攻擊者確定主機支持何種類型的網絡協議或服務。這個階段是攻擊主機事先不知道目標所支持的協議或服務的情況下,否則,這個階段就沒有必要了。

由於攻擊者事先並不知道它的預定目標,因此攻擊者發送的大多數查詢將是拒絕(negative)的(意味着服務端口被關閉)。在合法的網絡通信中,來自主機的拒絕響應是很少見的,而且在給定的時間內出現多次拒絕響應的情況更少見。我們檢測端口掃描的主要目的是檢測和跟蹤這些拒絕響應。

目前使用的最常見的端口掃描工具之一是 Nmap。Nmap 包含許多當前的端口掃描技術。sfPortscan 被設計爲能夠檢測 Nmap 產生的不同類型的掃描。

2 sfPortscan 預處理器支持的端口掃描類型

2.1 Portscan

sfPortscan 當前會對以下類型的 Nmap 掃描發出警告:

  • TCP Portscan
  • UDP Portscan
  • IP Portscan

這些警報是針對一對一端口掃描,這是傳統類型的掃描,一臺主機掃描另一臺主機上的多個端口。

大多數請求都是被拒絕的,因爲大多數主機提供的服務相對較少,意味着開放的端口較少。

2.2 Decoy Portscan

sfPortscan 亦會對下列類型的誘騙(decoy)端口掃描進行報警:

  • TCP Decoy Portscan
  • UDP Decoy Portscan
  • IP Decoy Portscan

誘騙端口掃描與上面描述的 Nmap 端口掃描非常相似,只是攻擊者擁有一個混合了真實掃描地址的欺騙源地址。這種策略有助於隱藏攻擊者的真實身份。

2.3 Distributed Portscan

sfPortscan 也可以針對下列類型的分佈式端口掃描發出警報:

  • TCP Distributed Portscan
  • UDP Distributed Portscan
  • IP Distributed Portscan

這是多對一端口掃描。當多個主機查詢一個主機以獲取打開的服務時,就會發生分佈式端口掃描。這是用來逃避 IDS 及混淆命令和控制主機。

注意: 拒絕查詢將分佈在掃描主機之間,因此我們通過被掃描主機跟蹤這種類型的掃描。

2.4 Portsweep

sfPortscan 也可以針對以下類型的 Portsweep 發出警報:

  • TCP Portsweep
  • UDP Portsweep
  • IP Portsweep
  • ICMP Portsweep

這些警報是針對一對多端口掃描。一臺主機掃描多臺主機上的一個端口。這通常發生在出現新漏洞並且攻擊者正在尋找特定服務時。

注意: portsweep 掃描的特性可能不會導致許多拒絕響應。例如,如果攻擊者對端口80進行端口掃描,我們很可能不會看到很多拒絕響應。

2.5 Filtered Portscan And Filtered Portsweep

sfPortscan 對以下已過濾的 portcans 和 portsweeps 發出警報:

  • TCP Filtered Portscan
  • UDP Filtered Portscan
  • IP Filtered Portscan
  • TCP Filtered Decoy Portscan
  • UDP Filtered Decoy Portscan
  • IP Filtered Decoy Portscan
  • TCP Filtered Portsweep
  • UDP Filtered Portsweep
  • IP Filtered Portsweep
  • ICMP Filtered Portsweep
  • TCP Filtered Distributed Portscan
  • UDP Filtered Distributed Portscan
  • IP Filtered Distributed Portscan

“Filtered” 警報表明沒有網絡錯誤(ICMP不可達或TCP RSTs),或關閉端口上的響應被抑制。它還可以很好地指示警報是否只是一個非常活躍的合法主機。活動主機,如NATs,可以觸發這些警報,因爲它們可以在非常短的時間內發送許多連接嘗試。在收到來自遠程主機的響應之前,過濾後的警報可能會發出(go off)。

sfPortscan 僅在時間窗口內爲每個有問題的主機對生成一個警報(下面有更多時間窗口的介紹)。在 TCP 掃描警報中, sfPortscan 還將顯示所有已掃描的開放端口。 但是,在 TCP 掃描警報上,sfPortscan 僅在觸發警報後纔跟蹤開放的端口。 開放端口事件不是單個警報,而是基於原始掃描警報的標籤。

3 sfPortscan 預處理器的配置

sfPortscan 需要使用 Stream5 預處理器。在無連接協議,如ICMP和UDP,Stream 給 Portscan 指明方向。您應該在 snort.conf 中啓用 Stream 預處理器。

可用於配置 portscan 模塊的參數有:

  1. proto <protocol>
    可用選項:

    • TCP
    • UDP
    • ICMP
    • ip proto
    • all
  2. scan_type <scan type>
    可用選項:

    • portscan
    • portsweep
    • decoy portscan
    • distributed portscan
    • all
  3. sense_level <level>
    可用選項:

    • low - “低” 警報僅在從目標主機發送的錯誤數據包上生成,並且由於錯誤響應的性質,此設置應該很少出現誤報。但是,由於缺少錯誤響應,此設置將永遠不會觸發 “Filtered Scan” 警報。 此設置基於60秒的靜態時間窗口,此後重置此窗口。
    • medium - “中級” 警報跟蹤連接計數(connection counts),因此將生成 “Filtered Scan” 警報。 此設置在活動主機(NAT,代理,DNS緩存等)上可能會產生誤報,因此用戶可能需要使用 “Ignore” 選項來進行調優。
    • high - “高” 警報使用時間窗口連續跟蹤網絡上的主機,以評估該主機的端口掃描統計信息。 該設置會由於持續監控而捕獲一些慢速掃描,但對活動主機非常敏感。 這絕對需要用戶調優 sfPortscan。
  4. watch_ip <ip1|ip2/cidr[ [port|port2-port3]]>
    定義需要監視主機的 ip、網絡和端口。該列表是一個逗號分隔的 IP 地址列表,IP地址使用CIDR表示法。端口被指定在IP地址/CIDR之後,可以是單一的端口,也可以是一個破折號連接表示的範圍,是可選的。如果使用此選項,不屬於此範圍的 ip 或網絡將被忽略。

  5. ignore_scanners <ip1|ip2/cidr[ [port|port2-port3]]>
    忽略來自指定地址的掃描警報。參數的格式與 watch_ip 相同。

  6. ignore_scanned <ip1|ip2/cidr[ [port|port2-port3]]>
    忽略目的地爲指定地址的掃描警報。參數的格式與 watch_ip 相同。

  7. logfile <file>
    此選項將把端口掃描事件輸出到指定的文件。如果文件不包含前導斜槓,則該文件將放在 Snort 配置目錄中。

  8. include_midstream
    此選項將包括 Stream 模塊在中途拾取的會話。這可能導致錯誤警報,尤其是在數據包丟失的高負載下。這就是爲什麼該選項默認關閉的原因。

  9. detect_ack_scans
    此選項將包括 Stream 模塊在中途拾取的會話,這對於檢測 ACK 掃描是必需的。 但是,這可能導致錯誤警報,尤其是在數據包丟失的高負載下。這就是爲什麼該選項默認關閉的原因。

  10. memcap { positive integer }
    爲端口掃描檢測分配的最大字節數。這個數字越高,可以跟蹤的節點就越多。

  11. disabled
    任何策略都允許使用這個可選關鍵字來避免包處理。此選項禁用預處理器。當預處理器被禁用時,只有 memcap 選項在配置中指定時被應用。其他選項將被解析但不使用。任何有效的配置都可能添加了“禁用”。

格式:

preprocessor sfportscan: proto <protocols> \
	scan_type <portscan|portsweep|decoy_portscan|distributed_portscan|all> \
	sense_level <low|medium|high> \
	watch_ip <IP or IP/CIDR> \
	ignore_scanners <IP list> \
	ignore_scanned <IP list> \
	logfile <path and filename> \
	disabled

舉例:

preprocessor flow: stats_interval 0 hash 2
preprocessor sfportscan:\
	proto { all } \
	scan_type { all } \
	sense_level { low }

4 sfPortscan 警報輸出

4.1 Unified Output

爲了獲取與警報一起記錄的所有 portcan 信息,snort 會生成一個僞數據包,並使用有效負載部分來存儲額外的 portcan 信息,包括優先級計數,連接計數,IP計數,端口計數,IP範圍和端口範圍。 數據包的特徵是:

Src/Dst MAC Addr == MACDAD
IP Protocol == 255
IP TTL == 0

除此之外,該包看起來像導致生成 portscan 警報的包的 IP 部分。這包括任何 IP 選項,等等。數據包的有效負載和有效負載大小等於記錄的附加 portscan 信息的長度。大小一般在100-200字節左右。

開放端口警報不同於其他 portscan 警報,因爲開放端口警報利用帶標記的包輸出系統。這意味着,如果使用了不打印標記包的輸出系統,那麼用戶將看不到開放端口警報。開放端口信息存儲在IP負載中,幷包含已開放的端口。

sfPortscan 警報輸出旨在與 Unified2 數據包日誌記錄一起使用,因此可以擴展喜歡的 Snort GUI,使用上述數據包特徵顯示 portscan 警報和 IP 有效負載中的其他信息。

4.2 Log File Output

日誌文件輸出以以下格式顯示,後面將進一步解釋:

Time: 09/08-15:07:31.603880
event_id: 2
192.168.169.3 -> 192.168.169.5 (portscan) TCP Filtered Portscan
Priority Count: 0
Connection Count: 200
IP Count: 2
Scanner IP Range: 192.168.169.3:192.168.169.4
Port/Proto Count: 200
Port/Proto Range: 20:47557

如果目標上有開放端口,則將附加一個或多個帶標記的數據包:

Time: 09/08-15:07:31.603881
event_ref: 2
192.168.169.3 -> 192.168.169.5 (portscan) Open Port
Open Port: 38458

上述名詞解釋:

  1. Event id/Event ref
    These fields are used to link an alert with the corresponding Open Port tagged packet
    這些字段用於將警報與相應的帶開放端口標記的包鏈接起來

  2. Priority Count
    優先級計數跟蹤不良響應(resets, unreachables)。優先級計數越高,收到的不良響應就越多。

  3. Connection Count
    連接計數列出主機(src or dst)上活動的連接數。這對於基於連接的協議來說是準確的,對於其他協議來說是一個估計值。在此確定是否對端口掃描進行過濾。高連接計數和低優先級計數表明已過濾(沒有收到來自目標的響應)。

  4. IP Count
    IP 計數跟蹤與主機聯繫的最後一個IP,如果下一個IP不同,則增加計數。對於一對一掃描,這是一個小數目。對於活動主機,無論如何這個數字都會很高,並且一對一掃描可能會作爲分佈式掃描出現。

  5. Scanned/Scanner IP Range
    此字段根據警報類型而改變。Portsweep (一對多)掃描顯示被掃描的IP範圍。Portscans (一對一)顯示掃描儀的 IP。

  6. Port Count
    端口計數跟蹤最後一個已接觸的端口,並在該端口更改時增加該數字。我們使用這個計數(連同IP計數)來確定一對一端口掃描和一對一誘騙端口掃描之間的區別。

5 sfPortscan 調優

在檢測端口掃描時,最重要的方面是根據您的網絡,調優檢測引擎。下面是一些調優技巧:

  1. 使用 watch_ip, ignore_scanners, ignore_scanned 選項
    正確設置這些選項很重要。watch_ip 選項很容易理解。分析師應該將此選項設置爲他們想要觀察的 CIDR 區塊和 ip 的列表。如果沒有定義 watch_ip, sfPortscan 將監視所有網絡流量。

    ignore_scanners 和 ignore_scanned 選項在清除網絡上非常活躍的合法主機時起作用。一些最常見的例子是 NAT IPs、DNS 緩存服務器、syslog 服務器和 nfs 服務器。sfPortscan 可能不會爲這些類型的主機生成誤報,但是在第一次爲這些 ip 調優sfPortscan 時要注意。根據主機生成的警報類型,分析人員需要知道忽略哪個警報。如果主機正在生成 portsweep 事件,則將其添加到 ignore_scanners 選項中。如果主機正在生成 portscan 警報(並且是正在被掃描的主機),則將其添加到 ignore_scanned 掃描選項中。

  2. Filtered scan alerts 更容易出現誤報
    在確定誤報時,警報類型非常重要。sfPortscan 生成的大部分誤報可能都屬於 filtered scan alert 類型。所以要對過濾過的端口掃描多加懷疑。很多時候,這只是表明主機在問題時間段內非常活躍。如果主機持續生成這些類型的警報,請將其添加到 ignore_scanners 或使用較低的靈敏度級別。

  3. 利用Priority Count, Connection Count, IP Count, Port Count, IP Range, and Port Range來確定誤報

    Connection Count / IP Count:這個比率表示每個IP的平均連接數。對於portscans,這個比率應該很高,越高越好。對於portsweep,這個比率應該很低

    Port Count / IP Count:這個比率表示每個IP連接的端口的估計平均值。對於端口掃描,這個比率應該很高,並表明被掃描主機的端口連接的ip較少。對於portsweep,這個比率應該很低,表明掃描主機連接到很少的端口,但是在很多主機上。

    Connection Count / Port Count:這個比率表示每個端口的估計平均連接數。對於端口掃描,這個比率應該很低。這表示每個連接都連接到不同的端口。對於portsweep,這個比率應該很高。這表明同一端口有許多連接。

    Priority Count 不包含的原因是,優先級計數包含在連接計數中,上面的比較將其考慮在內。優先級計數在調優中發揮重要作用,因爲優先級計數越高,它越有可能是真正的portscan或portsweep(除非主機被防火牆保護)。

  4. 如果以上方法都失敗,調低 sensitivity_level
    如果這些其他調優技術都不起作用,或者分析師沒有時間進行調優,那麼降低靈敏度級別。

    敏感性級別越高,您得到的保護就越好。但是 portscan 檢測引擎生成的報警,能夠給分析師提供有用的信息同樣也很重要。低靈敏度級別僅根據錯誤響應生成警報。這些響應表明 portscan,由低靈敏度級別生成的警報是高度準確的,需要最少的調優。低靈敏度水平不能捕捉 filtered scans,因爲這些更容易出現誤報。

6 sfPortscan 報警

sfPortscan 使用 GID 122,可以生成如下報警:

SID Description
1 TCP Portscan
2 TCP Decoy Portscan
3 TCP Portsweep
4 TCP Distributed Portscan
5 TCP Filtered Portscan
6 TCP Filtered Decoy Portscan
7 TCP Filtered Portsweep
8 TCP Filtered Distributed Portscan
9 IP Protocol Scan
10 IP Decoy Protocol Scan
11 IP Protocol Sweep
12 IP Distributed Protocol Scan
13 IP Filtered Protocol Scan
14 IP Filtered Decoy Protocol Scan
15 IP Filtered Protocol Sweep
16 IP Filtered Distributed Protocol Scan
17 UDP Portscan
18 UDP Decoy Portscan
19 UDP Portsweep
20 UDP Distributed Portscan
21 UDP Filtered Portscan
22 UDP Filtered Decoy Portscan
23 UDP Filtered Portsweep
24 UDP Filtered Distributed Portscan
25 ICMP Sweep
26 ICMP Filtered Sweep
27 Open Port
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章