NDSS16——Detecting Hidden Attacks through the Mobile App-Web Interfaces

方法

NDSS16——Detecting Hidden Attacks through the Mobile App-Web Interfaces_第1张图片

1. Triggering App-Web interfaces

  • 与应用程序进行交互来启动web链接(可以静态嵌入在app中,也可以动态生成)
  • 为了从应用程序内部触发网页链接,在自定义动态分析环境中运行apps,由于要实现可伸缩性和连续操作,需要在Android模拟器中运行。
  • 需要实现在GUI中自动导航来触发应用程序web界面

1.1 Application UI Exploration

  • UI:user interface(用户界面)
  • app UI 界面的探索需要触发App-Web界面
  • 一个有效的用户界面探测器需要提供高覆盖率(用户界面,这也可以转化为代码覆盖率),同时避免冗余的探索。
  • 该文使用了之前在AppsPlayground中的探索式方法和算法。
  • UI Exploration(用户界面探索)通常包括从显示的用户界面中提取特征(小部件层次),并迭代地构建应用程序的用户界面组织的模型或状态机——即不同的窗口和小部件是如何连接在一起的。
  • 黑盒(或灰盒)技术(如AppsPlayground)可以应用试探法来识别哪些窗口和小部件是相同的,以防止这些元素的冗余探索。

1.2 Handling Webviews

  • 在研究广告时候面临的巨大的挑战是:大多数的应用内广告的实现都是在自定义的Webview(是呈现网络内容的特殊小部件,例如,HTML、JavaScript和CSS)上实现的。在从系统获得的UI层次结构中,Webview和一些自定义小部件是不透明的,也就是说,在它们内部呈现的用户界面在本机(native)用户界面层次结构中无法观察到,因此与它们的交互将受到限制。目前为止的研究没有对这个问题提出令人满意的解决方案。
  • 开源项目Selendroid可以用于获取有关webview内部的某些信息,本文作者围绕Selendroid开发了与webview交互的代码,但很难使用webview提供的信息来触发广告,
  • 为解决webview带来的问题(即android提供的UI调试界面没有分层结构):采用计算机图形技术来检测按钮和小部件,就像我们可以看到这些按钮和部件一样。
  • 按钮检测算法
    • 对视图图像执行边缘检测:通过检测图像亮度的不连续来工作。使用Canny边缘监测算法(一种经典、性能良好的边缘监测算法);
    • 在图像中查找轮廓:使用计算的边缘计算图像的轮廓,以获得对象边界
    • 忽略非凸轮廓或非常小的轮廓区域:由于按钮通常具有凸起的形状和足够大的面积,因此用户可以容易地点击它们,我们忽略非凸起的轮廓和那些在阈值参数内具有小面积的轮廓。在该步骤中,消除了许多轮廓,例如那些由文本产生的轮廓、或者嵌入图像中的非凸轮廓、或开放轮廓。
    • 计算所有剩余轮廓的边界框:对于剩余的轮廓,我们计算边界框,或者包含这些轮廓的最小矩形。这一步只是简单地确定一个中心点,在这个点上可以点击来模拟按钮点击。
  • 该技术只依赖于计算机图形算法,完全是黑盒,因为它甚至不需要从系统中提取用户界面层次。因此,它通常可用于其内部对用户界面层次提取不透明的任何窗口小部件。

2. Detection

  • 触发链接后,可以将其保存以用于恶意活动的进一步分析和检测,例如传播恶意软件或诈骗
  • 检测的目的:捕获链接、重定向链(网页重定向中的URL)和登陆页面(最终的网页)。然后可以使用各种方法进一步分析链接、重定向链和登录页面的内容。

2.1 Redirection chains

  • 广告从一个链接重定向到另一个链接,直到最终到达登陆页面。
  • 在非广告链接中也可以观察到重定向链。
  • 重定向可使用几种技术来执行:包括HTTP 301/302状态头、HTML元标签和JavaScript级别。
  • 此外,我们发现某些广告网络(如谷歌广告),显然使用基于时间的检查,以减少点击欺诈的可能性。其结果是链接必须实时启动才能获得重定向消息。
  • 为了确保我们的方法准确地遵循重定向链,而不考虑所使用的重定向技术,就像实际用户一样使用一个工具化的web浏览器来遵循该链。
  • 做了什么
    • 实现了一个在虚拟化执行环境中运行的自定义的浏览器,以便将广告完全真实地加载到浏览器中,从而可以完全捕获重定向链。
    • 这个浏览器的实现基于android中提供的webview。
    • 启用了Javascript并调整了一些其他选项,它的行为完全像一个web浏览器。
    • 还附加了相关的部分来记录加载到其中的每个URL(包括重定向的URL),同时允许任何重定向发生。

2.2 Landing pages

  • android中的登录页面(Landing pages:指最终的网页),或者重定向链中的最终网址,可能包含导致应用程序下载的链接。
  • 恶意登录页面可能诱使用户下载木马应用程序。
  • 做了什么
    • 将登陆页面加载到一个配置了真实用户代理和与移动设备相对应的窗口大小的浏览器中,因此浏览器看起来像是安卓系统上的Chrome浏览器。
    • 然后收集登陆页面上的所有链接,点击每个链接查看是否有文件下载。
    • 模拟在浏览器中加载的页面上的点击,确保在出现基于Javascript的事件时可以准确地找到并正确点击链接。

2.3 File and URL scanning

  • 可以通过各种方式对收集到的URL和文件进行恶意分析。
  • 做了什么:本文没有开发自己的分析,而是使用来自VirusTotal的URL黑名单和防病毒软件(VirusTotal汇总了50多个黑名单和类似数量的防病毒软件)。
    • 通过VirusTotal提供的URL黑名单可以扫描收集到的每个URL(登录页面或者重定向链中涉及到的任何URL),其中包括如Google Safebrowsing、Websense Threatseeker、PhishTank等黑名单。
    • 通过登录页面上下载收集到的文件将通过VirusTotal上提供的防病毒软件(antiviruses)进行扫描。
  • 防病毒软件和黑名单(Antivirus systems and blacklists)有可能会误报,为最大程度减少这种影响,使用防病毒软件之间的协议来降低误报率:认为一个URL或文件只有在被至少三个不同的黑名单或防病毒软件标记时才是恶意的。

3. Provenance

  • 一旦检测到恶意事件,有必要对相关方做出正确的判断,以便追究相关方的责任并采取适当的措施。在该系统中,使用两个方面作为起源(或出处)的一部分。
    • Redirection chain:重定向链:它已经作为检测组件的一部分被捕获。重定向链可用于识别如何到达最终的登录页面:如果登录页面包含恶意内容,则可以识别拥有指向登录URL的URL的各方。
    • Code-level elements:代码级元素:应用本身可以包括来自多方的代码(例如主要应用开发者以及来自各种广告网络的广告库)。为了从一个应用程序启动另一个应用程序,安卓使用所谓的意图。通过向系统提交带有特定参数的意图,应用程序可以在系统的web浏览器中打开URL。修改系统以记录特定的意图,这些意图表示URL启动以及提交该意图的代码那一部分(启动代码所在的Java类)。这能够确定应用程序中的哪些代码启动了恶意的网址
  • 重要的是要确定作为来源(出处)一部分捕获的代码类的所有者:他们属于应用程序开发人员还是广告库,如果他们属于广告库,是哪一个?为了做到这一点,执行了一次识别流行的广告库及其相关的广告网络的任务。

4. Ad Library Identification

  • 利用广告赚钱的应用程序通常与广告网络合作,并从中嵌入称为广告库的代码,以便显示和管理广告。
  • 这里的目标是全面识别参与android生态系统的广告网络及其相关的广告库。这种识别对于自动分类恶意活动是广告的结果还是应用程序开发人员的责任非常重要。
  • 基于代码中嵌入的广告库,采用了两种系统方法来进行识别:

4.1 Approach 1

  • 方法一依赖的事实:一个广告网络可能会被许多应用程序使用。因此在使用广告网络的所有应用程序中都可以找到通用的广告库代码。android应用程序的本机编程平台是Java,Java包提供了在名称空间中组织相关代码的机制。广告库本身有可以作为其识别签名的软件包。
  • 做了什么
    • 在第一种方法中,从数据集中的所有应用程序中收集程序包,并创建程序包层次结构以及每个程序包的出现频率。
    • 对程序包进行分类(排序),然后手动搜索最常见的程序包来识别广告库。例如,排序后,像com.facebook和com.google.ads这样的包会出现在顶部。
    • 然后,基于先验知识或在web上手动搜索有关程序包的信息,确定每个包的性质(即它是否构成一个广告库)
  • 这种方法取决于假设广告库程序包不会被混淆。大多数情况都是这样,顶级程序包可以很好地识别大多数广告库。但是Airpush是一个众所周知的广告网络,它混淆了它的广告库,以至于它不再能被包名识别。

4.2 Approach 2

  • 当我们达到几百个频率时,上面的方法变得很麻烦,因为许多非广告包也有这样的频率。替代方法可以全面识别广告库,而不依赖于这些广告库出现的频率。
  • 方法二依赖的事实:主要的应用程序功能仅与广告库的功能松散耦合(相互联系却又彼此保持独立)。
  • 做了什么
    • 使用zhou等人描述的技术来检测应用程序中的松散耦合组件。
      • 耦合实际上是根据诸如字段引用、方法引用和跨类的类继承等特征来度量的。理想情况下,一个广告库的所有软件包将被分组到一个组件中。实际上,这种情况并不总是会发生,而且可能会发生本应在不同组件中的类最终出现在相同组件中的情况。然而,误差是可以容忍的,并且可以手动分析。
    • 采用聚类技术,进一步简化手动分析:创建了一组在应用程序组件中调用的android API。这组API形成了组件的签名。将这些API映射为整数以实现有效的集合计算。
      • 基于此,具有相同版本的广告库实例具有匹配的API集。对于不同的版本,集合将相似但不相同。
      • 对从所有应用程序中提取的组件进行这个分析,然后使用Jaccard距离来计算API集之间的差异。如果它低于某个阈值(这里使用0.2),则将组件放在同一个群集中。因此,不同广告库的程序包最终位于不同的群集中,然后群集可以很容易地映射到广告库。
  • 该方法不受字典混淆的影响。检测到了混淆的Airpush程序包,所有这些包最终都聚集在几个群集中。

4.3 Results

  • 使用上述两种方法,在数据集中识别出来201个广告网络。

实施细节

  • Python 实现了大部分系统
  • UI Exploration:
    • 利用了 AppsPlayground 工具的源代码。但是该工具的现有版本无法在当前版本的android系统上运行,因此重新实现了该系统,使其能够在当前的android版本上以与AppsPlayground论文中所述相同的探索式方法运行。
    • 没有使用HiearchyViewer来获取应用程序的当前用户界面层次,而是使用了基于android可访问性服务的 UIAutomator 。这对执行速度产生了重大而积极的影响。
    • 用于按钮检测的图形算法由OpenCV库提供,并在重复测试后选择合适的阈值。
  • 为了提高动态分析的速度,利用了 KVM 加速虚拟化。为此使用可以在x86架构上运行的Android images。大约70%的安卓应用程序没有本机代码(native code),因此可以在这样的目标上正常运行。
  • 对于触发后分析,整个框架是通过 Celery 来管理的,它为作业管理提供了在分布式环境中部署的能力。
  • 实现中,应用程序UI Exploration以及用真正的浏览器记录重定向链是同时发生的。这一阶段完成,任何记录的重定向链都将通过REST API排队,并与有关应用程序和负责触发导致重定向链的意图的部分代码的信息一起进入到 Celery 管理的队列中。
  • 将任务从队列中拉出以对登录页面进行进一步分析,并使用 VirusTotal 扫描文件和URL。
  • 整个系统有适当的重试和超时机制,可以运行数月,而不需要大量的人力。
  • 所有结果分析数据都存储在MySQL和MongoDB数据库中。
  • 使用 WatirSelenium Webdriver 框架在 Chromium web 浏览器上实现了对登陆页面或重定向链中最终URL分析。
  • 使用 WatirWebdriver 编写浏览器操作脚本,用于自动加载网页、单击链接、自动下载单击链接时可用的内容,以及在单击链接后加载新页面时返回原始页面。所有的处理都是使用 Xvfb显示服务器 没有任何GUI完成的,该服务器是不显示屏幕输出的X服务器实现。
  • 应用程序在虚拟化环境中最多运行五分钟,平均运行时间不到两分钟。
  • 触发后分析(尤其是对登录页面的分析),最多允许运行15分钟。之所以允许运行这么长的时间,是因为我们的爬虫可能遍历许多链接,并且每个链接可能具有复杂的重定向机制,这些机制可能仅在短暂的等待之后触发。

结果

你可能感兴趣的:(NDSS16——Detecting Hidden Attacks through the Mobile App-Web Interfaces)