當前位置:
首頁 > 新聞 > Splunk+蜜罐+防火牆=簡易WAF

Splunk+蜜罐+防火牆=簡易WAF

*本文原創作者:RipZ,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

每天都會有大量的公網惡意掃描和攻擊行為,在企業安全建設中,可以利用大數據來實時分析攻擊,通過防火牆聯動來自動封禁惡意IP,其優點是配置靈活,且無需串聯新設備。在此與大家分享一下大數據分析的應用實踐。


0×00 整體思路

如下圖所示,藍色箭頭表示數據流向,橙色箭頭表示介面調用。splunk收集所有伺服器、蜜罐、防火牆的日誌,實時分析是否存在惡意攻擊,如果判定為攻擊行為,則立即調用防火牆介面進行IP封禁,完成防火牆聯動。

(數據流向圖)


0×01 產品簡介

splunk

:大數據分析平台,搜索極快,欄位創建靈活。


splunk官方網站:[http://www.freebuf.com/articles/network/112065.html]

防火牆

:需要使用自帶API的防火牆,以便進行命令調用。


0×02 日誌收集

部署splunk的轉發器進行統一日誌收集,同時可以配置splunk索引器(日誌中心)的埠監聽,來收集所有設備的syslog。索引器和轉發器的配置安裝網上也有教程,這裡不再多寫。

(splunk整體架構)


0×03 日誌分析

splunk自帶了一部分日誌模板,如tomcat、IIS、windows日誌等(如下圖),同時也不必擔心無法分析其他的日誌,我們可以通過正則表達式來靈活地建立自定義欄位,從而將同一類型的日誌進行精細化處理。

(內置的欄位)

在splunk左側的界面可以針對想要的欄位進行搜索,如下圖,這些創建欄位的教程網上有不少,不再贅述。

(欄位查詢結果)

下面說一下檢測公網掃描的行為,判定掃描的規則是:

1.

掃描肯定會產生404或500錯誤


(sc_status=404 OR sc_status=500)

2.

由公網發起的


(c_ip!="10.*.*.*" )

3.

URI

中包含了下列關鍵字(黑名單方式)


(cs_uri_stem="*action redirect*" OR cs_uri_stem="*invoker*" OR cs_uri_stem="*jmx-console*" OR cs_uri_stem="*web-console*" OR cs_uri_stem="*fck*" OR cs_uri_stem="*dede*" OR cs_uri_stem="*Websense*" OR cs_uri_stem="*console*" OR cs_uri_stem="*xss*" OR cs_uri_stem="*script*" OR cs_uri_stem="*select*" OR cs_uri_stem="*where*" OR cs_uri_stem="*union*" OR cs_uri_stem="*common.inc.php*" OR cs_uri_stem="*concat*" OR cs_uri_stem="*appscan*" OR cs_uri_stem="*wvs*" OR cs_uri_stem="*admin*" OR cs_uri_stem="*shell*" OR cs_uri_stem="*etc/passwd*")

4.

如果是掃描,日誌中同一個源IP

肯定會在短時間(至少持續了30

秒)內有很多的錯誤事件


transaction c_ip maxspan=3m | whereduration>30

匯總後如下,並且需要設置實時監控:

搜索出的結果如下圖所示,已經將每個進行掃描的源IP進行抓取,如下圖所示。

(實時監測的公網掃描行為)

利用同樣的檢測原理,我們可以設置對郵箱的暴力破解(OWA、SMTP等)進行監控(只需要自己模擬一下暴力破解過程,在splunk上搜索相應的登錄失敗日誌即可。)


0×04 設置告警

既然可以抓到實時的掃描源IP,下一步就是要進行郵件通知安全部門。

(添加告警觸發後的操作)

由此可以設置郵件告警,通告掃描的源IP。此時已經具備了收到告警後,手動在防火牆封禁的條件。

(掃描告警郵件)


0×05 防火牆聯動

俗話說的好:不用自動化,不是好攻城獅。於是開始了研究防火牆聯動的工作,首先即著手如何用splunk導出告警原文並運行腳本。

想要導出告警文本,就需要知道splunk告警中的變數,其中總共有8個變數,從0到8(沒有7),如下表所示。














變數

描述

變數

描述

0

腳本名稱

4

報表名稱

1

返回事件的數量

5

觸發原因

2

搜索項目

6

瀏覽報表的瀏覽器URL

3

具有完全資質的查詢字元串

8

搜索結果儲存的文件

在這裡我們需要用到變數8,其變數內容為_raw(即搜索出來的結果,如下圖)

每次告警觸發的時候都會有一批raw輸出,而告警搜索語句中我們設置了針對同一源IP的掃描進行事件歸併,所以每次告警的源IP肯定是一樣的。

由此我們可以利用正則表達式來篩選出單獨的IP,同時要排除10.*.*.*,又由於可能一次告警出現多條攻擊記錄,正則篩選出IP後,可能是很多行同樣的IP,此時摘出來第一個即可。腳本如(addBlack.sh)。


#!/bin/baship=`gunzip -c $8 | grep -oE"[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"| grep -v -E"^10.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"| head -n1`echo "$ip `date`" >>/opt/splunk/bin/scripts/ScanBanIPLog.txt

python /opt/splunk/bin/scripts/checkIP.py"$ip"

在調用python腳本時,必須要寫全py文件所在路徑,否則sh腳本無法自動找到當前的路徑。在篩選出IP後,需要先過一遍公司各分支機構的白名單,以防誤將公司分支IP封禁。腳本如下(checkIP.py)


#coding:utf-8import osimport sys

ip = sys.argv[1]+"
"flag = "False"f = open("/opt/splunk/bin/scripts/whiteIP.txt")for i in f: if i == ip:
flag = "True"f.close()if flag == "False":
os.system("python /opt/splunk/bin/scripts/addGroup.py "+ip)else: print "This IP is in the whitelist!"

如果攻擊IP不在白名單中,則調用防火牆API封禁IP(具體的API就不共享了,領會精神)。


import urllib2
import urllibimport sys
ip = sys.argv[1]
add_black = "https://10.1.0.1/api/?xxxxxxxx="+ip+"&key=xxxxxx"add_req = urllib2.Request(add_black)
urllib2.urlopen(add_req)

至此,三個腳本環環相扣調用完畢,剩下的就是要在splunk配置告警時運行的腳本了。在編輯告警操作中,添加運行腳本」addBlack.sh」(腳本需放置於$SPLUNK_HOME/bin/scripts目錄中)

(添加運行腳本)

此後再檢測到掃描,splunk會自動發送郵件到安全部門,並調用防火牆API直接封禁攻擊IP(世界終於清凈了一些)。


0×06 蜜罐搭建


SSH蜜罐

在文章開頭附了cowrie部署的文章,通過cowrie可以搭建一個SSH蜜罐,同時splunk分析防火牆發來的日誌,實時監測對於cowrie蜜罐22埠的連接情況。

在正常情況下,蜜罐不會被正常用戶訪問,何況還是SSH登錄的請求,如果短時間內產生了超過2條以上的連接情況,必是惡意請求無疑,此時使用告警腳本調用防火牆API封禁惡意IP即可。


web蜜罐

其實web蜜罐很簡單,只需一個Apache+靜態HTML頁面即可。映射到公網之後,配置一個「奇葩的」公司二級域名(如fuck.xx.com)指向到這個公網IP,普通用戶肯定不會訪問到這個域名。

Apache啟動後實時監測防火牆發來的日誌,一旦發現有對蜜罐80埠的訪問記錄,立即告警,如果限制的比較嚴格,可以直接使用告警腳本調用防火牆API封禁訪問蜜罐的IP。


0×07 結語

至此,簡單的WAF已經製作完畢,其實核心的只是幾個特徵,可以將惡意掃描實時封禁,對於sqlmap也會有一定的防護,但是對於0day來說並沒有很好的防護效果,還需根據特徵值來手動加入檢測規則。

P.S splunk一定要裝在linux里。裝在windows容易悲劇,不知道什麼時候就會卡的欲仙欲死。

*本文原創作者:RipZ,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載



請您繼續閱讀更多來自 FreeBuf 的精彩文章:

維基解密網站下線4小時,與《41號修訂案》有關?
深入了解VoWiFi安全性
【FB TV】一周「BUF大事件」
Apache Tomcat再曝遠程代碼執行(CVE-2016-8735)

TAG:FreeBuf |

您可能感興趣

Google Cloud為App Engine添加防火牆
【企業研究報告】新一代防火牆的撕X大戲:Palo Alto Networks安全公司全解讀
Fortinet再度入圍Gartner Web應用防火牆挑戰者象限
Akamai在Gartner「Web應用程序防火牆魔力象限」中處於領導者位置
谷歌推出App Engine防火牆 方便開發者管控IP地址
iptables防火牆策略的配置
F5 在 Gartner 魔力象限中被評為 Web 應用防火牆領導者
firewall-cmd動態防火牆命令行終端詳解
Gartner:2017年Web應用防火牆魔力象限
微軟正式推出Azure Web應用程序防火牆
使用Python檢測並繞過Web應用程序防火牆
從Gartner「魔力象限」看企業級防火牆發展
三星s8與iPhone7防水不錯 但是防火效果怎樣呢?
FreeBuf報道 | 當防火牆都用上龍芯:第三屆北京軍博會的「國產」迷思
紅色iPhone7能防火?燃燒測試看看便知
防火虐待測試:iPhone7放進火藥里都燒毀成這樣竟還能用
手機防火虐待測試:iPhone7放進火藥里都燒成這樣竟還能用
專家觀點:不建議在SCADA系統中部署防火牆
2017年6款最值得推薦的免費Linux防火牆