CCS 2021 | 自动化网络流量分析新方向

  • 一、摘要
  • 二、nPrint
  • 三、nPrintML
  • 四、实验
    • 4.1 Overview
    • 4.2 主动设备指纹识别(Active Device Fingerprinting)
    • 4.3 被动操作系统指纹识别(Passive OS Fingerprinting)
    • 4.4 DTLS 应用识别(DTLS Application Identification)
    • 4.5 其他实验(Additional Case Studies)
      • 4.5.1 netML 挑战赛(netML Challenge Examples)
      • 4.5.2 移动应用来源分类(Mobile Country of Origin)
      • 4.5.3 流媒体视频提供商识别(Streaming Video Providers)
  • 五、总结
论文名称 New Directions in Automated Traffic Analysis
录用信息 CCS 2021(CCF-A)
作者 Jordan Holland, Paul Schmitt, Nick Feamster, Prateek Mittal
团队 普林斯顿大学信息技术政策中心
芝加哥大学网络运营和互联网安全实验室
源码 https://github.com/nprint/nprint
数据集 https://drive.google.com/drive/folders/158Lwb9TwopIJ0lGPuFik5744qPiqrg9F

一、摘要

机器学习技术被广泛的应用在入侵检测、应用程序识别等网络流量分析任务中。然而在使用机器学习方法时,特征表示、模型选择和参数调整等过程仍然需要大量的人力成本和专业知识。此外,流量模式会不断的发生变化,使得模型和人工提取的特征过时。因此,本文提出一种自动化流量分析方法(nPrintML),使机器学习技术更容易应用于更广泛的流量分析任务。nPrintML 包含 nPrint 流量表示和 AutoML 两部分,首先 nPrint 通过对 IP 数据包头进行对齐和拼接形成统一的数据表征,然后使用 AutoGluon-Tabular 框架进行自动化的进行特征提取、模型搜索和超参数优化。作者在 8 个不同的流量分析任务上对 nPrintML 进行评估,都取得了很好的效果。

二、nPrint

在应用机器学习方法时,对数据进行编码是非常重要的一环。为了实现上述提出的目标,数据编码需要满足以下要求:

  • 完整性(Complete):我们的目的是找到一种统一的数据编码,而不依赖于专家知识,所以该编码方式需要包含数据包的所有信息。
  • 不变性(Constant size per problem):机器学习模型要求输入的数据保持同样大小。因此,对于不同的数据包,也应该有相同的数据表征。
  • 归一性(Inherently normalized):归一化可以减少模型的训练时间并提高模型的稳定性,因此数据表征应该是经过归一化的。
  • 一致性(Aligned):不同数据包头的同一部分在编码后应该位于同样的位置。

首先来看传统的流量数据包头:

从图 2 可以看出,不同的网络协议(如 TCP 和 UDP)有着不同的数据表示方案,甚至相同的网络协议(如 IP)也不相同(是否包含 Options 选项),这显然无法满足上述需求。因此,作者提出了一个标准化的数据包表征方法:nPrint(图 3)。

nPrint 使用每种协议允许的最大包头长度来表示该协议,同时将不同协议头部拼接组合成固定长度的包头。因此,nPrint 符合了上述几个性质:完整性(理论上可以包含所有协议)、不变性(数据表征可以是一个确定的长度)、归一性(数据被表示为 1/0/-1)、一致性(不同数据包头的同一选项在同一位置)。

三、nPrintML

作者将 nPrint 与 AutoGluon-Tabular 框架相结合,提出 nPrintML,实现了机器学习自动化的流程(图 1)。

AutoGluon-Tabular:一个 Aws 开源的 AutoML 框架,仅需要几行代码即可在未预处理的表格型数据(如 csv)上训练高精度的机器学习模型。(AutoGluon 也支持处理非结构化数据)

关于 AutoGluon 的详细介绍见 [5],[6],[7]。

四、实验

4.1 Overview

作者在 8 个不同的网络流量分析任务上进行实验分析,结果表明(表 1):nPrintML 可以应用于不同场景,相较于对比方法能够取得更好的性能:

4.2 主动设备指纹识别(Active Device Fingerprinting)

Nmap 通过发送一些探针到目标主机进而判断其设备指纹,作者修改 Nmap 使其输出每个探针的原始响应内容,nPrintML 使用 Nmap 产生的原始响应为每个设备构建一个 nPrint。

Comparison method:Nmap

Input:21 个 packets 组成的 nPrint,即探针的响应数据

Dataset:Holland et al. 2020 + 使用 Shodan 标注的 4 种 IoT 设备

Packet Transformation and Data Representation

nPrint 配置为使用 IPv4、TCP 和 ICMP 头((60+60+8) Bytes = 1024 bit = 1024 个特征)。nPrintML聚合来自每个设备的所有响应,为每个设备创建一个包含 21 个数据包的 nPrint(为什么是 21 个数据包?)。

Nmap 开发了一系列复杂的测试(表 10),将每个探针的响应转换为指纹。本文使用两种方式来使用这种指纹进行评估:

  1. Nmap 将生成的指纹与其数据库进行比较,对远程设备进行分类(Nmap Direct/Nmap Aggressive)。
  2. 使用指纹和对每个测试编码的类别特征(categorical feature)创建一个特征向量,用于 AutoML 训练和验证(ML-Enhanced Nmap)。

先前研究[3]表明 Nmap 首先扫描设备上 1000 个最常见的开放端口以找到一个开放端口。然后向设备发送 16 个探针,其中 10 个用来探测开放端口,6 个(3 TCP + 1 UDP + 2 ICMP)用来探测关闭的端口。

Conclusion:

1) Nmap’s heuristics perform poorly for some devices.
表 2 显示了 Nmap 直接输出设备猜测结果(Nmap Direct)和多种探针加权聚合结果(Namp Aggressive)两种方法的对比情况。结果表明:Nmap 在 Cisco、Juniper 和 Adtran 设备分类上具有较高的精度和相对较低的召回率,此外,Nmap 在整个数据集上的其他设备分类上效果都很差。

2) nPrintML outperforms an AutoML-enhanced Nmap.
为了更好的比较 nPrint 和 Nmap 长期积累的特征提取技术,作者在每个经过 one-hot 的 Nmap 指纹上使用 AutoML 进行指纹识别,替代了原有的结果生成方案(heuristic)。同时,在每个设备产生的 nPrint 表征上运行 nPrintML。表 3 显示了 Nmap 和 nPrintML 的最高性能分类器的平均精度。结果表明,在 nPrint 表征方法上训练的模型不需要手动的特征工程就可以区分设备,而且 nPrintML 的性能优于 Nmap。

表 4 显示了 Nmap 和 nPrintML 的最佳模型性能,可以发现 nPrintML 在每个指标上都优于 Nmap 长期积累的特征。

表 5 显示了 Nmap 和 nPrintML 两个性能最高的模型的训练和推理时间。

图 4 显示了从使用 nPrintML 训练的随机森林模型中收集的特征重要性热力图。可以发现,探针响应数据包的 TCP 源端口是对设备供应商进行分类的最重要的特征之一。此外,我们还看到 IP TTL 和 TCP 窗口大小有助于识别设备。

4.3 被动操作系统指纹识别(Passive OS Fingerprinting)

Comparison method:p0f

Input:1/10/100 个数据包组成的 nPrint(表示不同识别难度)

Dataset:CIC-IDS 2017(13 种可用的操作系统流量)

Packet Transformation and Data Representation:使用每种设备的前 100,000 个数据包,将它们划分为 1、10、100 数据包的样本集(即 100,000 个包含 1 个数据包的 Pcap,10,000 个包含 10 个数据包的 Pcap 和 1000 个包含 100 个数据包的 Pcap),也就产生了 3 个独立的分类问题。同时,为这些流量样本生成仅含有 IP 和 TCP 头部的 nPrint 表征,删除其中的 IP 源地址、IP 目标地址、IP 标识、TCP 源和目标端口以及 TCP 序列号和确认号,避免模型记住这些字段而不是学会区分。
p0f 从每个数据包中提取一些字段,并将提取的值与指纹数据库进行比较,为提取的字段找到匹配的操作系统。

Conclusion

1) nPrintML can perform OS classification with high recall and few packets.
表 6 显示了 3 个实验的精度和召回率。 结果表明 p0f 生成的设备信息粒度较粗(如 p0f 将所有 Ubuntu 设备和 Web Server 分类为“Linux 3.11 及更高版本”,将所有 Windows 设备分类为“Windows 7 或 8”)。此外,随着 p0f 访问的数据包数增多,其性能通常会不断提高,但其召回率整体都很低。nPrintML 相比而言,精度和召回都很高(使用 p0f label),即使只有 1 个数据包。

图 5 显示了从使用 nPrintML 训练的性能最高的随机森林模型中收集的特征重要性热力图。对于 IPv4 包头,最重要的特性是 TTL 字段,其次是 ID 字段。这些结果证实了过去的一些经验,即 TTL 和 ID 可用于操作系统检测,因为不同的操作系统对这些字段使用不同的默认值。在 TCP 报头中,窗口大小字段是最重要的特征。此外还可以观察到,TCP 选项中的某些位有助于确定操作系统,因为某些操作系统默认包括特定选项,如最大段大小(maximum segment size)、窗口缩放(window scale)或 SACK(selective acknowledgement permitted)。

2) nPrintML can reveal fine-grained differences in OSes.
接下来,作者使用了相同的 100-packet 样本来验证在 nPrint 表征上训练的模型是否能够在更细粒度的级别上实现自动化被动操作系统检测(13 个类别的分类任务)。图 6a 显示了最高性能模型的 PR 曲线。 图 6b 更详细地展示了模型分类结果的混淆矩阵。尽管细粒度分类的精度不如粗粒度,但几乎所有的错误都出现在同一个操作系统大类中(合理)。

3) nPrintML differentiates OSes, not simply devices.
为了验证 nPrintML 是否能够检测操作系统,而不是学习识别网络上的特定设备,作者构建了一个实验,使用数据集中的五台 Ubuntu 主机和五台 Windows 主机设置一个二分类任务,并且迭代地从两个列表中选择对来训练模型,并针对列表中的其余主机进行测试。结果表明无论使用哪一对设备进行训练,nPrintML 都能以完美的准确率、ROC AUC 和 F1-Score 区分 Ubuntu 和 Windows 机器。这是由于模型学习到了两个操作系统设置的初始 IP TTL 不同。

不同类型的操作系统,默认的起始 TTL 值是不同的[8]:

  • windows:128(65-128)
  • linux/unix:64(1-64)
  • 某些 Unix:255

最后,为了确保 nPrint 不会通过设备的 TTL 值来记住主机在网络中的位置,作者将 TTL 统一设置为初始值进行了实验,结果(图 7)表明错误仍然发生在操作系统大类的内部。

p0f 使用沿路径的位置作为特征。p0f 尝试通过 64、128 或 255 三种值来猜测初始 TTL,然后使用递减的 TTL 计算距离初始 TTL 的“距离”

4.4 DTLS 应用识别(DTLS Application Identification)

Input:DTLS 握手包组成的 nPrint

Dataset:Kyle MacMillan et al. 2020(来自 Firefox 和 Chrome 的 4 种约 7000 次的 DTLS 握手包:Facebook Messenger、Discord、Google Hangouts 和 Snowflake)本文设计为 7 分类任务。

Comparison method:Kyle MacMillan et al. 2020(作者参与的另一项工作,人工提取特征)

Packet Transformation and Data Representation:将握手包转换为 nPrint 表征,同时在多种配置(表 1)下测试 nPrintML。

Conclusion:

1) nPrintML can automatically detect features in a noisy environment.
在 nPrint 表征上训练的加权集成分类器获得了完美的 ROC AUC 分数、99.8% 的准确率和 99.8% 的 F1-Score。nPrintML 几乎可以完美地识别生成每次握手的<浏览器,应用程序>对。虽然在以前的工作中,手动设计的特征可以达到相同的精度,但 nPrintML 完全避免了模型选择和特征设计。此外,表 1 还显示,在 nPrint 表征上训练的模型可以仅使用每个数据包中的 UDP 报头以高精度执行此任务。

2) nPrintML performs well across models and trains quickly.
表 8 显示了每个经过训练的非集成分类器和总体性能最高的加权集成分类器在测试数据集上的 F1-Score、训练时间和总推断时间。nPrint 表征可跨模型工作,推理和训练时间与模型相关。

3) nPrintML can be used to understand semantic feature importance.
图 8 显示了从 nPrint 表征上训练的性能最高的随机森林模型中收集的特征重要性热力图。在该场景下,头部的长度信息和 DTLS 有效载荷中的信息在很大程度上决定了 nPrintML 的性能。

4.5 其他实验(Additional Case Studies)

4.5.1 netML 挑战赛(netML Challenge Examples)

使用 netML 流量分析挑战赛数据集,包含三个场景:入侵检测、物联网设备恶意软件检测和流量识别。实验结果见表 1,在每项任务中,除了 IoT 恶意流量分析的一个场景外,nPrintML 的性能都优于 netML排行榜上性能最高的模型(不公平的比较:netML 挑战赛只给出了统计特征,但作者使用了原始的数据包)。作者还提供了复现的具体命令:

# Intrusion Detection
$ nprintml -L labels.txt -a pcap --pcap-dir traffic_flows/ -4 -t -u -c 5 -x "ipv4_src.*|ipv4_dst.*"# Malware Detection
$ nprintml -L labels.txt -a pcap --pcap-dir traffic_flows/ -4 -t -u -c 10 -x "ipv4_src.*|ipv4_dst.*"# Traffic Identification(No Payload bytes)
$ nprintml -L labels.txt -a pcap --pcap-dir traffic_flows/ -4 -t -u -c 5 -x "ipv4_src.*|ipv4_dst.*"# Traffic Identification(10 Payload bytes)
$ nprintml -L labels.txt -a pcap --pcap-dir traffic_flows/ -4 -t -u -p 10 -c 5 -x "ipv4_src.*|ipv4_dst.*"

作者此处没有给出使用 Payload 和不使用 Payload 的性能对比

4.5.2 移动应用来源分类(Mobile Country of Origin)

使用 Cross Platform 数据集[4]确定移动应用程序流量来源国家(中国、美国、印度)。nPrintML 可以使用每个数据包的 IPv4、TCP 和 UDP 报头以 96% 以上的准确率执行此任务。

$ nprintml -L labels.txt -a pcap --pcap-dir application_traces/ -4 -t -u -p 50 -c 25 -x " ipv4_src.*|ipv4_dst.*"

4.5.3 流媒体视频提供商识别(Streaming Video Providers)

仅使用 SYN 数据包能够以 98% 的准确率识别流媒体服务提供商(Netflix、YouTube、Amazon 和 Twitch)。数据集来自本文第三作者先前参与的工作。

$ nprintml -L labels.txt -a pcap --pcap-dir video_traces -4 -t -u -R -c 25 -f "tcp[13] == 2"

五、总结

Contributions:

  • 为自动化流量提供了一种新的方向。提出一种统一的网络数据包表征方法 nPrint;
  • 将 nPrint 与自动化机器学习工具 AutoGluon 相结合,提出 nPrintML,实现了自动化流量分析;
  • 在 8 个不同流量分析场景进行了实验评估,结果表明 nPrintML 可以更好地获取网络流量的特征信息,nPrintML 获取的机器学习模型在性能上比传统特征工程得到的机器学习模型更加优越。

Deficiencies:

  • 面对流量的加密化趋势,越来越多的工作转向使用流级别的序列信息或统计信息进行流量分析,nPrint 表征方法对流级别的序列信息提取几乎没有帮助;
  • 作者的分类问题设计的普遍比较简单,缺少和最先进的流量分析方法(基于机器学习技术)的比较,而且使用加密后的 Payload 进行分类也很难解释;
  • AutoML 技术当前存在的一些缺点也会影响到流量分析任务,如何自动化构建更复杂的模型、如何基于数据构建更复杂的关系(跨流捕获时间关系)等都是未来需要改进的方向。

附录:

1. nPrint 配置选项

-4, --ipv4                       include ipv4 headers
-6, --ipv6                      include ipv6 headers
-A, --absolute_timestamps       include absolute timestmap field
-c, --count=INTEGER            number of packets to parse ( if not all )
-C, --csv_file=FILE            csv (hex packets) infile
-d, --device=STRING            device to capture from if live capture
-e, --eth                       include eth headers
-f, --filter=STRING            filter for libpcap
-F, --fill_int=INT8_T          integer to fill missing bits with
-h, --nprint_filter_help        print regex possibilities
-i, --icmp                      include icmp headers
-N, --nPrint_file=FILE             nPrint infile
-O, --write_index=INTEGER      Output file Index (first column) Options :0: source IP (default)1: destination IP2: source port3: destination port4: flow (5-tuple)
-p, --payload=PAYLOAD_SIZE         include n bytes of payload
-P, --pcap_file=FILE           pcap infile
-R, --relative_timestamps       include relative timestamp field
-S, --stats                     print stats about packets processed when finished
-t, --tcp                       include tcp headers
-u, --udp                       include udp headers
-V, --verbose                   print human readable packets with nPrints
-W, --write_file=FILE          file for output , else stdout
-x, --nprint_filter=STRING         regex to filter bits out of nPrint . nprint -h for details
-?, --help                      Give this help list--usage                  Give a short usage message--version                     Print program version

2. nPrintML 示例

作者提供了一个从头开始复现 4.4 节中结果的示例。

1)克隆存储库以获取数据

$ git clone repo_name

2)解压缩流量数据

$ tar -xvf dataset.tar.gz

3)编写一个脚本来生成标签

# Generate Labels, not necessary if labels exist
import sys
import pathlib# Example file name: dataset/facebook/windows_chrome_facebook_1383.pcap
# Get file paths
paths = list(pathlib.Path(sys.argv[1]).rglob('*.pcap'))
for path in paths :# Build labeltokens = str(path.stem).split('_')label = '{0}_{1}'.format(tokens[0], tokens[1])print('{0},{1}'.format(path, label))

4)运行标签生成脚本

$ python gen_labels.py dataset/ > labels.txt

5)运行 nPrintML 执行流量分析

# IPv4, UDP, first 10 payload bytes of each packet:
$ nprintML -L labels.txt -a pcap --pcap_dir dataset/ -4 -u -p 10# First 100 payload bytes of each packet:
$ nprintML -L labels.txt -a pcap --pcap_dir dataset/ -p 100# UDP headers only:
$ nprintML -L labels.txt -a pcap --pcap_dir dataset/ -u

参考资料

  1. Holland J, Schmitt P, Feamster N, et al. New directions in automated traffic analysis[C]//Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security. 2021: 3366-3383.
  2. Erickson N, Mueller J, Shirkov A, et al. Autogluon-tabular: Robust and accurate automl for structured data[J]. arXiv preprint arXiv:2003.06505, 2020.
  3. Holland J, Teixeira R, Schmitt P, et al. Classifying Network Vendors at Internet Scale[J]. arXiv preprint arXiv:2006.13086, 2020.
  4. Ren J, Dubois D J, Choffnes D. An International View of Privacy Risks for Mobile Apps[J]. 2019.
  5. https://mp.weixin.qq.com/s/QCTGWcL01DZ3sQYh4wQxGw
  6. https://www.freesion.com/article/4292383268/
  7. https://www.bilibili.com/video/BV1F84y1F7Ps/
  8. https://mp.weixin.qq.com/s/nCkqGmmVmUcGV1pxhLnFjg
  9. https://blog.csdn.net/weixin_43876557/article/details/106351768

CCS 2021 | 自动化网络流量分析新方向相关推荐

  1. 网络协议分析与仿真课程设计报告:网络流量分析与协议模拟

    公众号:CS阿吉 网络协议分析与仿真课程设计报告  题  目:网络流量分析与协议模拟 专业名称:         网络工程 班    级: 学生姓名:           阿吉 学号(8位): 指导教 ...

  2. 开源了!爱奇艺网络流量分析引擎QNSM及其应用

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 ▌导读 一定业务规模的互联网公司的基础设施的网络边界通常都呈现一定程度的复杂多分区的情 ...

  3. 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl

    Android官网使用指南性能:https://developer.android.com/topic/performance 一.APP启动性能分析 APP的启动过程 调用起APP.创建一个空白窗口 ...

  4. 网络流量分析与Android逆向小结

    本章对之前的网络流量分析与Android逆向做个小结. 网络流量分析 原理解析 分析原理前之前先了解中间人攻击的概念:在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信.攻击机以自己的证书替代服 ...

  5. 网络流量分析详解(包含OSI七层模型、TCP协议及Wireshark工具用法)

    网络流量分析 Network Traffic Analysis(NTA) 这个系列讲的是整个网络流量分析流程,其中包含TCP协议.HTTP协议详解和Wireshark.Tcpdump的详细用法,现在只 ...

  6. 开源 | 爱奇艺网络流量分析引擎QNSM及其应用

    ▌导读 一定业务规模的互联网公司的基础设施的网络边界通常都呈现一定程度的复杂多分区的情况,如何进行有效的安全防护和控制会成为安全体系建设的重点和难点.面对这一挑战,爱奇艺安全团队自研了网络流量分析引擎 ...

  7. 日志,Agent,网络流量分析-性能监控的三大流派详解

    性能监控主要通过数据采集-数据分析-数据展示-故障告警来实现,其中,数据采集是性能监控的第一步,也是最为关键的一步. 不同数据采集方式获得的数据类型和颗粒度是不同的,不同的数据源能够分析出的指标类型也 ...

  8. 网络流量分析神器:SecBI

    本文讲的是网络流量分析神器:SecBI ,网络流量分析工具早已广为使用,可提升企业网络效率,定位未使用的容量和带宽,消除瓶颈.最近此类工具也被列入了网络安全工具范畴.这很容易理解,因为除了内部人威胁, ...

  9. 企业为什么需要网络流量分析

    摩卡网络流量分析(Mocha Network Traffic Analyzer)是一个综合网络分析系统,它通过捕获并分析网络中传输的数据包,有效反映网络通讯状况,帮助网络管理人员或非网络管理人员快速准 ...

  10. 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...

    企业网络每天都会产生大量数据.企业可以分析这些数据,以深入了解网络运行情况或发现安全威胁.网络流量分析(NTA)解决方案允许网络管理员收集流经网络的流量数据.这些工具通常用于识别性能问题和/或发现安全 ...

最新文章

  1. linux开启ftp
  2. java开发面试复试_java开发实习生面试经历
  3. Java基础:类加载器
  4. react 技术栈项目轻量化方案调研
  5. CDC之CreateCompatibleDC与BitBlt
  6. SQLIntegrityConstraintViolationException: 异常解决
  7. mysql数据异常增长_mysql表到一定数据量后会异常的增长
  8. android体系结构中每层的功能,Android体系结构
  9. pytorch nn.Module.parameters
  10. ZOJ3944People Counting暴力/枚举
  11. poi 导出excel 中合并单元格
  12. sql 通过游标 拆分xml结构
  13. React.js及React Native知识及实践
  14. LINUX下载编译libspeex/libspeexdsp
  15. 485.最大连续1的个数(力扣leetcode) 博主可答疑该问题
  16. like语句太慢 sqlserver_SQLSERVER查询速度慢的原因收集以及优化建议
  17. django基础(四)详解Views视图层
  18. 基于Springboot和Mybatis的文件上传与下载
  19. html圆形头像简易实现
  20. qq安全保护进程更改计算机,QQ安全中心

热门文章

  1. Linux服务器入侵预防与问题排查
  2. React路由ReactRouter6
  3. mysql:Prepared statement needs to be re-prepared解决办法
  4. 快速判断工作簿中是否存在指定工作表
  5. 电源电流测试软件,如何使用分流器进行测试直流电源电流?
  6. day0学习开始,起于markdown
  7. sublime text 3211 安装中文包
  8. 使用python搜索Excel表,查找内容
  9. android 图片 灰色,Android实现制作灰色图片
  10. 安卓view.getMeasuredHeight()得到的高度单位以及dp和px的转换