zoukankan      html  css  js  c++  java
  • NDSS16——Detecting Hidden Attacks through the Mobile App-Web Interfaces

    介绍

    • Android在恶意软件感染方面位居操作系统之首。部分原因是:android生态系统的开放性。允许用户安装未经验证来源的apps(也就是用户可以从第三方应用程序商店安装apps,而无需进行人工检查或完整性破坏)。使得恶意软件易于传播。
    • app-web interface:恶意软件传播的载体是良性合法的apps,它将用户引向访问托管恶意应用程序的网站,本文称之为App-Web Interfaces。
    • 恶意链接的访问:
      • 通过直接嵌入apps中的web链接发生;
      • 通过来自广告网络的广告登录页面(landing pages)访问。
    • 分析恶意软件传播媒介的解决方案包含的三个组件:(分析框架)
      • 触发(或者浏览)应用程序UI、追踪任何可以访问的web链接;
      • 检测恶意内容;
      • 收集来源信息(即恶意内容如何到达)
    • 该分析框架可以探索从app访问的web链接,检测任何恶意活动,通过自动运行apps的用户界面,访问和记录触发的任何web链接来动态分析apps。【该系统可以自动分析app-web interface,无需人工干预即可连续运行
    • 用该框架分析了600,000个应用程序,收集了大约150万个URL,然后使用已建立的URL黑名单和防病毒软件对它们进行了下一步分析,以识别恶意网站和可从此类网站上下载的apps。【该方法可以探索从移动应用程序内部访问的web,这是传统的搜索引擎和网站黑名单系统(如谷歌安全浏览)还没有做到的】

    背景

    android Ecosystem

    • android是主要的移动操作系统,核心操作系统由Google开发。
    • 处理系统应用程序外,还允许运行第三方apps(可以丰富用户设备的功能)。
    • Google play:是Google维护官方的android应用程序商店,是用户查找和安装应用程序的主要场所。
    • 在中国,非官方商店是下载apps的主要方法。
    • 用户还可以通过其他apps中的广告来发现其他apps。这些广告可以通过广告网络提供,也可以由开发人员直接嵌入,而无需中介广告网络参与。
    • 在某些情况下,apps中可能包括直接web links(即不属于任何app store)

    advertising

    • 应用内广告是应用程序开发人员的重要收入来源。

    • 广告商(advertisers):希望对其产品做广告的各方。

    • 发布者(publisher):是给用户带来广告的移动应用(或开发者)。

    • 广告网络或聚合器(Ad networks or aggregators):将发布者与广告商联系起来,由广告商向发布者支付费用。

    • 重定向链(redirection chain):指网页重定向中的URL

    • 登录页面(landing page):指重定向到的最终的网页

    • 广告库(ad library):带有广告的apps中嵌入了广告网络的一些代码,该代码提供了广告网络和发布者(开发人员)之间的纽带,负责管理和投放广告,成为广告库。

    android malware

    • android容易受到恶意软件攻击的部分原因:android生态系统的开放性。即app可以通过web连接和非官方的应用程序商店下载,用户无法知道下载的apps是否受到信任。
    • 大部分android恶意软件都是木马程序(具有所谓的有用功能和隐藏恶意功能的apps)
    • android实现了sandboxed功能,因此一个app的受害不意味着整个系统受害。【sandboxed:原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中,当某个程序试图发挥作用,安全软件可以让他在沙盒中运行,如果有恶意行为,则禁止程序进一步运行,不会对系统造成危害。】

    方法

    1. Triggering App-Web interfaces

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

    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:代码级元素:应用本身可以包括来自多方的代码(例如主要应用开发者以及来自各种广告网络的广告库)。为了从一个应用程序启动另一个应用程序,安卓使用所谓的意图(intents)。通过向系统提交带有特定参数的意图,应用程序可以在系统的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分钟。之所以允许运行这么长的时间,是因为我们的爬虫可能遍历许多链接,并且每个链接可能具有复杂的重定向机制,这些机制可能仅在短暂的等待之后触发。

    结果

    应用程序收集

    • 应用程序数据集包含来自Google play的429534个apps和四个中国android应用程序商店( 91, Anzhi, AppChina, and Mumayi)的422505个apps。
    • 由于前面提到的实现原因,整个可用的apps数据集由略超过600000个apps组成。

    部署方式

    • 在美国西北大学的位置运行来自Google play的应用程序(仅美国可提供的应用程序)
    • 中国浙江大学的位置运行来自中国应用商店的应用程序。
    • 运行应用程序的位置很重要,因为很多广告(构成我们正在研究的app-web interaction的大部分)都是基于位置的。在一个位置看到的广告可能不会在另一个位置显示。
    • 部署持续运行,几乎不需要人工干预,只有当需要更新系统来修复错误或添加功能时,才需要重新启动。

    总体调查结果

    • 美国部署中
      • 总共记录了超过100万次的应用程序到web链接的启动。
      • 总共检测到了来自64个唯一域的948个恶意URL。
      • 收集了468个独特的应用程序(来自web,Google play之外),其中271个被发现是恶意的【有244个来自反病毒骗局(antivirus scam)】
      • 作者发现从web下载的apps(Google play之外的)中有六分之一是恶意的。【不包括Google play上的应用程序】
      • 分别对这些应用程序进行了统计:有433,000个Google play登陆URL【即play.google.com域名的http网址或市场方案网址(以“市场://”开头)】。这些Google play登陆URL在Google play上产生了19,000多个应用程序,在VirusTotal中约有5%被标记为恶意的。根据对防病毒标签的手动检查,所有这些似乎都是广告软件
    • 中国部署中
      • 总共记录了415,000次。【这与应用程序不是直接对应的:一些应用程序可能会导致多次启动,而另一些应用程序可能不会导致任何启动。】
      • 检测到了来自139个唯一域的1475和恶意URL。
      • 收集了1097个独特的文件,其中435个是恶意的【其中102个文件来自反病毒骗局(antivirus scam)】。
  • 相关阅读:
    Google Style Guides-Shell Style Guide
    支付宝钱包手势password破解实战(root过的手机可直接绕过手势password)
    学习Java JDBC,看这篇就够了
    php学习之道:WSDL具体解释(一)
    Android学习笔记(17):文本框TextView类
    HttpSession的深入分析与研究
    【leetcode】atoi (hard) ★
    【leetcode】Candy(hard) 自己做出来了 但别人的更好
    【leetcode】Substring with Concatenation of All Words (hard) ★
    【leetcode】 Search a 2D Matrix (easy)
  • 原文地址:https://www.cnblogs.com/yangdd/p/13083927.html
Copyright © 2011-2022 走看看