2.7 Snort 主機屬性表
Snort可以使用來自外部來源的信息來更準確地檢查網絡流量。保存到文件中的該信息稱為主機屬性表。主機屬性用于IPS規則評估,IP片段/TCP 流重組策略選擇以及應用程序預處理程序。主機屬性表在初始化期間加載,并支持運行時重新加載;當Snort收到信號SIGNAL_SNORT_READ_ATTR_TBL時,Snort會重新加載主機屬性表。
注意: 要使用主機屬性表和服務信息,必須使用-enable-targetbased標志配置Snort。
2.7.1 規則評估
在規則評估中,當規則中的元數據服務與對應于流量的服務匹配時,可以使用服務信息代替端口。如果規則沒有元數據服務,或者數據包服務不匹配,則僅使用端口檢查。
2.7.2 Snort配置
attribute_table filename <PATH/TO/HOSTS.XML>
2.7.3 主機屬性表文件格式
屬性表使用XML格式,由兩部分組成:映射部分(用于減少公用數據元素的文件大小)和主機屬性部分。映射部分是可選的。
下面提供的是示例屬性表
<SNORT_ATTRIBUTES>
<ATTRIBUTE_MAP>
<ENTRY>
<ID>1</ID>
<VALUE>Linux</VALUE>
</ENTRY>
<ENTRY>
<ID>2</ID>
<VALUE>ssh</VALUE>
</ENTRY>
</ATTRIBUTE_MAP>
<ATTRIBUTE_TABLE>
<HOST>
<IP>192.168.1.234</IP>
<OPERATING_SYSTEM>
<NAME>
<ATTRIBUTE_ID>1</ATTRIBUTE_ID>
<CONFIDENCE>100</CONFIDENCE>
</NAME>
<VENDOR>
<ATTRIBUTE_VALUE>Red Hat</ATTRIBUTE_VALUE>
<CONFIDENCE>99</CONFIDENCE>
</VENDOR>
<VERSION>
<ATTRIBUTE_VALUE>2.6</ATTRIBUTE_VALUE>
<CONFIDENCE>98</CONFIDENCE>
</VERSION>
<FRAG_POLICY>linux</FRAG_POLICY>
<STREAM_POLICY>linux</STREAM_POLICY>
</OPERATING_SYSTEM>
<SERVICES>
<SERVICE>
<PORT>
<ATTRIBUTE_VALUE>22</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
</PORT>
<IPPROTO>
<ATTRIBUTE_VALUE>tcp</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
</IPPROTO>
<PROTOCOL>
<ATTRIBUTE_ID>2</ATTRIBUTE_ID>
<CONFIDENCE>100</CONFIDENCE>
</PROTOCOL>
<APPLICATION>
<ATTRIBUTE_VALUE>OpenSSH</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
<VERSION>
<ATTRIBUTE_VALUE>3.9p1</ATTRIBUTE_VALUE>
<CONFIDENCE>93</CONFIDENCE>
</VERSION>
</APPLICATION>
</SERVICE>
<SERVICE>
<PORT>
<ATTRIBUTE_VALUE>2300</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
</PORT>
<IPPROTO>
<ATTRIBUTE_VALUE>tcp</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
</IPPROTO>
<PROTOCOL>
<ATTRIBUTE_VALUE>telnet</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
</PROTOCOL>
<APPLICATION>
<ATTRIBUTE_VALUE>telnet</ATTRIBUTE_VALUE>
<CONFIDENCE>50</CONFIDENCE>
</APPLICATION>
</SERVICE>
</SERVICES>
<CLIENTS>
<CLIENT>
<IPPROTO>
<ATTRIBUTE_VALUE>tcp</ATTRIBUTE_VALUE>
<CONFIDENCE>100</CONFIDENCE>
</IPPROTO>
<PROTOCOL>
<ATTRIBUTE_VALUE>http</ATTRIBUTE_VALUE>
<CONFIDENCE>91</CONFIDENCE>
</PROTOCOL>
<APPLICATION>
<ATTRIBUTE_VALUE>IE Http Browser</ATTRIBUTE_VALUE>
<CONFIDENCE>90</CONFIDENCE>
<VERSION>
<ATTRIBUTE_VALUE>6.0</ATTRIBUTE_VALUE>
<CONFIDENCE>89</CONFIDENCE>
</VERSION>
</APPLICATION>
</CLIENT>
</CLIENTS>
</HOST>
</ATTRIBUTE_TABLE>
</SNORT_ATTRIBUTES>
snort軟件包提供了用于驗證主機屬性表XML文件的DTD。
置信度度量可用于指示給定服務或客戶端應用程序及其各個元素的有效性。Snort當前未使用該字段,但可能會在將來的版本中使用。
注意: Snort要求文件是上面定義的格式的正確格式的架構。空文件或格式錯誤的文件可能會導致致命錯誤。
2.7.4 屬性表示例
在上面的示例中,描述了運行Red Hat 2.6的主機。該主機的IP地址為192.168.1.234。在該主機上,TCP端口22是ssh(運行Open SSH),而TCP端口2300是telnet。
IP分段和TCP流重組通過“ linux”配置來模仿。
2.7.5 屬性表對預處理器的影響
網絡層預處理器
每個網絡層預處理器(frag3和stream5)在如何處理數據以重組該主機接收的數據包方面都使用了相應的
FRAG_POLICY和STREAM_POLICY。應用層預處理器
應用程序層預處理器(HTTP,SMTP,FTP,Telnet等)將
SERVICE信息用于到該端口上該主機的連接。例如,即使僅將FTP / Telnet預處理器的telnet部分配置為檢查端口23,Snort仍將檢查數據包是否以telnet的形式連接到192.168.1.234端口2300。
相反,例如,如果將HTTP Inspect配置為檢查端口2300上的流量,則HTTP Inspect將不會處理與192.168.1.234端口2300的連接上的數據包,因為它被標識為telnet。
下面列出了Snort的應用程序層預處理器和Snort規則使用的常見服務(請參見下文)。
| http | ftp | FTP數據 | 遠程登錄 | smtp | ssh | ftp |
|---|---|---|---|---|---|---|
| Dcerpc | netbios-dgm | netbios-ns | netbios-ssn | nntp | finger | sunrpc |
| dns | Isakmp | MySQL | oracle | cvs | shell | x11 |
| imap | pop2 | pop3 | snmp |
2.7.5.1 屬性表對規則的影響
Snort通過兩種方式使用服務信息:初始化檢測引擎并作為檢測標準。要利用這一點,Snort規則必須包含指定的元數據:service SERVICE約定。在規則評估期間,默認行為將首先檢查數據包是否已與服務匹配,然后檢查數據包的服務是否與規則中指定的服務匹配;否則,檢查默認行為。如果這兩項檢查均通過,則Snort將禁用該規則的源端口和目標端口檢查。
Snort 2.9.8提供了新的功能來控制規則如何使用稱為“服務替代”的服務信息。以與在規則中指定服務相同的方式指定服務替代,或更簡單地將其指定為“保留” SERVICE。下表定義了新的保留服務替代名稱。
| 元數據 | 描述 |
|---|---|
| 服務和端口 | - 必須設置數據包服務。- 數據包服務必須與規則服務之一匹配。- 數據包必須與規則標頭中指定的端口匹配。 |
| 服務或端口 | - 數據包服務已設置,并且與規則服務之一(跳過端口檢查)相匹配。- 數據包服務已設置,但與規則服務之一不匹配;數據包必須與規則標頭中指定的端口匹配。- 未設置數據包服務,僅執行端口檢查。 |
| 服務其他端口 | - 設置了數據包服務后,數據包必須與規則服務之一匹配。- 未設置分組服務;那么數據包必須與規則標頭中指定的端口匹配。這是包含元數據服務信息的規則的默認行為。 |
| 服務未知 | 關鍵字“未知”是上面“ service else-ports”的別名。它旨在用于不包含元數據服務信息的規則(僅端口規則)。在不包含元數據(規則僅指定端口)的規則中使用時,評估為:- 不能設置分組服務;然后匹配端口。 |
Snort安裝使用中文手冊
推薦文章: