Neural-Augmented Static Analysis of Android Communication
摘要:
我们解决了在 Android 移动操作系统中发现应用程序之间通信链接的问题,这是 Android 中关系到安全性和隐私性的重要问题。在这种复杂的环境中,任何可扩展的静态分析都必然会产生过多的假阳性,因此不切实际。为了提高精度,我们建议使用经过训练的神经网络模型来增强静态分析,该模型可以估计通信链路确实存在的可能性。我们描述了一种神经网络体系结构,该体系结构对两个应用程序中通信对象的抽象进行编码,并估计链接确实存在的概率。类型结构编码器(tde)是我们体系结构的核心,它是一个通用框架,用于通过递归组合构成其类型的编码器来构造复合数据类型的编码器。我们在大量的 Android 应用程序上评估了我们的方法,并证明了该方法具有很高的准确性。此外,我们进行了可解释性研究,以了解经过学习的神经网络的内部结构。
关键词:神经网络、类型编码器、Android、组件间通信
引言
在 Android 移动操作系统中,应用程序可以使用称为组件间通信(icc)的特定于 Android 的消息传递系统相互通信。 滥用 icc 可能会导致严重的安全漏洞,包括盗窃个人数据以及越权攻击。 实际上,研究人员已经发现了各种这样的实例,例如总线应用程序向所有其他应用程序广播 gps 位置,伪装为小费计算器的间谍应用程序等等。 因此,检测组件之间的通信很重要(组件 c 是否可以与组件 d 通信)
随着 Android 应用程序市场规模的扩大,以及 Android 生态系统复杂性的增加,对链接推断进行可靠且可扩展的静态分析势必会产生大量误报。实际上,安全工程师需要手动查找恶意链接,因此需要仔细确定它们的优先级。
为了解决这种情况下的误报,Octeau 等人最近发表了论文提出了 primo,这是一种手动调整的概率模型。它通过静态分析给出 icc 链接的概率,从而可能性来对链接进行排序。我们看到 primo 的方法存在多个问题:首先,模型是手动构建的,构建模型是一个费力且容易出错的过程,需要对 Android 应用程序,icc 系统和静态分析有深入的专业知识。其次,Android 编程框架中的变化可能会使模型过时,从而需要制作新的模型。
为了实现这一目标,我们通过机器学习来研究链接判断问题。我们观察到,我们可以将静态分析的结果分为两类:我们确定其是否存在的链接,以及我们不确定的链接。然后,我们利用确定的链接来训练机器学习分类器,然后将其应用到不确定链接估算可能性。下图概述了我们提出的方法。
为了在我们的环境中启用机器学习,我们提出了一种针对链接推理问题的自定义神经网络架构,我们将其称为链接推理神经网络(linn)。使用神经网络进行此设置的好处是可以自动提取有用特征(特别是 icc 中的寻址机制)。我们可以训练网络编码为捕获相关特征的实值向量。这使我们摆脱了手动特征提取的艰巨任务,这需要专业领域知识,并且在 Android icc 发生更改或使用的静态分析情况下进行维护。我们演示了如何为一系列类型(包括列表,集合,类型和字符串)构造编码器,从而产生一种通用方法。我们的 tde 框架通过不同的神经网络结构进行实例化,得到不同的编码器。我们能够系统地试验通过静态分析计算出的抽象状态的各种编码。
我们做出了以下几点贡献:
•
模型增强的链接推论:我们形式化并研究了使用自动学习的模型来增强 Android icc 静态分析的问题。
•
链接推理神经网络框架:我们提出了一种定制的神经网络体系结构,即链接推理神经网络(linn),用于增强链接推理静态分析。
•
实例化和经验评估:我们使用 TensorFlow 和 ic3 实施我们的方法,并对来自 Google Play 商店的 10,500 个大型 Android 应用程序进行了全面评估。我们的结果证明了很高的分类精度。重要的是,我们的自动化技术优于 primo。
•
可解释性研究:为解决深度学习的不透明性问题,我们进行了详细的可解释性调查,以解释模型的行为。我们的结果提供了有力的证据,表明我们的模型学会了 Android 操作系统采用的链接解析逻辑。
ANDROID ICC:概述和定义
Android 应用程序从概念上讲是组件的集合,每个组件都旨在执行特定任务,例如向用户显示特定屏幕或播放音乐文件。应用程序可以通过使用复杂的消息传递系统来利用其他应用程序的功能。举例来说,一个应用程序开发人员希望能够拨打电话号码。开发人员可以从一条消息中请求其他一些应用程序处理拨号过程,而不是从头开始编写该功能。这样的消息通常是通用的,即不针对特定的应用。相同的通信机制也用于在应用程序内发送消息。
Intents 展示了一个简化的 icc 示例,其中包含使用地图应用程序(mapApp)和 sms 消息传递应用程序(smsApp)的拼车应用程序(rideApp)。每个应用程序都包含组件(灰色框),图中的箭头表示组件之间的潜在链接。 icc 主要是使用 Intents 完成的。Intents 是在 Android 组件之间发送的消息。Intents 可以是显式的或隐式的。前者指定目标应用程序和组件;后者仅指定目标需要的功能。
Intents 过滤器希望接收隐式 Intents 的组件必须声明过滤器,描述它们愿意接收的意图的属性。例如,图 2a 中的过滤器 2 指定 smsApp 可以处理 SEND 和 VIEW 操作。因此,当拼车应用程序发出带有 SEND 操作的意图时,Android 的意图解析过程会将其与提供该功能的 smsApp 相匹配。例如,当安装恶意应用程序通过声明它们也处理 SEND 操作来拦截短信时,就会出现安全和隐私问题。
模型增强的链接推理
在实践中使用了许多分类器(例如逻辑回归)。 我们专注于神经网络,因为我们可以使用它们来自动完成将 Intents 编码和过滤器编码为实值向量的重要任务。
我们观察到,静态分析的结果可以推断出明确标签。 因此,我们可以从 Android 市场中随机抽取应用程序样本,并且使用静态分析来构建训练集。对于典型的机器学习任务,分类器的输入是实值(即特征集)的向量。一旦训练了模型,我们就可以将其与静态分析的结果组合起来,以构建定量的抽象匹配函数。
链接推理神经网络
现在,我们介绍我们的链接推理神经网络(linn)框架和组件。我们的目标是采取抽象的意图和过滤器,表示一个可能的链接,并估计该链接为真的概率。 linns 就是为了做到这一点。一个 linn 由两个主要部分组成:
•
类型导向的编码器(tde):linn 包含两个不同的类型导向的编码器,它们是将抽象意图或过滤器映射为实数向量的函数。本质上,编码器充当特征提取器,将意图/过滤器的相关部分提取和汇总为实值向量。面向类型的编码器是可微函数的组合,可以使用各种神经网络体系结构实例化。
•
分类层:分类层采用已编码的意图和过滤器,并返回意图i和过滤器 f 之间存在链接的概率。我们使用的分类层是一个深度神经网络-多层感知器(mlp)。一旦我们对意图和过滤器进行了编码,就可以使用任何其他分类技术,例如逻辑回归。
实现和评估
现在,我们以各种实例描述我们的技术的实现,并给出全面的评估。 我们设计评估的目的是回答以下两个问题:
Q1:是否有效地预测了可能的联系,对于我们的任务,tdes 的最佳实例是什么?
Q2:效率模型训练和链接预测的运行时性能如何?
实例化为了回答我们的研究问题,我们对 tdes 的 4 种不同实例进行了实验。这些实例旨在使模型的复杂程度从最简单到最复杂。在最简单的实例 str-rnn 和 str-cnn 中,我们将抽象意图和过滤器序列化为字符串,并使用 rnns 和 cnns 进行编码。 在更复杂的实例化中,我们维护意图和过滤器的完整构成类型。
Q1:是否有效地预测了可能的联系,对于我们的任务,tdes 的最佳实例是什么?
我们观察到最好的实例是类型树。使用 Tree-lstm 涉及最多数量的可训练参数,利用最少的可训练参数和最快的运行时间,str-cnn 模型在排名最高的链接中实现了最高的真阳性率。在几乎所有方面,str-rnn 模型都比其他模型差,这表明 rnn 字符串编码器很难从过滤器中捕获有用的模式。我们的结果表明,更复杂的模型,特别是那些使用更多参数或编码更多结构的模型,往往会表现得更好。尽管简单的模型已经足够好,但是当我们考虑规模分析时,更复杂的模型可能仍然具有明显的优势。与 primo 相比,我们的评估仅针对一组可能的链接。这比 primo 的设置严格得多,primo 的设置是对所有包含不精确性的链接进行评估,因此某些链接实际上是必不可少的链接。
Q2:效率模型训练和链接预测的运行时性能如何?
关于运行时间,除了 str-rnn 之外,我们所有的实例化都是有效的。每个链接的推理时间不超过 171µs。训练时间与推理时间成正比。最好的三个实例化不超过 20 分钟即可完成 10 个训练时期。考虑到我们只使用普通的硬件,并且深层神经网络培训通常会持续数小时或数天的许多问题,因此我们认为这特别快。综上所述,即使是最复杂的模型也不会产生过多的存储成本。
可解释性调查
现在,我们调查我们的模型是否在学习正确的东西,而不是基于数据中无关的组件进行预测。解决此问题的非正式方法是模型的预测是否符合人类的直觉。这直接关系到我们对模型及其预测的信任。我们对可解释性的努力是多重的:
•
我们分析了不正确的分类以了解不正确的原因。我们的分析表明不正确的原因是可以理解和直观地说明的。
•
我们分析了几个实例以了解输入的哪些部分对于预测很重要。
•
我们研究了神经网络内部各种内核的激活,以了解哪些输入激活得最多。我们的发现显示了几个可识别的字符串,这些字符串在激活分类内核方面应具有直观的影响。
•
我们使用 t-SNE 可视化来了解模型如何对相似的输入进行分组以及其可能使用的功能。我们发现了几种重要的模式,增强了我们对该模型的信任。
总结
我们解决了对 Android 通信链接进行静态分析时误报的问题。 我们通过后处理步骤来增强静态分析,该后处理步骤可估算链接确实为正值的概率。 为了在我们的环境中促进机器学习,我们提出了针对链接推理问题的自定义神经网络体系结构。 关键的新颖性是类型定向编码器(tde),这是一个用于构成神经网络的框架,该框架采用某种类型 τ 的元素并将其编码为实值向量。 我们相信,在将机器学习应用于编程语言问题的情况下,该技术可以适用于各种各样的问题。 将来,我们希望在其他情况下探索这个有趣的想法。
致谢
本文由南京大学软件学院 2020 级硕士研究生钱美缘翻译转述。