安全态势,交互发现 —— 基于阿里云轻松搭建安全大屏

本文涉及的产品
云安全中心 免费版,不限时长
简介: 使用DataV大屏展现态势感知 DNS 会话日志,从而实现交互式安全威胁发现。

2017年,阿里云启动MVP(Most Valuable Professional)项目。顾名思义,MVP正在寻找阿里云最有价值专家,那些能够,并且愿意帮助他人,充分了解和使用阿里云技术的意见领袖。

本文是阿里云MVP 傅奎的实践分享,今天和大家讲讲 “安全态势,交互发现 —— 基于阿里云轻松搭建安全大屏 

一句话概述

使用DataV大屏展现态势感知 DNS 会话日志,从而实现交互式安全威胁发现。

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

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

17832701373e921529f104332f73c4282cfa58ca73416e298d5ab918af89f5c8eeb26b08d509d2fb

背景介绍

自打“态势感知”上线了新版的“日志”功能,团队成员就在摩拳擦掌寻思如何充分挖掘日志信息的价值,而不仅仅是用于故障诊断或事件调查。其中,通过图形化展现不同网络资源节点的相互关系,进而实现交互式安全威胁发现,是最为理想的实现方式。此前尝试过 Graphviz、yEd、NetworkX 等方式,后来都因配置复杂,使用繁琐等问题放弃。

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

产品介绍

以下材料援引自官方介绍,描述不准与我无关:

“态势感知提供的是一项SAAS服务,即在大规模云计算环境中,对那些能够引发网络安全态势发生变化的要素进行全面、快速和准确地捕获和分析,并提供一个体系化的安全解决方案。”

“DataV旨让更多的人看到数据可视化的魅力,帮助非专业的工程师通过图形化的界面轻松搭建专业水准的可视化应用。DataV提供丰富的可视化模板,满足您会议展览、业务监控、风险预警、地理信息分析等多种业务的展示需求。”

需求分析

态势感知的日志功能非常强大,目前支持查询:所有入站的7层数据、出入站栈的4层会话以及DNS双向日志。其中 DNS 日志有助于安全团队分析服务器是否遭受入侵,被植入木马病毒,存在异常请求等问题。

我们最关心的是:哪台服务器,通过哪个 DNS Server,解析了哪个域名?

针对该需求,如果有可视化的节点关系图辅助分析,那么威胁识别的效率将大幅提升。在没有使用 DataV 之前,通常的办法是使用一些图表工具进行展现,而且少不了定制化开发的工作量。DataV 的出现,大大解放了数据分析人员的双手,从而可以用于拖动进度条。仅仅通过少量的鼠标点击和基本的 API 配置,就能瞬间让你的数据充满活力,开口说话。DataV 自带节点关系图,并内嵌原生ECharts ,完全可以满足此类需求。

实现方法

你一定很期待强劲的态势感知与性感的 DataV强强联合会是什么样子。期待不如行动,我们一起动手去实现吧。

导出态势感知 DNS 日志

登录阿里云控制台,进入安全(云盾)|态势感知功能页,通过子菜单选择日志 new项目。
79868ff030c4143e1ea0c41718ef8820146a2ef5

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

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

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

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

37b9661975617ecf553c9a3184ff1c8eaf8959af

定制返回 JSON 串的数据源API

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

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

dec7b6fdd794365fda16886c6420aa9afcb7d985

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

别着急,作为良心分享,怎么能少了技术细节呢?为了不影响阅读,我把数据格式化和 API 相关的具体内容放在后面环节。

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

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

06f71fe7327b7d0384d9f1b86123c272e1a3feec

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

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

bf0bbc7d5b0ddfae17909f2fab3f43b4ec80fd9f

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

7afa1438c7508972837e86ca23be57f50160585f

填写满足系统要求的 API,如:http://www.test.com/datav.json,鼠标离开输入框,左侧设计区会即时展现效果。
6d7da3fdba59a4f5ea043407422ffd4abb5ac00c

发布监控大屏,看效果

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

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

ddfb119fb66d11fb430f4f9126352aae9770ed50

交互式发现

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

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

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

小提示:万一发现了什么神奇的域名或 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 requests
import 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 = []  # 客户端 IP
nodes_server = []  # DNS Server IP
nodes_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()
    # 翻页10次
    for 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_json

def 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()


以下是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')

跨域相关的问题请参考:浏览器的同源策略和跨域问题详解

一些期待

关于“交互式”

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

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

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

就这些,如果您有什么问题欢迎在这里留言与我交流。

想和我成为工作伙伴一起探索云平台上的安全技术实践,也一样欢迎哦~

鸣谢

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
目录
相关文章
|
30天前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
8天前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
8天前
|
弹性计算 安全
电子好书发您分享《阿里云第八代企业级ECS实例,为企业提供更安全的云上防护》
阿里云第八代ECS实例,搭载第五代英特尔至强处理器与飞天+CIPU架构,提升企业云服务安全与算力。[阅读详情](https://developer.aliyun.com/ebook/8303/116162?spm=a2c6h.26392459.ebook-detail.5.76bf7e5al1Zn4U) ![image](https://ucc.alicdn.com/pic/developer-ecology/cok6a6su42rzm_f422f7cb775444bbbfc3e61ad86800c2.png)
33 14
|
21天前
|
云安全 编解码
阿里云安全视频审核的最大文件大小为**200MB**。
阿里云安全视频审核的最大文件大小为**200MB**。
13 1
|
1月前
|
云安全 人工智能 安全
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器:一款高效、稳定、安全的云计算服务
阿里云服务器ECS和轻量应用服务器有什么区别?轻量和ECS优缺点对比,云服务器ECS是明星级云产品,适合企业专业级的使用场景,轻量应用服务器是在ECS的基础上推出的轻量级云服务器,适合个人开发者单机应用访问量不高的网站博客、云端学习测试环境等,阿里云服务器网从从使用场景、适用人群、计费方式、系统镜像、网络带宽、运维管理等多方面来详细说下二者区别及如何选择
95 1
|
2月前
|
运维 安全 关系型数据库
数据库自治与安全服务训练营火热开营!完成任务可得国潮保温杯和阿里云定制双肩包!
本训练营带您简单了解数据库自治与云安全服务,数据库自治服务提供云上RDS、PolarDB、NoSQL、ADB等数据库7*24小时异常检测、SQL自优化、安全合规审计、弹性伸缩、数据自治、锁分析等亮点功能。一站式自动化、数字化DAS集成平台,助力您畅享DBA运维智能化。
|
2月前
|
弹性计算 安全 网络安全
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(1)
带你读《从基础到应用云上安全航行指南》——阿里云产品专家教你如何全方位构建ECS安全体系(1)
427 0

热门文章

最新文章