fireeyee解剖新型Android恶意软件
总结
你是否下载安装过体积很大但是UI或者功能很少的Android应用程序?最近,FireEye实验室移动安全研究人员发现了一种新型的手机恶意软件,在看起来普通的应用下内嵌着加密过的附件程序,很好的隐藏了其进行恶意活动。
恶意app程序会伪装成Google Play商店,尤其是其图标完全模仿了主屏幕上Google Play的图标。一旦安装成功,黑客使用一个动态的DNS服务器和通过SSL协议的Gmail来搜集Android设备上的文本信息、签名证书和银行密码。
下面是主程序、附件程序、恶意代码之间的关系图:
恶意程序的包名为com.sdwiurse,程序名为“google app stoy”。由于“卸载”功能被禁用,设备感染后Android用户不能卸载该程序,并且程序会继续以服务的形式在后台运行。这些服务能够手动停止但是会随着手机的重启而重启。
由于该恶意程序的独特打包压缩特性,截止2014年6月13日,该程序在Virus Total的识别率只有3/51。因为大多数公司只使用基于签名的算法来检测恶意软件,他们无法检测到隐藏在普通程序中的恶意内容。
我们注意到该恶意程序大小为1.7MB但只有711行代码。asset文件夹下的一个最大的单文件,名为“ds”并具有597KB的大小。在解压和解密后,真正的dex包文件将整个程序的大小扩大至2.2MB。黑客用少量代码的规避技术来掩盖其恶意程序的真正目的。
用户体验
安装完成后,主屏幕上会多出一个新图标“google app stoy”。该图标跟真正的“Google Play”一样,这样可以迷惑用户点击它。一旦点击,应用程序会要求获取设备的管理员权限,如图:
当我们继续观察应用程序的行为时,应用程序会弹出唯一的用户界面说:“程序错误”和“删除!“。接下来,程序终止并出现通知消息“Unfortunately, google app stoy has stopped.” 出现这种情况后,在主屏幕上的应用程序图标自动删除,欺骗用户认为它真的已经删除了。
然而,当打开“设置->应用程序,我们仍然可以在“下载”选项卡中找到应用程序和“运行程序”选项卡。此外,在“下载”选项卡中,应用程序不能被停止或卸载:
在“运行程序”选项卡中,恶意程序开始运行五个服务:
1. uploadContentService
2. UninstallerService
3. SoftService
4. uploadPhone
5. autoRunService
加密
该文件是用如图所示的Java Cryptographic Extension (JCE)框架中的javax.crypto包来加密的。
加密算法是基于数据加密标准(DES)。strKey是“gjaoun”。在文件被解密后,它会以dex类加载:
所有的恶意行为都在这个dex文件中。
恶意行为
在恶意DEX包的源代码中,“class.dex”是从加密文件“x.zip”解压缩出来的。在分析这段代码时,我们发现从感染的Android设备窃取私人信息有三种方式。我们将介绍恶意软件的工作原理并分析网络流量中恶意行为的证据。
1. 窃取SMS信息
在代码中,ak40.txt是/storage/sdcard0/temp/文件夹中一个包含字符串的文件。当内容为1时,SMS消息会被发送到一个电子邮件地址。电子邮件地址和密码都存储在/storage/sdcard0/temp/目录下的文件中。黑客所用SSL协议的Gmail来规避大多数AV厂商在网络流量中的特征检测方法。
2. 窃取签名证书和密钥
变量v1是Android手机的电话号码,Url.getSDPath()是安装存储的temp目录:
同名的“all.zip”文件会被上传到服务器,并命名为“{PHONE_NUMBER}_npki.zip”附件通过Gmail发送。
3.窃取银行账号密码
网络流量
1.SMS消息发送
因为目标email地址和密码都是保存在手机中的,我们将其替换为一个测试账号,这样测试的SMS消息被截获后将重定向至模拟的测试邮箱账户中。下面是我们从测试账户中截获到的短信:
时间戳显示电子邮件地址接收到的内容(在9:39 pm)这距受害者的短信接收(在9:38 PM)的时间间隔在1分钟内。
2.签名证书和密钥传输
我们抓到的Pcap数据包显示,“all.zip”被上传到域名“dhfjhewjhsldie.xicp.net”:
同一文件更名为{PHONE_NUMBER}_npki.zip并以Gmail附件方式使用SSL加密发送。下面的图片显示,从附件解压后,恶意程序软件传输到SMTP服务器的签名证书文件和签名用到的密钥。
3.银行账户密码传输
我们发现了包含有受害者账户及密码的email证据并与Google的Gmail工作组通报了黑客的Gmail账户。
via fireeye
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- docker上部署MySQL实例
- Tomcat 高并发之道原理拆解与性能调优
- Redis运维之swap空间
- MySQL组复制(MGR)全解析 Part 4 MGR单主模式部署前准备
- Spring 中的自动装配
- antlr4入门篇
- 定位生产问题时,异常堆栈莫名丢了,何解?
- 一个爬取用户所有微博的爬虫,还能断网续爬那种
- MySQL组复制(MGR)全解析 Part 8 多主模式部署指南
- MySQL组复制(MGR)全解析 Part 9 MGR的要求和限制
- MySQL Galera Cluster全解析 Part 3 状态快照传输(SST)
- 一口气搞懂「文件系统」,就靠这 25 张图了
- Oracle ASM 环境增加控制文件
- 利用注解进行 Spring 开发
- 40张图揭秘,「键入网址发生了什么」