Android沙盘原理与实现

发表于:2013-04-18来源:Csdn作者:Jack_Jia点击数: 标签:Android
据网秦发布的《2012年上半年全球手机安全报告》,2012年上半年Android病毒感染量增长迅猛,尤以5、6月最为突出,上半年感染手机1283万部,比2011年下半年增长62%。

  【作者】:riusksk(泉哥)

  【团队】:腾讯安全应急响应中心

  【微博】:http://t.qq.com/riusksk

  【博客】:http://riusksk.blogbus.com

  【日期】:2012年10月2日

  一、前言

  据网秦发布的《2012年上半年全球手机安全报告》,2012年上半年Android病毒感染量增长迅猛,尤以5、6月最为突出,上半年感染手机1283万部,比2011年下半年增长62%。在全球范围内,中国大陆地区被感染率占居首位。面对增长如此迅速的Android软件,安全研究人员常常需要逆向分析样本,分析出其恶意行为,但手工分析较费时间。在DEX文件反混淆技术的不遍推广和普及下,比如今年的BlackHat就有DEX反混淆的专题及相应工具公布,现在已有很多恶意软件使用到这些反混淆技术,这就加大了样本分析的难度及所花费的时间。本文主要讲述如何利用Android沙盘实现自动化分析恶意软件的方法,其中介绍了Android沙盘的原理,以及由笔者编写的Android沙盘——MalDroidAnalyzer,后面会提供由MalDroidAnalyzer分析真实病毒时自动生成的分析报告。

  二、Android常见恶意软件行为

  1、恶意扣费

  病毒在后台发送扣费短信、拔打电话进行恶意扣费,同时会对服务商发回的服务短信进行屏蔽,破坏系统的正常功能,同时对用户造成资费损失。

  2、隐私窃取

  病毒通过后台服务窃取用户隐私信息,包括通话录音、短信内容、IMEI、IMSI、地理位置、通讯录、浏览器历史记录等信息,然后上传到黑客控制的远程服务器

  3、远程控制

  病毒在后台开机自动,并与C&C服务器进行通讯,并从中获取加密的指令,解密后执行相应的恶意操作,也有通过SMS进行控制,构造出botnet,从而大规模地远程控制用户的手机。比如之前著名的AnserverBot病毒,就是通过新浪博客进行远程控制,也是首个利用第三方站点作为C&C服务器的Android病毒。

  4、系统破坏

  病毒通过系统漏洞进行ROOT提权,并执行高权限操作,在后台静默安装子程序包,或者通过伪造成杀毒软件、提示更新等方式欺骗用户安装第三方恶意程序。病毒可能会更改网络状态、APN,或者替换系统文件、添加恶意书签、屏蔽运营商短信、中止杀软进程等方式进行系统破坏。

  5、其它

  病毒在后台联网下载大量软件,消耗用户手机流量,或者执行一些比较耗电的操作来消耗手机电量,进而影响正常的手机通信。也有些一些病毒通过钓鱼欺骗等方式,诱骗用户下载伪装软件,导致帐户密码失窃。

  三、Android沙盘原理

  本文主要介绍一款Android恶意软件行为自动分析平台——MalDroidAnalyzer,其主要结合静态分析和动态分析技术来实现恶意软件行为自动化分析。MalDroidAnalyzer是笔者使用Perl语言编写的,用于辅助分析Android软件行为,提高恶意软件的分析效率。

  首先,MalDroidAnalyzer直接以apk文件作为输入,整个分析过程主要分析两部分:静态分析和动态分析。静态分析会通过反编译apk文件,分析其中的权限、组件、敏感函数等信息,这些可以弥补动态分析中因未触发恶意行为而漏掉的行为。动态分析主要通过在模拟器运行Android软件,然后再对软件进行一些操作以触发尽可能多的恶意行为,接着输出到log中,再通过脚本对日志进行分析。由于Android系统默认情况下,一些输出日志里面缺乏我们所需的信息,比如发送短信时,只在log中记录手机号,而没有短信内容,此时就需要通过修改Android源码或者反汇编system.img中的相关类或者库进行修改,可以在短信发送函数sendTextMessage(位于system.img中的framework/framework.jar)里面添加短信内容的日志输出:

  下面是可能需要修改的相关文件,包括源码位置和编译后所对应的相关文件,可根据自身需要进行修改:

  发送短信:android.telephony.SmsManager(system.img中的framework/framework.jar)

  文件操作:org.apache.harmony.luni.platform.OSFileSystem(system.img中的framework/core.jar)

  网络操作:org.apache.harmony.luni.platform.OSNetworkSystem(system.img中的framework/core.jar)

  拔打电话:android.app.Activity(system.img中的framework/framework.jar)

  启动服务:android.content.ContextWrapper(system.img中的framework/framework.jar)

  数据加解密:javax.crypto.Cipher(system.img中的framework/core.jar)

  核心库:dalvik/vm/native(system.img中的lib/libdvm.so)

  关于apk文件及MalDroidAnalyzer的工作流程如下图所示:

  1、静态分析

  沙盘MalDroidAnalyzer主要在电脑端对APK进行静态分析,通过apktool先进行反编译处理。正常的APK文件主要是以zip格式进行压缩捆绑的文档,里面主要包含AndroidManifest.xml、Classes.dex和res等文件。在反编译后会得到明文的AndroidManifest.xml,里面定义各组件、组件权限和启动位置、软件基本信息等,通过对该xml文件的分析,可以获取到软件名称、包名等基本信息,同时对包含的各个组件进行分析,特别是Broadcast Receiver组件的触发条件,可能就包含有开机自启动项用于启动后台服务,这些在报告中都会被高亮显示出来。

  在动态分析过程中,可能由于恶意行为的时间限制,或者模拟器的功能限制(比如蓝牙、Wifi),导致病毒的一些恶意行为无法触发。此时,我们通过检测Android软件调用的API函数可弥补这里的不足,比如发送扣费短信通常会调用sendTextMessage()函数,执行外部命令可能会调用java.lang.Runtime.exec()。下面是笔者收集整理的一些敏感API函数列表,欢迎各位读者补充和改进:

  my %apis = (

  "IActivityManager\$Stub\$Proxy\;\-\>shutdown" => '关机',

原文转自:http://blog.csdn.net/jiazhijun/article/details/8667129