李 釗,郭 帆
(1.安徽醫(yī)科大學(xué) 圖書館信息技術(shù)部,安徽 合肥 340100; 2.江西師范大學(xué) 計算機信息工程學(xué)院,江西 南昌 330022)
隨著計算機網(wǎng)絡(luò)和移動互聯(lián)網(wǎng)的高速發(fā)展,Web服務(wù)得到了快速的發(fā)展,這也導(dǎo)致了Web程序的漏洞越來越多[1].據(jù)Gartern的統(tǒng)計,高達75%左右的網(wǎng)絡(luò)攻擊發(fā)生在Web程序中[2],并且Web日志記錄著惡意用戶的攻擊痕跡,因此面向Web日志的分析就顯得極為重要了.
傳統(tǒng)的基于人工的Web日志的分析面對大量的日志數(shù)據(jù)的時候效率極低,基于RDBMS數(shù)據(jù)庫的Web日志分析實時性以及性能較差.筆者設(shè)計了基于ELK stack的Web日志分析方法,能夠較大地提高Web程序安全分析的效率.
ELK stack是一整套解決方案,它可以采集數(shù)據(jù)、存儲數(shù)據(jù),并將存儲的數(shù)據(jù)可視化.利用它可以對采集的數(shù)據(jù)進行分析處理.
Farrukh Ahmed等人[3]利用ELK stack管理日志,設(shè)計出可以獲取任何類型數(shù)據(jù)、分析、搜索、監(jiān)聽這些數(shù)據(jù)的CLM日志管理系統(tǒng),提出了一種解決方案,可以在特定時間內(nèi)關(guān)聯(lián)多個服務(wù)器日志來發(fā)現(xiàn)服務(wù)器產(chǎn)生的問題.Marcin Bajer等人[4]利用ELK stack處理物聯(lián)網(wǎng)數(shù)據(jù),將物聯(lián)網(wǎng)中的各個子系統(tǒng)生成的真實數(shù)據(jù)集成到一個Elasticsearch解決方案中,將這些數(shù)據(jù)提取分析到A-zure云中,最后在云平臺進行數(shù)據(jù)的處理.Sheffi Gupta等人[5]比較了ELastsearch的NoSQL數(shù)據(jù)庫與Apache CouchDB數(shù)據(jù)存儲及在圖像數(shù)據(jù)集上的性能.Chao-Tung Yang等人[6]提出了一個日志管理系統(tǒng)的體系結(jié)構(gòu)模型,使用ELK stack和Ceph來提供一個安全的網(wǎng)絡(luò)、良好的Wi-Fi信號強度和足夠的備份數(shù)據(jù)機制,在該模型中利用filebeats工具收集和存儲Wi-Fi日志數(shù)據(jù),使用NFDUMP來采集和存儲NetFlow日志,最后將這些采集的數(shù)據(jù)可視化.
從以上文獻可以得到,絕大多數(shù)文獻基于ELK stack的分析數(shù)據(jù)是網(wǎng)絡(luò)數(shù)據(jù)流量和日志數(shù)據(jù),并對這些采集的數(shù)據(jù)可視化展示,較少有文獻對采集的數(shù)據(jù)進行分析,還有部分文獻只比較了Elasticsearch中的NoSQL數(shù)據(jù)庫與其他數(shù)據(jù)庫的時間性能.
本文貢獻主要包括以下兩點:
1)利用ELK stack設(shè)計出Web日志的安全分析系統(tǒng):WLAS-ELK(Web Log Anasyis System-ELK),并提出一套分析Web日志的安全方法,為Web安全管理員提供了一套安全分析方法.
2)在Web日志數(shù)據(jù)集上與HDFS、RDBMS比較時間性能,實驗數(shù)據(jù)WLAS-ELK具有更好的時間性能.
ELK stack由Elasticsearch、Logstash和Kibana三個開源工具組成,它們都是由Elastic開發(fā)、管理和維護的[7].Elasticsearch是一個基于Lucene搜索引擎的NoSQL數(shù)據(jù)庫.Logstash是一種日志管道工具,它接受來自不同來源的輸入,執(zhí)行不同的轉(zhuǎn)換,并將數(shù)據(jù)導(dǎo)出到不同的目標(biāo).Kibana是一個數(shù)據(jù)可視化工具,將存儲在Elasticsearch中的數(shù)據(jù)進行可視化處理[8].ELK stack的基本原理如圖1所示.
Logstash是一個免費的開源數(shù)據(jù)引擎[9],用于接收、轉(zhuǎn)換和輸出來自不同來源的數(shù)據(jù),日志存儲可以集中來自不同來源的數(shù)據(jù),并將它們收集到一個中心點.用先進的下游可視化技術(shù)對所有日志內(nèi)容進行清理和轉(zhuǎn)換,并深化分析.在日志系統(tǒng)中,可以有多個日志存儲服務(wù).Logstash的目的是使系統(tǒng)可以以高速和優(yōu)化的方式收集數(shù)據(jù),這種體系結(jié)構(gòu)形式稱為已完成或集群日志存儲.
Elasticsearch是一個高度可擴展的開源全文搜索和分析引擎[10],它允許您快速地、近乎實時地存儲、搜索和分析大量數(shù)據(jù).它通常被用作底層引擎/技術(shù),支持具有復(fù)雜搜索特性和需求的應(yīng)用程序.
Kibana通過任何可視化圖表都可以方便地理解大量數(shù)據(jù)[11],并且基于Web瀏覽器的界面能夠快速創(chuàng)建和共享動態(tài)儀表板,直接顯示對Elastic查詢的更改.因為Kibana只能在本地主機上使用,所以使用Nginx來提供對Web瀏覽器的訪問.因此,可以提交搜索、篩選查詢,并將數(shù)據(jù)導(dǎo)出到文件或文檔中.
Web日志安全分析系統(tǒng)由三個模塊組成:Web日志的采集模塊、日志的存儲模塊以及日志數(shù)據(jù)的分析和可視化模塊.鑒于以上對ELK stack技術(shù)的介紹,筆者將采用ELK stack 設(shè)計出Web日志的安全分析系統(tǒng),logstash用來采集Web日志,elasticsearch用來存儲日志,kibana用來分析和可視化日志數(shù)據(jù),設(shè)計的總結(jié)構(gòu)如圖2所示.
WLAS-ELK系統(tǒng)的具體設(shè)計步驟包括以下幾部分.
1)安裝jdk1.8
由于ELK stack的運行依賴于java,在運行之前先安裝jdk1.8[12],并配置環(huán)境變量.
2)Web日志的采集模塊
首先運行phpstudy來模擬Web服務(wù)器的運行環(huán)境,然后配置logstash的配置文件中的input插件、filter插件和output插件.其中input插件是Web日志的輸入源,filter插件是將采集的源數(shù)據(jù)進行預(yù)處理,output插件是配置采集日志文件存儲路徑.部分配置如下:
input {
file {
#通用選項,用于激活過濾器
type =>"nginx_access"
#指定監(jiān)聽Web日志文件的絕對輸入路徑
path=>"C:/phpstudy_pro/Extensions/Nginx1.15.11/logs/http.log"
#從日志文件的開始讀取的位置
start_position =>"beginning"
}
}
filter{
#正則匹配解析,將一條日志文件解析為json數(shù)據(jù)
grok{
match=>{"message"=>"%{IPV4:client_ip}"}
}
}
output {
stdout { }
#將日志文件輸出至elasticsearch存儲
elasticsearch {
hosts => ["http://localhost:9200"]
index =>"http"
}
}
日志攻擊類型分析模塊可以通過Logstash的Filter插件實現(xiàn),Logstash對收集到的日志信息經(jīng)過日志格式化預(yù)處理,然后使用AttackFilter插件進行漏洞類型分析,最后將分析結(jié)果傳輸至數(shù)據(jù)存儲Elasticsearch模塊.
Logstash支持自定義插件,我們可以通過定義AttackFilter插件來實現(xiàn)攻擊類型分析.AttackFilter由兩部分組成:第一,攻擊向量數(shù)據(jù)庫;第二,攻擊規(guī)則字典.從官方的OWASP TOP10[1]中,可以得到web程序的攻擊向量.從攻擊向量中,可以得到部分攻擊向量規(guī)則庫(見表1).
表1 部分攻擊向量規(guī)則庫
然后自定義攻擊規(guī)則插件字典,部分字典如下所示:
Attakregex:
……
-id:3
regex:*database.*
place:′message′
regexid:1
typeid:1
typename:′SQL Injection′
level:1
leveldesc:′hight ′
Actiondesc:′SQL injection into database′
Subtype:sub-type"
-id:2
regex:′xor′
place:′message′
regexid:2
typdid:2
typename:′XSS′
level:1
leveldesc:high
actiondesc:′Reflected XSS′
Subtype:sub-type"
核心字段釋義:
Regex:正則表達式規(guī)則;
Place:正則匹配字段;
Typename:攻擊級別分類;
Actiondesc:具體攻擊操作.
最后在logstash/bin路徑下執(zhí)行命令logstash.bat -f ../config/logstash.conf來啟動logstash的日志采集模塊.
3)Web日志的存儲模塊
配置elasticsearch.yml文件中的network.host為本地環(huán)路ip地址127.0.0.1,http.port端口為9200,然后通過elasticsearch的可視化插件elasticsearch-head[13]建立number_of_shards索引分片數(shù)量為5,number_of_replicas副本數(shù)量為1的索引,最后在elasticsearch/bin路徑下執(zhí)行命令.elasticsearch.bat來啟動elasticsearch存儲模塊.
4)Web日志的可視化和分析模塊
配置server.port端口為5601,server.host ip地址為主機ip地址,elasticsearch.url為http://localhost:9200.最后在kibana/bin路徑下執(zhí)行命令.kibana.bat啟動可視化模塊.
由以上4個步驟:安裝jdk1.8并配置java環(huán)境變量、設(shè)計Web日志的采集模塊、Web日志的存儲模塊、Web日志的可視化模塊即可設(shè)計出Web日志安全分析系統(tǒng)WLAS-ELK.
本文的實驗設(shè)計是在Windows 10專業(yè)版下,實驗主要的硬件系統(tǒng)和軟件系統(tǒng)如表2所示.
表2 實驗設(shè)備及環(huán)境配置
筆者采用公開的Web日志數(shù)據(jù)集http.log[14],并使用phpstudy來模擬運行Web服務(wù)器的運行環(huán)境[15].首先將公開的Web日志文件http.log導(dǎo)入phpstudy服務(wù)器集成配置運行環(huán)境的日志路徑../phpstudy_pro/Extensions/Nginx1.15.11/logs/http.log下,然后啟動phpstudy和WLAS-ELK日志分析系統(tǒng)對公開的Web日志數(shù)據(jù)集進行分析.
3.2.1 Web日志http.log的基本數(shù)據(jù)分析
筆者將Web日志的條數(shù),客戶端用戶訪問服務(wù)器的IP地址個數(shù)(用戶數(shù)),http Status 404(客戶端訪問服務(wù)器文件失敗)的狀態(tài)碼個數(shù),http Status 200(成功訪問服務(wù)器)的狀態(tài)碼的個數(shù)稱為Web日志的基本數(shù)據(jù).之所以稱為基本數(shù)據(jù),除了比較容易獲取之外,還有一個重要原因就是這些數(shù)據(jù)與Web安全的分析具有較大的相關(guān)性.通過WLAS-ELK日志分析系統(tǒng)得到如表3所示的基本實驗數(shù)據(jù).
表3 Web日志基本數(shù)據(jù)
1)IP地址的排名分析
客戶端用戶訪問Web服務(wù)器的IP地址的排名對Web安全的分析具有重要的參考價值.這是因為正常用戶在短時間內(nèi)很難訪問大量的Web站點,只有惡意用戶可以通過自動化網(wǎng)絡(luò)端口和漏洞掃描工具在一個客戶端情況下訪問多個Web站點.因此一個IP地址占據(jù)的Web日志條數(shù)越多,占據(jù)條數(shù)的比例越大,這個IP地址是惡意用戶的可能就越大.
通過WLAS-ELK日志分析系統(tǒng)得到如表4所示的IP地址排名分布情況.
表4 Web 日志IP地址排名情況
根據(jù)表4,筆者選取了IP地址排名前10的數(shù)量.其中IP地址為192.168.203.63的客戶端訪問Web服務(wù)器產(chǎn)生的Web日志條數(shù)高達1 289 498條,它占據(jù)所有用戶訪問的Web條數(shù)的62.95%左右,表明此IP地址的用戶有較大概率是惡意用戶(由于本文的Web日志是構(gòu)造的公共數(shù)據(jù)集,因此IP都為私有IP地址,并且所有的IP地址均為模擬的惡意用戶).
2)IP地址與http Status 404狀態(tài)碼分析
筆者分析客戶端惡意用戶的IP地址的數(shù)量與http Status 404狀態(tài)碼之間的關(guān)系,分析結(jié)果如表5所示.從表中發(fā)現(xiàn)有以下趨勢:第一,IP地址數(shù)越多的Status 404越多,即http Status 404與惡意用戶的IP地址數(shù)量呈正相關(guān);第二,惡意用戶攻擊Web服務(wù)器的時候會產(chǎn)生大量的http Status 404狀態(tài)碼,并且404狀態(tài)碼的數(shù)量要遠遠大于http Status 200狀態(tài)碼的數(shù)量.這為我們分析Web日志的安全性提供了一定的參考,當(dāng)Web日志出現(xiàn)大量的http Status 404,并且數(shù)量遠高于http Status 200的時候,這可能意味著Web服務(wù)器遭受過攻擊.
表5 IP地址與http Status 404 相關(guān)性分析
3.2.2 Web日志http.log漏洞掃描器的分析
漏洞掃描器能夠自動地對Web服務(wù)器進行測試,因此分析它具有一定的意義.筆者通過分析目錄破解DirBuster器[16]、網(wǎng)絡(luò)端口掃描器nmap[17]、主機漏洞掃描器nessus[18]、服務(wù)器漏洞掃描器nikto[19]可以得出如表6所示的實驗結(jié)果.其中DirBuster掃描得到的日志數(shù)量最多,nessus得到的日志數(shù)量最少,并且一個漏洞掃描器可能有多個客戶端惡意用戶進行滲透攻擊測試.由以上實驗數(shù)據(jù),可以得到一個重要結(jié)論:漏洞掃描器在Web服務(wù)器掃描漏洞時會先進行目錄爬蟲和爆破,這為我們在分析以后的Web日志安全問題的時候提供了一個分析標(biāo)準(zhǔn),即先查詢Web日志中是否有爬蟲和掃描工具的痕跡.這一結(jié)論與漏洞掃描器的原理正好吻合.
表6 漏洞掃描器的分析
3.2.3 攻擊類型分析
通過在logstash自定義攻擊類型分析插件,構(gòu)建攻擊向量規(guī)則庫,可以分析Web日志的攻擊類型,對Web日志進行分析,結(jié)果如圖3和表7所示.
圖3 檢測的日志條數(shù)
表7 WLSAS-ELK的漏洞檢測率
由圖3和表7所示,DT攻擊的次數(shù)最多.這是因為Web掃描器在掃描Web程序時首先要對程序進行路徑爬蟲,這也導(dǎo)致了DT在日志中的數(shù)量最多.從表7可以得出,XSS和DT的檢測率都在90%以上,SQLI檢測率也在80%以上.這表明,自定義的AttackFilter插件具有一定的可靠性.
我們將Web日志的數(shù)據(jù)集分為10萬條、50萬條、100萬條、150萬條和200萬條,分別在HDFS日志查詢處理系統(tǒng)、傳統(tǒng)的關(guān)系數(shù)據(jù)庫、本論文Web日志處理分析系統(tǒng)WLAS-ELK,分析Web日志的查詢時間性能,實驗結(jié)果如圖4所示.
圖4 3種不同的Web日志查詢系統(tǒng)性能比較
由圖4的實驗結(jié)果,可以得出以下兩點結(jié)論:1)本論文的WLAS-ELK的時間性能在50萬行以下的日志數(shù)據(jù)查詢時,時間性能幾乎與HDFS沒有差別,但當(dāng)數(shù)據(jù)超過50萬行以后,WLAS-ELK的時間性能明顯好于HDFS;2)WLAS-ELK的時間性能明顯好于傳統(tǒng)的RDBMS(以SQL Server數(shù)據(jù)庫為例)日志查詢系統(tǒng).
為了說明WLSAS-ELK的可用性,我們提出了兩個問題:
1)RQ1:WLSAS-ELK 使用的方法論
AW1:Web日志記錄著用戶的訪問記錄,惡意用戶訪問網(wǎng)站必然會留下大量的惡意訪問記錄,這些記錄包括IP地址和http Status 404.因此,我們可以通過WLSAS-ELK首先查詢Web日志中的IP地址和http Status 404 排名情況.若日志中IP地址與http Status 404 較高或者排名比較一致,需高度關(guān)注訪問網(wǎng)站的IP地址用戶的訪問內(nèi)容,然后通過WLSAS-ELK來分析此網(wǎng)站可能受到了哪些攻擊.
2)RQ2:WLSAS-ELK使用的場景
AW2: WLSAS-ELK通常適合于大型網(wǎng)站日志,可以實時監(jiān)控網(wǎng)站的安全情況,能夠?qū)κ艿焦舻木W(wǎng)站進行應(yīng)急響應(yīng)和取證.也能對多年沒有維護的網(wǎng)站進行安全分析,通過對Web日志的攻擊類型分析可以觀察到網(wǎng)站是否有漏洞,從而對網(wǎng)站的源碼進行重構(gòu)并修復(fù).
筆者設(shè)計了WLAS-ELK Web日志查詢安全分析系統(tǒng),并以公開的Web日志數(shù)據(jù)集為例,提出了一套Web日志的安全分析方法,為Web日志的安全分析提供了參考,最后比較了WLAS-ELK與其他查詢系統(tǒng)的時間性能.實驗結(jié)果表明了本系統(tǒng)的可靠性.