“Coming up with features is difficult, time-consuming, requires expert knowledge. 'Applied machine learning' is basically feature engineering”(特征提取不仅困难而且耗时,同时需要专家知识。应用机器学习本质上是特征工程). - Andrew Ng
特征提取是分析加密流量的关键,也是机器学习流水线最为耗时的一个步骤。识别TLS协议并提取特征非常困难,不仅需要精通TLS协议同时工作量巨大,并且要处理真实网络流量的错误数据、未遵循协议规范等复杂场景。数据科学家们关注结构化数据,而非二进制流量。
TLSfeat是一款面向数据科学家和研究人员使用的自动化、高性能、全维度加密流量特征提取软件,旨在显著减少特征提取时间,加速机器学习模型构建。 TLSfeat可在Linux、OSX等操作系统以及x86、M1等指令集运行,并已在大量公开数据集进行测试。
TLSfeat是一款免费软件,使用的许可证为CC BY-NC-ND 4.0。软件二进制包(x86_64 Linux)及文档下载地址:TLSfeat使用非常简单,一条命令行即可提取文件夹所有pcap全部特征,并生成机器友好的JSON文件。
tlsfeat -d /opt/pcaps -o /opt/featsout -t 8
给定client random和premaster key,TLSfeat可实现自动化批量解密TLS流量,生成机器友好的JSON输出。该功能目前在测试中,支持TLS 1.2。TLSfeat解密功能 解决了Wireshark无法批量自动化解密等问题。
TLSfeat已在公开数据集进行大量测试(表格数据来源测试文档 )。
下表展示了TLSfeat提取特征,以及TLSfeat与Joy和Zeek的对比。
基础特征
特征名 | 特征描述 | 示例 | TLSfeat | Joy | Zeek |
---|---|---|---|---|---|
stream_index | TLS流在pcap序列号 | 3 | ✅ | ❌ | ❌ |
src_ip | 源IP | "192.168.0.102" | ✅ | ✅ | ✅ |
dest_ip | 目标IP | "8.8.8.8" | ✅ | ✅ | ✅ |
src_port | 源端口 | 65543 | ✅ | ✅ | ✅ |
dest_port | 目标端口 | 443 | ✅ | ✅ | ✅ |
timestamp | TLS流第一个包时间戳(纳秒) | 1609779662027198000 | ✅ | ✅ | ✅ |
duration | TLS流持续时间(秒级) | 3.418913024 | ✅ | ✅* | ✅ |
统计特征
特征名 | 特征描述 | 示例 | TLSfeat | Joy | Zeek |
---|---|---|---|---|---|
pkt_num | 包数 | 498 | ✅ | ✅ | ✅ |
pkt_up_num | 上行包数 | 167 | ✅ | ✅ | ✅ |
pkt_down_num | 下行包数 | 331 | ✅ | ✅ | ✅ |
pkt_len_sum pkt_len_max pkt_len_min pkt_len_mean pkt_len_std |
包总字节数 包最大字节数 包最少字节数 包平均字节数 包字节数方差 |
468196.0 1514.0 54.0 940.15261044 644.58199213 |
✅ ✅ ✅ ✅ ✅ |
✅ ❌ ❌ ❌ ❌ |
✅ ❌ ❌ ❌ ❌ |
pkt_len_up_sum pkt_len_up_max pkt_len_up_min pkt_len_up_mean pkt_len_up_std |
上行包总字节数 上行包最大字节数 上行包最少字节数 上行包平均字节数 上行包字节数方差 |
9397.0 227.0 54.0 56.26946108 16.96471757 |
✅ ✅ ✅ ✅ ✅ |
✅ ❌ ❌ ❌ ❌ |
✅ ❌ ❌ ❌ ❌ |
pkt_len_down_sum pkt_len_down_max pkt_len_down_min pkt_len_down_mean pkt_len_down_std |
下行包总字节数 下行包最大字节数 下行包最少字节数 下行包平均字节数 下行包字节数方差 |
458799.0 1514.0 54.0 1386.09969789 178.69711171 |
✅ ✅ ✅ ✅ ✅ |
✅ ❌ ❌ ❌ ❌ |
✅ ❌ ❌ ❌ ❌ |
pkt_iat_sum pkt_iat_max pkt_iat_min pkt_iat_mean pkt_iat_std |
包到达时间总和 包最大到达时间 包最小到达时间 包平均到达时间 包到达时间方差 |
468196.0 1514.0 54.0 940.15261044 644.58199213 |
✅ ✅ ✅ ✅ ✅ |
❌ ❌ ❌ ❌ ❌ |
❌ ❌ ❌ ❌ ❌ |
pkt_iat_up_sum pkt_iat_up_max pkt_iat_up_min pkt_iat_up_mean pkt_iat_up_std |
上行包到达时间总和 上行包最大到达时间 上行包最小到达时间 上行包平均到达时间 上行包到达时间方差 |
468196.0 1514.0 54.0 940.15261044 644.58199213 |
✅ ✅ ✅ ✅ ✅ |
❌ ❌ ❌ ❌ ❌ |
❌ ❌ ❌ ❌ ❌ |
pkt_iat_down_sum pkt_iat_down_max pkt_iat_down_min pkt_iat_down_mean pkt_iat_down_std |
下行包到达时间总和 下行包最大到达时间 下行包最小到达时间 下行包平均到达时间 下行包到达时间方差 |
468196.0 1514.0 54.0 940.15261044 644.58199213 |
✅ ✅ ✅ ✅ ✅ |
❌ ❌ ❌ ❌ ❌ |
❌ ❌ ❌ ❌ ❌ |
SPLT时序特征
特征名 | 特征描述 | 示例 | TLSfeat | Joy | Zeek |
---|---|---|---|---|---|
mc_len | 包长度时序特征 |
[0.03571429, 0.00595238, ...] |
✅ | ❌ | ❌ |
mc_time | 包到达时间特征 |
[0.97101449, 0.01242236, ...] |
✅ | ❌ | ❌ |
载荷特征
特征名 | 特征描述 | 示例 | TLSfeat | Joy | Zeek |
---|---|---|---|---|---|
bd_dist | 载荷字节分布 |
[0.00414469, 0.00409936, ...] |
✅ | ✅ | ❌ |
bd_std | 载荷方差 | 0.00010651 | ✅ | ✅ | ❌ |
bd_entropy | 载荷墒 | 7.99946506 | ✅ | ✅ | ❌ |
TLS特征
特征名 | 特征描述 | 示例 | TLSfeat | Joy | Zeek |
---|---|---|---|---|---|
tls_version | TLS版本 | TLSv1.2 | ✅ | ✅ | ✅ |
tls_client_cs | TLS候选加密套件 | ["TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA",...] |
✅ | ✅ | ❌ |
tls_num_client_cs | TLS候选加密套件数量 | 21 | ✅ | ✅ | ❌ |
tls_server_cs | TLS加密套件 | TLS_ECDHE_RSA_WITH _AES_128_CBC_SHA256 |
✅ | ✅ | ✅ |
tls_certs_num | 证书数量 | 2 | ✅ | ✅ | ✅ |
tls_server_name | SNI(Server Name Indicator) | "admink.com" | ✅ | ✅ | ✅ |
证书特征
特征名 | 特征描述 | 示例 | TLSfeat | Joy | Zeek |
---|---|---|---|---|---|
version | 版本号 | 3 | ✅ | ✅ | ✅ |
serial | 序列号 | "09F26104C9915B4002221385C422A23A" | ✅ | ✅ | ✅ |
not_before | 生效时间 | 2020-12-25 00:00:00 | ✅ | ✅ | ✅ |
not_after | 过期时间 | 2021-12-24 23:59:59 | ✅ | ✅ | ✅ |
validity_days | 有效时间(天数) | 365 | ✅ | ✅ | ✅ |
issuer_country issuer_state issuer_city issuer_org issuer_org_uni issuer_common |
颁发者信息 | "TrustAsia TLS RSA CA" | ✅ | ✅ | ✅ |
subject_country subject_state subject_city subject_org subject_org_uni subject_common |
主体信息 | "admintk.com" | ✅ | ✅ | ✅ |
pubkey | 公钥类型 | RSA | ✅ | ✅ | ✅ |
pubkey_len | 公钥长度 | 2048 | ✅ | ✅ | ✅ |
pubkey_param | 公钥参数 | 65537 | ✅ | ✅ | ✅ |