类型 | 内容 |
---|---|
标题 | OTTer: A Scalable High-Resolution Encrypted Traffic Identification Engine |
时间 | 2018 |
会议 | RAID |
DOI | 10.1007/978-3-030-00470-5_15 |
介绍
- 超过60%的移动App流量使用SSL/TLS加密
- Over-The-Top (OTT)
- 实现了一个系统,该系统能够从加密流量中提取基本信息
- 专注于使用数据包大小训练的模式来识别OTT应用程序事件,例如基于加密流量的消息传递,语音和视频呼叫
贡献:
- 提出一种实用的方法来收集、标记和分析由流行的移动OTT应用程序(例如Skype,WhatsApp,Facebook Messenger和Viber)生成的加密流量,以识别使用事件,例如信息发送,语音和视频通话
- 提出了一种模式语言来识别此类事件,该事件适用于DPI系统,但又具有足够的表达力来描述数据包元数据模式,因此我们通过实验来确认
- 讨论了模式语言的高性能实现,并与DPI引擎集成在一起,以针对大量实际网络流量评估其性能
- 证明了模式语言适合于从真实样本中自动挖掘
加密流量模式语言
表1展示了一个示例 Event|Application|Rule –|–|– Voice call|WhatsApp|3{1,3}, 56-60{1,3}, 400-800 Video call|WhatsApp|3{1,3}, 56-60{1,3}, 3{1,3}, 117 OR 3{1,3}, 56-60{1,3}, 3{1,3}, 144 Chat message|WhatsApp|3{1,3}, 52
规则语言规范 bound代表了最小和最大限制的重复次数。
expr ::= piece | piece, expr
piece ::= atom | atom{bound}
atom ::= number | number-number
bound ::= number | number,number
有效性验证
使用模式语言手动为应用程序生成一组签名
25%作为参考,75%用于准确性验证
数据流采样机制
Flow-to-Process匹配
使用netstat
来获取有关网络连接的信息,在Android设备中,通过BusyBox来使用netstat
命令
不断的调用netstat
并存储,将流和进程对应起来。
数据包过滤
TCP有一些机制来避免丢包,丢弃一些没有提供实质信息的数据包(例如需要重传的包)。
样本流量生成
设备:使用四台不同型号的安卓手机Sony Xperia D5503,红米3s,小米Note,红米Note3 Pro,并且获取Root权限。使用tcpdump在安卓设备上捕获流量。
OTT应用:WhatsApp、Skype、Facebook Messenger、Viber,专注于识别信息、语音、视频
总共收集了350个样本,每个样本模拟了任意数量的消息或单独的语音/视频呼叫。
准确率评估
命中率: TP 总体的准确率分别是93%,86%,84% 视频和语音准确率低的原因是因为降低FP的一个折中。
Application | Messaging | Voice | Video |
---|---|---|---|
Facebook Messenger | 83% | 96% | 96% |
Skype | 88% | 100% | 75% |
Viber | 100% | 54% | 88% |
100% | 92% | 75% |
误报率: False Positive
FDR=FP/(TP +FP)
Application | Messaging FDR | Voice / video FDR |
---|---|---|
Facebook Messenger | 0% | 1% |
Skype | 5.5% | 4.2% |
Viber | 1% | 2% |
8% | 0.6% |
实现与性能
高效自动机
Aho-Corasick算法是一种字符串搜索算法。可以快速在一个文本中查找多个关键字,时间复杂度是O(n)。
用16位数据包大小来查找。
算法的具体实现略过
对重叠范围进行预处理,提取非重叠的范围。
152-156{1,5},150-600
有重叠的区域,所以要划分为三个部分,150-151
,152-156
,157-600
152-156,150-151
152-156,152-156
152-156,157-600
152-156,152-156,150-151
152-156,152-156,152-156
152-156,152-156,157-600
152-156,152-156,152-156,150-151
152-156,152-156,152-156,152-156
152-156,152-156,152-156,157-600
152-156,152-156,152-156,152-156,150-151
152-156,152-156,152-156,152-156,152-156
152-156,152-156,152-156,152-156,157-600
152-156,152-156,152-156,152-156,152-156,150-151
152-156,152-156,152-156,152-156,152-156,152-156
152-156,152-156,152-156,152-156,152-156,157-600
DPI Engine 集成
一个规则的示例,以YAML格式呈现
facebook_video:
event: packet
conditions:
- port: 443
- packet_train: '399{1,2}, 51{1,2}, 1000-1260{1,2}, 38'
actions: ...
whatsapp_video:
event: packet
conditions:
- packet_train:
- '3{1,3}, 48-60{1,3}, 3{1,3}, 117'
- '3{1,3}, 48-60{1,3}, 3{1,3}, 144'
- '3{1,3}, 48-60{1,3}, 3{1,3}, 102'
性能验证
使用专有的DPI引擎在一个实时流量测试台上实验性地评估了整个系统的性能。
使用了一台HPE Proliant DL380 Gen9服务器,带有两个Intel Xeon E5-2699 v4 CPU,支持超线程,提供了88个逻辑核(lcore),并配置了1TB的RAM。
系统有4x40 Gbps NICs。使用了CentOS 7.4版本。
DPI引擎被配置为使用8个内核来处理来自四个端口的流量(每个端口两个内核)。 这些内核仅执行简单的数据包解码,以便在内部将流量负载平衡到配置为执行流量检查的58个内核。 这些是运行我们的实现的核心。 系统中的其余lcores专用于其他任务,例如日志记录和shell访问。
流量负载包括实际的移动用户流量,一天中流量的变化范围在52-153 Gbps之间,平均为109 Gbps。平均每秒有为161K个连接。 在整个实验中,我们确认了该系统没有出现丢包现象。
作者使用mpstat
查看CPU使用率,在一个时间段有130Gbps的流量,此时CPU使用率是34.2%,在启用拓展后,CPU使用率上升到了37.6%。使用Perf
工具检查函数extension_packet_train_multiset_match
,测量的结果也是占用3%。即该扩展对性能的占用很小。
增加签名数量1-20,对CPU额外的占用率在2.7%-3%之间
自动规则挖掘
规则挖掘方法
应用频繁模式挖掘(frequent pattern mining ,FPM)
步骤:
- 预处理:筛选与进程id不符的数据包和TCP重传的数据包。
- 数据包统计:统计数据包出现的频率,将出现频率大于阈值的包映射到一个唯一标识符。其余的包按负载按长度被分到四个相同大小的桶中。这一步是为了应对负载的长度是变化的,例如消息中的长度有长有短。
- 轨迹分割:数据包按间隔被切分为一个突发事件的流量,间隔小于一定阈值(1秒)。如果阈值设置的过大,可能一个突发事件中会有多个聊天消息。这些序列被用作FPM的输入。
- 频繁模式挖掘:使用ClaSP算法
- 规则生成:通过识别哪些闭合序列模式与基本真实事件匹配来生成规则。
对于不同方向的包,加一个负号来表示负载大小。
规则挖掘评估
TP rate
Application | Messaging | Voice | Video |
---|---|---|---|
Facebook Messenger | 42% (-41) | 54% (-42) | 83% (-13) |
Skype | 100% (+12) | 96% (-4) | 100% (+25) |
Viber | 100% (0) | 96% (+42) | 100% (+12) |
100% (0) | 100% (+8) | 100% (+25) |
FDR
Application | Messaging FDR | Voice/video FDR |
---|---|---|
Facebook Messenger | 0% (0) | 3% (+2) |
Skype | 2% (-3.5) | 8.4% (+4.2) |
Viber | 3% (+1) | 2% (0) |
2% (-6) | 3.3% (+2.7) |
WhatsApp的消息活动数据包捕获。垂直线表示实际传出的聊天消息,而Main和FPM点显示检测到的事件。
下图展示了漏报和误报