开源流量分析工具-Zeek的安装和使用
Zeek是一個開源的、被動網(wǎng)絡(luò)流量分析軟件。它主要被用作安全監(jiān)測設(shè)備來檢查鏈路上的所有流量中是否有惡意活動的痕跡。但更普遍地,Zeek支持大量安全領(lǐng)域外的流量分析任務(wù),包括性能測量和幫助排查問題。
zeek架構(gòu)
Zeek是一個被動的開源網(wǎng)絡(luò)流量分析器。許多運營商將Zeek用作網(wǎng)絡(luò)安全監(jiān)視器(NSM),以支持對可疑或惡意活動的調(diào)查。Zeek還支持安全領(lǐng)域以外的各種流量分析任務(wù),包括性能評估和故障排除。
新用戶從Zeek獲得的第一個好處是描述網(wǎng)絡(luò)活動的大量日志。這些日志不僅包括網(wǎng)絡(luò)上看到的每個連接的全面記錄,還包括應(yīng)用程序?qū)佑涗?。這些包括所有HTTP會話及其請求的URI,密鑰標(biāo)頭,MIME類型和服務(wù)器響應(yīng),帶回復(fù)的DNS請求,SSL證書,SMTP會話的關(guān)鍵內(nèi)容,以及更多。默認情況下,Zeek將所有這些信息寫入結(jié)構(gòu)良好的制表符分隔或JSON日志文件中,這些文件適合使用外部軟件進行后處理。用戶還可以選擇讓外部數(shù)據(jù)庫或SIEM產(chǎn)品使用,存儲,處理和顯示數(shù)據(jù)以進行查詢。
除了日志外,Zeek還具有用于一系列分析和檢測任務(wù)的內(nèi)置功能,包括:
1.從HTTP會話中提取文件
2.通過與外部注冊表進行接口來檢測惡意軟件
3.報告網(wǎng)絡(luò)上可見的易受攻擊的軟件版本
4.識別流行的網(wǎng)絡(luò)應(yīng)用程序
5.檢測SSH暴力破解
6.驗證SSL證書鏈
在很高的層次上,Zeek在體系結(jié)構(gòu)上分為兩個主要組件。它的事件引擎(或核心)將傳入的數(shù)據(jù)包流減少為一系列更高級別的事件。這些事件以與策略無關(guān)的方式反映了網(wǎng)絡(luò)活動,即,它們描述了已看到的內(nèi)容,而不是原因或意義是否重大。
例如,線路上的每個HTTP請求都變成一個相應(yīng)的 http_request事件,該事件帶有所涉及的IP地址和端口,所請求的URI以及所使用的HTTP版本。但是,該事件未傳達任何進一步的解釋,例如該URI是否對應(yīng)于已知的惡意軟件站點。
事件引擎組件包括多個子組件,特別是包括以下內(nèi)容的包處理管道:輸入源,包分析,會話分析和文件分析。輸入源從網(wǎng)絡(luò)接口攝取傳入的網(wǎng)絡(luò)流量。數(shù)據(jù)包分析處理較低級別的協(xié)議,從鏈路層一直開始。會話分析處理應(yīng)用程序?qū)訁f(xié)議,例如HTTP,F(xiàn)TP等。文件分析剖析了通過會話傳輸?shù)奈募膬?nèi)容。事件引擎提供了一個插件架構(gòu),可以從Zeek核心代碼庫的外部添加其中的任何一個,從而可以根據(jù)需要擴展Zeek的功能。
與事件相關(guān)的語義是由Zeek的第二個主要組件腳本解釋器派生的,該腳本解釋器執(zhí)行一組用Zeek的自定義腳本語言編寫的事件處理程序。這些腳本可以表示站點的安全策略,例如,當(dāng)監(jiān)視器檢測到不同類型的活動時要采取的操作。
更一般而言,腳本可以從輸入流量中得出任何所需的屬性和統(tǒng)計信息。實際上,Zeek的所有默認輸出都來自發(fā)行版中包含的腳本。Zeek的語言帶有廣泛的特定于域的類型和支持功能。至關(guān)重要的是,Zeek的語言允許腳本隨時間保持狀態(tài),從而使腳本能夠跟蹤并關(guān)聯(lián)跨連接和主機邊界觀察到的內(nèi)容的演變。Zeek腳本可以生成實時警報,還可以根據(jù)需要執(zhí)行任意外部程序。人們可能會使用此功能來觸發(fā)對攻擊的主動響應(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/)
單機安裝
本例安裝環(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默認的日志存放目錄為/opt/zeek/logs,當(dāng)前的日志默認存放為current路徑
默認產(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ò)流的形式分析報文,也可以通過上傳原始報文PCAP格式文件的形式進行分析
zeek的可以靈活的通過zeek腳本對網(wǎng)絡(luò)中的異常行為或者特定的網(wǎng)絡(luò)流量進行分析
1)通過zeek讀取PCAP格式的原始報文進行行為分析
本例編寫腳本,分析PCPA報文中的文件內(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
在不指定日志目錄的情況下會在該目錄下生成響應(yīng)的日志,如下圖:
Zeek腳本的編寫
zeeek是單線程而不是多線程,大規(guī)模使用需要考慮集群化部署。
事件引擎(或者core):把進入的數(shù)據(jù)包流簡化為一系列高級的事件,這些事件以策略無關(guān)的形式反映了網(wǎng)絡(luò)活動。
事件處理程序:使用zeek腳本語言編寫,這些腳本能夠表達安全策略,更普遍地,他們能夠?qū)斎肓髁康玫饺魏蜗胍膶傩院徒y(tǒng)計數(shù)據(jù)。
zeek事件驅(qū)動腳本
zeek腳本事件(script events):當(dāng)開發(fā)一個zeek腳本時,腳本的功能被包裝在各自的事件中。
例如:
event zeek_init()
{
/*code*/
}
event zeek_done()
{
/*code*/
}
zeek_init event:當(dāng)zeek第一次初始化時候就被激活
zeek_done event:在zeek關(guān)閉之前被激活
tcp_packet event:處理包含tcp_header的數(shù)據(jù)包時激活
udp_request event:在處理包含UDP請求頭的數(shù)據(jù)時激活
udp_reply event:在處理包含UDP應(yīng)答頭的數(shù)據(jù)包時激活
zeek模塊工作區(qū)(module workspace):使用module關(guān)鍵字來為腳本分配一個namespace,那么就可以通過包含分配的module開訪問來自其他腳本的代碼,使用export關(guān)鍵字,用于導(dǎo)出在module工作區(qū)的block塊中輸入的代碼
module zeekscript;
export {
/**/
/**/
}
使用模塊來導(dǎo)出到嗎可以在其他腳本之上構(gòu)建更高級的腳本。
zeek日志流(log stream)在開發(fā)zeek腳本時,所有經(jīng)過處理的輸出將被發(fā)送到特定的日至流。這些日志流會包含響應(yīng)的日志文件格式輸出。
event connection_established(){
log::create_stream(LOG,format,path);
log::write(Logsream,data)
}
connection_established event:當(dāng)主機連接到接收器(receiver)時激活
Log::create_stream:創(chuàng)建具有名稱、格式輸出結(jié)構(gòu)和路徑的新日志流
Log::write:將包含的數(shù)據(jù)寫入指定的日志流
使用腳本對日志分析(analysis)
使用zeek的事件驅(qū)動腳本語言,我們可以創(chuàng)建特定的基于事件的過濾器,以便在數(shù)據(jù)包中捕獲和分析期間的應(yīng)用。
nl命令用來展示zeek腳本
檢測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的安装和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿尔法亚麻酸(遇善恩亚麻酸微囊粉)
- 下一篇: 子宫复旧有必要做吗