态势感知 + DataV:安全可视化交互,这么玩儿

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
云安全中心 免费版,不限时长
云安全中心 防病毒版,最高20核 3个月
简介: 在安全领域,“看见”的能力很大程度上影响着风险防御的有效性。将未知的风险以可视化的方式展示,让企业安全团队有“踏实感”和“存在感”。 在安全可视化上,阿里云首批MVP,千寻位置安全负责人傅奎想出了“跨界玩法”,用阿里云的两大产品:态势感知和DataV,实现交互式安全威胁发现。


image


在安全领域,“看见”的能力很大程度上影响着风险防御的有效性。将未知的风险以可视化的方式展示,让企业安全团队有“踏实感”和“存在感”。

在安全可视化上,阿里云首批MVP,千寻位置安全负责人傅奎想出了“跨界玩法”,用阿里云的两大产品:态势感知和DataV,实现交互式安全威胁发现。

Let's Make It True.

文章介绍的,是如何使用DataV大屏展现态势感知 DNS 会话日志,从而实现交互式安全威胁发现。

剧透一下最终效果,绝对值得试试:

所有 DNS 日志的节点(源地址、DNS服务器地址、要解析的域名)关系图。点选其中任一节点,关联点自动高亮,非关联节点则进入蒙版状态,要是有什么可疑的节点、关系、类目,一眼就看出来!


image
image

背景介绍

自打“态势感知”上线了新版的“日志”功能,团队成员就在摩拳擦掌寻思如何充分挖掘日志信息的价值,而不仅仅是用于故障诊断或事件调查。

其中,通过图形化展现不同网络资源节点的相互关系,进而实现交互式安全威胁发现,是最为理想的实现方式。此前尝试过 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项目。


image


设置DNS 日志查询条件,分别是:

  • 日志源:DNS
  • 字段:qtype
  • 判断条件:包含(目前只能选包含)
  • 关键字:A

再设置好查询时间,点击搜索就可以啦。


image


系统很快就能返回查询结果,通过右上角导出结果将当前页(没错,,是当前页,,一次100条--)日志导出到Excel 中。如果需要更多数据,得依次翻页导出--。当然也有程序化解决方案,请往后看。


image

定制返回 JSON 串的数据源API

对导出的 Excel 文件进行数据抽取,关键是:

  • 源地址:src_ip
  • DNS Server:dst_ip
  • 尝试解析的域名:qname


image

将源地址、DNS 地址、域名三项都纳入节点范畴,同时将源地址->DNS 地址、DNS 地址->域名纳入关系范畴,通过 HTTP 将节点 nodes 和关系 links 输出为 JSON 就是一个可用的API数据输入源。

别着急,作为良心分享,怎么能少了技术细节呢?

为了不影响阅读,我把数据格式化和 API 相关的具体内容放在后面环节。

定制 DataV 大屏,指定 API 数据源

通过阿里云控制台大数据(数加)| DataV数据可视化进入定制界面,直接选择新建可视化。


image


创建大屏模板,设置一个你喜欢的名字。


image


向大屏图层添加数据展示组件, 这里可以选择关系网络或原生的 Echarts 网络图。


image


点选图表组件,进入右侧数据选项卡,修改默认的数据源类型静态数据为 API。


image


填写满足系统要求的 API ,鼠标离开输入框,左侧设计区会即时展现效果。


image

发布监控大屏,看效果

数据调试和预览成功后,可通过右上角的发布按钮,正式发布报表。DataV 考虑得很周到,为报表提供了密码和 Token 两种安全保护机制。


image

访问发布后的报表链接:http://datav.aliyun.com/share/ef9aa**********a3fd8 (这是他们的秘密不可访问的哈)

image


交互式发现

好吧,放一些我在测试环境模拟出来的数据。下面是一段时间内,所有 DNS 日志的节点(源地址、DNS服务器地址、要解析的域名)关系图。


image


点选其中任一节点,关联点自动高亮,非关联节点则进入蒙版状态,相当炫酷啊!


image

来,再看另外一组测试数据。要是有什么可疑的节点、关系、类目,一眼就看出来!

image


小提示:万一发现了什么神奇的域名或 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
    """
    global cookie_str
    url = 'https://yundun.console.aliyun.com/sas/slssearch/'\          'getLogList.json?__preventCache=1500********2&_timeScope=1800000'\          '&currentPage=%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})
    if req.status_code == 200:
        return req.text    return {
   }def get_group_name(node):
    """
    根据不同的节点类型,返回不同的类目组。相同组的节点将使用相同的颜色显示。
    :param node: node_name
    :return: group_name
    """
    global nodes_client, nodes_server, nodes_domain    if node in nodes_client:
        return 'group1'
    if node in nodes_domain:
        if 'ali' in node:
            return 'group2'
        return 'group3'
    if node in nodes_server:
        if node in ('114.114.114.114'):
            return 'group4'
        if node.startswith('192'):
            return 'group5'
    return 'group6'def get_DNS_log_json_list():
    """
    返回所有 DNS 日志记录 JSON
    :return:
    """
    dns_log_json = []
    sessionX = requests.session()
    # 翻页10for i in range(10):
        res = get_yundun_DNS_log(sessionX, i+1)
        log_json = json.loads(res)
        dns_log_json += log_json['data']['list']
    return dns_log_jsondef geenrate_nodes_and_links():
    """
    生成所有节点和关系的List
    :return: (nodes[], links[])
    """
    global nodes_client, nodes_server, nodes_domain
    nodes = []  # 所有节点
    links = []  # 所有关系
    for log in get_DNS_log_json_list():
        (client, domain, server) = ('','','')
        for mContent in log['mContents']:
            if mContent['mKey'] == 'src_ip':
                client = mContent['mValue']
            if mContent['mKey'] == 'qname':
                domain = mContent['mValue']
            if mContent['mKey'] == 'dst_ip':
                server = mContent['mValue']
        if client == '' or domain == '' or server =='':
            continue
        #print (client, domain, server)

        if domain == 'shcmsproxy.aliyun.com':
            continue

        if client not in nodes_client:
            nodes_client.append(client)
        if client not in nodes:
            nodes.append(client)

        if domain not in nodes_domain:
            nodes_domain.append(domain)
        if domain not in nodes:
            nodes.append(domain)

        if server not in nodes_server:
            nodes_server.append(server)
        if server not in nodes:
            nodes.append(server)

        if (client, server) not in links:
            links.append((client, server))
        if (server, domain) not in links:
            links.append((server, domain))
    return (nodes, links)def get_datav_json():
    (nodes, links) = geenrate_nodes_and_links()
    graph = {
   'nodes':[], 'links':[]}

    for node in nodes:
        graph['nodes'].append({
   
                "imgPath": "",
                "name": node,
                "type": get_group_name(node)
        })
    for link in links:
        graph['links'].append({
   
                "source": link[0],
                "target": link[1],
                "value": 10
        })
    return '[%s]' % json.dumps(graph)if __name__ == '__main__':
    print get_datav_json()
AI 代码解读

以下是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
      }
    ]  }
]
AI 代码解读

将上述内容作为企业自身 API 接口的输出,同时设置 HTTP HEAD 相关的参数,即可通过 DataV 大屏调用并展现啦!

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

关于“交互式”

这篇文章的标题中有两个字我很喜欢:“交互”。

除了视图上的交互,实际上使用者还花了很长的时间用在态势感知日志查询、 导出和格式化上。

这也算是一种“交互”,一种比较笨的交互。希望未来阿里云能在多个产品之间的数据引用、内部接口交互上再做些升级,让我们这样的使用者少发挥技能,直到我们彻底“自废武功”。

来源:阿里云安全
原文链接

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
目录
打赏
0
0
0
0
73532
分享
相关文章
云安全:云计算安全
云安全是指在云计算环境中保护数据、应用程序和相关服务不受威胁的一系列策略、技术和控制措施。随着云计算的快速发展,云安全已成为企业和个人用户最关心的问题之一。云安全的目标是确保云环境中数据的机密性、完整性和可用性,同时防止数据丢失、服务中断和不正当访问。
157 81
阿里云服务器安全攻略参考:基础防护与云安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器除了提供基础的防护之外,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为您介绍阿里云服务器的基础安全防护机制,以及阿里云提供的各类云安全产品,帮助用户全面了解并选择合适的防护手段,为云上业务保驾护航。
163 11
用AI来做云安全是怎样一种体验?阿里云安全AI能力大曝光
用AI来做云安全是怎样一种体验?阿里云安全AI能力大曝光
课时12:阿里云安全产品之态势感知
阿里云态势感知是基于人工智能的安全产品,帮助企业应对高隐蔽性网络攻击。它通过机器学习全面感知网络威胁,覆盖网络层、主机层和应用层,提供实时入侵检测与响应。具备威胁模型、专家定制、超强检索及全网威胁情报等六大核心优势,显著增强企业网络安全防御能力。在G20峰会期间,成功实现平台用户网站安全运营零干扰。
云安全中心:保护您的多云产品安全
阿里云安全中心提供统一的多云环境安全防护,涵盖病毒查杀、漏洞扫描、防勒索等功能,支持ECS、OSS等云产品配置风险检测。首次使用需关注主机安全授权、配置检查策略及恶意文件检测三大功能,确保系统安全合规,降低管理成本,提升整体安全水平。了解更多可关注阿里云中小企业直播间。
123 1
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。
带你读《阿里云安全白皮书》(十八)——云上安全重要支柱(12)
随着数智化发展,企业面临复杂的资产管理需求。阿里云提供全链路身份管控与精细化授权方案,涵盖细粒度权限管理和身份凭证保护,确保数据资产安全。支持多因素认证和最小权限原则,减少风险暴露,提升企业安全效率。详情见《阿里云安全白皮书(2024版)》。
带你读《阿里云安全白皮书》(十二)——云上安全重要支柱(6)
阿里云构建了7x24小时全自动化红蓝对抗平台,通过深度整合内外部攻防案例,进行高频次、自动化的演练,提升对复杂攻击的应对能力,确保安全防护体系持续优化。平台具备全自动化演练、随机性与多样化、可视化输出、节点负载智能控制、日志追踪与审计、应急场景秒级熔断等特性,确保演练过程稳定高效。
带你读《阿里云安全白皮书》(二十四)——云上安全建设最佳实践(2)
本文介绍了阿里云在AI大模型云上安全方面的最佳实践,涵盖数据安全、模型安全、内容安全和合规性四大关键挑战。阿里云通过数据加密、私有链接传输、机密计算等技术手段,确保数据和模型的安全性;同时,提供内容安全检测、Prompt问答护栏等功能,保障生成内容的合法合规。此外,阿里云还帮助企业完成算法及模型备案,助力客户在AI大模型时代安全、合规地发展。

相关产品

  • 云安全中心
  • 下一篇
    oss创建bucket