Android安全分析可以分为静态分析和动态分析,也可以分为基于特征与基于机器学习的分析。静态分析在安装前检测app的安全漏洞:下载Android系统的应用程序安装包APK,通过如Ded和Dex2Jar之类的工具进行反编译,将APK文件反编译为Java源文件或JAR文件,然后对其进行源代码级的解析。

第一部分:静态分析

静态分析的优点是无需运行代码,无需像动态分析那样改写Android系统源码,要求用户对Android系统进行重定制和安装定制版的ROM,因此速度快、轻量级。静态分析的缺点是因为无法真实模拟程序的动态运行,所以存在误报率高的问题。

基于权限的检测工具Kirin是早期有代表性的静态分析方法之一,它通过定义的一组规则识别危险的权限组合,其缺点是误报率较高。其他的静态分析解决方案还有:SCanDroid, DroidChecker, Chex,AndroidLeaks, Epicc等。但这些工具仍然有其局限性:有的没有进行组件间通信分析,有的没有考虑Android的事件驱动编程范式。

CoChecker 对此进行了改进,提出基于Android API调用将泄露路径分为两类的方法:权能泄露路径和敏感数据泄露路径。CoChecker可以自动识别Android应用中的这两类泄露路径,因为两种泄露路径都可能跨越多个组件,因此进行ICC分析是一项基本任务。

静态分析的方法多种多样,例如ScanDal以Dalvik虚拟机字节码为输入,检测Android应用程序的私密信息泄露。Chex是基于组件的静态分析方法。SCanDroid使用数据流分析方法进行静态分析,从应用的AndroidManifest.xml文件中提取权限,然后自动检测应用的数据流是否与这些权限一致。DroidChecker使用控制流图搜索和脏数据分析方法自动分析可能的敏感数据泄露路径。

第二部分动态分析

相对于轻量级的静态分析,动态分析则是重量级的程序运行时的分析。在一般情形,需对Android系统进行重新定制与改写,包括改写安全机制;在原生Android系统中加入监视器,实时监视数据的流向;在危险函数调用时,检测所需权限等。动态分析的优点是,检测精度较高,缺点是重量级:需要修改Android系统源码,形成用户全新定制的操作系统,同时需要通过更新ROM安装这种定制系统。

TaintDroid提出了一种动态脏数据检测技术:对敏感数据进行污点标记,当它们通过程序变量、文件和进程间通信等途径扩散时进行跟踪审查。如果污点数据在一个泄露点(如网络接口)离开系统, TaintDroid就在日志中记录数据标记、传输数据的应用程序和数据目的地,实现对多种敏感数据泄露源点的追踪。但TaintDroid只考虑数据流,未对控制流(程序间交互,组件间交互,进程间交互)进行分析。TaintDroid、 Asdroid和Crowdroid 等都是一类基于行为的动态检测方法。

XManDroid是一种基于系统策略的动态分析方法,它扩展了Android应用架构,包含运行监控器、应用安装器和系统策略安装器3个模块。运行监控器由访问监控器、决策器、系统视图、权限、系统策略和决策组件构成。新增组件的功能是:决策器判断是否建立新的组件间通信链接;系统视图组件维护运行系统的状态;系统策略组件是系统策略规则数据库;决策组件是存储决策的数据库。应用安装器包括标准组件Package Manager和Permissions和新增的系统视图组件。由于安装新的应用程序会改变系统状态,故扩展了Package Manager的功能,使其可与系统视图进行通信。

系统策略安装器是新增模块,由策略安装器、系统策略、决策和系统视图4个新组件构成,提供在Android中间件层增加或更新系统策略的功能。 XMandroid通过系统策略检查算法判断能否建立新的组件间通信链接,有效地防止了运行时的权限提升。 XMandroid的局限性是:(1)未考虑通过隐蔽通道实现的权限提升;(2)仅考虑ICC,但应用程序间的通信还包括标准的Linux进程间通信机制等;(3)未考虑其他公开信道,如互联网Socket或文件系统通信等。

第三部分攻击方式

1.     Zimperlich恶意软件:

最著名的三大AndroidRootExploit恶意软件是Zimperlich、Exploid和RATC(RageAgainstTheCage)。许多其他恶意软件都是在它们的基础上研发的,如DroidDream、Zhash、DroidKungFu和Basebridge。其中,DroidKungFu以加密方式同时包含RATC和Exploid。当DroidKungFu运行时,首先解密和发起“rootexploit”攻击,如果成功获取根权限随后就可以为所欲为。

Zygote是以root权限运行并用于孵化所有Android应用的系统服务。Zygote收到孵化app的请求后,对每个appfork一个子进程。在执行app代码之前,子进程通过setuid()切换到分配给app的一个无特权的UID。一般情形,root进程调用setuid()不会失败,因此Dalvik虚拟机不检查setuid()调用是否成功,导致setuid()调用失败时不终止进程运行。

Zimperlich攻击过程:(1)重复fork自身,最终耗尽所有的PID。即达到用户进程数的上限RLIMIT_NPROC。(2)向Zygote发送在新进程中孵化它的一个组件的请求。当Zygotefork一个子进程并试图创建app UID时,由于达到系统资源的极限,setuid()调用失败。这时,Dalvik虚拟机并不异常终止,使Zimperlich代码得以与Zygote相同的UID运行,即作为root进程运行。(3)重装可读写的系统分区,在其中创建setuid-rootshell。这样,Zimperlich可在此后任何时刻获得具有root权限的访问。

2.     提权攻击

Android提权攻击有别于前面的Root Exploit型攻击,提权攻击系指没有任何权限的恶意程序能够通过第三方程序获得所需的权限。Davi等人给出了下述定义:“一个拥有较低(较少)权限的应用程序访问拥有较高(较多)权限的组件而不受任何限制,称为Android系统的提权攻击”。有的文献也称此类提权攻击为“权限再次授权(Permissionre-delegation)”。

Android提权攻击举例app3中的组件1受权限P1保护,app1中的组件1没有权限,app2中的组件1拥有权限P1。因此,app1中的组件1不能直接访问app3的组件1,而app2中的组件1可以访问。但app2中的组件1不受任何权限保护,故app1中的组件1可以访问它,然后通过它获得访问app3中组件1的资格。这样,app1中的组件1就绕过了app3中组件1的保护机制完成了提权攻击。

Android提权攻击分类提权攻击可以分为两类:“困惑代理(ConfusedDeputy)”攻击与“合谋攻击(collusionattack)”。1988年,Hardy提出了所谓“困惑代理”的概念,问题源于操作系统编译程序的“一仆二主”,即编译程序运行时同时具有分别来自两个调用的不同权限。

Android提权攻击分类在智能手机情形,具有不同权限集的应用可以彼此通信,使恶意应用具有非法使用某些正常app权限的可能性。典型的攻击场景是:当一个有权限(但“困惑”)的app接口有漏洞时,恶意软件利用该接口漏洞实施困惑代理攻击。合谋攻击需要多个应用程序之间的相互配合,又可细分为直接攻击与间接攻击两个子类。顾名思义,前者依靠应用程序之间的直接通信;而后者依靠它们之间的间接通信。

攻击源A通过代理组件(C1,C2…)到达泄露点P埋下种子(如植入恶意代码),然后攻击源B对泄露点P进行攻击(如提权攻击)。即使检测器检测出攻击源B的攻击,攻击源A却依旧隐藏。

3.     中间人攻击 MITM

中间人(Man-In-The-Middle,MITM)攻击在Android中主要针对通过SSL/TLS加密的API。Fahl等人实现了一个名为Malldroid的工具,对13,500个包含SSL/TLS代码的app进行了静态分析,发现其中1,074个(占比为8.0%) app含有易受MITM攻击的安全漏洞。他们在这些含有漏洞的app中选择了100个热门应用进一步做了人工分析,发现其中41个应用程序的确不能对MITM攻击免疫。

4.     恶意软件变形技术

为规避恶意软件检测器和分类器的自动检测,恶意软件采用了一系列自保护的变形(transformation)技术,有时也称为隐身(Stealth)技术,包括熟知的混淆、代码加密、密钥置换、动态加载、代码反射和本地代码执行等。

DroidChameleon将变形分为3类:平凡的变形;通过静态分析可能发现的变形与只有通过动态分析才能发现的变形。平凡的变形不需要进行代码级的改变或AndroidManifest中存储的元数据的改变。例如重打包;反汇编与再汇编。通过静态分析可能发现的变形包括:重命名包;重命名标识符;数据加密;代码重排序;无用码插入;组合变形技术等。只有通过动态分析才能发现的变形包括:代码反射与字节码加密。

Android攻击方式与安全分析相关推荐

  1. 物联网设备是如何被破解的?分析一种篡改IoT固件内容的攻击方式

    随着智能硬件进入到人们的生活,人们的生活质量开始有逐步的提高,人们与智能硬件之间的联系更加紧密.同时,智能硬件的安全问题也必须引起高度重视,因为其直接影响到人身安全.社会安全和国家安全. 大家是否有想 ...

  2. Android自定义权限CVE漏洞分析 (IEEE论文)

    文章目录 前言 自定义权限早期漏洞 1.1 Android权限机制 1.2 自定义权限升级漏洞 1.3 confused deputy attack 自定义权限近期漏洞 2.1 黑盒Fuzz工具原理 ...

  3. 一种新的攻击方式:使用Outlook 表单进行横向渗透和常驻

    本文讲的是一种新的攻击方式:使用Outlook 表单进行横向渗透和常驻, 背景 最近我们针对CrowdStrike服务进行例行调查,发现了一种攻击方法,其主要用于横向渗透和系统常驻,而且是以前我们没有 ...

  4. mysql注入式攻击_SQL的注入式攻击方式和避免方法

    SQL 注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到 SQL Server 的实例以进行分析和执行.任何构成 SQL 语句的过程都应进行注入漏洞检查,因为 SQ ...

  5. 灰帽黑客:正义黑客的道德规范、渗透测试、攻击方法和漏洞分析技术(第3版)

    基本信息 灰帽黑客:正义黑客的道德规范.渗透测试.攻击方法和漏洞分析技术(第3版)原书名: Gray Hat Hacking: The Ethical Hacker's Handbook, Third ...

  6. Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家

    Android  Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...

  7. Android RelativeLayout和LinearLayout性能分析

    今天,简单讲讲android里RelativeLayout和LinearLayout的性能比较. 之前,我看到代码优化时需要将界面扁平化,所以查询了如何优化解码,了解一下RelativeLayout和 ...

  8. c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...

    在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析​zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...

  9. 【Android 修炼手册】Gradle 篇 -- Android Gradle Plugin 主要 Task 分析

    上文回顾 上篇文章里讲了 android gradle plugin 的整体流程,引入插件以后生成了很多 Task,这篇文章就谈谈生成的这些 Task 都有什么用处,以及一些主要 Task 的实现 预 ...

最新文章

  1. 打牌软件可以控制吗_使用crm软件真的可以帮助企业省钱吗
  2. multiprocessing 多进程
  3. 服务器要最多能装多少个cpu,服务器主机可以装多少个cpu
  4. python 代码-代码的重试机制(python简单实现)
  5. 《谷歌和亚马逊如何做产品》
  6. STM32F103构建固件库模板(PS固件库文件树介绍)
  7. PL/SQL Developer使用技巧总结
  8. css实现发光的input输入框
  9. edxp显示未安装_智能水表安装使用注意事项
  10. Python:print用法大全
  11. centos7 安装openocd
  12. tx2开发板接口详解_Linux CAN编程详解
  13. 通信原理中的erf/erfc函数
  14. 飞鸽传书——空号检测
  15. 【论文阅读】中医类药性分析:使用机器学习方法预测类药性
  16. 计算机系统文件夹图标不见了,为何我的电脑文件夹的图标都没有了
  17. drupal8 自定义主题开发步骤
  18. CAN、485隔离电路分享
  19. Unrecognized Windows Sockets error: 10106: Socket creation failed
  20. DVI-A、DVI-D、DVI-I接口定义、DVI接口图和DVI接口标准介绍

热门文章

  1. 笔记本装android,没有什么不可能 笔记本装Android系统实录
  2. 国产操作系统: 盘点8款国产Linux桌面操作系统
  3. 图解Git分支和命令
  4. Microsoft Word中自动编号有参考文献识别不到的问题
  5. Spring 项目无法解析包含 uri http://java.sun.com/jsp/jstl/core 的 taglib
  6. ArduBlock 多久没更新了-安装很简单on mac
  7. Java 多张图片 转PDF格式
  8. 基于Android的图书馆借阅占座座位app
  9. PyQt5组件之QPixmap
  10. python建筑设计运用_很好用的几个建筑设计软件,裂墙推荐