『壹』 如何編寫snort的檢測規則
snort是一個強大的輕量級的網路入侵檢測系統。它具有實時數據流量分析和日誌IP網路數據包的能力,能夠進行協議分析,對內容進行搜索/匹配。它能夠檢測各種不同的攻擊方式,對攻擊進行實時報警。此外,snort具有很好的擴展性和可移植性。本文將講述如何開發snort規則。
1.基礎
snort使用一種簡單的規則描述語言,這種描述語言易於擴展,功能也比較強大。下面是一些最基本的東西:
snort的每條規則必須在一行中,它的規則解釋器無法對跨行的規則進行解析。注意:由於排版的原因本文的例子有的分為兩行。
snort的每條規則都可以分成邏輯上的兩個部分:規則頭和規則選項。規則頭包括:規則行為(rule's action)、協議(protocol)、源/目的IP地址、子網掩碼以及源/目的埠。規則選項包含報警信息和異常包的信息(特徵碼,signature),使用這些特徵碼來決定是否採取規則規定的行動。
這是一個例子:
alert tcp any any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"mountd access";)
表1.一條簡單的snort規則
從開頭到最左邊的括弧屬於規則頭部分,括弧內的部分屬於規則選項。規則選項中冒號前面的詞叫做選項關鍵詞(option keywords)。注意對於每條規則來說規則選項不是必需的,它們是為了更加詳細地定義應該收集或者報警的數據包。只有匹配所有選項的數據包,snort才會執行其規則行為。如果許多選項組合在一起,它們之間是邏輯與的關系。讓我們從規則頭開始。
1.1 include
snort使用的規則文件在命令行中指定,include關鍵詞使這個規則文件可以包含其它規則文件中的規則,非常類似與C語言中的#include。snort會從被包含的文件讀出其內容,取代include關鍵詞。
格式:
include <文件路徑/文件名>
注意:行尾沒有分號。
1.2 varriables
在snort規則文件中可以定義變數。
格式:
var
例子:
var MY_NET 192.168.1.0/24,10.1.1.0/24] $MY_NET any (flags:S;msg:'SYNMETA packet";)
表2.變數的定義和使用
規則變數名可以使用多種方式來修改,你可以使用$操作符來定義元變數(meta-variables)。這些修改方式可以結合變數修改操作符:?和-來使用。
$var:定義元變數
$(var):以變數var的內容作為變數名
$(var:-default):以變數var的內容作為變數名,如果var沒有定義就使用default作為變數名
$(var:?message):使用變數var的內容作為變數名,如果不成功就列印錯誤信息message並退出。
例如:
var MY_NET $(MYU_NET:-192.168.1.0/24) tcp any any -> $(MY_NET:?MY_NET is undefined!) 23
表3.高級變數應用
2.規則頭(Rule Headers)
2.1 Rule Action
規則頭包含一些信息,這些信息包括:哪些數據包、數據包的來源、什麼類型的數據包,以及對匹配的數據包如何處理。每條規則的第一項就是規則行為(rule action)。規則行為告訴snort當發現匹配的數據包時,應該如何處理。在snort中,有五種默認的處理方式:alert、log、pass、activate和dynamic。
alert:使用選定的報警方法產生報警信息,並且記錄數據包
log:記錄數據包
pass:忽略數據包
activate:報警,接著打開其它的dynamic規則
dynamic:保持空閑狀態,直到被activete規則激活,作為一條log規則
你也可以定義自己的規則類型,把它們和一個或者幾個輸出插件聯系在一起。然後你就可以在snort規則中使用這些規則類型了。
這個例子將建立一個類型,它將只以tcpmp格式輸出日誌:
ruletype suspicious
{
type log
output log_tcpmp: suspocious.log
}
下面這個例子將建立一個類型,把日誌發送到syslog和MySql資料庫:
ruletype redalert
{
type alert
output alert_syslog:LOG_AUTH LOG_ALERT
output database:log,user=snort dbname=snort host=localhost
}
2.2 協議
每條規則的第二項就是協議項。當前,snort能夠分析的協議是:TCP、UDP和ICMP。將來,可能提供對ARP、ICRP、GRE、OSPF、RIP、IPX等協議的支持。
2.3 IP地址
規則頭下面的部分就是IP地址和埠信息。關鍵詞any可以用來定義任意的IP地址。snort不支持對主機名的解析。所以地址只能使用數字/CIDR的形式。/24表示一個C類網路;/16表示一個B類網路;而/32表示一台特定的主機地址。例如:192.168.1.0/24表示從192.168.1.1到192.168.1.255的地址。
在規則中,可以使用使用否定操作符(negation operator)對IP地址進行操作。它告訴snort除了列出的IP地址外,匹配所有的IP地址。否定操作符使用!表示。例如,使用否定操作符可以很輕松地對表1的規則進行改寫,使其對從外部網路向內的數據報警。
alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"external mountd access";)
表4.使用IP地址否定操作符的規則
上面這條規則中的IP地址表示:所有IP源地址不是內部網路的地址,而目的地址是內部網路地址。
你也可以定義一個IP地址列表(IP list)。IP地址列表的格式如下:
[IP地址1/CIDR,IP地址/CIDR,....]
注意每個IP地址之間不能有空格。例如:
alert tcp ![192.168.1.0/24,10.1.1.1.0/24] any ->[192.168.1.0/24,10.1.1.0/24] 111 (content:"|00 01 86 a5|";msg:"external mountd access";)
2.4 埠號
在規則中,可以有幾種方式來指定埠號,包括:any、靜態埠號(static port)定義、埠范圍,以及使用非操作定義。any表示任意合法的埠號;靜態埠號表示單個的埠號,例如:111(portmapper)、23(telnet)、80(http)等。使用范圍操作符:可以指定埠號范圍。有幾種方式來使用范圍操作符:達到不同的目的,例如:
log udp any any -> 192.168.1.0/24 1:1024
記錄來自任何埠,其目的埠號在1到1024之間的UDP數據包
log tcp any any -> 192.168.1.0/24 :600
記錄來自任何埠,其目的埠號小於或者等於6000的TCP數據包
log tcp any :1024 -> 192.168.1.0/24 500:
記錄源埠號小於等於1024,目的埠號大於等於500的TCP數據包
表5.埠范圍示例
你還可以使用邏輯非操作符!對埠進行非邏輯操作(port negation)。邏輯非操作符可以用於其它的規則類型(除了any類型,道理很簡單)。例如,你如果要日誌除了X-window系統埠之外的所有埠,可以使用下面的規則:
log tcp any any -> 192.168.1.0/24 !6000:60 10
表6.對埠進行邏輯非操作
2.5 方向操作符(direction operator)
方向操作符->表示數據包的流向。它左邊是數據包的源地址和源埠,右邊是目的地址和埠。此外,還有一個雙向操作符<>,它使snort對這條規則中,兩個IP地址/埠之間雙向的數據傳輸進行記錄/分析,例如telnet或者POP3對話。下面的規則表示對一個telnet對話的雙向數據傳輸進行記錄:
log !192.168.1.0/24 any <> 192.168.1.0/24 23
表7.使用雙向操作符的snort規則
activate/dynamic規則
activate/dynamic規則對擴展了snort功能。使用activate/dynamic規則對,你能夠使用一條規則激活另一條規則。當一條特定的規則啟動,如果你想要snort接著對符合條件的數據包進行記錄時,使用activate/dynamic規則對非常方便。除了一個必需的選項activates外,激活規則(activate rule)非常類似於報警規則(alert rule)。動態規則(dynamic rule)和日誌規則(log rule)也很相似,不過它需要一個選項:activated_by。動態規則還需要另一個選項:count。當一個激活規則啟動,它就打開由activate/activated_by選項之後的數字指示的動態規則,記錄count個數據包。
下面是一條activate/dynamic規則對的規則:
activate tcp !$HOME_NET any -> $HOME_NET 143 (flags:PA;content:"|E8C0FFFFFF|in|;activates:1;
表8.activate/dynamic規則對
這個規則使snort在檢測到IMAP緩沖區溢出時發出報警,並且記錄後續的50個從$HOME_NET之外,發往$HOME_NET的143號埠的數據包。如果緩沖區溢出成功,那麼接下來50個發送到這個網路同一個服務埠(這個例子中是143號埠)的數據包中,會有很重要的數據,這些數據對以後的分析很有用處。
3.規則選項
規則選項構成了snort入侵檢測引擎的核心,它們非常容易使用,同時又很強大和容易擴展。在每條snort規則中,選項之間使用分號進行分割。規則選項關鍵詞和其參數之間使用冒號分割。截止到寫本文為止(snort 1.7版),snort有23個規則選項關鍵詞:
msg:在報警和日誌中列印的消息
logto:把日誌記錄到一個用戶指定的文件,而不是輸出到標準的輸出文件
ttl:測試IP包頭的TTL域的值
tos:測試IP包頭的TOS域的值
id:測試IP分組標志符(fragment ID)域是否是一個特定的值
ipoption:查看IP選項(IP option)域
fragbits:測試IP包頭的分片位(fragmentation bit)
dsize:測試數據包包數據段的大小
flags:測試TCP標志(flag)是否是某個值
seq:測試TCP包的序列號是否是某個值
ack:測試TCP包的確認(acknowledgement)域是否為某個值
itype:測試ICMP數據包的類型(type)域
icode:測試ICMP數據包的編碼(code)域
icmp_id:測試ICMP回送包的標志符(ICMP ECHO ID)是否為某個值
content:在數據包的數據段中搜索模式(pattern)
content-list:在數據包的數據段中搜索模式清單
offset:設置開始搜索的偏移量
depth:設置搜索最大深度
nocase:大小寫不敏感匹配內容字元串
session:剝離一個對話的應用層信息
rpc:觀察RPC服務對特定應用程序的調用
resp:激活反應措施(斷開連接等)
react:激活反應措施(阻塞WEB站點)
3.1 msg
msg規則選項告訴日誌引擎在復制包時同時列印的信息,以及讓報警引擎輸出的警告消息。它只是一個簡單的文本字元串,使用作為轉義符。
格式:
msg:"";
3.2 logto
logto選項告訴snort把觸發某條規則所有的數據包都記錄到指定的文件。使用這個選項,對處理來自nmap掃描、HTTP CGI掃描的數據非常方便。注意如果使用二進制日誌模式,這個選項會失效。
格式:
logto:"<文件名>";
3.3 ttl
這個選項設置要測試的生命周期(time-to-live)值。只有數據包的TTL和這個選項設置的值精確匹配,測試才會成功。這個選項主要用來檢測路由企圖。
格式:
ttl:"";
3.4 tos
你可以使用tos關鍵詞檢查IP包頭的TOS(type of service)域是否是一個特定的值。也是只有在被檢測包TOS域的值和給定的值精確匹配時,這個測試才會成功。
格式:
tos:"";
3.5 ID
這個選項關鍵詞用來測試IP分片包頭的ID域。一些黑客工具為了不同的目的把這個域設置為特殊的值,例如:31337是在一些黑客中比較流行的值。使用這個選項就可以阻止這種攻擊。
格式:
id: "";
3.6 lpoption
如果IP包中有選項域,可以使用這個規則選項搜索IP包頭的特定選項,例如源路由。這個規則選項可以使用的參數如下:
rr:路由記錄
eof:End of list
nop:無操作
ts:時間戳
sec:IP安全選項
lsrr:寬松源路由(loose source routing)
ssrr:嚴格源路由(strict source roution)
satid:流標識符
最常被注意的IP選項是loose&strict source routing,不過在Internet上廣泛使用的任何應用程序中都沒使用這兩個選項。每條規則中只能設定一個IP規則。
格式:
ipopts: ;
3.7 fragbits
『貳』 用VC6.0想實現向指定窗口截獲抓取數據包如何實現,請提供源代碼
絡數據截獲方法
網路數據包截獲機制是網路入侵檢測系統的基礎組件。一般指通過截獲整個網路的所有信息流量,根據信息源主機,目標主機,服務協議埠等信息簡單過濾掉不關心的數據,再將用戶感興趣的數據發送給更高層的應用程序進行分析。流程圖如下:
圖5.1 網路數據截獲流程
一方面要,網路截取模塊要能保證截取到所有網路上的數據包,尤其是檢測到被分片的數據包(這可能蘊涵著攻擊)。
另方面,數據截取模塊截取數據包的效率也是很重要的。
它直接影響整個入侵檢測系統的運行速度。
5.2各種數據流截獲方法
5.2.1 利用廣播截取網路數據流
數據包的截取技術是依賴網卡的。而網卡可以通過廣播監聽到乙太網絡上的數據包,這就是數據包截取技術的基礎。
要想截獲不是給自己數據流,就必須繞開系統正常工作的機制,直接通過網卡的混雜模式,使之可以接受目標地址不是自己的MAC地址的數據包,直接訪問數據鏈路層,取數據。
5.2.2各系統截取數據包機制
linux系統為用戶提供一種在理論上是數據鏈路層的,基於網卡驅動程序的,可以不用操作系統自身協議棧的介面(也稱套接字)-SockPacket. 這種套接字可以從數據鏈路層(就是網線)上直接截取所有鏈路層數據包。而Unix則是通過Libpcap庫直接與內核交互,實現網路截取。如:Libpcap,Tcpmp等。如圖:
Unix系統監聽機制
BSD Packet Filter(BPF)機制來截取數據包。BPF可以說是各系統中最棒的截獲方式。很多開源嗅探工具就是基於它而開發的。Windows系統也有類似情況,如:win系列上有*.vxd (VxD,VirtualDeviceDrive)(packet*.vxd) 和 網卡.sys(為網卡晶元所開發)來驅動網卡截取數據包。
圖5.3 Windows系統監聽機制
5.2.3 BPF過濾
Unix&Linux系統有兩種數據鏈路層截取機制,分別是BSD系列系統(NetBSD,OpenBSD,FreeBSD等)的BPF和Linux的SOCKET_PACKET。
BPF過濾
BPF主要由兩大部分組成:
網路頭介面
數據包過濾器。
網路頭介面從網路設備驅動程序處收集數據包復制(在提交給系統協議棧之前),並傳遞給正在截獲數據包的應用程序。而過濾器決定某一數據包是被接受或者拒絕以及如果被接受,數據包的那些部分會被復制給應用程序。BPF結構圖如下:
圖5.4 BPF結構示意圖
如:TCPDump註:(1), Libpcap, Sniffer, eeye,等。一般情況,網卡驅動通過網卡把網路上的電平信號轉化成數據包,再把截取到的數據傳給系統自帶的協議棧,然後在交由系統處理。這種方式與Unix下的BPF不同,它使得網卡驅動在把從網路截取的數據提交給系統之前,先拷貝一份給BPF,再由BPF 決定是否符合規則,不符合則丟棄,符合則存放到內存指定區,等待處理。
當然,BPF對網卡驅動交給系統協議棧的數據包不做任何干涉。
注1:TCPDump是伯克利實驗室的Van Jacobson,Craig Leres和Stenven McCanne為分析TCP性能問題而寫的跨平台的監聽程序。
5.3基於Libpcap庫的通用數據截獲技術
Libpcap是用戶態的數據包截獲API函數介面,有獨立和可移植行。最初,Libpcap是為了強大的,健壯TCPDump而編寫的。它支持BPF過濾機制。Snort就是依賴於libpcap庫進行數據包截取的程序之一(還有Ethereal,eeye等)。 它的優點是可以從任何Unix內核平台上截取數據包,而不考慮什麼晶元類型的網卡和驅動程序。更重要的是,它可以使開發人員編寫自己的解碼,顯示,記錄等程序。
5.2.2.1 Libpcap庫主要函數
『叄』 Snort入侵檢測實用解決方案的內容簡介
《網站入侵與腳本攻防修煉》從「攻」、「防」兩個角度,通過現實中的入侵實例,並結合原理性的分析,圖文並茂地展現網站入侵與防禦的全過程。全書共分8章,系統地介紹網站入侵的全部過程,以及相應的防禦措施和方法。其中包括網站入侵的常見手法、流行網站腳本入侵手法揭密與防範、遠程攻擊入侵網站與防範、網站源代碼安全分析與測試等。《網站入侵與腳本攻防修煉》尤其對網站腳本漏洞原理進行細致的分析,幫助網站管理員、安全人員、程序編寫者分析、了解和測試網站程序的安全性漏洞。《網站入侵與腳本攻防修煉》用圖解的方式對網站入侵步驟及安全防範設置都進行詳細的分析,並且對一些需要特別注意的安全事項進行重點提示,過程中還加入一些安全技巧。
隨書所配光碟內容包括書中涉及的源代碼、視頻教程和演示動畫,方便讀者學習和參考。
《網站入侵與腳本攻防修煉》適合於網路安全技術愛好者、網路管理員、網站程序編寫人員閱讀,也可作為相關專業學生的學習及參考資料。
『肆』 snort 的具體使用
Snort不是很難使用,但是也存在著很多的命令行選項需要掌握,並且它們中許多很多時候並不能一起使用。這個文件的目的就是使新人能夠更簡單的使用snort。
在我們進行下一步之前,有一些關於snort的基本概念需要了解。snort能夠配置成三種模式運行:嗅探器(sniffer),包記錄器(packet logger)和網路入侵檢測系統(NIDS)。嗅探模式(sniffer mode)簡單的讀取網路中的數據包,並以連續的數據流顯示在控制台上。包記錄模式(packet logger mode)把捕獲的數據包記錄在磁碟上。網路入侵檢測模式(NIDS mode)是最復雜的、有機的配置,在這個模式下,snort分析網路中的數據,並通過使用用戶自定義的規則集進行模式匹配,並根據匹配的結果執行多種操作。
2.0 嗅探模式(sniffer mode)
首先,讓我們從基礎開始。如果你只是想要在屏幕上列印出TCP/IP的包頭信息(嗅探模式),使用下面的命令:
./snort –v
使用這個命令運行snort,將只顯示IP和TCP/UDP/ICMP頭信息,而不顯示任何其它信息。如果你想要查看傳輸的有效負載信息,可以使用如下命令:
./snort –vd
這條命令在列印協議頭信息的同時也列印相應的包數據。如果你想要一個更詳細的現實,可以使用下面的命令來列印出數據鏈路層頭信息:
./snort –vde
(註:這些選項參數能夠分開或者拆散成任和結合的方式。比如上一個命令也可以寫做這種方式:
./snort -d -v –e
來達到同樣的效果)
3.0 包記錄模式(PACKET LOGGER MODE)
好的,上面的命令運行的都相當的好。但是如果你想要記錄包到磁碟上,你需要指定一個記錄目錄,然後snort將自動的進入包記錄模式:
./snort -dev -l ./log
當然,這里假設你在當前目錄下有一個叫做「log」的目錄。如果沒有這個目錄,snort將退出並返回錯誤信息。當snort以這種模式運行,它收集所有捕獲的數據包,並根據數據包中一個主機的IP地址放入對應的目錄中。
如果你只是簡單的指定「-l」選項,你可能會發現snort有時使用遠程計算機的地址作為存放數據包的目錄,有時使用本地主機的地址。為了比較本地的網路,你需要告訴snort本地網路的信息:
./snort -dev -l ./log -h 192.168.1.0/24
這條指令讓snort能夠記錄數據鏈路信息和TCP/IP頭和應用數據到目錄./log,並且記錄和192.168.1.0段C類網路相關的包信息。所有進來的包將記錄到記錄文件夾中對應的子文件夾中,子文件夾以遠程主機(非192.168.1主機)的地址命名。注意,如果兩個主機都是在本地網路內,然後他們將根據兩個中高的埠號來記錄,在埠號相等的情況下,將使用源地址來記錄。
如果你在一個高速網路中,又或你想要使用一個更緊湊的格式來記錄數據包為以後的分析所用,你可以考慮使用「二進制模式」來記錄。二進制模式採用「tcpmp 格式」來記錄數據包到指定目錄下的單一二進制文件中。
./snort -l ./log –b
注意這里命令行的改變。我們不再需要指定一個本地網路,因為二進制模式記錄所有的數據到一個單一的文件中,而不再需要定義輸出的目錄結構。另外,你不再需要使用詳細(verbose)模式和指定-d/-e開關參數,因為在二進制模式下所有的包都會被記錄而不是其中的某些部分。進入二進制包記錄模式只需要做兩點,一是在命令行中使用-l開關來指定一個日誌目錄,二是使用-b開關選擇二進制模式代替ASCII文檔模式記錄包數據。
如果數據包以二進制文件的形式記錄,你可以使用任何支持tcpmp二進制格式的嗅探器從文件中讀取數據包信息,比如使用tcpmp或ethereal。snort也可以通過使用-r開關進入回放模式來讀取記錄的數據包信息。snort在任何運行模式下都能夠接受tcpmp格式的文件並進行處理。比如,如果你想要以嗅探器模式來分析處理一個二進制文件並把數據包信息列印在屏幕,你可以使用類似下面的命令:
./snort -dv -r packet.log
你還可以以多種方式操作二進制文件中的數據,比如包記錄模式和入侵檢測模式,你也同樣可以在命令行中使用BPF介面。比如,如果你只是想查看記錄文件中的ICMP數據包信息,可以在命令行中簡單的指定一個BPF過濾器:
./snort -dvr packet.log icmp
更多的BPF使用信息請參閱相應的man信息。
4.0 網路入侵檢測模式(NETWORK INTRUSION DETECTION MODE)
可以使用如下命令來啟用snort的網路入侵檢測模式(這個模式下,你不用記錄所有的數據包):
./snort -dev -l ./log -h 192.168.1.0/24 -c snort.conf
在這里snort.conf是你的規則文件名。這將對每一個數據包使用snort.conf文件中定義的規則集進行檢測,並根據文件中定義的行為進行處理。如果你沒有為程序指定輸出目錄,將使用默認的目錄「/var/log/snort」。
有一點需要注意的是,使用上一命令行形式進入NIDS模式運行速度稍慢,可以去掉「-v」開關來提高效率。往屏幕輸出數據速度很慢,在數據顯示的過程中可能會造成數據包的丟失。
同樣,對於大多數的應用而言,都不比要記錄數據鏈路層包頭信息,因此「-e」開關也是可以去掉的。最後命令如下:
./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf
這個命令能夠配置snort以最基礎的NIDS模式運行。它將以ASCII格式記錄規則指定的包信息到對應的目錄結構中(和包記錄模式中目錄結構一致)。
4.1 NIDS MODE輸出選項
在snort的NIDS模式中有幾種輸出方式可以配置。默認的記錄和報警以ASCII形式記錄,並使用「完全」報警。完全報警方式(full alert mechanism)輸出所有的包頭信息並在其後附上對應的報警信息。當然,在命令行中可以設置多種報警輸出模式和兩種日誌記錄格式。包信息可以以默認的ASCII格式記錄,也可以通過使用命令行開關「-b」來用二進制文件記錄。如果你想要完全禁用包記錄信息,可以使用命令行開關「-N」。
報警模式相對要復雜一些。在命令行中可以設置多種報警模式:full、fast、socket、syslog、console、cmg、和none模式。這六種模式可以使用命令行開關「-A」來設置。詳細如下:
u -A fast 快速報警模式,以一種簡單的格式記錄報警信息(時間、報警信息、源和目的主機的IP和埠)
u -A full 這是默認的報警模式,如果沒有指定報警模式,將自動使用這種報警模式
u -A unsock 發送報警信息到一個其它程序監聽UNIX套介面
u -A none 關閉報警
u -A console 列印快速報警信息到控制台(屏幕)
u -A cmg 觸發「cmg樣式」報警
還可以使用「-s」開關來設置syslog報警。默認的兩種syslog報警級別是LOG_AUTHPRIV和LOG_ALERT。如果你想要配置其它syslog日誌級別的話,可以在規則文件中使用輸出插件來設置(詳細信息參見snort.conf文件)。
下面是幾個輸出配置實例:
1、使用默認格式(ASCII)向syslog發送報警信息:
snort -c snort.conf -l ./log -s -h 192.168.1.0/24
2、使用默認格式和默認目錄(/var/log/snort)來向syslog發送報警信息:
snort -c snort.conf -s -h 192.168.1.0/24
3、使用二進制文件格式、快速報警模式、目錄/var/snort來記錄信息:
snort -c snort.conf -b -A fast -l /var/snort
4.2 性能配置
如果你想要提高snort運行效率(比如保持100Mbps網路環境下快速運行),可以使用「-b」和「-A fast」或者「-s」(syslog)選項。它將以tcpmp格式來記錄包,並產生較少的報警信息。比如:
./snort -b -A fast -c snort-lib
在這個配置下,snort能夠在100Mbps區域網內在80Mbps正常流量下檢測同時進行的多重掃描和工具在這個配置下,記錄將以二進制格式寫入tcpmp格式文件snort.log中。然後可以重新使用「-r」選項和其它常用的選項運行snort,來從數據文件中解析為正常的snort格式的數據信息。比如:
./snort -d -c snort-lib -l ./log -h 192.168.1.0/24 -r snort.log
一旦這條指令執行,所有的數據將以正常的格式記錄在日誌文件夾中。很酷,不是嗎?
4.3 其它信息
有很多人不喜歡snort默認的對包應用規則方式。在snort默認應用方式中,先使用報警(alert)規則,然後使用通過(pass)規則,最後使用記錄(log)規則。這個順序是違反直覺的,但是相對於允許用戶定義了很多報警規則卻因為使用了一條錯誤的通過規則而全部被禁止要簡單有效。對於一些用戶的需要,這里提供了「-o」開關來改變默認的規則應用順序為:先使用pass規則,然後是alert規則,最後是log規則。命令如下:
./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf -o
5.0 雜項信息
如果你想要以守護進程(daemon)模式運行snort,可以和其它選項一起加上「-D」開關設置。請注意,如果你想要向守護進程發送信號SIGHUP來重啟snort的話,你需要在命令行中使用snort二進制文件的完全路徑,比如你可以使用如下命令:
/usr/local/bin/snort -d -h 192.168.1.0/24 -l /var/log/snortlogs -c /usr/local/etc/snort-lib -s –D
由於安全關系,這里不提供對相對路徑的支持。
如果你想要發送包記錄信息到公共郵件列表,需要使用「-O」開關。這個開關將對包中輸出的IP信息進行混淆處理。這使得你能夠很容易的避免郵件列表中的用戶獲知相關的IP信息。你也可以把「-O」開關和「-h」開關聯合使用,這樣將只混淆本地網路中的主機地址。如果你不在意讓人看見攻擊主機的IP地址,這樣設置是很有效的。命令如下:
./snort -d -v -r snort.log -O -h 192.168.1.0/24
這將從記錄文件中讀取數據包信息,並在屏幕上顯示出來,在顯示的過程中僅僅混淆了C類網路192.168.1.0/24中的地址信息。
如果你想要在不停止進程去查看snort包統計信息,可以向snort進程ID發送SIGUSR1信號,然後snort將在屏幕上顯示統計信息,如果snort以守護進程模式運行,統計信息將發送到syslog中。你可以查看到snort檢測的協議信息、報警數目、記錄的包數、接收和丟棄的包數。這使得你能夠很方便的提高snort的性能。
『伍』 利用SNORT這個軟體怎麼獲取和分析數據包
你先把snort裝起來吧,安裝的過程可能會有點麻煩,但是也不至於像網上說的那樣完全無法解決。
所以雖然網上的資料比較雜亂,自己也是沉下心來好好裝裝看吧,出現了什麼錯誤再google一下吧,一定要用google啊。
如果實在不行的話,你在windows下先裝一個snort,大概知道他是怎麼用的也可以的。windows和linux工作起來差不多的。
裝好了之後,再把snort各個模式都試試看。然後根據你的需要再慢慢研究吧。
『陸』 網路入侵的名詞解釋
1, 入侵檢測技術(IDS)可以被定義為對計算機和網路資源的惡意使用行為進行識別和相應處理的系統。包括系統外部的入侵和內部用戶的非授權行為,是為保證計算機系統的安全而設計與配置的一種能夠及時發現並報告系統中未授權或異常現象的技術,是一種用於檢測計算機網路中違反安全策略行為的技術。
入侵檢測方法很多,如基於專家系統入侵檢測方法、基於神經網路的入侵檢測方法等。目前一些入侵檢測系統在應用層入侵檢測中已有實現。
入侵檢測通過執行以下任務來實現:
1.監視、分析用戶及系統活動;
2.系統構造和弱點的審計;
3.識別反映已知進攻的活動模式並向相關人士報警;
4.異常行為模式的統計分析;
5.評估重要系統和數據文件的完整性;
6.操作系統的審計跟蹤管理,並識別用戶違反安全策略的行為。
入侵檢測系統典型代表
入侵檢測系統的典型代表是ISS公司(國際互聯網安全系統公司)的RealSecure。它是計算機網路上自動實時的入侵檢測和響應系統。它無妨礙地監控網路傳輸並自動檢測和響應可疑的行為,在系統受到危害之前截取和響應安全漏洞和內部誤用,從而最大程度地為企業網路提供安全。
入侵檢測系統目前存在的問題:
1. 現有的入侵檢測系統檢測速度遠小於網路傳輸速度, 導致誤報率和漏報率
2. 入侵檢測產品和其它網路安全產品結合問題, 即期間的信息交換,共同協作發現攻擊並阻擊攻擊
3. 基於網路的入侵檢測系統對加密的數據流及交換網路下的數據流不能進行檢測, 並且其本身構建易受攻擊
4. 入侵檢測系統體系結構問題
發展趨勢:
1. 基於agent(注:代理服務)的分布協作式入侵檢測與通用入侵檢測結合
2. 入侵檢測標準的研究, 目前缺乏統一標准
3. 寬頻高速網路實時入侵檢測技術
4. 智能入侵檢測
5. 入侵檢測的測度
2,在1998年,Martin Roesch先生用C語言開發了開放源代碼(Open Source)的入侵檢測系統Snort.直至今天,Snort已發展成為一個多平台(Multi-Platform),實時(Real-Time)流量分析,網路IP數據包(Pocket)記錄等特性的強大的網路入侵檢測/防禦系統(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort符合通用公共許可(GPL——GUN General Pubic License),在網上可以通過免費下載獲得Snort,並且只需要幾分鍾就可以安裝並開始使用它.snort基於libpcap。
snort系統組成:snort由三個重要的子系統構成:數據包解碼器,檢測引擎,日誌與報警系統。
Snort有三種工作模式:嗅探器、數據包記錄器、網路入侵檢測系統。嗅探器模式僅僅是從網路上讀取數據包並作為連續不斷的流顯示在終端上。數據包記錄器模式把數據包記錄到硬碟上。網路入侵檢測模式是最復雜的,而且是可配置的。我們可以讓snort分析網路數據流以匹配用戶定義的一些規則,並根據檢測結果採取一定的動作。
3,SPAN技術主要是用來監控交換機上的數據流,大體分為兩種類型,本地SPAN和遠程SPAN.
----Local Switched Port Analyzer (SPAN) and Remote SPAN (RSPAN),實現方法上稍有不同。
利用SPAN技術我們可以把交換機上某些想要被監控埠(以下簡稱受控埠)的數據流COPY或MIRROR一
份,發送給連接在監控埠上的流量分析儀,比如CISCO的IDS或是裝了SNIFFER工具的PC. 受控埠和
監控埠可以在同一台交換機上(本地SPAN),也可以在不同的交換機上(遠程SPAN)。
二、名詞解釋
SPAN Session--SPAN會話
SPAN會話是指一組受控埠與一個監控埠之間的數據流。可以同時對多個埠的進入流量或是一個端
口的外出流量進行監控,也可以對VLAN內所有埠的進入流量進行監控,但不能同時對多個埠的外出
流量及VLAN的外出流量進行監控,可以對處於關閉狀態的埠設置SPAN,但此時的SPAN會話是非活動,
但只要相關的介面被打開,SPAN就會變為活動的。
監控埠最好是>=受控埠的帶寬,否則可能會出現丟包的情況。
SPAN Traffic--SPAN的流量
使用本地SPAN可以監控所有的網路流量,包括multicast、bridge protocol data unit (BPDU),和CDP、
VTP、DTP、STP、PagP、LACP packets. RSPAN不能監控二層協議。
Traffic Types--流量類型
被監控的流量類型分為三種,Receive (Rx) SPAN 受控埠的接收流量,Transmit (Tx) SPAN 受控埠
的發送流量,Both 一個受控埠的接收和發送流量。
Source Port--SPAN會話的源埠(也就是monitored port-即受控埠)
受控埠可以是實際的物理埠、VLAN、以太通道埠組EtherChannel,物理埠可以在不同的VLAN中,
受控埠如果是VLAN則包括此VLAN中的所以物理埠,受控埠如果是以太通道則包括組成此以太通道組
的所有物理埠,如果受控埠是一個TRUNK幹道埠,則此TRUNK埠上承載的所有VLAN流量都會受到監
控,也可以使用filter vlan 參數進行調整,只對filter vlan 中指定的VLAN數據流量做監控。
Destination Port--SPAN會話的目的埠(也就是monitoring port-即監控埠)
監控埠只能是單獨的一個實際物理埠,一個監控埠同時只能在一個SPAN會話中使用,監控
埠不參與其它的二層協議如:Layer 2 protocols
Cisco Discovery Protocol (CDP),
VLAN Trunk Protocol (VTP),
Dynamic Trunking Protocol (DTP),
Spanning Tree Protocol (STP),
Port Aggregation Protocol (PagP),
Link Aggregation Control Protocol (LACP).
預設情況下監控埠不會轉發除SPAN Session以外的任何其它的數據流,也可以通過設置ingress
參數,打開監控埠的二層轉發功能,比如當連接CISCO IDS的時會有這種需求,此時IDS不僅要接
收SPAN Session的數據流,IDS本身在網路中還會與其它設備有通訊流量,所以要打開監控埠的
二層轉發功能。
Reflector Port--反射埠
反射埠只在RSPAN中使用,與RSPAN中的受控埠在同一台交換機上,是用來將本地的受控埠流量
轉發到RSPAN中在另一台交換機上的遠程監控埠的方法,反射埠也只能是一個實際的物理埠,
它不屬於任何VLAN(It is invisible to all VLANs.)。
RSPAN中還要使用一個專用的VLAN來轉發流量,反射埠會使用這個專用VLAN將數據流通過TRUNK埠
發送給其它的交換機,遠程交換機再通過此專用VLAN將數據流發送到監控埠上的分析儀。
關於RSPAN VLAN的創建,所有參與RSPAN的交換機應在同一個VTP域中,不能用VLAN 1,也不能用
1002-1005,這是保留的(reserved for Token Ring and FDDI VLANs),如果是2-1001的標准VLAN,
則只要在VTP Server上創建即可,其它的交換機會自動學到,如果是1006-4094的擴展VLAN,則需要
在所有交換機上創建此專用VLAN.
反射埠最好是>=受控埠的帶寬,否則可能會出現丟包的情況。
VLAN-Based SPAN--基於VLAN的SPAN
基於VLAN的SPAN只能監控VLAN中所有活動埠接收的流量(only received (Rx) traffic),如果
監控埠屬於此VLAN,則此埠不在監控范圍內,VSPAN只監控進入交換機的流量,不對VLAN介面上
的路由數據做監控。
(VSPAN only monitors traffic that enters the switch, not traffic that is routed between VLANs.
For example, if a VLAN is being Rx-monitored and the multilayer switch routes traffic
from another VLAN to the monitored VLAN, that traffic is not monitored and is not received
on the SPAN destination port. )
三、SPAN和RSPAN與其它特性的互操作性
Routing--SPAN不監控VLAN間的路由數據;(不好理解)
Routing—Ingress SPAN does not monitor routed traffic. VSPAN only monitors traffic that
enters the switch, not traffic that is routed between VLANs. For example, if a VLAN is
being Rx-monitored and the multilayer switch routes traffic from another VLAN to the
monitored VLAN, that traffic is not monitored and not received on the SPAN destination port.
STP--監控埠和反射埠不會參與STP,但SPAN對受控埠的STP沒有影響;
CDP--監控埠不參與CDP;
VTP--RSPAN VLAN可以被修剪pruning;
VLAN and trunking--可以修改受控埠、監控埠和反射埠的VLAN和TRUNK設置,受控埠的改變
會立即生效,而監控埠和反射埠則要在從SPAN中去除後才會生效;
EtherChannel--整個以太通道組可以做為受控埠使用,如果一個屬於某個以太通道組的物理埠被
配成了受控埠、監控埠或反射埠,則此埠會自動從以太通道組去除,當SPAN
刪除後,它又會自動加入原以太通道組;
QoS--由於受QoS的策略影響,監控埠上收到的數據流會與受控埠實際的數據流不同,比如DSCP值
被修改等;
Multicast--SPAN可以監控組播的數據流;
Port security--安全埠不能做為監控埠使用;
802.1x--受控埠、監控埠和反射埠上可以設置802.1x,但有些限制。
四、SPAN和RSPAN的配置舉例
SPAN的限制和預設設置
Catalyst 3550交換機上最多隻能設置兩個SPAN Session,預設SPAN沒有使用,如果做了設置,預設
情況下,第一個被設為受控埠的介面進出流量都會受到監控,以後再追加的受控埠只會對接收的
流量進行監控,監控埠的默認封裝類型為Native,也就是沒有打VLAN的標記。
『柒』 入侵檢測軟體snort有哪些功能
Snort最重要的用途還是作為網路入侵檢測系統(NIDS)。
使用簡介
Snort並非復雜難以操作的軟體。 Snort可以三個模式進行運作:
偵測模式(Sniffer Mode):此模式下,Snort將在現有的網域內擷取封包,並顯示在熒幕上。
封包紀錄模式(packet logger mode):此模式下,Snort將已擷取的封包存入儲存媒體中(如硬碟)。
上線模式(inline mode):此模式下,Snort可對擷取到的封包做分析的動作,並根據一定的規則來判斷是否有網路攻擊行為的出現。
基本指令:偵測模式
若你想要在螢幕上顯示網路封包的標頭檔(header)內容,請使用
./snort -v
如果想要在螢幕上顯示正在傳輸的封包標頭檔內容,請使用
./snort -vd
如果除了以上顯示的內容之外,欲另外顯示數據鏈路層(Data link layer)的資料的話,請使用
./snort -vde
『捌』 我的電腦不能用microsoft word 打開.doc文件怎麼辦
如果你工作需要急於打開文件,可以嘗試用WINDOWS自帶的寫字板打開,或者安裝WPS2003以上的版本可以打開WORD文件,實在不行就復制文件到軟盤、U盤,或刻錄到光碟,或通過網路傳送等方式轉移到其它電腦上打開,先完成工作再說。
然後就是把重要的文件備份到C盤以外,重新安裝WINDOWS,WINDOWS已經敗壞了,重新安裝這是遲早的事。
提醒,如果你有系統一鍵恢復或鏡像就可以幾分鍾恢復正常,如果沒有,重新安裝WINDOWS後記得做一個一鍵恢復或鏡像,具體操作問你當地的技術人員。
『玖』 一個較新的snort規則,講明其對抗何種黑客攻擊這種黑客攻擊的特徵是什麼並說明snort規則對抗
怎麼不用sinnfer,這個比較簡單!比較好用,圖形化的界面。功能也比較強大!
Snort是一個網路入侵檢測系統,它可以分析網路上的數據包,用以決定一個系統是否被遠程攻擊了。多數Linux發行版本都有Snort程序,因此通過urpmi、apt-get、yum等安裝Snort是一件很輕松的事情。Snort可以將其收集的信息寫到多種不同的存儲位置以便於日後的分析。此外,Snort可被用作一個簡單的數據包記錄器、嗅探器,當然它主要是一個成熟的IDIS(網路入侵檢測系統)。
在Snort安裝之後,就可以立即使用了。我們只需執行:
#snort –v
這就將Snort設置也了嗅探模式,數據通信會在屏幕上滾動,顯示Snort所看到的數據。要退出此程序,按下ctrl-c鍵就可以了,然後我們就會看到它所檢測到的內容的一個簡短分析。要看到如tcpmp那樣更為詳細的信息,就需要使用-vd選項。
要使用Snort記錄數據,可以告訴此程序將信息記錄到什麼地方。在下面的例子中,Snort會將信息記錄到/usr/local/log/snort目錄中,因此就確保此目錄真的存在:
# snort -l /usr/local/log/snort -d
Snort將以二進制方式記錄數據包,如:/usr/local/log/snort/snort.log.1199665001,要查看此記錄,可以使用-r選項來重新顯示所捕獲的數據。
# snort -r /usr/local/log/snort/snort.log.1199665001
要將Snort用作一個網路入侵檢測系統還需要花點兒工夫。我們必須正確配置Snort,並要使用配置文件/etc/snort/snort.conf。注意,這個配置文件非同一般。Snort網站上的一些規則可能與Snort一起打包了,這依賴於你所使用的Linux版本。
開源社團的Snort的規則對任何人都是可用的,並極有可能與供應商所提供的Snort的版本捆綁發布。你還可以從Sourcefire預訂、接收其更新,這樣就可以使規則保持不斷更新。
一旦下載了一個規則包,如Community-Rules-CURRENT.tar.gz,就要在系統中解開它,將其解到Snort配置所在的目錄中:
# cd /etc/snort
# tar xvzf Community-Rules-CURRENT.tar.gz
新的規則將出現在rules/ directory中。
要啟用之,需要編輯snort.conf文件並添加以下內容:
var RULE_PATH rules
include $RULE_PATH/sql.rules
include $RULE_PATH/icmp.rules
...
不管你喜歡哪些規則,現在就可以啟動Snort並裝載配置文件/etc/snort/snort.conf,這會依次裝載下載的規則:
# snort -c /etc/snort/snort.conf
此時,Snort將會列印其初始化的信息,將其顯示在屏幕上,然後開始記錄與規則匹配的數據包。這些規則將決定Snort可以記錄什麼,它將忽略哪些內容,因此這里不像將Snort作為一個嗅探器來運行那樣,它所生成的記錄要小得多,因為它只記錄所謂的「重要的」數據包。默認情況下,這些記錄將會被存儲到/var/log/snort/中,Snort將會用我們前面所說-r選項來分析之。
『拾』 type 8E是什麼文件系統
Snort分析報告
1.--snort的簡介
snort 是一個基於libpcap的數據包嗅探器並可以作為一個輕量級的網路入侵檢測系統(
NIDS)。所謂的輕量級是指在檢測時盡可能低地影響網路的正常操作,一個優秀的輕量
級的NIDS應該具備跨系統平台操作,對系統影響最小等特徵並且管理員能夠在短時間內
通過修改配置進行實時的安全響應,更為重要的是能夠成為整體安全結構的重要成員。
Snort作為其典型範例,首先可以運行在多種操作系統平台,例如UNIX系列和Windows 9
X.(需要libpcap for Win32的支持),與很多商業產品相比,它對操作系統的依賴性比
較低。其次用戶可以根據自己的需要及時在短時間內調整檢測策略。就檢測攻擊的種類
來說,據最新數據表明(2000/12/4)snort共有21類(???)1271條檢測規則,其中包括
對緩沖區溢出,埠掃描和CGI攻擊等等。SNORT集成了多種告警機制來提供實時告警功
能,包括:syslog、用戶指定文件、UNIXSocket、通過SMBClient使用WinPopup對Windo
ws客戶端告警。 Snort的現實意義維作為開源軟體填補了只有商業入侵檢測系統的空白
,可以幫助中小網路的系統管理員有效地監視網路流量和檢測入侵行為。
2.snort與其他工具的比較。
Snort的主要用途就是網路監視、數據包的記錄和檢測入侵行為,下面是與分別具有上述
兩種功能的典型工具的比較。
1)--snort與tcpmp的比較
Tcpmp是最為經典的嗅探工具,主要是用於記錄網路數據,網路故障的探測診斷工具。
Snort與它的最大的共同之處在於都是基於libpcap的並且支持BPF過濾機制,所以本質上
都是調用的捕獲數據包的庫函數,但是snort的目的不僅僅是在於記錄這個數據包而是從
安全的角度考慮出發區解析它,並且tcpmp主要是分析第二層或者第三層的報文來進行
網路故障診斷,而snort則主要針對於應用層的數據進行分析從而實現檢測入侵行為。除
此之外,由於tcpmp旨在快速完整地記錄流量,所以它制定了特殊的輸出格式,速度快
但是不易看懂,而snort就提供了更為友好的輸出格式,有利於系統管理員的直接分析。
--Figure 1 - Typical Snort telnet packet display:
--------------------------------------------------------------------------
20:59:49.153313 0:10:4B:A9:66 -> 0:60:97:7:C2:8E type:0x800 len:0x7D
192.168.1.3:23 -> 192.168.1.4:1031 TCP TTL:64 TOS:0x10 DF
***PA* Seq: 0xDF4A6536 Ack: 0xB3A6FD01 Win: 0x446A
FF FA 22 03 03 E2 03 04 82 0F 07 E2 1C 08 82 04 ..".............
09 C2 1A 0A 82 7F 0B 82 15 0F 82 11 10 82 13 FF ................
F0 0D 0A 46 72 65 65 42 53 44 20 28 65 6C 72 69 ...FreeBSD (elri
63 2E 68 6F 6D 65 2E 6E 65 74 29 20 28 74 74 79 c.home.net) (tty
70 30 29 0D 0A 0D 0A p0)....
---------------------------------------------------------------------------
--Figure 2 - The same telnet packet as displayed by tcpmp:
---------------------------------------------------------------------------
20:59:49.153313 0:10:4b:d:a9:66 0:60:97:7:c2:8e 0800 125: 192.168.1.3.23 >
192.168.1.4.1031: P 76:147(71) ack 194 win 17514 (DF) [tos 0x10] (ttl 64,
id 660)
4510 006f 0294 4000 4006 b48d c0a8 0103
c0a8 0104 0017 0407 df4a 6536 b3a6 fd01
5018 446a d2ad 0000 fffa 2203 03e2 0304
820f 07e2 1c08 8204 09c2 1a0a 827f 0b82
150f 8211 1082 13ff f00d 0a46 7265 6542
5344 2028 656c 7269 632e 686f 6d65 2e6e
6574 2920 2874 7479 7030 290d 0a0d 0a
---------------------------------------------------------------------------
2)--snort與NFR的比較
根據Denmac System公司1999年11月的現有商用網路入侵檢測工具的調查結果表明,NFR
的綜合性能指數高於ISS公司的RealSecure和CA公司的SessionWall,所以其代表了目前
國際上的IDS的最高水準,是一個比較成熟的商業產品。Snort的許多設計思想類似於NF
R,但是在很多方面都顯出不足之處,例如無法實現IP Defragmentation等功能,在探測
規則語言的格式上來說,NFR採用的是一種深層次的腳本語言,SNORT與其相比就略顯單
薄。但是snort的優勢就在於它是開源軟體,全世界的愛好者都可以加入它的開發升級工
作中來,其前景是無法限量的。
2.--原理
snort作為一個NIDS[註:基於網路的入侵檢測系統(NIDS),其工作原理為在基於共享
網路上檢測原始的網路傳輸數據,通過分析捕獲的數據包,主要工作為匹配入侵行為的
特徵或者從網路活動的角度檢測異常行為,進而採取入侵的預警或記錄。從檢測模式而
言,snort屬於是誤用檢測(misuse detection)。[註:該方法對已知攻擊的特徵模式
進行匹配,包括利用工作在網卡混雜模式下的嗅探器被動地進行協議分析,以及對一系
列數據包解釋分析特徵。]從本質上上來說,snort是基於規則檢測的入侵檢測工具,即
針對每一種入侵行為,都提煉出它的特徵值並按照規范寫成檢驗規則,從而形成一個規
則資料庫。其次將捕獲得數據包按照規則庫逐一匹配,若匹配成功,則認為該入侵行為
成立。目前,snort的檢測規則庫主要包括了以下幾類的入侵行為:
snort的結構主要分為三個部分如圖n-1:
l--數據包捕獲和解析子系統(Capture Packet Mechanism from link layer and the
packet decoder ):
該子系統的功能為捕獲網路得傳輸數據並按照TCP/IP協議的不同層次將數據包進行解析
。Snort利用libpcap庫函數進行採集數據, 該庫函數可以為應用程序提供直接從鏈路層
捕獲數據包的介面函數並可以設置數據包的過濾器以來捕獲指定的數據。(的詳細介紹
請參閱附錄N)。網路數據採集和解析機制是整個NIDS實現的基礎,其中最關鍵的是要保
證高速和低的丟包率,這不僅僅取決於軟體的效率還同硬體的處理能力相關。對於解析
機制來說,能夠處理數據包的類型的多樣性也同樣非常重要,目前,snort可以處理以太
網,令牌環以及SLIP等多種鏈路類型的包。
l--檢測引擎(the detect engine)
檢測引擎是一個NIDS實現的核心,准確性和快速性是衡量其性能的重要指標,前者主要
取決於對入侵行為特徵碼的提煉的精確性和規則撰寫的簡潔實用性,由於網路入侵檢測
系統自身角色的被動性——只能被動的檢測流經本網路的數據,而不能主動發送數據包
去探測,所以只有將入侵行為的特徵碼歸結為協議的不同欄位的特徵值,通過檢測該特
征值來決定入侵行為是否發生。後者主要取決於引擎的組織結構,是否能夠快速地進行
規則匹配。
Snort採用了靈活的插件形式來組織規則庫,即按照入侵行為的種類劃分為相應的插件,
用戶可以根據需要選取對應的插件進行檢測。目前包括的插件分別如下:
每一類插件中包括了數十條的檢測規則,分別代表同一類型的不同入侵行為。對於規則
的定義,snort使用了一種簡單的,輕量級的規則描述語言,上述已經提及到檢測的最終
行為就是檢測數據包中協議的不同欄位,例如埠號就是重要的入侵線索。為了更為清
楚地闡述這個問題,我們舉一例說明:
攻擊名稱--NT IIS Showcode ASP
攻擊種類--獲取非法訪問許可權。
攻擊描述--通過構造特定的URL請求可以非法閱讀伺服器上的其他文件http://attack
host/msadc/Samples/SELECTOR/showcode.asp?source=/msadc/Samples/../../../../.
./boot.ini
入侵特徵碼 --IP地址:保護網段以外的IP地址。
--協議類型:TCP
--埠:80
--TCP標志位:PUS, ACK
--數據段內容:/selector/showcode.asp
CVE ID--CAN-1999-0736
Bugtraq ID --167
分析以上的這個入侵實例,我們可以看出其實檢測該入侵行為的關鍵是判斷埠號和數
據段內容,IP地址、協議類型和TCP標志位只是輔助的特徵碼。但是當開始分析原始數據
包時,是否應該就直接匹配埠和數據段的內容?無疑針對該入侵行為上述做法的匹配
效率是最高的。但是實際上這樣做會降低整體檢測的效率,因為入侵系統要對龐大的網
絡數據逐一進行檢測,應該遵循先檢測所有入侵行為的共同特徵其次才是個體特徵的原
則,例如如果首先檢測IP地址,一旦發現並不屬於檢測范圍之內,就立即檢測下一個數
據包而並非繼續檢測該包的其他欄位。這樣既保證了檢測的快速性,又提高了報警的實
時性。
Snort正是按照上述原則定義規則的,將檢測規則劃分成兩個部分:規則頭和規則選項。
前者是所有規則共有的包括IP地址、協議類型、埠號,後者根據不同規則包括相應的
欄位關鍵字,例如TCP的標志位或者窗口大小等。檢測規則除了包括上述的關於「要檢測
什麼」還應該定義「檢測到了該做什麼」,snort定義了三種處理方式——alert(發送報
警信息),log(記錄該數據包)和pass(忽略該數據包)並定義為規則的第一個匹配關鍵
字,這樣設計的目的非常簡單,旨在在程序中組織整個的規則庫,即將所有的規則按照
處理方式組織成三個鏈表以用於更快速准確地進行匹配,體現了設計者的巧妙之處。
下面我們來舉一實例來具體說明規則的定義:
alert tcp !$HOME_NET any -> $HOME_NET 80 (msg:"CAN-1999-0736 - IIS-showcode"
;flagsA; content:"/selector/showcode.asp"; nocase
該實例正式針對表(N)中所示的入侵行為所定義的檢測規則,通過該例可以看出snort
的規則語言簡明實用,基本格式為:
規則動作 協議類型 IP地址 埠號 -> 協議類型 IP地址 埠號 (規則選項)
源發送方 目的接受方
關於規則的具體書寫規范不再贅述,下面就其關鍵和特別之處加以說明:
1.-- 變數和操作符
snort作為一個NIDS,主要的目的就是能夠保護本網段即及時發現外部網對內部網的攻擊
,所以規則中的IP地址的定義主要是針對外部網和內部網地址兩種。由此snort引入了變
量的機制,即可以在規則中用變數表示IP地址欄位,用戶在運行前可根據實際的子網地
址來定義該變數,這樣在解析檢測規則時snort會自動替換變數值,增加了規則的靈活性
,不過只適應於像IP地址這種基本所有規則都具有同一值。
為了更為准確地表達規則和精確地表示檢測范圍,snort還定義了三類操作符:
l--否定操作符——「 ! 」
用於表示snort還增加了否定符「!」來區分內部網和外部網。例如例n的!$HOME_NET。
l--方向操作符——「->」和」<>」
用於表示傳輸的方向,分別表示單向和雙向傳輸。
l--埠描述符——「 : 」
用於表示埠的范圍。例如: 「600:「表示大於600的埠號。
2. 規則選項
規則選項作為檢測時的重要標准組成了snort入侵檢測引擎的核心,既易用又非常靈活強
大。首先其靈活性是指可以根據不同的不同行為制定相應的檢測選項內容,其次其強大
性是指不僅檢測具有一定的廣度和深度並且定義了檢測到時該做什麼 。snort中有15個
規則選項關鍵字,其中有三個關鍵字是做為檢測到後的回應:
msg - 在報警和包日誌中列印一個消息
logto - 把包記錄到用戶指定的文件中而不是記錄到標准輸出
resp - 主動反應(切斷連接等)
Resp關鍵字可以對匹配一條Snort規則的流量進行靈活的反應(flexible reponse
-FlexResp)。FlexResp代碼允許Snort主動地關閉惡意的連接。該模塊合法的參數如下
:
rst_snd - 向發送方發送TCP-RST數據包
rst_rcv - 向接受方發送TCP-RST數據包
rst_all - 向收發雙方發送TCP_RST數據包
icmp_net - 向發送方發送ICMP_NET_UNREACH
icmp_host - 向發送方發送ICMP_HOST_UNREACH
icmp_port - 向發送方發送ICMP_PORT_UNREACH
icmp_all - 向發送方發送上述所有的ICMP數據包。
作為入侵檢測系統,理論上只需要檢測入侵,並不需要去回應入侵行為的。所以該功能
應該是作為SNORT的附加功能,但是值得一提的是,發送RST和ICMP UNREACH數據包向攻
擊方可以暫緩其對目標主機的攻擊,我們所研究的一個工具叫做dsniff中的tcpkill就是
利用這個原理進行切斷非法連接,但是對於一般的拒絕服務攻擊,該方法的作用就不甚
明顯了。對於SNORT來說,實現該功能必然會降低檢測的的效率尤其是在網路流量特別大
的時候。
另外12中關鍵字都是針對協議中的不同欄位設置的:
關鍵字--檢測內容--主要針對的攻擊行為
ttl--檢測ip頭的ttl的值 --用於對traceroute探測的檢測
id--檢測ip頭的分片id值--黑客的固定攻擊,例如設置為31337
dsize--檢測包的凈荷尺寸的值--緩沖區溢出攻擊。
content--在包的凈荷中搜索指定的樣式--最為重要的一個選項,用於在數據包的數據段
中搜索指定的內容並根據數據觸發響應,可以搜索包含混合的文本和二進制數據。並設
置了三個輔助關鍵字:offset,dsize,nocase
Flags--檢測tcp flags的值--非法埠掃描或者其他非法探測主機操作系統類型等。
Seq--檢測tcp順序號的值--檢測主機發送的序列號集是否是固定的集合。入侵者可以利
用該值冒充合法用戶向被入侵者發送數據,偽裝正常的通信以竊取信息或者其他非法活
動。
Ack--檢測tcp應答(acknowledgement)的值--Nmap的TCP PING會設置該項的值為0,從而
判斷可能正在用Nmap進行非法掃描。
Itype--檢測icmp type的值--拒絕服務攻擊。註:只作為其中的一種特徵。
Icode--檢測icmp code的值--可疑的流量。
Session--記錄指定會話的應用層信息的內容--記錄在TCP會話中的會話數據。
Icmp_id--檢測ICMP ECHO ID的值--
Icmp_seq--檢測ICMP ECHO 順序號的值--
Ipoption--監視IP option的特定代碼--
Rpc--監視特定應用/進程調用的RPC服務--檢測非法的RPC請求,查看RPC請求,並自動將
應用(Application),過程(procere)和程序版本(program version)解碼,如果
所有三個值都匹配的話,該規則就顯示成功。
3.預處理程序
預處理程序從Snort版本1.5開始引入,其代碼在檢測引擎被調用之前先被運行,為檢測
做鋪墊,從而提高檢測的准確性和速度。而且預處理機制採用插件形式,用戶和程序員
能夠將模塊化的插件方便地融入Snort之中。目前snort現有的預處理程序模塊有以下三
種:
l--Minfrag
Minfrag預處理程序檢查給定尺寸限制的分片數據包。數據包被分片通常是由源和目的主
機之間的路由器引起的。一般說來,商業網路設備不會產生小於512位元組的分片包。可以
利用這個事實,來監控含有小分片的流量。
l--HTTP Decode
HTTP Decode用於處理HTTP URI字元串,將串中的數據轉化為可讀的ASCII字串,用於檢
測HTTP的數據信息對付隱蔽的WebURL掃描器和惡意的入侵者。
l--Portscan Detector
Snort Portscan預處理程序的用處:
向標准記錄設備中記錄從一個源IP地址來的埠掃描的開始和結束。
如果指定了一個記錄文件,在記錄掃描類型的同時也記錄目的IP地址和埠。埠掃描
定義為在時間T(秒)之內向超過P個埠進行TCP連接嘗試,或者在時間T(秒)之內向
超過P個埠發送UDP數據包。埠掃描可以是對任一IP地址的多個埠,也可以是對多
個IP地址的同一埠進行。現在這個版本可以處理一對一和一對多方式的埠掃描,下
一個完全版本將可以處理分布式的埠掃描(多對一或多對多)。埠掃描也包括單一
的秘密掃描(stealthscan)數據包,比如NULL,FIN,SYNFIN,XMAS等。如果包括秘密
掃描的話,埠掃描模塊會對每一個掃描數據包告警。
network to monitor - 監視埠掃描的目標網路以network/CIDR表示
number of ports - 在探測期間訪問的埠數目
detection period - 以秒計數的埠訪問時間限制
logdir/filename - 告警信息存放的目錄/文件名,告警也可以寫入標準的告警文件中。
l--日誌及報警子系統(logging/alerting subsystem)
入侵檢測系統的輸出結果系統的必要特徵是實時性和多樣性,前者指能夠在檢測到入侵
行為的同時及時記錄和報警,後者是指能夠根據需求選擇多種方式進行記錄和報警。一
個好的NIDS,更應該提供友好的輸出界面或發聲報警等等。
Snort是一個輕量級的NIDS,它的另外一個重要功能就是數據包記錄器,所以該子系統主
要提供了方式:
1.--fast model :採取TCPDUMP的格式記錄信息
2. readable model :按照協議格式記錄,易於用戶查看。
3.alert to syslog: 向syslog發送報警信息。
4.alert to text file :以明文形式記錄報警信息。
值得提出的是,snort考慮到用戶需要高性能的時候,即網路數據流量非常大,可以將數
據包信息進行壓縮從而實習快速的報警。
3.-- 程序結構
1)--snort的整體結構
snort作為優秀的公開源代碼的入侵檢測系統範例,其整個程序結構清晰,構思巧妙,我
們對於其版本1.6.3的源碼進行了深入的分析。Snort共有64個c文件和h文件,首先介紹
程序的整體結構,其流程圖如下:
其中最為關鍵的函數就是ProcessPacket(),--其流程圖如下:
2)--數據結構--
snort的主要數據結構就是幾個鏈表,上述已經提及,snort組織規則庫的巧妙之處就是
按照規則的處理動作來劃分成三個鏈表,其中每個鏈表又按照協議類型:TCP,IP和ICMP
分成三個鏈表,所以所有的規則都會被分配到這個三個鏈表中。鏈表中的成員就是描述
每條規則的結構——RuleTreeNode,該結構中的一個重要成員就是記錄該規則的處理函
數鏈表——RuleFpList,一條規則有時候需要調用多個處理函數來進行分析。該結構中
的另外一個重要成員就是規則選項的結構,該結構同樣包括該規則的選項信息以及其處
理函數鏈表。
值得提出的是,並不是每一條規則都分配一個RuleTreeNode結構,因為很多規則的選項
前的頭部分是相同的,只需要根據不同的規則選項鏈取不同的選項函數處理鏈表。基本
整體的結構如圖n所示,所有鏈表的初始化都是在捕獲數據包前進行的。
除以上鏈表外,snort還定義了預處理、輸出的關鍵字和處理函數鏈表,設計鏈表的主要
意圖是為了實現插件的思想,即用戶何以根據需求添加刪除預處理的功能模塊。其只要
的數據結構如下:
typedef struct _PreprocessKeywordNode
{
char *keyword;
void (*func)(char *);
} PreprocessKeywordNode;
// 預處理關鍵字信息結構。
typedef struct _PreprocessKeywordList
{
PreprocessKeywordNode entry;
struct _PreprocessKeywordList *next;
} PreprocessKeywordList;
//預處理關鍵字鏈表。
typedef struct _PreprocessFuncNode
{
void (*func)(Packet *);
struct _PreprocessFuncNode *next;
} PreprocessFuncNode;
//預處理函數鏈表。
所有鏈表的初始化都是在捕獲數據包前進行初始化的,一旦鏈表都已建立完畢,開始捕
獲數據包,每收到一個數據包都會現首先調用預處理程序鏈表中的函數進行處理後,其
次按照默認地順序遍歷AlertList,PassList和LogList三個鏈表。遍歷時首先根據數據包
的協議類型定位規則鏈表,其次調用遞歸函數進行規則的逐一匹配,即首先匹配規則頭
,若匹配則繼續遞歸匹配規則選項,若不匹配,直接匹配下一條規則。為了加快遍歷的
速度,snort在規則選項中的」content」內容匹配時調用了Boyer-Moore演算法。
4.--改進
1.--背景
我們認為snort已經具備了NIDS的基本功能,由於它本身定位在一個輕量級的入侵檢測工
具,盡管與商業的入侵檢測工具比起來,它的規則語言略顯簡陋,在報警方式和圖形化
使用界面上也顯露出不足之處,但是程序的整體結構清晰,規則語言簡單實用並提供插
件的功能支持,用戶可以添加自己的檢測規則和處理函數,這對於規則庫的及時更新有
著極為現實的意義。
通過分析,與商業的NIDS相比,SNORT 1.6.3沒有設置對IP 分片包的處理功能,即對於
例如「Teardrop」和「Ping of Death」兩類利用非法IP分片包進行的攻擊無法檢測:
?--teadrop——該攻擊是針對很多操作系統的TCP/IP協議棧沒有正確處理已分段的IP包
的重組。其特徵是發送2個或更多特別的分段IP數據報。第一個包是偏移量為0的段,數
據段(分段長度)位元組是N,並設置了MF位,第二個包是最後一個分段(MF==0),但它的偏移
量小於N,所有造成兩個分段重疊了。為了重組這些包,有弱點的系統就會在TCP/IP棧中
分配非常大的空間,因此導致目標系統因為內存耗盡而停止響應或者重啟。
?--Ping of Death——該攻擊的特正是向攻擊目標發送大量的ICMP分片數據包,當這些
數據包重組時其數據段已經大於65535個位元組,系統會因為無法處理這種數據包而造成拒
絕服務或者重啟。
?--
2.--方案
3.--實現