开源流量分析工具-Zeek的安装和使用
Zeek是一個(gè)開源的、被動(dòng)網(wǎng)絡(luò)流量分析軟件。它主要被用作安全監(jiān)測(cè)設(shè)備來檢查鏈路上的所有流量中是否有惡意活動(dòng)的痕跡。但更普遍地,Zeek支持大量安全領(lǐng)域外的流量分析任務(wù),包括性能測(cè)量和幫助排查問題。
zeek架構(gòu)
Zeek是一個(gè)被動(dòng)的開源網(wǎng)絡(luò)流量分析器。許多運(yùn)營(yíng)商將Zeek用作網(wǎng)絡(luò)安全監(jiān)視器(NSM),以支持對(duì)可疑或惡意活動(dòng)的調(diào)查。Zeek還支持安全領(lǐng)域以外的各種流量分析任務(wù),包括性能評(píng)估和故障排除。
新用戶從Zeek獲得的第一個(gè)好處是描述網(wǎng)絡(luò)活動(dòng)的大量日志。這些日志不僅包括網(wǎng)絡(luò)上看到的每個(gè)連接的全面記錄,還包括應(yīng)用程序?qū)佑涗洝_@些包括所有HTTP會(huì)話及其請(qǐng)求的URI,密鑰標(biāo)頭,MIME類型和服務(wù)器響應(yīng),帶回復(fù)的DNS請(qǐng)求,SSL證書,SMTP會(huì)話的關(guān)鍵內(nèi)容,以及更多。默認(rèn)情況下,Zeek將所有這些信息寫入結(jié)構(gòu)良好的制表符分隔或JSON日志文件中,這些文件適合使用外部軟件進(jìn)行后處理。用戶還可以選擇讓外部數(shù)據(jù)庫(kù)或SIEM產(chǎn)品使用,存儲(chǔ),處理和顯示數(shù)據(jù)以進(jìn)行查詢。
除了日志外,Zeek還具有用于一系列分析和檢測(cè)任務(wù)的內(nèi)置功能,包括:
1.從HTTP會(huì)話中提取文件
2.通過與外部注冊(cè)表進(jìn)行接口來檢測(cè)惡意軟件
3.報(bào)告網(wǎng)絡(luò)上可見的易受攻擊的軟件版本
4.識(shí)別流行的網(wǎng)絡(luò)應(yīng)用程序
5.檢測(cè)SSH暴力破解
6.驗(yàn)證SSL證書鏈
在很高的層次上,Zeek在體系結(jié)構(gòu)上分為兩個(gè)主要組件。它的事件引擎(或核心)將傳入的數(shù)據(jù)包流減少為一系列更高級(jí)別的事件。這些事件以與策略無關(guān)的方式反映了網(wǎng)絡(luò)活動(dòng),即,它們描述了已看到的內(nèi)容,而不是原因或意義是否重大。
例如,線路上的每個(gè)HTTP請(qǐng)求都變成一個(gè)相應(yīng)的 http_request事件,該事件帶有所涉及的IP地址和端口,所請(qǐng)求的URI以及所使用的HTTP版本。但是,該事件未傳達(dá)任何進(jìn)一步的解釋,例如該URI是否對(duì)應(yīng)于已知的惡意軟件站點(diǎn)。
事件引擎組件包括多個(gè)子組件,特別是包括以下內(nèi)容的包處理管道:輸入源,包分析,會(huì)話分析和文件分析。輸入源從網(wǎng)絡(luò)接口攝取傳入的網(wǎng)絡(luò)流量。數(shù)據(jù)包分析處理較低級(jí)別的協(xié)議,從鏈路層一直開始。會(huì)話分析處理應(yīng)用程序?qū)訁f(xié)議,例如HTTP,F(xiàn)TP等。文件分析剖析了通過會(huì)話傳輸?shù)奈募膬?nèi)容。事件引擎提供了一個(gè)插件架構(gòu),可以從Zeek核心代碼庫(kù)的外部添加其中的任何一個(gè),從而可以根據(jù)需要擴(kuò)展Zeek的功能。
與事件相關(guān)的語義是由Zeek的第二個(gè)主要組件腳本解釋器派生的,該腳本解釋器執(zhí)行一組用Zeek的自定義腳本語言編寫的事件處理程序。這些腳本可以表示站點(diǎn)的安全策略,例如,當(dāng)監(jiān)視器檢測(cè)到不同類型的活動(dòng)時(shí)要采取的操作。
更一般而言,腳本可以從輸入流量中得出任何所需的屬性和統(tǒng)計(jì)信息。實(shí)際上,Zeek的所有默認(rèn)輸出都來自發(fā)行版中包含的腳本。Zeek的語言帶有廣泛的特定于域的類型和支持功能。至關(guān)重要的是,Zeek的語言允許腳本隨時(shí)間保持狀態(tài),從而使腳本能夠跟蹤并關(guān)聯(lián)跨連接和主機(jī)邊界觀察到的內(nèi)容的演變。Zeek腳本可以生成實(shí)時(shí)警報(bào),還可以根據(jù)需要執(zhí)行任意外部程序。人們可能會(huì)使用此功能來觸發(fā)對(duì)攻擊的主動(dòng)響應(yīng)。
安裝依賴
1.Libpcap (http://www.tcpdump.org)
2.OpenSSL libraries (https://www.openssl.org)
3.BIND8 library
4.Libz
5.Bash (for ZeekControl)
6.Python 3.5 or greater (https://www.python.org/)
單機(jī)安裝
本例安裝環(huán)境:debian10.0.5
硬件配置:4C 8G 120G硬盤
root@Zeek:~# apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev
root@Zeek:~# apt-get install gnupg curl
root@Zeek:~# apt install -y automake make g++ bison flex libelf-dev libssl-dev bc
root@Zeek:~#apt-get install python3-git python3-semantic-version
root@Zeek:~#git clone --recursive https://github.com/zeek/zeek
root@Zeek:~# cd zeek
root@Zeek:~#./configure
root@Zeek:~#make
root@Zeek:~#make install
增加zeek環(huán)境變量
[root@Zeek ~]# vim /etc/profile
在末尾增加
export PATH=/opt/zeek/bin:$PATH
[root@Zeek ~]# source /etc/profile
初始化
[root@Zeek ~]# zeekctl
[ZeekControl] > install
[ZeekControl] > start
使用教程
zeek默認(rèn)的日志存放目錄為/opt/zeek/logs,當(dāng)前的日志默認(rèn)存放為current路徑
默認(rèn)產(chǎn)生的日志如下:
[root@Zeek current]# tree
├── capture_loss.log
├── conn.log
├── dhcp.log
├── dns.log
├── dpd.log
├── files.log
├── http.log
├── notice.log
├── ntp.log
├── software.log
├── ssh.log
├── ssl.log
├── stats.log
├── stderr.log
├── stdout.log
├── weird.log
└── x509.log
conn.log連接日志
dhcp.logDHCP日志
dns.logDNS日志
files.log文件日志
http.logHTTP日志
ssl.logSSL日志
zeek既可以通過網(wǎng)絡(luò)流的形式分析報(bào)文,也可以通過上傳原始報(bào)文PCAP格式文件的形式進(jìn)行分析
zeek的可以靈活的通過zeek腳本對(duì)網(wǎng)絡(luò)中的異常行為或者特定的網(wǎng)絡(luò)流量進(jìn)行分析
1)通過zeek讀取PCAP格式的原始報(bào)文進(jìn)行行為分析
本例編寫腳本,分析PCPA報(bào)文中的文件內(nèi)容,zeek腳本內(nèi)容如下:
event connection_state_remove(c: connection)
{
print "connection_state_remove";
print c$uid;
print c$id;
for ( s in c$service )
print s;
}
event file_state_remove(f: fa_file)
{
print "file_state_remove";
print f$id;
for ( cid in f$conns )
{
print f$conns[cid]$uid;
print cid;
}
print f$source;
}
執(zhí)行PCPA文件分析,如下:
[root@Zeek ~]# zeek -r http.pcap file_analysis_01.zeek
在不指定日志目錄的情況下會(huì)在該目錄下生成響應(yīng)的日志,如下圖:
Zeek腳本的編寫
zeeek是單線程而不是多線程,大規(guī)模使用需要考慮集群化部署。
事件引擎(或者core):把進(jìn)入的數(shù)據(jù)包流簡(jiǎn)化為一系列高級(jí)的事件,這些事件以策略無關(guān)的形式反映了網(wǎng)絡(luò)活動(dòng)。
事件處理程序:使用zeek腳本語言編寫,這些腳本能夠表達(dá)安全策略,更普遍地,他們能夠?qū)斎肓髁康玫饺魏蜗胍膶傩院徒y(tǒng)計(jì)數(shù)據(jù)。
zeek事件驅(qū)動(dòng)腳本
zeek腳本事件(script events):當(dāng)開發(fā)一個(gè)zeek腳本時(shí),腳本的功能被包裝在各自的事件中。
例如:
event zeek_init()
{
/*code*/
}
event zeek_done()
{
/*code*/
}
zeek_init event:當(dāng)zeek第一次初始化時(shí)候就被激活
zeek_done event:在zeek關(guān)閉之前被激活
tcp_packet event:處理包含tcp_header的數(shù)據(jù)包時(shí)激活
udp_request event:在處理包含UDP請(qǐng)求頭的數(shù)據(jù)時(shí)激活
udp_reply event:在處理包含UDP應(yīng)答頭的數(shù)據(jù)包時(shí)激活
zeek模塊工作區(qū)(module workspace):使用module關(guān)鍵字來為腳本分配一個(gè)namespace,那么就可以通過包含分配的module開訪問來自其他腳本的代碼,使用export關(guān)鍵字,用于導(dǎo)出在module工作區(qū)的block塊中輸入的代碼
module zeekscript;
export {
/**/
/**/
}
使用模塊來導(dǎo)出到嗎可以在其他腳本之上構(gòu)建更高級(jí)的腳本。
zeek日志流(log stream)在開發(fā)zeek腳本時(shí),所有經(jīng)過處理的輸出將被發(fā)送到特定的日至流。這些日志流會(huì)包含響應(yīng)的日志文件格式輸出。
event connection_established(){
log::create_stream(LOG,format,path);
log::write(Logsream,data)
}
connection_established event:當(dāng)主機(jī)連接到接收器(receiver)時(shí)激活
Log::create_stream:創(chuàng)建具有名稱、格式輸出結(jié)構(gòu)和路徑的新日志流
Log::write:將包含的數(shù)據(jù)寫入指定的日志流
使用腳本對(duì)日志分析(analysis)
使用zeek的事件驅(qū)動(dòng)腳本語言,我們可以創(chuàng)建特定的基于事件的過濾器,以便在數(shù)據(jù)包中捕獲和分析期間的應(yīng)用。
nl命令用來展示zeek腳本
檢測(cè)http代理的zeek腳本 http_proxy.zeek
module HTTP;
export {
global success_status_codes: set[count] = {
200,
201,
202,
203,
204,
205,
206,
207,
208,
226,
304
};
}
event http_reply(c: connection, version: string, code: count, reason: string)
{
if ( /^[hH][tT][tT][pP]:/ in c$http$uri &&
c$http$status_code in HTTP::success_status_codes )
print fmt("A local server is acting as an open proxy: %s", c$id$resp_h);
}
總結(jié)
以上是生活随笔為你收集整理的开源流量分析工具-Zeek的安装和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿尔法亚麻酸(遇善恩亚麻酸微囊粉)
- 下一篇: 子宫复旧有必要做吗