企業安全最佳實踐-全流量Web入侵檢測系統

?一.背景說明

從目前來看,大多數互聯網業務是以web服務對外交付的,攻擊者大多數也是通過web入侵到系統里,不管什么方式,都繞不過web系統的探測和入侵嘗試這一關,所以如果要做入侵檢測,可以嘗試從web日志中分析入侵詳情。

二.Web入侵檢測系統技術架構

第一步 考慮日志的收集

web日志常用的方法是收集accesslog,但因為一般accesslog日志中缺少post,response,header數據,對于檢測效果會有較大影響,后來我們考慮通過全流量收集http日志,使用Bro解析HTTP流量,可以較好解決以上問題。

說明:由于現在的網站基本上都采用了https加密,所以抓包的位置我們是放在Nginx服務器所在的接口上。

第二步 考慮入侵檢測分析

部分實時特征非常明顯的攻擊,我們直接在Bro這一層分析,如信息泄露/命令執行/webshell執行;

部分需要進一步分析的,我們將http日志存儲到ES后進一步分析,如SQL注入/暴力破解

第三步 考慮告警展現

我們開發了一個安全管理平臺,將入侵詳細信息展現在這個平臺上

第四步 考慮告警

我們將入侵告警接入到釘釘機器人,對于攻擊行為第一時間告警出來

三.Web入侵檢測技術實現

1.SQL注入

利用elasticsearch的API從elasticsearch中檢索特定的敏感關鍵字如

["select", "ifnull", "cast", "union", "sleep", "substring", "substr","mid", "ascii", "when", "case", "sysdate", "now", "database", "version", "information_schema"]等關鍵字,并關聯到IP信息查看此IP請求的URL中出現敏感關鍵字的次數,如果次數超過預定閥值10次,則將此IP 定為惡意IP。將此IP的最近30分鐘的訪問記錄從ES中取出來存入Redis中后續處理。 由于SQL注入想跨數據庫獲取數據必須使用到information_schema.schemata這個數據表,因此我們對單個IP的訪問分析請求中是否匹配 .*schema_name.*from.*information_schema\.schemata.*等模式,如果匹配一次記錄為一次異常,此IP最近30分鐘的異常次數超過10此判 定為存在SQL注入成功。觸發報警。

程序每5分鐘從elasticsearch中拉取最近15分鐘的數據分析查看是否有惡意IP,如果有實施檢測。

2.暴力破解

利用ES的API的排序功能從elasticsearch中抽取訪問量排名top3000的url,取這些url的hash值和訪問量存入數據庫中。 每五分鐘抽取一次數據與前五分鐘的數據對比,并且計算出下個五分鐘的預估值并且計算出最大偏差量,下一次五分鐘的訪問量與上次的 預估值對比超過閥值就認為存在異常展示在首頁。

監控url中含有login/captcha/register等關鍵字的url,過濾掉非重要接口

3.webshell檢測

利用bro腳本對請求頭、uri、POST、響應狀態碼數據做規則匹配,如

(/eval.*base64_decode/ in c$http$post_body || /eval.*base64_decode/ in c$http$uri) && c$http$status_code == 200

4.信息泄漏檢測

利用bro腳本實時檢測請求和響應中對應的關鍵字、狀態碼,如 響應中包含下面關鍵字,狀態碼是200時,記錄下來 [phpinfo(),root:x:0:0,Index of /,Directory Listing,.git,.svn] 請求中包含下面關鍵字,狀態碼是200時,記錄下來 [.bak,.swp,.old,.bat,.sh,.zip,.7z,.gz,.rar,.iso] 記錄這些泄露信息的請求到數據庫中,然后展示到前端頁面。

5.命令執行檢測

利用bro腳本對請求頭、uri、POST數據做規則匹配,如 "@type" in c$http$post_body || "@type" in c$http$uri

/[^a-zA-Z0-9][oO][gG][nN][lL]/ in c$http$post_body || /[^a-zA-Z0-9][oO][gG][nN][lL]/ in c$http$uri || /[Rr][Uu][nN][tT][iI][mM][eM].*[eE][xX][cC]/ in c$http$post_body || /[Rr][Uu][nN][tT][iI][mM][eM].*[eE][xX][cC]/ in c$http$uri || "/dev/tcp/" in c$http$uri || "/dev/tcp/" in c$http$post_body || /[^a-zA-Z0-9][oO][gG][nN][lL]/ in c$http$header_string || /[Rr][Uu][nN][tT][iI][mM][eM].*[eE][xX][cC]/ in c$http$header_string || "/dev/tcp/" in c$http$header_string

/[^a-zA-Z0-9][pP][iI][nN][gG].*-c[^a-zA-Z0-9]/ in c$http$post_body || /[^a-zA-Z0-9][pP][iI][nN][gG].*-c[^a-zA-Z0-9]/ in c$http$uri || /[^a-zA-Z0-9][cC][uU][rR][lL][^a-zA-Z0-9]/ in c$http$post_body || /[^a-zA-Z0-9][cC][uU][rR][lL][^a-zA-Z0-9]/ in c$http$uri

6.敏感接口信息異常訪問

統計含有手機號等敏感信息的接口訪問次數,記錄異常訪問情況并告警。

四.實際使用效果

1.暴力破解

2.命令執行

Struts2命令執行漏洞嘗試攻擊(用到header數據)

3.信息泄露

phpinfo泄露

4.sql注入

生產環境沒有發生過注入攻擊,以下為測試的截圖

5.webshell檢測

菜刀webshell執行

五.項目收益

該系統建成后,大大提升了公司的安全威脅感知能力!

1.比如在Struts2-045漏洞爆發后的一周內,我們頻繁收到入侵嘗試告警;

2.檢測出開發在測試過程中上傳phpinfo代碼文件并執行

3.安全眾測過程中發現暴力掃描,白帽子測試未經授權APP情況

4.發現敏感接口大量遍歷行為,確認存在安全漏洞

5.有了這個安全數據平臺,安全團隊可以從中統計各種入侵類型 入侵IP分布,安全風險態勢等

五.未來展望

全流量抓包的優點是數據全,擴展性強,但這個實施起來技術難度有點大,涉及端口鏡像/Bro/ELK部署等,我們投入3個人,花半年時間才完成的。

未來可以繼續擴展,把系統日志 /安全日志 /堡壘機日志 /VPN日志接入到這個平臺上,進一步加強安全檢測能力。

當然跟HIDS相比,對于系統級別的入侵,檢測能力還是非常不足。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容