日誌審計 是安全運維中常見的工作, 而審計人員如何面對各個角落裏紛至沓來的日誌的數據,成了一個公通課題,日誌集中收集是提高審計效率的第一步。
現在各在安全廠商都提供自己日誌中心產品,並提供可視化監控和審計管理工具,各需求方企業也可以使用ELK這種開源工具定制自己的日誌中心,像Splunk這種收費產品也廣泛被人們所知,而我們今天要說的是一種集大成的開源日誌數據管理解決方案:Graylog, 以及基於Graylog安全審計實踐。
Graylog是集Kafka、MongoDB、ElasticSearch、Java Restful、WEB Dashboard為一體的日誌數據中心管理解決方案,和需要定制化ELK解決方案相比,ELK能做Graylog基本都能做, 並且逐漸狀大起來的Graylog社區,提供各種所需要插件工具來擴展Graylog的功能,來支持各種日誌協議, 甚至可通過AlienVault OTX(Open Threat Exchange)提供的Graylog插件,訪問OTX上開源威脅情報,Graylog為未來的安全日誌管理提供了更多的可能性,在提供後臺審計管理的Dashboard外, Graylog通過Restful服務,對所有收集來的數據提供對外REST API接口服務,可以為任何支持HTTP JSON訪問的語言工具,提供數據查詢接口。
關於Graylog工具本身更多的原理及使用說明,不在此處贅述,大家可以到Graylog官方網站自己查閱,此文重點說明,我們在實際項目用如何使用Graylog進行實時的安全日誌審計實踐的, 希望實際的應用案例,可以打開使用開源日誌工具審計日誌的思路,涉及進行數據收集、預警、審計、展現與其它設備協作等相關主題,篇幅有限,點到為止。
功能匯總
運行在內網的各種服務的日誌數據,以不同的形式存在於不現的平臺上,有Windows、linux、路由器、IDS、WAF等廠商設備。大多數情況下,我們可通Agent和Syslog這種形式,讓數據集中到我們日誌中心服務上, 先進行數據持久化,然後進行數據審計分析利用。
日誌數據背後,映射了某種行為,我們就是通過日誌數據來觀察存在那些異常的行為。我們通過Graylog進行數據收集並完成以下功能:
1-1. 分級存儲
按照需求多級存儲數據,保證數據安全,且查詢高效。我們通過將日誌集中收集到syslog日誌服務中心,持久化存儲日誌數據, 將日誌數據轉發ElasticSearch集群,根據數據量需求的大小,調整集群規模,通過Graylog提供的後臺查詢系統進行分詞查詢。
1-2. 快速彈性擴展
多種日誌收集方式,可部署在各種設備、服務器、系統之中,實現快速彈性擴展。Graylog提供了多種Agent部署工具,可以跨平臺收集日誌,通過Graylog自身插件的擴展,在服務器端接受各種協議數據。
1-3. 實時威脅報警
經過分析過濾之後發現的威脅行為會及時通過郵件發送給相關負責人,並提供REST API產生更多報警類型。REST API為擴展安全預警策略提供各種方便。
1-4. 直觀高效的可視化展示
針對不同數據適時展現圖表、柱狀圖、餅圖、世界地圖等。快速直觀地顯示實時數據。
1-5. 自動化威脅檢測
實時多級聯動,快速分析異常行為,降低單個防護設備的漏報和誤報率。 通過第三方設備接收,數據碰撞。
物理硬件部署
實踐系統結構圖:
我們收集的日誌,一部分是通過在系統上部署Agent來獲取日誌數據,比較典型的應用場景就是郵件日誌審計,對於使用Exchange Server作為郵件服務器的企業來說,除了使用郵件網關,也可以通過在Windows Server上部署代理來取得IMAP、POP3、IIS、Windows Events等Windows平臺的日誌,進行服務器安全審計,郵件服務健康檢查。
Graylog提供了 NxLog、FilleBeat、Sidercar等Agent服務,取得Windows系統上的日誌數據。
2-1:部署Agent,進行郵件服務審計
2-1-1.Windows事件監控:
通過監控多臺Windows服務器上EventLog,通過Graylog進行分詞,對銘感關鍵字進行實時審計,對頻繁登錄失敗、匿名登錄、高權限操作、關鍵進程啟動成功與失敗進行監控,保證Windows Server的安全性與郵件服務的監控性。
2-1-2.Exchange日誌審計:
通過Graylog的數據篩選預警功能, 對特定郵件賬戶實施安全監控,部署安全檢查策略,一旦發現賬戶在異常時常、異常地區登錄、爆破被鎖等行為、進行實時預警通告。
2-1-3.郵件服務健康監控:
一般企業能都會有多臺郵件服務在工作,通過負載均衡的方式,來分散用戶請求多單臺服務器的訪問壓力,而細致到對每臺郵件服務器上的每種郵件協議(POP、IMAPI、Excahnge)報文監控, 可通過Graylog可視化統計,發現那臺協議流量數據異常,無流量,流量過載和等業務級的詭異行為存在。
2-1-4. 郵件管理員審計:
對郵件服務器管理員的日誌時行審計,涉及到敏感賬號的操作進行預警。
2-2:通過Syslog傳輸,進行服務審計:
2-2-1.WEB服務日誌審計:
企業內部的WEB服務日誌,可以通過syslog的形式傳送給Graylog, 典型的WEB服務就是nginx, 通過Graylog的GELF(Graylog Extended Log Format )進行日誌快速分詞,在GROK的基礎上又豐富了不少,無需部署logstash在nginx服務器上,直接將日誌通過syslog協議推送到Graylog提供的日誌接口上。對nginx請求的狀態進行統計、對URL中有無註入進行預警、對惡意訪問也可及時發現訪問異常特征。
2-2-2.VPN日誌審計:
企業VPN為員工在非公司辦公區訪問公司內部資源提供了方便,如何挖掘和發現是公司內部人員正常操作以外的行為,是安全審計的關註點,某些用戶ID產生不該產生的行為日誌,這種行為發現與回溯,可通過日誌graylog對VPN日誌審計來做到。
用戶通過登錄VPN對內網進行描述,可以通過在Graylog上自定義策略輔助二次開發進行監控,某ID對某臺機器進行掃描,端口號或是其它數據特征數據會變化明顯,我們可通過自動監控數據變化,實時識別掃描行為。
2-2-3.Honeypot日誌審計:
Honeypot是部署在內網偽應用服務器, 正常情況下,內部不會去訪問Honeypot,一旦Honepot有流量產生,及大的可能是攻擊行為出現。Graylog與Honeypot結合使用,可以及時感知威脅,並可視化攻擊位置及相關paylog信息.
2-2-4.防火墻與IDS日誌審計:
很多的IDS與防火墻都提供了syslog日誌吐出功能,將防火墻日誌與其它安全檢查設備日誌,進行對據對撞 ,可以進一步的驗證威脅情報的有效性。
數據業務邏輯
實踐系統業務邏輯圖:
Graylog與ELK不同的是,在ElasticSearch提供的直接數據索引查詢的基礎之上,又抽像出一個新的Restfull服務層,通過在內部的Input、stream、pipeline這些抽象概念對具體的各種日誌進行了分類,並提供一套REST API,對外提供數據查詢、統計相關的API,通過這些API進行自動化審計加工。
REST API服務
Graylog雖然提供了REST API,但在實踐中,我們發現Graylog沒有直接提供開發SDK, 如果想把Stream、Input這些概念在我們的自動安全檢查邏輯中隱藏起來,集中處理和業務相關自動化安全檢查邏輯,就要實現SDK,而不是直接使用,暴露出來的REST API。
Graylog系統架構
4-1. REST API的SDK
我們實踐的方案是通過nginx+lua服務器形式,實現用戶REST API請求轉發,通過自己實現的SDK開發了一套直接和內部業務數據直接相關的查詢接口,返回VPN、WEB服務器、郵件Mail等日誌數據。
下面是用Moonscript語言實現Graylog的Stream查詢的SDK,Moonscript會被翻譯成Lua被Nginx Moudle運行。
class GMoonSDK pwd: "" uname: "" headers_info: "" endpoints: { 's_uat':{'/search/universal/absolute/terms':{'field', 'query', 'from', 'to', 'limit'} } 's_ua':{'/search/universal/absolute':{'fields', 'query', 'from', 'to', 'limit'} } 's_urt':{'/search/universal/relative/terms':{'field', 'query', 'range'} } 's_ut':{'/search/universal/relative':{'fields', 'query', 'range'} } } @build_headers: => auth = "Basic "..encode_base64(self.uname..":"..self.pwd) headers= { 'Authorization': auth, 'Accept': 'application/json' } return headers @auth: (username, password, host, port) => --授權信息檢查 errList = {} if type(port) == 'nil' table.insert(errList, "port is nil\n") if type(host) == 'nil' table.insert(errList, "host is nil\n") if type(password) == 'nil' table.insert(errList, "password is nil\n") if type(username) == 'table' table.insert(errList, "username is nil\n") num = table.getn(errList) if num > 0 return errList --設置授權信息 self.uname = username self.pwd = password self.host = host self.port = port self.url = "http://"..host..":"..port self.headers_info = self\build_headers() return self.url @getRequest:(req_url) => body, status_code, headers = http.simple { url: req_url method: "GET" headers: self.headers_info } return body @checkParam:(s_type, s_param) => --檢查配置信息 if type(self.url) == "nil" return 'auth info err.' --檢查端末類型 info = self.endpoints[s_type] chk_flg = type(info) if chk_flg == "nil" return "Input parameter error,unknow type." key = '' for k,v in pairs info key = k --檢查查詢參數有效性 str = '' for k,v in pairs info[key] if type(s_param[v]) == 'nil' return info[key][k]..":is nil" str = str..s_param[v] return "OK", str @call: (s_type, s_param) => key = '' for k,v in pairs self.endpoints[s_type] key = k --參數打包成URL url_data = http://www.tuicool.com/articles/ngx.encode_args(s_param) tmp_url = self.url..key.."?" req_url = tmp_url..url_data --轉發用戶HTTP請求給GraylogRest服務。 ret = self\getRequest req_url return ret @dealStream: (s_type, s_param) => ret ='' status, param_list = GMoonSDK\checkParam s_type, s_param if status == "OK" ret = GMoonSDK\call s_type, s_param else ret = status return ret
SDK完成後,我們在Nginx+Lua上用Lapis創建一個WEB服務,做REST API數據請求轉發。
class App extends lapis.Application "/testcase": => --準備對應REST的輸入參數,如果相應該有的項目沒有設定會輸出NG原因。 param_data= http://www.tuicool.com/articles/{ fields:'username', limit:3, query:'*', from: '2017-01-05 00:00:00', to:'2017-01-06 00:00:00', filter:'streams'..':'..'673b1666ca624a6231a460fa' } --進行鑒權信息設定 url = GMoonSDK\auth 'supervisor', 'password', '127.0.0.1', '12600' --調用對應'TYPE'相對應的REST服務,返回結果。 ret = GMoonSDK\dealStream 's_ua', param_data ret
上文提到 ‘TYPE’, 其實就是對Endpoints的一種編號,基本上和GrayLog REST API是一對一關系。
endpoints: { 's_uat':{'/search/universal/absolute/terms':{'field', 'query', 'from', 'to', 'limit'} } 's_ua':{'/search/universal/absolute':{'fields', 'query', 'from', 'to', 'limit'} } 's_urt':{'/search/universal/relative/terms':{'field', 'query', 'range'} } 's_ut':{'/search/universal/relative':{'fields', 'query', 'range'} } }
理論上說,可以個修改以上的數據結構,對應各種REST API的服封裝(GET),只要知道對應URL與可接收的參數列表。
4-2. Dashboard的Widget數據更新
Graylog數據管理概念圖
Graylog抽象出Input、Stream、Dashboard這些自己原生的日誌管理概念,是基於對日誌數據一種新的組織化分,我們通過Graylog中一個叫Dashboard方法,對某一類日誌數據,進行Top10排序,
例如:對5分鐘之內端口訪問量最多的10個用戶進行排序。
rglog = require "GRestySDK" data = 'http://www.tuicool.com/articles/{ "description": "scan-port", "type": "QUICKVALUES", "config": { "timerange": { "type": "relative", "range": 123 }, "field": "port", "stream_id": "56e7ab11fd624ca91defeb11", "query": "username: graylog", "show_data_table": true, "show_pie_chart": true }, "cache_time": 3000 }' url = rglog\auth 'admin', 'password', '0.0.0.0', '12345' rglog\updateWidget('57a7bc60be624b691feab6f','019bca13-50cf-481e-a123-a0d2e649b41a',data)
Graylog在收到這個請求後,會數某日誌數據,進行快速統計排序, 把Top10的統計數據,用餅圖的形式畫出來。
4-3.REST API定制新審計後臺與可視化展示
如果你不想用Kibanna、Grayglog Dashboard,想實現自己的一套審計工具後臺,或是情態感知的可視化大屏幕,可通過基於自己習某用開發的語言,開發一套SDK進行接功能擴展,實現自己定制的可視化感知系統。
五. 反掃檢查
威脅情報可視化,一直以來對安全人員分析安全事件起著有益的作用, 可視化是對分析的結果一種圖形化的映射,是威脅行為的一種圖形具象化。針對蜜罐日誌分析的流程來講,溯源和展示攻擊行為本身也是很重要的,我們可以結合Graylog可視化與REST API自動檢測,與honeypot和掃描器結果結合分析,發現來至內部的掃描形為。
蜜罐向類似mysql這種庫中寫入被訪問的IP地址和Port,啟動定時任 務讀取數據庫,取出數據庫當條目總數,與之前本地保存的最大數進行比較 發現,數據庫 中的日誌記錄變多了,就將這些數據取出,進行分析和報警。這是一種基於Mysql存儲和蜜罐威脅事件結合的方式。
另一種方式是依賴ips,ids這種設備,對網段內的所有蜜罐的流量進行監控,發現有任何 觸發蜜罐的訪問就進行數據的報警分析,不好的地方是,除了要依賴這些設備 ,ids和ids 本身對蜜罐被訪問策略控制比較單一,另外如果想進一步的想取得訪問的payload也需要與ids ,ips再次交互取,不同產商的設備特點不統一。
所以產生了,第三種Graylog與Honeypot結合反掃檢查的方案,通過Graylog提供RESTAPI,自動化統計日誌數據,通過Graylog Dashboard功能統計端口訪問量大的ID、IP,將Honepot日誌與Graylog數據進行對撞分析,再與掃描器記錄下每臺服務器的開放的端口指紋做比較,如果訪問了端口指紋裏沒有開放的端口,並且還有觸發蜜罐的歷史,可以加強定位為是威脅。
上圖就是通過Graylog Dashboard返回的端口訪問量前三的用戶的可視化圖。User1明顯為描掃行為,User2是可以行為,User3是正常訪問行為。
6.總結
我們將Graylog作為一個可擴展的數據容器來使用,因為Graylog REST的這個基礎功能,讓他從一個數據管理工具升級為數據平臺。日誌千變萬化,行為迥異不同,Graylog只是眾多日誌數據管理產品中的一個,Graylog依靠開源免費表現優異的特點,越來越被人們接受。Graylog可能會在一次次產品升級過程中升級完善,也可能被更好的新產品奪走註意力,但是我們基於某種工具上實踐思路是可以延續的,名詞術語變了,應用模式依然有生命力,開放的思路,更益於工具的使用,借這篇向大家介紹Graylog一點實踐應用思路。
本文轉載自
原文鏈接:
Tags:
文章來源: