態勢感知 + DataV:安全可視化交互,這么玩兒


在安全領域,“看見”的能力很大程度上影響著風險防御的有效性。將未知的風險以可視化的方式展示,讓企業安全團隊有“踏實感”和“存在感”。

在安全可視化上,阿里云首批MVP,千尋位置安全負責人傅奎想出了“跨界玩法”,用阿里云的兩大產品:態勢感知和DataV,實現交互式安全威脅發現。

Let's Make It True.

文章介紹的,是如何使用DataV大屏展現態勢感知 DNS 會話日志,從而實現交互式安全威脅發現。

劇透一下最終效果,絕對值得試試:

所有 DNS 日志的節點(源地址、DNS服務器地址、要解析的域名)關系圖。點選其中任一節點,關聯點自動高亮,非關聯節點則進入蒙版狀態,要是有什么可疑的節點、關系、類目,一眼就看出來!

背景介紹

自打“態勢感知”上線了新版的“日志”功能,團隊成員就在摩拳擦掌尋思如何充分挖掘日志信息的價值,而不僅僅是用于故障診斷或事件調查。

其中,通過圖形化展現不同網絡資源節點的相互關系,進而實現交互式安全威脅發現,是最為理想的實現方式。此前嘗試過 Graphviz、yEd、NetworkX 等方式,后來都因配置復雜,使用繁瑣等問題放棄。

直到MVP 技術群里李文毅向大家推薦了 DataV,我想:是時候“make it true ”了!

產品介紹

以下材料援引自官方介紹,描述不準與我無關:

態勢感知

“態勢感知提供的是一項SAAS服務,即在大規模云計算環境中,對那些能夠引發網絡安全態勢發生變化的要素進行全面、快速和準確地捕獲和分析,并提供一個體系化的安全解決方案。”

DataV 數據可視化

“DataV旨讓更多的人看到數據可視化的魅力,幫助非專業的工程師通過圖形化的界面輕松搭建專業水準的可視化應用。DataV提供豐富的可視化模板,滿足您會議展覽、業務監控、風險預警、地理信息分析等多種業務的展示需求。”

需求分析

態勢感知的日志功能非常強大,目前支持查詢:所有入站的7層數據、出入站棧的4層會話以及DNS雙向日志。其中 DNS 日志有助于安全團隊分析服務器是否遭受入侵,被植入木馬病毒,存在異常請求等問題。

我們最關心的是:哪臺服務器,通過哪個 DNS Server,解析了哪個域名?

針對該需求,如果有可視化的節點關系圖輔助分析,那么威脅識別的效率將大幅提升。在沒有使用 DataV 之前,通常的辦法是使用一些圖表工具進行展現,而且少不了定制化開發的工作量。DataV 的出現,大大解放了數據分析人員的雙手,從而可以用于拖動進度條。僅僅通過少量的鼠標點擊和基本的 API 配置,就能瞬間讓你的數據充滿活力,開口說話。DataV 自帶節點關系圖,并內嵌原生ECharts ,完全可以滿足此類需求。

實現方法例

你一定很期待強勁的態勢感知與性感的 DataV強強聯合會是什么樣子。期待不如行動,我們一起動手去實現吧。

導出態勢感知 DNS 日志

登錄阿里云控制臺,進入安全(云盾)| 態勢感知功能頁,通過子菜單選擇日志 new項目。

設置DNS 日志查詢條件,分別是:

日志源:DNS

字段:qtype

判斷條件:包含(目前只能選包含)

關鍵字:A

再設置好查詢時間,點擊搜索就可以啦。

系統很快就能返回查詢結果,通過右上角導出結果將當前頁(沒錯,,是當前頁,,一次100條-_-)日志導出到Excel 中。如果需要更多數據,得依次翻頁導出-_-。當然也有程序化解決方案,請往后看。

定制返回 JSON 串的數據源API

對導出的 Excel 文件進行數據抽取,關鍵是:

源地址:src_ip

DNS Server:dst_ip

嘗試解析的域名:qname

將源地址、DNS 地址、域名三項都納入節點范疇,同時將源地址->DNS 地址、DNS 地址->域名納入關系范疇,通過 HTTP 將節點 nodes 和關系 links 輸出為 JSON 就是一個可用的API數據輸入源。

別著急,作為良心分享,怎么能少了技術細節呢?

為了不影響閱讀,我把數據格式化和 API 相關的具體內容放在后面環節。

定制 DataV 大屏,指定 API 數據源

通過阿里云控制臺大數據(數加)| DataV數據可視化進入定制界面,直接選擇新建可視化。

創建大屏模板,設置一個你喜歡的名字。

向大屏圖層添加數據展示組件, 這里可以選擇關系網絡或原生的 Echarts 網絡圖。

點選圖表組件,進入右側數據選項卡,修改默認的數據源類型靜態數據為 API。

填寫滿足系統要求的 API,如:http://www.test.com/datav.json,鼠標離開輸入框,左側設計區會即時展現效果。

發布監控大屏,看效果

數據調試和預覽成功后,可通過右上角的發布按鈕,正式發布報表。DataV 考慮得很周到,為報表提供了密碼和 Token 兩種安全保護機制。

訪問發布后的報表鏈接:http://datav.aliyun.com/share/ef9aa**********a3fd8(這是他們的秘密不可訪問的哈)

交互式發現

好吧,放一些我在測試環境模擬出來的數據。下面是一段時間內,所有 DNS 日志的節點(源地址、DNS服務器地址、要解析的域名)關系圖。

點選其中任一節點,關聯點自動高亮,非關聯節點則進入蒙版狀態,相當炫酷啊!

來,再看另外一組測試數據。要是有什么可疑的節點、關系、類目,一眼就看出來!

小提示:萬一發現了什么神奇的域名或 IP 地址,可以直接上微步威脅情報查詢,例如:https://x.threatbook.cn/domain/google.com。是不是壞人立即遁形,這個庫太全了……

補充說明

替你踩過的坑

如果不打算使用服務器代理方式調用API,那么一定要設置好 API 的 HTTP 頭部跨域參數

如果使用了 HTTPS 訪問DataV 監控大屏,那么 API 接口也必須是 HTTPS 形式

API 接口返回的數據要和靜態數據輸入框中的格式完全一樣——JSON 串

如果你遇到了一些神奇的 Bug,請把圖層或組件刪除后從頭再來一遍(不要問我怎么知道的)

DataV 自帶的關系圖和內嵌的原生 ECharts 在數據格式上有一定的區別,要看仔細

Show you the code

下面這段代碼可以幫助使用者在登錄態勢感知后,自動獲取 DNS 會話日志,并按照 DataV 關系圖所適配的數據格式生成 JSON 串。非專業開發人員的臨時代碼,寫得比較丑,別太當真。

#!/usr/bin/python# -*- coding:utf8 -*-import json# pip install requestsimport requests# 成功登錄態勢感知后,通過 Chrome 復制當前會話的 Cookie。cookie_str = 'aliyun_country=CN; aliyun_site=CN;'\? ? ? ? ? ? 'UM_distinctid=***; JSESSIONID=***; '\? ? ? ? ? ? 'consoleNavVersion=1.1.1; _yundun_session0=***; '\? ? ? ? ? ? 'aliyun_choice=CN; isg=***E-'nodes_client = []? # 客戶端 IPnodes_server = []? # DNS Server IPnodes_domain = []? # 解析的域名def get_yundun_DNS_log(http_session=None, page_num = 1):"""

訪問阿里云后臺,請求 DNS 日志

:param http_session: requests.session()

:param page_num: page number

:return: HTTP Response

"""globalcookie_str? ? url ='https://yundun.console.aliyun.com/sas/slssearch/'\'getLogList.json?__preventCache=1500********2&_timeScope=1800000'\'¤tPage=%d&endTime=2017-07-19+19:00:00'\'&pageSize=100&query=dns@qtype:A&reverse=true'\'&startTime=2017-07-19+12:30:00'req = http_session.request('GET', url=(url % page_num),? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? headers={'cookie': cookie_str})ifreq.status_code ==200:returnreq.textreturn{}defget_group_name(node):"""

根據不同的節點類型,返回不同的類目組。相同組的節點將使用相同的顏色顯示。

:param node: node_name

:return: group_name

"""globalnodes_client, nodes_server, nodes_domainifnodeinnodes_client:return'group1'ifnodeinnodes_domain:if'ali'innode:return'group2'return'group3'ifnodeinnodes_server:ifnodein('114.114.114.114'):return'group4'ifnode.startswith('192'):return'group5'return'group6'defget_DNS_log_json_list():"""

返回所有 DNS 日志記錄 JSON

:return:

"""dns_log_json = []? ? sessionX = requests.session()# 翻頁10次foriinrange(10):? ? ? ? res = get_yundun_DNS_log(sessionX, i+1)? ? ? ? log_json = json.loads(res)? ? ? ? dns_log_json += log_json['data']['list']returndns_log_jsondef geenrate_nodes_and_links():"""

生成所有節點和關系的List

:return: (nodes[], links[])

"""globalnodes_client, nodes_server, nodes_domain? ? nodes = []# 所有節點links = []# 所有關系forloginget_DNS_log_json_list():? ? ? ? (client, domain, server) = ('','','')formContentinlog['mContents']:ifmContent['mKey'] =='src_ip':? ? ? ? ? ? ? ? client = mContent['mValue']ifmContent['mKey'] =='qname':? ? ? ? ? ? ? ? domain = mContent['mValue']ifmContent['mKey'] =='dst_ip':? ? ? ? ? ? ? ? server = mContent['mValue']ifclient ==''ordomain ==''orserver =='':continue#print (client, domain, server)ifdomain =='shcmsproxy.aliyun.com':continueifclientnotinnodes_client:? ? ? ? ? ? nodes_client.append(client)ifclientnotinnodes:? ? ? ? ? ? nodes.append(client)ifdomainnotinnodes_domain:? ? ? ? ? ? nodes_domain.append(domain)ifdomainnotinnodes:? ? ? ? ? ? nodes.append(domain)ifservernotinnodes_server:? ? ? ? ? ? nodes_server.append(server)ifservernotinnodes:? ? ? ? ? ? nodes.append(server)if(client, server)notinlinks:? ? ? ? ? ? links.append((client, server))if(server, domain)notinlinks:? ? ? ? ? ? links.append((server, domain))return(nodes, links)defget_datav_json():(nodes, links) = geenrate_nodes_and_links()? ? graph = {'nodes':[],'links':[]}fornodeinnodes:? ? ? ? graph['nodes'].append({"imgPath":"","name": node,"type": get_group_name(node)? ? ? ? })forlinkinlinks:? ? ? ? graph['links'].append({"source": link[0],"target": link[1],"value":10})return'[%s]'% json.dumps(graph)if__name__ =='__main__':printget_datav_json()

以下是API輸出結果示例:

[? {"nodes": [? ? ? {"imgPath":"","name":"192.168.1.1","type":"group1"},? ? ? {"imgPath":"","name":"114.114.114.114","type":"group2"},? ? ? {"imgPath":"","name":"taobao.com","type":"group3"}? ? ],"links": [? ? ? {"source":"192.168.1.1","target":"114.114.114.114","value":10},? ? ? {"source":"114.114.114.114","target":"taobao.com","value":15}? ? ]? }]

將上述內容作為企業自身 API 接口的輸出,同時設置 HTTP HEAD 相關的參數,即可通過 DataV 大屏調用并展現啦!

self.set_header('Access-Control-Allow-Origin','*.aliyun.com')self.set_header('Content-Type','application/json;charset=UTF-8')

關于“交互式”

這篇文章的標題中有兩個字我很喜歡:“交互”。

除了視圖上的交互,實際上使用者還花了很長的時間用在態勢感知日志查詢、 導出和格式化上。

這也算是一種“交互”,一種比較笨的交互。希望未來阿里云能在多個產品之間的數據引用、內部接口交互上再做些升級,讓我們這樣的使用者少發揮技能,直到我們徹底“自廢武功”。

來源:阿里云安全

原文鏈接

本文為云棲社區原創內容,未經允許不得轉載,如需轉載請發送郵件至yqeditor@list.alibaba-inc.com;如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至:yqgroup@service.aliyun.com 進行舉報,并提供相關證據,一經查實,本社區將立刻刪除涉嫌侵權內容。

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

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • 1. 概述 在網絡環境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應服務器獲取相應的...
    ghbsunny閱讀 2,975評論 0 7
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,413評論 0 6
  • 背景: 閱讀新聞 12C CDB模式下RMAN備份與恢復 [日期:2016-11-29] 來源:Linux社區 作...
    陽屯okyepd閱讀 3,610評論 0 7
  • 離開之后,慢慢的習慣,一直安慰自己,努力的克制自己,想要過自己的生活就要為這一切奮斗,以后過的自私一點,不那么善良。
    zs97閱讀 85評論 0 0