Apache Spot 是一个基于网络流量和数据包分析,通过独特的机器学习方法,发现潜在安全威胁和未知网络攻击能力的开源方案。Apache Spot 利用开源且被优化过的解码器接入二进制网络流量数据和数据包,利用机器学习的方法(主要是LDA 算法)从网络流量中分离出可疑流量,以及特征化独特的网络流量行为。经过上下文增强、噪声过滤、白名单和启发式算法等等一系列手段,最终产生少量且准确的安全威胁事件呈现给用户。
1. Apache Spot 是什么?
Apache Spot 是一个基于网络流量和数据包分析,通过独特的机器学习方法,发现潜在安全威胁和未知网络攻击能力的开源方案。目前Apache Spot 已支持对Netflow、sflow、DNS、Proxy 的网络流量分析,主要依靠HDFS、Hive 提供存储能力,Spark提供计算能力,基于LDA 算法提供无监督式机器学习能力,最终依赖Jupyter 提供图形化交互能力。
该项目由Intel 和Cloudera 向Apache 基金会贡献,目前尚处于孵化阶段,最新发布版本为Apache Spot 1.0。
2. Apache Spot 能做什么?
Apache Spot 采集的数据包括网络流量、DNS 和Proxy数据包,其中网络流量又划分为外部流量(Perimeter Flows)和内部流量(Internal Flows)。利用这些数据可以做到:
外部流量
- 隐蔽扫描识别Stealthy Scanning
- 旁路攻击检测Side-Channel Data Escapes
- 反射攻击检测Reflection Attacks
- 异常数据流发现Unusual Data Flows
- 信标行为发现Beaconing
外部流量+ DNS
- DNS隧道检测DNS Tunneling
- DNS隐蔽信道识别Convert DNS Channels
- 内部DNS探测Internal DNS Recon
外部流量+ DNS + Proxy
- 跨站脚本攻击检测Cross site scripting(XSS)
- C&C主机发现Command and Control
- URL混淆检测URLobfuscation
- 异常的POST数据发现Unusual Data POSTs
外部流量+ DNS + Proxy + 内部流量
- 横向移动检测Lateral Movement
- 完整的威胁可见性Complete Threat Visibility
3. Apache Spot 是怎么做的?
Apache Spot 利用开源且被优化过的解码器接入二进制网络流量数据和数据包,利用机器学习的方法(主要是LDA 算法)从网络流量中分离出可疑流量,以及特征化独特的网络流量行为。经过上下文增强、噪声过滤、白名单和启发式算法等等一系列手段,最终产生少量且准确的安全威胁事件呈现给用户。
4. Apache Spot 关键特性
- 识别可疑DNS数据包(Suspicious DNS Packets)
利用深度包检测技术(Deep-packet Inspection)对DNS流量进行画像,经过可视化、正则化以及模式匹配处理,向安全分析师呈现出DNS流量数据中最有可能是威胁的部分。
- 威胁应急响应(Threat Incident and Response)
给定一个IP地址,Apache Spot能够将跟该IP相关的所有数据按时间序列整合在一起,便于运维人员对威胁事件进行响应。
- 可疑网络连接发现(Suspicious Connects)
通过机器学习的方法对在网络上进行通信的机器及其通信模式建立相应的模型,数十条原始数据在经过一系列处理后,仅剩余几百条,这些剩余的数据就是最有可能是威胁的部分。
- 故事板(Storyboard)
安全分析师对威胁事件完成调查后,可以通过故事板去表现事件的来龙去脉,也就是说在故事板中,我们可以了解到攻击者是什么时候攻入系统的?都拿下了哪些机器?怎么拿下的?
- 开放数据模型(Open Data Models)
为了让威胁检测模型的开发过程更加简单高效,保证个人、企业、社区输出的检测模型的兼容性,Apache Spot 对网络、终端、用户等相关数据进行了标准化定义,规范了这些数据在逻辑层以及物理层的形态。简而言之,开放数据模型保障了不同的开发者在用同一种“语言”在进行威胁检测模型的开发。
- 协作(Collaboration)
Apache Spot 平台运行于Hadoop大数据平台之上,通过其定义的开放数据模型,使得个人、企业、社区开发者的产出可以无缝衔接。正如攻击者可以利用其它攻击者制作的攻击工具一样,防护方也能够使用其它防护者制作的防护工具。
5. Apache Spot 系统介绍
5.1 系统架构
Apache Spot项目使用Hadoop大数据生态的各种组件构建其数据分析平台。从数据采集、预处理到存储,从数据分析、结果呈现到交互操作,还集成了大量的开源软件来构建平台的能力。
5.2组件视图
- spot-setup 系统配置、初始化
- spot-ingest 数据采集
- spot-ml 机器学习数据分析
- spot-oa 用户交互界面
5.3数据流视图
下图详细呈现了Apache Spot整个平台的主要数据流,数据从数据源(左上)起始,先经过数据采集器进行解析处理,而后由流式处理组件完成入库,存储到HDFS中。之后,机器学习组件负责对数据进行分析计算,并将计算结果入库存储。分析结果最终通过用户界面呈现出来(右下)。
5.4 服务视图
上图是Apache Spot推荐的集群部署下,各个节点上部署的服务。其中:
Master节点作为大数据平台的主节点,主要负责提供数据存储、检索及资源管理服务;
Cloudera Manager节点作为大数据平台的管理节点,也是Apache Spot平台的管理入口;
Worker节点作为大数据平台的计算节点,主要负责提供数据分析能力;
Edge节点作为大数据平台的数据采集节点,主要负责从网络环境中采集数据。
6. Apache Spot 组件介绍
6.1 配置组件Spot-Setup
Spot-Setup包含一系列脚本,分别用于初始化系统HDFS 中的文件路径和Hive 数据表结构,以及初始化系统配置。
6.2 数据采集组件Spot-Ingest
6.2.1 架构视图
6.2.2 内部模块
- Spot-Collector
该模块负责在后台监控文件系统指定路径下,由网络工具产生的新文件,或者先前产生的已有数据文件,通过指定解析工具(如nfdump,tshark)转换为可读格式,并以原始格式存储到HDFS 用于取证,以avro-parquet 格式存储到Hive 中以做SQL 检索。
其中:
文件> 1MB 的将文件名称和在HDFS中的存储路径交给kafka;
文件< 1MB 的将其Data Event 交给Kafka,之后由Spark Streaming处理(当前版本中仅Proxy 数据由Spark Streaming 处理)。
- Kafka
Kafka负责存储由Collector 采集到的数据,以供Spot Workers 解析处理。每个数据采集实例都会创建一个新的Topic,当前版本包含三个采集实例,分别是Flow, DNS, Proxy。每个Topic 的 Partition 数量取决于Spot Worker 的数量。
- Spot Workers
Sport Worker 运行在后台,从指定的Topic 的Partitions, 以及Hive 表中读取、解析数据,并将结果存储到Hive 中,以供Spot-ml 组件读取消费。
当前版本中存在两种类型的Spot Worker:
A:Python 多线程实现,通过预置的解析器处理数据;
B:Spark-Streaming Workers 实现,通过Spark-Streaming Context 从kafka 中读取并处理数据。
6.3 机器学习组件Spot-ML
Spot-ML负责从采集到的netflow、dns、proxy 数据中分析可疑连接,通过对一系列网络事件的分析来生成最不可能和最可疑的事件列表。它利用主体建模(Topic Model)来发现正常和异常的网络行为;将关联到某个IP 的日志集合视作一个文档,利用LDA (Latent Dirichlet Allocation ) 算法从中发现隐藏的语义结构。Spot-ML 为每个IP 地址的网络行为建立概率模型,每一条网络日志都会被该模型进行评分,将其中得分较低的网络事件标记为“可疑”以作进一步分析。
LDA算法是一个用于离散数据建模分析的生成概率模型,基于三层贝叶斯模型,适用于分析类似语料库的数据。在该模型中,文档中的每个单词均由一组潜在的主题混合而成。利用聚合、离散手段将网络流量中每一条网络日志转换为一个个单词。通过这种方法,可以将文档关联到IP 地址,单词关联到网络日志(网络日志可关联到某个IP),主题关联到网络活动画像。
6.4 交互组件Spot-OA
Spot-OA基于IPython、D3JS、jQuery、Bootstrap、ReactJS技术向用户提供数据处理、转换以及数据可视化的能力。当前版本主要通过Suspicious、Threat Investigation、Story Board 三个视图页面提供针对Flow、DNS、Proxy 事件的可视化分析能力。此外,通过Ingest Summary Notebook 视图页面,提供了解指定时间段内数据采集情况的能力。
6.4.1 Suspicious 简介
Suspicious视图页面用于呈现Spot-ML 发现的可疑活动,主要由四个面板组成。
Suspicious面板以数据列表的形式展现Spot-ML 发现的可疑活动;Network View 面板以可视化的形式表现这些可疑活动;Details 面板用于挖掘某个可疑活动更为细节的信息。Notebook 面板提供一种专家能力,通过人为介入的方式修正或改善机器学习模型。
Netflow Suspicious:
DNS Suspicious:
Proxy Suspicious:
6.4.2 Threat Investigation 简介
Threat Investigation 视图页面是分析结果展示在Storyboard 之前的最后一步,安全分析师在这个页面对即将展示的分析结果进行最后一步核查。
暂无截图!
6.4.3 Storyboard 简介
Storyboard视图页面用于呈现系统最终的分析结果,供用户掌握高风险的安全威胁事件以及更进一步的信息。
Netflow Story Board:
DNS Story Board:
Proxy Story Board:
6.4.4 Ingest Summary 简介
Ingest Summary 用于了解系统的数据采集情况,可以查看采集的数据类型在指定时间段的数据量分布详情。
7. Apache Spot 环境&部署
7.1 基础环境
- CDH 5.7+
- Spark 2.1.0
- YARN
- Hive
- IMPALA
- KAFKA
- SPARK(YARN)
- Zookeeper
7.2 Docker 部署
下载镜像:
docker pull apachespot/spot-demo
启动镜像:
docker run -it -p 8889:8889 apachespot/spot-demo
访问地址:
http://localhost:8889/files/ui/flow/suspicious.html#date=2016-07-08
7.3 单机部署
Apache Spot 项目1.0 版本的成熟度还比较低,部署过程中需要人工安装、编译、配置若干基础组件,才能保证Spot 组件的正常运行。又因为Spot 当前的说明文档不够完善,对依赖的组件版本缺乏明确的说明,导致在部署过程中会浪费一些时间。
部署安装的大致流程为:
- Hadoop大数据环境部署
- Spot-setup初始化配置
- Spot-Ingest组件配置数据采集
- Spot-Ml组件编译、部署
- Spot-OA组件构建、部署
7.4 集群部署
Apache Spot 各组件推荐部署位置,结合5.4 服务视图查看:
Component | Node |
spot-setup | Edge Server (Gateway) |
spot-ingest | Edge Server (Gateway) |
spot-ml | YARN Node Manager |
spot-oa | Node with Cloudera Manager |
8. Apache Spot 数据采集
8.1 Proxy 数据采集
将Spot-Ingest 组件部署到Proxy 服务器上,通过编辑数据采集组件配置文件($SPOT_INGEST_HOME/ingest_conf.json)指定待采集Proxy 服务器的日志路径来完成Proxy 数据的采集。
8.2 Flow 数据采集
Spot-Ingest依赖spot-nfdump 解析流量数据包,可通过nfdump 工具包中的nfcapd 将接受netflow 数据并保存到指定的文件。
nfcapd 接收流量的方式示例:
nfcapd -b 0.0.0.0 -p 515 -4 -t 60 -w -D -l /data/spot/flow
注:绿盟IPS 可产生netflow 流量数据,在【系统】-> 【系统配置】—> 【NETFLOW配置】页面配置接收流量的地址即可。
8.3 DNS 数据采集
Spot-Ingest依赖tshark 解析DNS 数据包。
使用tshark 抓取DNS 数据包保存为pcap 文件示例:
tshark -i em1 -b filesize:2 -w dns-dump.pcap udp port 53
使用tcpdump 抓取DNS 数据包保存为pcap 文件示例:
tcpdump -i eth1 -nt udp dst port 53 -s 0 -G 5 -w "dns-dump_%Y%m%d%H%M%S".pcap -Z root
参考链接
1.Apache Spot Homepage
2.Apache Spot Docker Homepage
3.Apache Spot Open Data Model 1
4.Apache Spot Open Data model 2
5.Splunk Common Information Model