(翻译)FakeKaKao木马分析
这是暑假时看到的一篇病毒分析文章,觉得里面有很多东西值得学习,刚好这几天有空就将它翻译了出来。有不对的地方请大家指正!
FakeKaKao木马分析
Virus Bulletin是一个关于流氓软件与垃圾邮件防护、侦测以及移除的杂志。它经常给出一些关于最新病毒威胁的分析,发表探索反病毒领域的最新进展,采访反病毒的专家,并且评估现存的反病毒产品。
1 假冒的KaKaoTalk安全插件分析
Android/FakeKaKao木马将自己伪装成一个KaKaoTalk安全插件,以诱导用户安装。一旦用户安装了这个插件,它就会监视收发的短信,发送垃圾短信,收集敏感信息并提交到远程服务器。更加严重的是,它组合了反调试和反模拟器跟踪的功能,这样就使得一些安全软件失效。并不同于其他恶意软件,此木马的dex文件主要作为一个加载器存在。在本文中,通过剖析此恶意软件的行为,我们将会看到一些调试和分析的方法。
1.1 APP加载器
加载器注册了3个组件:MainActivity, ActionReceiver以及MoriService。MainActivity用于启动一个精心设计的用户接口来误导用户,如图1所示:

ActionReceiver用于接收android.intent.action.USER_PRESENT广播,当设备被唤醒的时候,系统会发送此广播。为了确保尽可能早地接收到此广播,该恶意软件将此Receiver的intent filter权限值设为0x7fffffff。当一个广播到达的时候,MoriService组件就会在后台启动,此服务的调用方法在本地库libEglsv1.so中。为了顺利地运行此恶意软件,它请求了如下权限:
|
• READ_SMS • READ_CONTACTS • READ_PHONE_STATE • SEND_SMS • WRITE_EXTERNAL_STORAGE • WRITE_SMS • INTERNET • RECEIVE_SMS |
1.2 反调试和JNI初始化
启动了的service首先加载libEglsv1.so到恶意软件的进程地址空间。当一个库被初始化的时候,它就会尝试检测它是否正在被调试或运行在模拟器中。如果发现了两者之一,就会设置一个反调试和模拟器的标记,用于过后的操作:
|
• strace • ltrace • android_server • gdbserver • gdb • tcpdump • ro.kernel.qemu • /system/bin/qemu-props • /system/bin/qemud |
完成初始化工作之后,它会通过RegisterNatives注册6个native方法。然后调用SetJNIEvn方法来初始化JNI环境变量,此变量用于调用其他的native方法。但是,如果反调试标记为真,那么剩下的native方法就什么也不做,以防止安全人员的分析。图2展示了native方法的注册过程:

1.3 C&C通讯
恶意软件收集被感染设备的用户私密信息,然后使用AES-192算法加密这些信息。在将这些加密信息发送到远程服务器之前,它先从加密的config.js文件中提取远程服务器的列表,这个文件包含在APK文件中,也使用AES-192加密。更加巧妙的是,它不仅仅加密了这个配置文件,还使用调用uncompress API解压远程服务器列表。图3展示了解密后的服务器列表:

在上图中,我们可以看到两个服务器信息条目:第一个用于网络测试;另一个才是真正的C&C服务器信息。
收集到的信息将会被分割为两部分,我们将之称为ID部分和MD部分。ID部分包含如下信息:
|
• id IMEI • token product brand and model • target build version • rd flags existence of /system/bin/su or /system/xbin/su • fo compromised phone number |
MD部分包含如下信息:
|
• md same as id • fo compromised phone number • ds contact name and number list |
恶意软件首先向远程服务器发送ID部分,用以注册受感染的设备。如果服务器返回数据‘0’,那么它就会发送MD部分。如果返回为‘1’,就不会发送。图4展示了一个样例:

然后,它从远程服务器中请求过滤规则。这些规则用于过滤接收到的短信和SMS数据库。恶意软件使用下述的关键字来筛选信息:
|
• plist matches phone number of message • klist matches message content • blist matches nickname of message • allmsgs spam message content • snumber specific phone number by malware • smsg message which is sent to snumber • allmsg another spam message content • checked flag, sends spam message or not • unlock flag, stores the contact list or not |
图5a和5b展示了一个过滤规则的事例:


恶意软件会记录此service每次启动的时间,当service下一次启动的时候,它就会重新发送收集到的信息,并且如果交互时间间隔大于30分钟的话,还会请求新的过滤规则。
1.4 监视短信
为了监视短信,软件会首先通过registerReceiver注册一个新的广播receiver。然后它将receiver的intent fileter的权限值设为0x7fffffff,以确保其拥有最高的接收优先级,进而在第一时间处理短信。无论短信什么时候达到,软件都会使用上面提到的规则进行过滤——比如,匹配电话号码,搜寻消息内容等。软件还将调用abortBroadcast方法来防止它感兴趣的消息被发送给其他低优先级的receiver。
为了监视SMS数据库的变化,软件通过registerContentObserver注册了一个内容观察者。无论数据库什么时候发生了变化,它都会采用类似于检测短信的方式检测每一条消息。
无论匹配的消息来自于receiver还是observer,软件都会加密它们并发送至远程服务器。并且只要receiver或observer被触发,软件都会重新发送收集到的信息,并请求新的过滤规则。
1.5 发送短信
是否发送垃圾短信是由过滤规则中的关键字"checked", "allmsgs", "allmsg"的值决定的。如果"checkes"值不为0,并且"allmsgs"或"allmsg"不为空,软件就会向联系人列表中的每一位联系人发送垃圾短信。发送垃圾短信的间隔时间是40秒。如果受感染的设备号码为空,它会就发送关键字"smsg"的内容到有关键字"snumber"指定的号码中。另外,它也会从本地数据库中删除自己的发送短信记录,以销毁证据。
1.6 自我保护机制
在这一部分,软件尝试将FOTAKILL.apk安装到/system/app/folder目录下。FOTAKILL是一个第三方应用程序,用来阻止FOTA(Firmwate Over-The-Air 更新服务)。其实FOTA的初衷是用来防止更新固件后清除用户已经获得的特权,如root权限。为了安装这个APK,软件通过getuid来检测用户的UID。如果UID是root,它就会读取/data/system/packeges.list文件,这个文件记录了设备上所有已经安装了的APK信息。如果此列表包含任意下述安全相关的字符串,它就会通过"pm disable"命令来关闭这些软件:
|
• com.avira.android • com.antivirus • com.kms • com.wsandroid.suite • com.qihoo360.mobilesafe • com.ijinshan.duba • com.tencent.qqpimsecure • com.anguanjia.safe • com.lbe.security • com.netqin.mobileguard • com.avast.android.mobilesecurity • com.estsoft.alyac • com.lookout • com.zoner.android.antivirus • com.symantec.mobilesecurity • com.drweb.pro • com.drweb • com.drweb.pro.market • com.symantec.mobilesecurity • com.symantec.monitor |
1.7 分析方法
众所周知,在Android平台使用native编码的一个坏处就是它会增加应用程序的复杂度。此软件就是使用了这个特性通过增加逆向分析的难度,从而达到保护自己的目的。调试native库的一个通用方法就是attach调试器到目标进程。但是,在这个案列中,我们可能无法attach到进程,因为此应用程序已经运行过了我们想要下断点的地址。所以,我们需要知道如何在我们想要调试地址下第一个断点。最简单有效的方式就是使用一条单指令进入无限循环状态。在我们想下断点的地址处,可以使用一个无条件跳转指令代替我们原来的指令。鉴于native库是基于ARM架构的,所以更改后的指令格式如下:
|
Set |
Formate |
Byte code |
|
THUMB |
1110 0XXX XXXX XXXX |
FE E7 |
|
ARM |
1110 1010 XXXX....XXXX |
FE FF FF EA |
|
译者注:将自己想要下断点地方的指令换成上面的 byte code即可完成 {B 自己}指令,这就实现无条件无限跳转了。 |
||
不用重打包修改后的 APK,我们只需要使用adb替换掉当前库即可。下面分析人员就可以逐步分析病毒了。
(翻译)FakeKaKao木马分析的更多相关文章
- 攻打医院服务器的SamSam勒索木马分析
攻打医院服务器的SamSam勒索木马分析 近日一款名为SamSam的勒索木马在国外爆发.该木马利用医院系统的服务器漏洞实施入侵,再进行加密勒索钱财.由于医院网络信息安全水平普遍薄弱,SamSam成功感 ...
- 木马分析出现python语言,360的安全人员不禁感叹还有这种操作?
几年前,敲诈者木马还是一个默默无闻的木马种类.然而,由于其极强的破坏力和直接且丰厚的财富回报,敲诈者木马这几年已经一跃成为曝光率最高的木马类型——甚至超越了盗号木马.远控木马.网购木马这传统三强.与此 ...
- “Xavier”安卓木马分析:可静默收集数据并远程代码执行
趋势科技研究发现了一款Android恶意木马——Xavier.在谷歌Play应用市场中,超过800款Android应用感染了该恶意木马,影响数百万Android用户.感染的应用范围覆盖图片编辑器,墙纸 ...
- 孟加拉央行SWIFT攻击事件恶意木马分析(转)
第一章 分析概述 该恶意木马样本为运行于winodws平台上的PE文件(名称:evtdiag.exe).文件大小为64KB,编译时间是2016年2月5日. 经分析,该样本为定制的攻击SWIFT客户端程 ...
- Ztorg木马分析: 从Android root木马演变到短信吸血鬼
本月第二次,Google 从官方应用商店 Google Play 中移除了伪装成合法程序的恶意应用.被移除的应用都属于名叫 Ztorg 的 Android 恶意程序家族.目前为止,发现的几十个新的Zt ...
- Emote木马分析
前言:网上找的样本是EXE的,没有邮件样本,所以只做了exe分析. 一.Emote木马相关信息 文件: C:\Users\Desktop\Samp.exe 大小: 249856 bytes 文件版本: ...
- 伪装为 吃鸡账号获取器 的QQ木马分析
本文作者:i春秋作家坏猫叔叔 0×01 起因随着吃鸡热潮的来临,各种各样的吃鸡辅助和账号交易也在互联网的灰色地带迅速繁殖滋生.其中有真有假,也不乏心怀鬼胎的“放马人”.吃过晚饭后在一个论坛看到了这样一 ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- “DNS隧道”盗号木马分析——类似hjack偷密码然后利用dns tunnel直传数据发送出去
摘自:http://www.freebuf.com/articles/network/38276.html# 运行后不断监控顶端窗口,一旦发现为QQ,就弹出一个自己伪造的QQ登陆窗口,诱导用户输入密码 ...
随机推荐
- JAVAOOP多态
概念:不同对象对于同一个操作做出的相应不同 实现方法:父类:抽象类 抽象方法 子类:普通类 重写抽象方法 同名 父类:普通类 普通方法 子类:普通类 普通方法 同名 父类:接口 抽象方法 实现类:普通 ...
- composer安装教程(Linux版)
composer 是款不错的工具,那么如何进行安装composer呢 如果您是linux系统或是mac系统 请先确定是否安装了curl linux安装curl 1 yum install -y c ...
- Codeforces Round #449 (Div. 2) C. DFS
C. Nephren gives a riddle time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- [Bzoj1037][ZJOI2008]生日聚会(DP)
Description 题目链接 Solution 这题状态比较难想, \(dp[i][j][g][h]\)表示强i个人有j个男生,在某个区间男生最多比女生多g人,女生最多比男生多h人的方案数,然后D ...
- 1,Python常用库之一:Numpy
Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! Numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,Numpy的速度比Python列表的速度 ...
- Altium Designer之模块复用——设备图表符与Snippets
Altium Designer中的设备图表符(Device Sheet Symbol)和Snippets是设计中模块复用的利器,下面简单介绍下这个两个功能的使用. 一.设备图表符(Device She ...
- P1800 software_NOI导刊2010提高(06)(二分答案)
P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...
- python3知识点之---------列表的介绍
1.列表是什么? 它是由一系列特定顺序排序的元素组成.元素可以表示一切任何的事物,元素之间可以没有任何关系.列表用方括号[ ] 表示,元素之间由逗号隔开. 例如表示一系列数字的列表: numbe ...
- python 学习分享-select等
首先列一下,sellect.poll.epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组(在linux中 ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...