研究报告《Dissecting Andro Malware》2011年的作品,在tobe的鼓励下,把他读完了,说不上一对一的翻译,把主要的大意摘录如下:
先说说恶意软件分析:
恶意软件分析其实是一个拆解它的过程,学习它的代码结构,操作,功能。通常以以下几点为目标:
理解漏洞如何被利用,系统受攻击的原因。
研究攻击的严重性以及防御措施
渗透到受攻击的数据,以便调查它的来源,获得更多其他受攻击机器的信息
取证调查员和系统工程师,通常利用逆向工程技术分析恶意软件,分析恶意软件的工作流程,执行了的操作,功能。由此来理解恶意软件对受害机器的文件,服务,代码和变量做了哪些增加或修改。这个分析通常有两种方法静态分析和动态分析,又叫行为分析和代码分析。
关于这个报告:
这个项目(指这篇报告)的目的就是理解Android恶意软件是如何工作的。这个项目会涉及到以下几个主要步骤:
创建独立的虚拟环境
静态分析
动态分析
总结每个分析的的发现和漏洞情况,编写统计结果报告
提出修复措施
这个项目还是一个逆向工程的参考材料,针对恶意软件用到的工具,方法论的一个参考。
转入正题:
静态分析,又称行为分析,通常分析和研究恶意软件的行为,研究恶意软件与所在环境如何交互,如何增加服务,篡改文件,截取数据,网络连接方式,端口打开情况等。把收集到的数据重新整合和映射到一起,以便进行全局的分析。
报告具体内容:
动态分析,又称为代码分析,也就是对恶意软件的代码进行分析,但是通常要对恶意软件的代码进行分析是非常困难,特别是要分析的通常是以编译过的二进制代码。所以需要反编译它为汇编代码,通过代码分析,逆向工程师从中提取内嵌的实际恶意代码。
恶意软件分析工具
实验环境工具--Virtual Box,VMware,Sandbox GFI
静态分析--Process Monitor,Wireshark,PEiD,TCPView,WinHex,Process Explorer,Winanalysis,Strings
动态分析--Ollydbg,IDA Pro,Dex2jar,JD-GUI,Baksmali,Apktool
恶意代码分析的目标终极目标当然是找出如何防范恶意软件的攻击了。这样就得回答两个问题,一个是,系统是怎样被攻击的,第二是恶意软件利用什么漏洞进行攻击。
(此处省略android系统架构性描述,android市场,android市场安全检测,一些目前已发现漏洞病毒,如CVExxx,都是些千篇一律的描述,没有翻译了。有兴趣的可以看原文,或者找对应的中文材料学习)
(此处在再次省略有关几个分析工具的简单介绍,包括VirtualBox的安装运行,android模拟器Emulator,反编译工具Apktool,监控工具wireshark,其他Dex2Jar,JD-GUI,这些都是必备工具,想必也不是靠一个报告三言两语说得清楚,具体用法个人觉得可以参考其他中文材料)
分析实例:
动态分析DroidKungFu2-A
首先,用7-zip解压恶意apk文件“droida.apk”,查看如下图所示:
包括了Android Manifest xml文件,classes.dex文件。恶意软件作者通常把自己的代码插入到原始代码中,以减少被怀疑的风险。他们修改了Android Manifest文件和其他apk中的文件后,用他们自己的key重新编译。下图显示了分析中发现修改过的Android Manifest文件。
当运行程序的时候,就会激活名为android.intent.action.MAIN的活动,而该获得会伴随激活com.enguan.state.Dialog活动,这个活动会触发两个服务,分别为com.eguan.state.StateService和com.eguan.state.Receiver。( android:name=”android.intent.action.MAIN” />就是apk最先启动的东西了。)为了弄清楚这些活动,就需要反编译apk文件了。这里就要用到Apktool工具了。下图显示使用Apktool进行反编译
反编译后如下图所示包含有Android Mainifest文件和dex文件。
通过分析文件中包含StateService的activity的代码,我们发现这段代码启动了一个名为com.eguan.state.StateService的服务。它创建了一个intent object的实例,创建了一个com.eguan.state.StateService类的对象,把这个对象传给constructor之后通过其启动了名为startService的服务。然而要更深入的分析就必须分析Java代码了。于是就利用Dex2Jar工具,把Dalvik可执行文件.dex转换为Java的.class文件。命令如下图所示:
转换后,把生成的jar文件导入JD-GUI工具中,就可以列出所有的包和它对应的java文件了从中查找启动服务的对应代码:
Intent intent = new Intent (this, com.eguan.state.StateService.class);
startService (intent);
由此com.eguan.state.Dialog Activity退出后,但是com.
eguan.state.StateService服务仍然在后台运行,最初的activity在已经在设备上运行,但是用户并没有察觉到可以的activity在后台运行。一旦该服务启动,恶意软件就在后台收集窃取信息,包括IMEI号码,手机模式,Android版本等,如下图所示:StateService的java代码分析
UpdateInfo()函数负责把收集以上信息,利用StringBuilder函数写入到本地的/data/data如下图所示:
这些数据随后会发送到一个远程的服务器上。利用wireshark抓包分析可看到源地址10.0.2.15(手机)发生到目标服务器58.63.244.72,如下所示:
通过分析抓包文件,如下图所示:
对以下经过URL加密的请求解码
o r r e t a i n s f
http://gw.youmi.net/reqad?aid=dd598637f9461413&da={%22w%22%3A320%2C%22dd%22%3A%22HTC%20Magic%22%2C%22dv%22%3A%22smc_voda_wwe%22%2C%22ts%22%3A%220%22%2C%22sv%22%3A%221.1%22%2C%22po%22%3A%22android%201.5%22%2C%22cid%22%3A%22162fbcbb180446ef5573b679baad3f30%22%2C%22h%22%3A480}&out=0&rt=2010-05-29%2012%3A25%3A31&src=3&ver=1.0&sig=ERMdekHHiUYznbRN%2BK5MJ49Oyvw%3D
可发现
包括了mobile model名称“HTC MAGIC”Android的版本1.5,IMEI号码,和其他参数。
漏洞利用代码分析
当activity运行的时候,Service就会启动,从而加载create()函数的代码,如下图所示:
而该函数里面有一个getPermission()的方法,检查是否有root访问权限。通过检查su是否在设备上安装来实现。如下图所示。
通过checkPermission检查设备是否已经越狱。
如果没有,就尝试访问一个叫secbino的本地文件,并从asset 目录复制漏洞利用代码,并改变其访问权限,如下图代码所示:
成功后就会执行漏洞利用代码,由oldrun函数负责执行越狱操作。如下图所示:
当越狱成功后,就可在用户不知情情况下下载更多的恶意软件了,并进行安装,删除等操作。
静态分析:
首先是通过virutotal.com多引擎杀毒网站扫描,显示53%的杀毒引擎都报告有毒。
之后,通过adb命令把该apk应用往android模拟器–AVD(Android Virtual Device)安装。命令如下图所示:
安装成功后,运行该程序。原始的activity会载入com.al len.txthej包,同时内嵌了恶意代码com.eguan.state包,运行效果如下图所示:
恶意activity,com.state.eguan.Dialog在后台运行,这时它还不需要root访问权限,而原始的com.allen.txthej activity也是启动起来的。如下图所示,原始服务和恶意activity同时运行:
由于程序是运行在Android SDK环境中,该环境没有提供root访问权限,因此不运行SDK被越狱,所以当程序尝试去root权限访问时就会抛出异常
(此处个人觉得原文的静态分析这部分也简单了一点…很多前面提到的静态分析工具,Process Monitor,Wireshark,PEiD,TCPView,WinHex,Process Explorer,Winanalysis,Strings都没看到发挥用场。另外也有个疑问,对于那张同时看到原始服务和恶意activity同时运行的图是怎么看到的,直接看设置无需借助工具?还是用了什么工具呢?)
分析总结:
DroidKungFu-2A这个恶意软件,会截取IMEI号码,手机模块名称,SDK版本,然后存储到一个本地文件,随后通过HTTP GET请求的方式把信息使用URL加密发送到远程服务器。恶意软件还会检查设备是否已经被越狱,如果没有就会尝试访问SU,并改变其权限,成功后就会下载更多的恶意软件包,实现远程安装和卸载程序包,修改浏览器主页等。
建议:
从可信源下载应用
在程序安装的时候,检查其许可要求
操作系统和软件都要更新到最新版本,安装必要的安全补丁
下载安装一个杀毒引擎并保持更新
检查正在浏览的网站,通过AD/Script拦截器保护免受恶意代码侵害
禁止自动运行特性,经常备份系统
启用防火墙
下载应用时,检查一下他的评分和评价情况
不要通过没有密码或不经过加密的wifi热点上网浏览敏感数据
警惕是否的警告,是否系统中出现了不正常的行为。
最后,本文需要用到的基础知识包括Android中activity的概念,Intent的概念,Android Manifest xml文件结构等等知识,所以这里所翻译的只是冰山一角,真正只能是抛砖引玉。而且后来找资料才发现原来这篇原文,多次出现在入门必看的list中,连诸葛博士也推荐了一把。建议还是看原文的好。