Snort output

snort的output module
啟動snort時,snort會把報警資訊以module指定的格式輸出到指定位置
組態檔編輯位置:$snort_home/etc/snort.conf內的output部份

使用output module格式為
output : < name_of_plugin>: < configuration_options>
name_of_plugin:已知的有以下


alert_fast
等同於輸出模式為fast,ex:snort -A fast
警報的訊息不會包含完整的packet header
警報只會輸在一個檔案
格式為 output alert_full:[< filename> [packet] [ < limit>]]
 filename:為指定的log檔
 packet:記錄完整的packet header

alert_full
等同於輸出模式為full,ex:snort -A full
警報的訊息會包含完整的packet header
警報預設輸出在目錄/var/log/snort內,或是由command指令中另外指定一個目錄
格式為 output alert_full:[< filename>[ < limit>]]
 filename:為指定的log檔
輸出格式大致如下

[**] [1:1019:20] signature name [**]
[Classification: type ] [Priority: num]
time source ip:port -> dest ip:port
proto TTL:num TOS:num ID:num IpLen:num DgmLen:num
option
[Xref => web1][Xref => web2]
ex:
[**] [1:1019:20] WEB-IIS Malformed Hit-Highlighting Argument File Access Attempt [**]
[Classification: Web Application Attack] [Priority: 1]
11/07-20:43:56.555022 10.10.2.154:6289 -> 10.10.1.180:80
TCP TTL:240 TOS:0x10 ID:0 IpLen:20 DgmLen:483
***AP*** Seq: 0xA775A97C Ack: 0xA5AD9402 Win: 0xFE44 TcpLen: 20
[Xref => http://www.securityfocus.com/archive/1/43762][Xref => http://www.microsoft.com/technet/security/bulletin/ms00-006.mspx]

alert unixsock
等同於輸出模式為unsock,ex:snort -A unsockl
將訊息傳到其他主機的程式
格式為 output alert_unixsock

syslog
將event傳送到本地syslog server
格式為 output alert_syslog: < facility> < priority> [options]
 facility:可選的值有log auth,log authpriv,log daemon,log local0,log local1,log local2,log local3,log local4,log local5,log local6,log local7,log user
 priority;可選的值有log emerg,log alert,log crit,log err,log warning,log notice,log info,log debug
 options:可選的值有log cons,log ndelay,log perror,log pid
ex:
output alert_syslog: LOG_AUTH LOG_ALERT
output alert_syslog: host=hostname:port, LOG_AUTH LOG_ALERT
輸出格式大致如下:
May 10 00:03:38 xxxxxx snort: INFO – ICQ Access [Classification:content:”MKD / ” Priority: 0]: 10.1.1.1:54352 -> 10.2.2.5:80

csv
將警報資料寫成易於輸入資料庫的csv格式,格式內的欄位與順序皆可自訂
ps:此套件為Brian Caswell開發
格式為 output alert_csv:[< filename> [< format> [< limit>]]]
 filename:指定的log檔,預設為alert.csv
 format:”default”|< field(,< field>)*> 指定欄位格式,default是輸出所有欄位,順序為 timestamp,sig_generator,sig_id,sig_rev,msg,proto,src,srcport,dst,dstport,ethsrc,ethdst,ethlen,tcpflags,tcpseq,tcpack,tcplen,tcpwindow,ttl,tos,id,dgmlen,iplen,icmptype,icmpcode,icmpid,icmpseq
 limit:< number>[(‘G’|’M’|K’)]
ex:
output alert_csv:/var/log/alert.csv default
output alert_csv:/var/log/alert.csv timestamp,msg
ps:可用複合CSV輸出,建立多個輸出文件,在每個文件中設定需要記錄欄位

unified
使用unified的格式,此格式可讓snort跑得更快
讀取此格式需使用unified log reader,ex:barnyard
格式為
output alert_unified:< base file name>[,< limit < filesize limit in MB>]
output log_unified:< base file name>[,< limit < filesize limit in MB>]

unified2
可代替unified的模組,有3種模式,分述如下
alert logging格式為
output alert_unified2:filename < basefilename>[,< limit< sizeinMB>][,nostamp] [,mpls_event_types]
packet logging格式為
output log_unified2:filename < basefilename>[,< limit< sizeinMB>][,nostamp]
true unified logging格式為
output unified2:filename < basefilename>[,< limit< sizeinMB>][,nostamp] [,mpls_event_types]

alert_prelude
產生prelude ids database可支援的格式
格式為
output alert_prelude:profile=< name of prelude profile> [info] [low] [medium]
 info: < priority number for info priority alerts>
 low: < priority number for low priority alerts>
 medium: < priority number for medium priority alerts>

tcpdump
使用tcpdump格式記錄
格式為 output log_tcpdump:[< filename>[< limit>]]
 filename 指定log的名稱,預設為logdir/snort.log
 limit 預設為128mb,自訂limit的格式為< number>[(‘G’|’M’|K’)]
ex:
output log_tcpdump: snort_dump.log

database
將log傳送到sql database
ps:需先將資料庫及資料表建立好,並設定可存取資料的帳號
ps:2000年3月Jed Pickel開發的套件
格式為output database:< log type>,< database type>,< parameter list>
 log type:可用的值有log,alert
  使用log則呼叫log output chain
  使用alert則呼叫alert output chain
 database type:可用的值有mssql,mysql,postgresql,oracle,odbc
 parameter list:可用的parameter有以下
  host 資料庫主機位置 
  port 資料庫主機使用的port 
  dbname 資料庫名稱
  user 可存取dbname的使用者
  password 使用者的密碼
  sensor name 指定snort sensor的名稱,預設為automatically
  encoding < hex|base64|ascii> 編碼packet payload和option data的方式,預設為hex
  detail < full|fast> 指定記錄的詳細程度,預設為full
   fast記錄欄位為timestamp, signature, source ip, destination ip, source port, destination port, tcp flags,protocol
   full記錄欄位除了有fast的外還會包含ip/tcp option和payload
ex:
output database: log, mysql, dbname=snort user=snort host=localhost password=xyz
output database: log, mysql, user=snortuser password=snortpass dbname=snortdb host=localhost


XML
該module可把log或alert以XML格式,存放在本地文件、輸出到一個database、或者送到CERT進行處理。
資料會用SNML(Simple Network Markup Language,簡單網路標記語言/SNort Markup Language,snort標記語言)格式
支援協定包括HTTP、HTTPS、IAP(Intrusion Alert Protocol,入侵報警協定)
資料可用HEX、BASE64、ASCII
ps:
snort的XML output module為AIRCERT(Automated Incident-Reporting)工程的一部份
作者為Jed Pickel和Roman Danyliw
參考資料:http://www.cert.org/kb/snortxml

格式如下
output xml: log, file=/var/log/snort/snortxml-MMDD@HHMM
#把log輸出到/var/log/snort/snortxml-MMDD@HHMM,其中MMDD@HHMM分別是月日時分
output xml: alert,protocol=https host=your.server.org file=yourfile cert=mycert.crt key=mykey.pem ca=ca.crt server=srv_list.lst
#使用HTTPS輸出送到遠端伺服器your.server.org的文件yourfile  
#cert、key、ca與SSL有關
#server參數可以設定連接的伺服器列表 

…………………………………………………………………………………………………..

threshold.conf
可消除誤報或無用的大量警告訊息
需在snort.conf中將include threshold.conf註解取消才會讀取進來


event filter
可減少noise alert及false alarm
格式為event_filter gen_id < id>, sig_id < id> , type < event filter type> , track < by_src|by_dst> , count < value> , seconds < value>
ps:
gen_id相關記錄可參考檔案$snort_home/etc/generators
sig_id相關記錄可參考各rule檔,preprocessor的sid可參考$snort_home/etc/gen-msg.map

event filter type
limit 在指定的time interval中只記錄前n筆event
threshold 在指定的time interval中,記錄每次n筆event 
both 在指定的time interval中,只記錄第n筆event後的第一筆event
ps:
若gen_id=0,sig_id=0 表示全部事件
若僅sig_id=0 表示gen_id下的全部事件
ps:gen_id可以參考gen-msg.map
ex:
在每個60秒內僅記錄1筆事件
event_filter gen_id 1 , sig_id 1853,type limit,track by_src,count 1,seconds 60
在每個60秒內僅記錄第3筆事件 / 在每個60秒內僅在第3筆事件後才開始記錄
event_filter gen_id 1 , sig_id 1853,type threshold,track by_src,count 3,seconds 60
在60秒內超過30筆事件時,將記錄第31筆事件
event_filter gen_id 1 , sig_id 1853,type both,track by_src,count 30,seconds 60


event suppress
依照ip及來源停止記錄指定的event
格式為
suppress gen_id < id >, sid_id < id > [, track < by_src|by_dst >, ip < IP/MASK-BITS > ]
ex:
略過http_inspect: BARE BYTE UNICODE ENCODING訊息
suppress gen_id 119, sig_id 4 # http_inspect: BARE BYTE UNICODE ENCODING
略過snort_decoder: Tcp Options found with bad lengths
suppress gen_id 116 , sig_id 54
略過WEB-ATTACKS rm command attempt中目的ip地址是222.222.111.111的alert
suppress gen_id 1, sig_id 1365, track by_dst,ip 222.222.111.111

ps:
關閉以下訊息
(http_inspect) BARE BYTE UNICODE ENCODING
That’s not triggered by a rule – it’s from the Snort http_inspect preprocessor. The message means that a web client uses a non-standard encoding for UTF-8 values
在snort.conf中註解掉
preprocessor http_inspect::global
iis_unicode_map unicode.map 1252
preprocessor http_inspect_server: server default
profile apache ports {80} oversize_dir_length 500