USENIX2022 FOAP 细粒度app流量识别

FOAP: Fine-Grained Open-World Android App Fingerprinting

开放世界的app指纹细粒度识别,其中第一开放世界是指对新类别的app进行识别,第二细粒度指的是对app内部特定UI操作的识别。

1、Workflow of FOAP

识别方法级别的用户操作从加密流量的开放环境中

训练阶段:

1、网络流打标签

自动或者手动运行app,收集app的流量,也就是日志(采集的截图代码日志等)和pcap文件

首先需要确定一条网络流是否来自app,这样就打上应用级别的标签,然后对触发这条网络流的这个UI操作进行识别并打上标签,这样构建训练集。

由于一条网络流可能包含多个流内的簇,也就是多个操作共享了一个流,作者吧一条流分成多个brust,然后多个brust进行特征提取构建指纹库,以进行匹配实现操作级别的识别。

识别阶段:

1、流分段(Traffic Segmentation)

就是一条长连接的流,里面可能有许多操作,但是可以被时间所分割,每个流分段与app的指纹库进行相似性计算,来匹配是否属于这个app

2、流过滤(Traffic Segmentation)

通过流特征模式挖掘,确实一个流段是否模式匹配某个app,基本是通过结构相似性判断,过滤出属于某个app的流量,这个模块可以被称为模式库匹配

3、流识别

构建了一个双层识别模型来识别相关流量段中的网络流是否由 A 生成。该模型不仅考虑了网络流的特征向量,还考虑了来自周围网络流的上下文信息。识别准确率更高

4、用户操作级别的识别

方法级用户操作识别(第 6 节)推断哪些入口点(EP)方法触发 A 的网络流来表征细粒度的用户操作。与持久连接对应的网络流通常包含多个数据包突发,即流入突发,每个突发都可能由不同的 EP 方法触发。对应于短连接的网络流通常只包含一个由 EP 方法触发的流入突发。为了识别 EP 方法,我们首先提取流入突发及其特征向量。接下来,我们构建了一个时空上下文模型来表征相关的内部流brust,从而实现细粒度的用户操作的识别,就是按钮点击等等。

2、Network Flow Labeling

为了构建开放世界应用程序流量识别和方法级用户动作识别的训练数据集,我们捕获测试应用程序生成的网络流,并用应用程序和 EP 方法(即组件生命周期或 UI 回调)标记每个网络流) 生成它。为此,我们使用 Android 框架来 i) 提取套接字信息以关联网络流,ii) 检索进程标识符 (PID) 以获得包名称并收集堆栈跟踪以确定 EP 方法。收集到的数据写入logcat。

Correlating Network Flow to App:这个就是应用级别的标签,通过查找 /proc/PID/cmdline file

Correlating Network Flow to EP Method: 这个是操作级别的标签,他这里说的是,UI操作会新启动一个线程,新线程执行网络操作,这样我们可以将线程与 EP 方法相关联,如果 TID 等于调用套接字相关函数时检索到的 TID,我们将 EP 方法与生成的网络流相关联。

也就是说,监控线程堆栈,如果再UI操作的这个时间点新创建的线程,这个线程时间点的网络流匹配。

还有不新建线程的情况,而是复用线程进行socket的操作

这里比较繁琐先略过,就是细粒度打标签的过程。

3、Traffic Feature Extraction

尽管一些研究利用深度学习模型来自动提取交通特征,但深度学习模型需要大量的训练数据以避免模型过拟合。在我们的问题中,不同 EP 方法触发的网络流/流入突发的数量是不平衡的。一些应用程序/EP 方法只有很少的样本。因此,基于深度学习的特征提取不适合我们的问题。网络流或流入突发本质上是一个数据包序列。我们从五个角度为它们提取 123 维特征

(这里讨论了指纹的优势,训练数据不足,以及训练样本的不平衡)

General characteristic:一般特征8个,我们提取入站/出站数据包数、双向数据包数、入站/出站数据包百分比、入站/出站字节数以及数据包序列的持续时间。出入数据包数量、总数据包数量、数据包出入百分比、出入字节数、数据包序列持续时间

Interactive pattern:交互模式20个,分箱法,一共20个bin

Interactive pattern:5个特征,一个数据包序列的持续时间被划分为一系列大小为 1 秒的时间窗口。一个时间窗口中包数的平均值、最大值、最小值、中值和标准差(即包速率)被计算为特征。

Temporal characteristic :时间特征39个特征,我们分别考虑双向、入站和出站数据包到达。对于每一个,数据包间隔时间的平均值、最大值、最小值和标准偏差,以及相对到达时间的 9 个百分位数(从 10% 到 90%),即相对于第一个数据包的时间滞后,都被提取为特征。12+27=39

Packet size characteristic :数据包大小51个特征,我们分别提取入站、出站和双向数据包的各种数据包大小统计信息,包括平均值、最大值、最小值、中值绝对偏差、标准偏差、方差、偏斜、峰度和 9 个百分位数(从 10% 到 90%)。3乘17=51

4、Open-World App Traffic Recognition

到了具体的操作了

开放世界的封闭世界的对比:就是有未知的类别的问题,在开放世界环境中,一个关键挑战是如何有效减少模型训练期间对未知的app的误报。

Traffic Segmentation

流量分段的目标是将网络流量划分为不同的时间段,以便有一些时间段 A 处于活动状态(如果存在)。为此,我们首先提出了一个以局部相似度命名的度量,从单个流的角度来量化 A 生成网络流的可能性。

这里对网络流分流之后提取特征,然后使用随机森林计算相似性概率( qi is estimated as the percentage of decision trees that predict fi is from A.)这样就可以判断这些流是否属于应用A

后边有个组合优化的问题,没看懂,形式化过于复杂,也没有具体后续的解释。这篇文章不大行啊。

Traffic Filtering

如果A在这个时间段活跃,过滤出活跃的网络流分段,这里过滤出所有不相干A的分段。

模式挖掘聚类:学习一个度量函数

Flow Recognition

过滤出来的相关的流分段并不一定所有都属于A,还需要进一步识别,因为它们可能包含来自后台系统服务和其他应用程序的网络流。为了识别网络流是否来自 A,我们构建了一个双层识别模型。低级模型由两个二元随机森林分类器组成。第一个分类器用于计算局部相似度,之前已经训练过。第二个分类器预测网络流是背景流的概率(即,由后台系统服务生成的网络流)。对于一个网络流fi,第一个分类器输出它与A的局部相似度,记为qi,而第二个分类器输出它是背景流的概率,记为ri。 qi 和 ri 在高级模型中都扮演着重要的角色。高级模型是逻辑回归分类器。我们之所以选择这个模型,是因为它的参数数量很少,具有出色的泛化能力。

5、Method-Level User Action Identification

与识别应用特定网络流的二元分类不同,EP 方法识别可以表述为多标签分类,因为一个网络流可能对应多个 EP 方法。应用流量中的网络流大致可以分为两类。第一类对应于持久连接。此类别中的网络流通常包含与顺序调用的 EP 方法相关的多个数据包突发。第二类对应于短连接。此类别中的网络流通常只包含一个与单个 EP 方法相关的数据包突发。我们没有将网络流视为一个整体来提取其特征向量并识别触发它的 EP 方法,而是识别与其中的所有数据包突发相关的 EP 方法。通过这样做,我们的方法具有三重优势。首先,我们将多标签分类放宽为一系列多类分类子问题。其次,我们可以利用突发之间的上下文相关性来提高识别准确性。第三,我们在表征用户行为方面获得了更高的时间分辨率。

Flow Burstification

就是把一条流分成了几个簇,对应不同操作,利用了时空上下文特征,因为一个操作也可能会触发多个流。

体会:

真复杂的一篇文章,没有多少有创意的方法,感觉更像一个复杂方法的集合,识别分了三个步骤,按时间分段,聚类识别相关流、进一步识别提高准确率,各个阶段的方法都用到了机器学习,但是这个标签准确的问题很难验证,极其复杂,综合了各种方案,感觉# FOAP: Fine-Grained Open-World Android App Fingerprinting

开放世界的app指纹细粒度识别,其中第一开放世界是指对新类别的app进行识别,第二细粒度指的是对app内部特定UI操作的识别。

1、Workflow of FOAP

识别方法级别的用户操作从加密流量的开放环境中

训练阶段:

1、网络流打标签

自动或者手动运行app,收集app的流量,也就是日志(采集的截图代码日志等)和pcap文件

首先需要确定一条网络流是否来自app,这样就打上应用级别的标签,然后对触发这条网络流的这个UI操作进行识别并打上标签,这样构建训练集。

由于一条网络流可能包含多个流内的簇,也就是多个操作共享了一个流,作者吧一条流分成多个brust,然后多个brust进行特征提取构建指纹库,以进行匹配实现操作级别的识别。

识别阶段:

1、流分段(Traffic Segmentation)

就是一条长连接的流,里面可能有许多操作,但是可以被时间所分割,每个流分段与app的指纹库进行相似性计算,来匹配是否属于这个app

2、流过滤(Traffic Segmentation)

通过流特征模式挖掘,确实一个流段是否模式匹配某个app,基本是通过结构相似性判断,过滤出属于某个app的流量,这个模块可以被称为模式库匹配

3、流识别

构建了一个双层识别模型来识别相关流量段中的网络流是否由 A 生成。该模型不仅考虑了网络流的特征向量,还考虑了来自周围网络流的上下文信息。识别准确率更高

4、用户操作级别的识别

方法级用户操作识别(第 6 节)推断哪些入口点(EP)方法触发 A 的网络流来表征细粒度的用户操作。与持久连接对应的网络流通常包含多个数据包突发,即流入突发,每个突发都可能由不同的 EP 方法触发。对应于短连接的网络流通常只包含一个由 EP 方法触发的流入突发。为了识别 EP 方法,我们首先提取流入突发及其特征向量。接下来,我们构建了一个时空上下文模型来表征相关的内部流brust,从而实现细粒度的用户操作的识别,就是按钮点击等等。

2、Network Flow Labeling

为了构建开放世界应用程序流量识别和方法级用户动作识别的训练数据集,我们捕获测试应用程序生成的网络流,并用应用程序和 EP 方法(即组件生命周期或 UI 回调)标记每个网络流) 生成它。为此,我们使用 Android 框架来 i) 提取套接字信息以关联网络流,ii) 检索进程标识符 (PID) 以获得包名称并收集堆栈跟踪以确定 EP 方法。收集到的数据写入logcat。

Correlating Network Flow to App:这个就是应用级别的标签,通过查找 /proc/PID/cmdline file

Correlating Network Flow to EP Method: 这个是操作级别的标签,他这里说的是,UI操作会新启动一个线程,新线程执行网络操作,这样我们可以将线程与 EP 方法相关联,如果 TID 等于调用套接字相关函数时检索到的 TID,我们将 EP 方法与生成的网络流相关联。

也就是说,监控线程堆栈,如果再UI操作的这个时间点新创建的线程,这个线程时间点的网络流匹配。

还有不新建线程的情况,而是复用线程进行socket的操作

这里比较繁琐先略过,就是细粒度打标签的过程。

3、Traffic Feature Extraction

尽管一些研究利用深度学习模型来自动提取交通特征,但深度学习模型需要大量的训练数据以避免模型过拟合。在我们的问题中,不同 EP 方法触发的网络流/流入突发的数量是不平衡的。一些应用程序/EP 方法只有很少的样本。因此,基于深度学习的特征提取不适合我们的问题。网络流或流入突发本质上是一个数据包序列。我们从五个角度为它们提取 123 维特征

(这里讨论了指纹的优势,训练数据不足,以及训练样本的不平衡)

General characteristic:一般特征8个,我们提取入站/出站数据包数、双向数据包数、入站/出站数据包百分比、入站/出站字节数以及数据包序列的持续时间。出入数据包数量、总数据包数量、数据包出入百分比、出入字节数、数据包序列持续时间

Interactive pattern:交互模式20个,分箱法,一共20个bin

Interactive pattern:5个特征,一个数据包序列的持续时间被划分为一系列大小为 1 秒的时间窗口。一个时间窗口中包数的平均值、最大值、最小值、中值和标准差(即包速率)被计算为特征。

Temporal characteristic :时间特征39个特征,我们分别考虑双向、入站和出站数据包到达。对于每一个,数据包间隔时间的平均值、最大值、最小值和标准偏差,以及相对到达时间的 9 个百分位数(从 10% 到 90%),即相对于第一个数据包的时间滞后,都被提取为特征。12+27=39

Packet size characteristic :数据包大小51个特征,我们分别提取入站、出站和双向数据包的各种数据包大小统计信息,包括平均值、最大值、最小值、中值绝对偏差、标准偏差、方差、偏斜、峰度和 9 个百分位数(从 10% 到 90%)。3乘17=51

4、Open-World App Traffic Recognition

到了具体的操作了

开放世界的封闭世界的对比:就是有未知的类别的问题,在开放世界环境中,一个关键挑战是如何有效减少模型训练期间对未知的app的误报。

Traffic Segmentation

流量分段的目标是将网络流量划分为不同的时间段,以便有一些时间段 A 处于活动状态(如果存在)。为此,我们首先提出了一个以局部相似度命名的度量,从单个流的角度来量化 A 生成网络流的可能性。

这里对网络流分流之后提取特征,然后使用随机森林计算相似性概率( qi is estimated as the percentage of decision trees that predict fi is from A.)这样就可以判断这些流是否属于应用A

后边有个组合优化的问题,没看懂,形式化过于复杂,也没有具体后续的解释。这篇文章不大行啊。

Traffic Filtering

如果A在这个时间段活跃,过滤出活跃的网络流分段,这里过滤出所有不相干A的分段。

模式挖掘聚类:学习一个度量函数

Flow Recognition

过滤出来的相关的流分段并不一定所有都属于A,还需要进一步识别,因为它们可能包含来自后台系统服务和其他应用程序的网络流。为了识别网络流是否来自 A,我们构建了一个双层识别模型。低级模型由两个二元随机森林分类器组成。第一个分类器用于计算局部相似度,之前已经训练过。第二个分类器预测网络流是背景流的概率(即,由后台系统服务生成的网络流)。对于一个网络流fi,第一个分类器输出它与A的局部相似度,记为qi,而第二个分类器输出它是背景流的概率,记为ri。 qi 和 ri 在高级模型中都扮演着重要的角色。高级模型是逻辑回归分类器。我们之所以选择这个模型,是因为它的参数数量很少,具有出色的泛化能力。

5、Method-Level User Action Identification

与识别应用特定网络流的二元分类不同,EP 方法识别可以表述为多标签分类,因为一个网络流可能对应多个 EP 方法。应用流量中的网络流大致可以分为两类。第一类对应于持久连接。此类别中的网络流通常包含与顺序调用的 EP 方法相关的多个数据包突发。第二类对应于短连接。此类别中的网络流通常只包含一个与单个 EP 方法相关的数据包突发。我们没有将网络流视为一个整体来提取其特征向量并识别触发它的 EP 方法,而是识别与其中的所有数据包突发相关的 EP 方法。通过这样做,我们的方法具有三重优势。首先,我们将多标签分类放宽为一系列多类分类子问题。其次,我们可以利用突发之间的上下文相关性来提高识别准确性。第三,我们在表征用户行为方面获得了更高的时间分辨率。

Flow Burstification

就是把一条流分成了几个簇,对应不同操作,利用了时空上下文特征,因为一个操作也可能会触发多个流。

体会:

真复杂的一篇文章,没有多少有创意的方法,感觉更像一个复杂方法的集合,识别分了三个步骤,按时间分段,聚类识别相关流、进一步识别提高准确率,各个阶段的方法都用到了机器学习,但是这个标签准确的问题很难验证,极其复杂,综合了各种方案,感觉

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值