使用Snort制造強大的網(wǎng)絡安全檢測系統(tǒng)
chu888@263.net 皮皮魯
這篇文檔通過snort來在你的系統(tǒng)上建立一個網(wǎng)絡安全檢測系統(tǒng),并且將所有可能發(fā)生的安全入侵動作記錄下來。
Snort是Martin Roesch開發(fā)的一個基于軟件的實時入侵檢測系統(tǒng),它可以提醒管理員任何一個潛在的入侵行為。對于日益增漲的網(wǎng)絡攻擊行為、功能強大的exploits和一些經(jīng)驗豐富的黑客來說,它們以成為你網(wǎng)絡中的隱患,監(jiān)視與跟蹤他們的動作以成為你日常工作中的一部分。
直到現(xiàn)在,檢測系統(tǒng)一般都是一些專業(yè)的硬件設備和一些非實時性的產(chǎn)品并且非常難于安裝,Snort是一個基于TCP/IP的網(wǎng)絡監(jiān)聽解決方案,它的使用成本遠低于專業(yè)的監(jiān)聽設備,因為它是開源軟件,Snort非常易于使用,雖說它是一個輕量級的產(chǎn)品但它的功能一點也不亞于商業(yè)產(chǎn)品。
什么是網(wǎng)絡安全檢測系統(tǒng)?
網(wǎng)絡入侵檢測系統(tǒng)(NIDS)是一個可以檢測任何非正常信息和未經(jīng)認證信息的系統(tǒng),它不象防火墻一樣通過配置訪問列表和內(nèi)容信息檢測來控制網(wǎng)絡,如果傳輸方法和內(nèi)容被允許,它才被允許通過,但是NIDS捕捉和檢測全部的傳輸,不管理它是允許的還是不被允許的數(shù)據(jù)包,它是基于傳輸內(nèi)容的一種控制方法,可以對于任一一個IP或應用層進行警告控制。
Snort是一個輕量級的NIDS系統(tǒng),它不會打斷入侵行為,它只是起到監(jiān)控作用,它非常容易控制,可以使用一些你所熟悉的方法進行開發(fā),并且安裝很快。Snort當前包含了超過1100條入侵警告信息。而且它保留了一些和其他檢測設備時行溝通的方法,它并不會影響其他的入侵檢測設備的工作。
它非常徹底的封裝了一些包特性,以下是snort可以使用的特性:
• 可以檢測緩沖區(qū)溢出、端口掃描、CGI攻擊、SMB探測、NetBios探測、NMAP掃描等等,并且可以檢測出系統(tǒng)中一些未知的木馬程序、DDos客戶端和許多許多未知的程序。
• 使用syslog、SMB的網(wǎng)絡消息來警告系統(tǒng)管理員。
• 可以快速開發(fā)出新的入侵警告
• 將數(shù)據(jù)包以人性化的方法進行解碼并以目錄方式記錄.
• 使用被動方式進行檢測
• 可以使用DSL或?qū)S梅掌鱽頇z測你的網(wǎng)絡
Snort使用libpcap庫,tcpdump工具也使用同樣的庫文件,Snort解碼所有通過網(wǎng)絡的數(shù)據(jù)包用于檢測是否有入侵動作,在它工作時它以混雜模式工作。
為什么要使用入侵檢測系統(tǒng)?
入侵檢測設備都應該是任何網(wǎng)絡中的一部分,它可以將幫助你檢測的入侵行為。
在安裝Snort之前
在實裝Snort之前有一些事情需要你考慮。
• 你的組織或機構(gòu)是否你同意你使用檢測系統(tǒng)?
• 在你的系統(tǒng)上安裝snort是否安全?
• 你將在那里安裝Snort?如果你想嘗試找出掃描你機器端口或攻擊你自已網(wǎng)絡的人來的話,它可能是的了,不過對于放置在公司里面的snort來說可能會難一點。
• 你的時間是否正確,這對于NIDS來說非常重要,建議你通過time server來進行同步。請你修改crontab文件。
00 * * * * root /usr/sbin/ntpdate -u
安裝檢測設備
這個檢測設備可以放置在組織的防火墻外面或放置在DMZ中。這樣將可以使 snort檢測到攻擊行為而且不影響防火墻的工作。
交換機、路由器、防火墻的存在將影響檢測系統(tǒng)的正常工作。
單一接口
單一接口對于檢測設備來說是容易的。單一接口可以用來監(jiān)聽網(wǎng)絡中所有的數(shù)據(jù)傳輸,前提這個網(wǎng)絡是基于非交換環(huán)璄的。
雙接口
在兩接口中一個接口用于網(wǎng)絡監(jiān)聽,一個接口用于遠程網(wǎng)絡管理。這種配置將不提供任何服務,只提供一個SSH遠程服務進行管理。
實裝Snort
首先保證機器上以正確安裝了libpcap庫。如果你是Redhat系統(tǒng)可以去以下地址下載:
http://www.linuxsecurity.com/programs/snort-1.6.2.2-1.i386.rpm. ftp://ftp.ee.lbl.gov/libpcap.tar.Z.
實裝網(wǎng)絡入侵檢測庫
安裝后你可以通過網(wǎng)絡下載的入侵庫: http://www.snort.org/snort-files.htm#Rules
還有一些其他的入侵庫你可以通過http://dev.whitehats.com/ids/vision.conf 下載,它們每個小時都會更新
如果你是通過rpm進行的安裝,你可以通過snort-update進行升級,修改你的cron文件。
00 00 * * * root /usr/sbin/snort-update -q
在正確安裝以后,你就可以使用它了,以下是它的基本命令集合
# snort -? 打印出常用的選項
test-drive是用來保證正確的安裝。只監(jiān)視本地機器,-I=interface:
# snort -vdei eth0
用CTRL+C來停止測試。不要忘了將你的網(wǎng)卡設為混雜模式。Snort將以后臺程序形式運行,并會以開啟停止形式出現(xiàn)。
Packet Sniffer模式
這種模式下,只將TCP/IP報頭打印出來
# snort -v
查看應用層數(shù)據(jù)
# snort -vd
數(shù)據(jù)聯(lián)接層報頭
# snort -vde
記錄
指定任何其他選項是沒有意義的,如果你需要Snort的安裝選項或者使用tcpdump,請解析出這個文件,-r表示讀并處理文件。
# snort -vder /var/log/snort/snort-0629@1600.log
對Berkeley Packet Filter解析出特定的項目
# snort -vder /var/log/snort/snort-0629@1600.log udp
# snort -vr /var/log/snort/snort-0629@1600.log tcp
# snort -ver /var/log/snort/snort-0629@1600.log icmp
對Berkeley Packet Filter用man查看snort和tcpdump的其他選項。
網(wǎng)絡侵入探測模式
現(xiàn)在我們進入真正的Snort工具??匆幌?etc/snort/snort.conf,全局配置文件。Snort的規(guī)則設置也以文本文件形式存放在/etc/snort。仔細看一下這一行:
var HOME_NET $eth0_ADDRESS
這個是按照本地網(wǎng)卡的網(wǎng)絡設置來初始化Snort。
為了保證速度,記錄每個單個的包并顯示在屏幕上是不可能的。包會被丟棄,而記錄文件會變得非常龐大。使用-v切換,這樣就不會顯示在屏幕上,我們可以不用-e,數(shù)據(jù)連接報頭:
# snort -dl /var/log/snort -h 192.168.1.0/24 -c /etc/snort/snort.conf
-h表示本地網(wǎng)絡,-c表示使用規(guī)則設定。這是基本的,用ASCII記錄安裝規(guī)則定義的包。使用-b切換記錄為二進制文件。注意定義子網(wǎng)范圍用CIDR符號。
這些神秘的規(guī)則設定是從哪里來得呢?兩個來源:從Snort.org,包括在RPM或是下載的二進制文件中;從Martin Roesch,Snort的制作者,他設計的Snort在所有方面都很迅速:安裝、運行和對攻擊的反應。如果你有能力分析一個攻擊和確認一個獨特的信號,你可以自己寫一個規(guī)則來發(fā)現(xiàn)并記錄它。參見你下載的Snort用戶手冊(SnortUsersManual.pdf),這是一個非常好的寫定制規(guī)則指南。(這些文件都可以在線獲得)Snort.org每天更新規(guī)則設定,你可以下載讓你滿意的。你可以在Snort.org上的Snort/contrib目錄找到snortpp,可以用它來合并新的規(guī)則
下面就是配置好snort.conf的文件了,以下是基本的配置文件:
#
# Taken and modified from "vision.conf", part of Max Vision's
# ArachNIDs work. See /usr/doc/snort-1.6/README.snort-stuff for more
# information on how to use this file.
var INTERNAL 192.168.1.0/24
var EXTERNAL 63.87.101.0/24
var DNSSERVERS 63.87.101.90/32 63.87.101.92/32
preprocessor http_decode: 80 443 8080
preprocessor minfrag: 128
preprocessor portscan-ignorehosts: $DNSSERVERS
preprocessor portscan: $EXTERNAL 3 5 /var/log/snort/portscan.log
# |
# Log file (path/name) ----------------------------------+
# Ruleset, available (updated hourly) from:
#
# http://dev.whitehats.com/ids/vision.conf
# Include the latest copy of Max Vision's ruleset
include /etc/snort/vision.conf
#
# Uncomment the next line if you wish to include the latest
# copy of the snort.org ruleset. Be sure to download the latest
# one from http://www.snort.org/snort-files.htm#Rules
#
# include /etc/snort/06082k.rules
#
# If you wish to monitor multiple INTERNAL networks, you can include
# another variable that defines the additional network, then include
# the snort ruleset again. Uncomment the two following lines.
#
# var INTERNAL 192.168.2.0/24
# include /etc/snort/vision.conf
# include other rules here if you wish.
authpriv.* /var/log/secure.log
[root@krypton ~]# snort -d -l /var/log/snort -c /etc/snort/rules.base
Initializing Network Interface...
User level filter, protocol ALL, raw packet socket
Decoding Ethernet on interface eth0
Initializing Preprocessors!
-------------------------------------------------
Keyword | Preprocessor @
-------------------------------------------------
http_decode : 0x8053070
minfrag : 0x8053290
portscan : 0x8053ce0
portscan-ignorehosts: 0x8054340
-------------------------------------------------
Initializing Plug-ins!
-------------------------------------------------
Keyword | Plugin Registered @
-------------------------------------------------
content : 0x8052050
offset : 0x8052080
depth : 0x80520f0
nocase : 0x8052160
flags : 0x8052710
itype : 0x80528f0
icode : 0x8052a00
ttl : 0x8052b10
id : 0x8052bf0
ack : 0x8052cd0
seq : 0x8052dc0
dsize : 0x8052ec0
ipopts : 0x8054420
rpc : 0x8054670
icmp_id : 0x8054830
icmp_seq : 0x8054930
session : 0x8055300
-------------------------------------------------
Initializating Output Plugins!
-------------------------------------------------
Keyword | Output @
-------------------------------------------------
alert_syslog : 0x8054a20
log_tcpdump : 0x8054ff0
-------------------------------------------------
+++++++++++++++++++++++++++++++++++++++++++++++++++
Initializing rule chains...
255 Snort rules read...
255 Option Chains linked into 140 Chain Headers
+++++++++++++++++++++++++++++++++++++++++++++++++++
Performing Rule List Integrity Tests...
---------------------------------------
Alert TCP Chains : OK
Alert UDP Chains : OK
Alert ICMP Chains : OK
Log TCP Chains : Empty list...
Log UDP Chains : Empty list...
Log ICMP Chains : Empty list...
Pass TCP Chains : Empty list...
Pass UDP Chains : Empty list...
Pass ICMP Chains : Empty list...
---------------------------------------
-*>; Snort! <*-
Version 1.6
By Martin Roesch (roesch@clark.net, www.clark.net/~roesch)
按Ctrl+c可以停止snort的運行,如果你想snort運行在后臺你可以使用:
[root@krypton ~]# /usr/sbin/snort -s -d -D -i eth0 -l /var/log/snort -c /etc/snort/rules.base
如果你想snort啟動時就載入可以編輯一個文件,放入/etc/rc.d/init.d/snortd這個文件中
[root@krypton ~]# /etc/rc.d/init.d/snortd
Starting snort: [ OK ]
[root@krypton ~]# ps awx | grep snort
9131 ? S 0:04 /usr/sbin/snort -s -d -D -i eth0 -l
/var/log/snort -c /etc/snort/rules.base
9149 pts/1 S 0:00 grep snort
[root@krypton ~]#
之后為了測試一下snort是否工作正常你可以使用nmap來測試一下。
[root@krypton ~]# nmap -p 25,53 -sX -P0 -D 1.2.3.4,5.6.7.8 192.168.200.189
Starting nmap V. 2.54BETA1 by fyodor@insecure.org (www.insecure.org/nmap/)
Interesting ports on smtp.mydomain.com (192.168.200.189):
Port State Service
25/tcp open smtp
53/tcp open domain
Nmap run completed -- 1 IP address (1 host up) scanned in 19 seconds
之后snort如果工作正常的話,你將得到一條這樣的信息
Jun 18 15:57:52 krypton snort[9131]: spp_portscan: PORTSCAN DETECTED from
1.2.3.4
Jun 18 15:57:52 krypton snort[9131]: spp_portscan: PORTSCAN DETECTED from
5.6.7.8
Jun 18 15:57:58 krypton snort[9131]: spp_portscan: portscan status from
192.168.1.100: 2 connections across 1 hosts: TCP(2), UDP(0) STEALTH
Jun 18 15:57:58 krypton snort[9131]: spp_portscan: portscan status from
1.2.3.4: 2 connections across 1 hosts: TCP(2), UDP(0) STEALTH
Jun 18 15:57:58 krypton snort[9131]: spp_portscan: portscan status from
5.6.7.8: 2 connections across 1 hosts: TCP(2), UDP(0) STEALTH
[root@krypton ~]# cd /var/log/snort
[root@krypton snort]# find 192.168.200.189
192.168.100.189
192.168.100.189/ICMP_ECHO
192.168.100.189/ICMP_PORT_UNRCH
192.168.100.189/TCP:57554-32771
192.168.100.189/TCP:57555-32771
[root@krypton ~]#
[root@krypton 192.168.100.189]# cat TCP:57554-32771
** MISC-Attempted Sun RPC high port access **
06/18-00:48:31.928357 192.168.100.189:57554 ->; 192.168.200.189:32771
TCP TTL:42 TOS:0x0 ID:5410
***F*P*U Seq: 0x0 Ack: 0x0 Win: 0x400
00 00 00 00 00 00 ......
The corresponding syslog entry looks like:
Jun 18 00:48:31 krypton snort[8757]: MISC-Attempted Sun RPC high port
access: 192.168.100.189:57554 ->; 192.168.200.189:32771
--------------------------------------------------------------------------------
ShySamurai 回復于:2003-04-21 16:23:55
引用:原帖由 "chu888" 發(fā)表:
ISC-Attempted Sun RPC high port
access: 192.168.100.189:57554 ->; 192.168.200.189:32771
Tools are available for analysing and visualising your snort logs. Such as ACID(Analysis Console for Intrusion Database).
About ACID you can check out the link below:
http://www.andrew.cmu.edu/~rdanyliw/snort/snortacid.html
You can set up your Intrusion Detection System like this:
ACID<--------------------MySQL<------------------Snort
Also, there are plenty of documents about how to set up Snorts are available.
http://www.snort.org/
使用強大的Snort
更新時間: 2007-04-23 10:12:57來源: 粵嵌教育瀏覽量:1061
推薦閱讀
- ·Linux字符設備驅(qū)動框架解析:file_operations的核心作用與實現(xiàn)
- ·廣東朝歌數(shù)碼科技股份有限公司專場招聘會
- ·深化產(chǎn)教融合,共筑技能人才培養(yǎng)新生態(tài) —— 廣州華立學院到訪粵嵌從化校區(qū)為深化產(chǎn)教
- ·校企合作新突破 | 粵嵌科技與三亞學院共探產(chǎn)教融合新路徑
- ·粵嵌科技入選國家級職業(yè)數(shù)字展館聯(lián)合建設單位,賦能計算機程序設計員高技能人才培養(yǎng)
- ·嵌入式實時操作系統(tǒng)的性能優(yōu)化與實現(xiàn)路徑
- ·校企攜手賦能教育!粵嵌科技助力海南科技職業(yè)大學探索 AGI 時代教學新范式
- ·嵌入式系統(tǒng)中的低功耗設計策略與實現(xiàn)路徑
- ·深圳市軒宇軟件開發(fā)有限公司專場招聘會
- ·嵌入式系統(tǒng)中的代碼空間優(yōu)化:策略與實踐