今年端午节特意动用带薪年假,在家本着远离黑客,远离江湖,舒舒服服和家人享受几天假期,谁知却早已深陷江湖。
6月11日中午叔叔找上门,说自己的银行卡莫名被盗刷了8万1千元,钱被打到了平安付科技服务有限公司客户备付金,以及同样摘要为平安的广州银联网络支付有限公司客户备付金,如下图:
于是上网搜了一下平安付科技这家公司得到如下信息:
平安付科技本身是一个第三方的支付平台接口,钱转到平安付科技账上后可以用来投资、理财等,赶紧给平安付科技客服去了个电话,客服那边问了相关信息后却让等3天才能给结果,这服务态度~(此时叔叔已经在当地刑警队报案)。
我仔细推敲了这个事情,钱是被打到平安付的旺财上,对方需要绑定银行卡,需要用到的信息有:银行卡、身份账号、银行预留的手机号码、短信验证码。前面的信息都容易掌握(目前网络上有大量的泄露的银行卡号、身份证号、手机号等信息)况且叔叔每次和客户打款时也会把自己的银行卡号、身份证号发给对方,所以这些信息默认早就泄露了,这里的关键是如何得到的短信验证码,且通过图1可以看出,犯罪分子利用平安付转走了4比钱,且最后一笔1000元都没有放过,说明对方掌握了此张银行卡的余额信息。
到这里总结出了两点:
对方掌握了1、手机号码实时短信验证码;2、银行卡的余额信息。
想到这里最先想到的是短信木马了。于是拿出他的手机,查看短信权限时赫然看到了短信权限处存在一个叫做“校讯通”的应用,安装日期正是6月10日。由于叔叔的孩子还在上中学所以经常会收到相关校讯通的短信,他10日当天正好收到了一条提示安装校讯通的短信,也没有多想就直接安装上了。
到这里事情的起因已经很接近了,很可能是这是一个木马程序窃取了他的短信内容,叔叔满脸质疑,丝毫不相信这样的事情也会发生他自己身上。
于是我继续访问这个IP地址,浏览器直接弹出提示下载校讯通.apk
拿到此APK后当立即开始分析(职业病又犯了,哎,我好好的端午节假期),这里发现这个版本的校讯通安卓木马程序已经进行了升级,与以往的此类程序多了很多新功能:增加了远程更改配置功能和呼叫转移功能,可以更改收信手机号码或发信帐号的密码,并能够呼叫转移联通和移动用户电话。
本次分析的样本特征值:
用来接收受害人短信的邮箱账号密码:
进入邮箱看了一眼,满眼都是泪,进去的时候此邮箱还在不停的接收着来自各地受害人的短信的邮件:
木马程序发送的受害人手机上所有的短信内容:
受害人手机上的通讯录,此木马提取被害人通讯录后会利用伪造的号码继续向通讯录好友发送伪装成校讯通的木马安装短信,从而继续扩大安装范围:
受害人手机第一次感染运行后发来的上线信息:
搜索了一下平安关键词,果然找到了绑定平安付等第三方支付的短信内容:
当然除了平安付平台外还有支付宝等:
这里要特别给支付宝的企业责任精神点个赞,我第一时间联系了这位受害人,受害人被盗走的钱中通过支付宝划走的这一份部分已经得到全额赔付,而平安付的这笔仍然还在等待中。
asw6eih.vby.MainActivity
1、申请系统管理员权限
2、设置完毕之后检查是否有了相应的权限,即是否被用户接受。
3、设置默认处理软件为当前App软件
之后检查是否被设置为默认处理软件。
我们注意到了下面这一行代码,这里的作用就是被设置为默认短信处理应用后就有权限拦截短信了:
而且在短信处理的Service中也确实发现了拦截的代码(SmsReciver):
通过BroadCast方式进行短信拦截仅在安卓4.4之前的版本有效,此时我们发现了针对安卓4.4版本,木马作者写了一个特殊的服务类:SmsReceiver4_4专门针对安卓4.4的版本。
4、 设置短信监听
asw6eih.vby.MainService
在用户启动应用的时候,不仅仅启动了一个Activity让用户做出一些响应,还启动了一个服务。
此时看邮箱里有不少中招的内容,如下所示,均来自该自动启动的服务:
在用户第一次启动时,注册自动启动组件,BootReceiver
AndroidManifest.xml中注册的事件
从下图可以看到BootReceiver继承自BroadcastReceiver
自动启动组件启动后,会根据安卓版本启动对应的MainService
所以发生以上的事件均会被触发启动:短信接收、系统启动、用户进入home界面、kill应用等
指令:sssxxx#1002#password (xxx可为任意内容,也可无)
来看asw6eih.vby.xxttth5.c这个类
从配置文件中取出v0,然后赋值给v5
其中有这样的一段
可以看到MailFrom_Passa是邮箱密码,接受v1的参数,其中参数v7是固定的值2,而参数asw6eih.vby.xxttth5.a.d是初始化的值,也就是最开始的时候看到的邮箱:
所以这一段作用是修改了当前邮箱的密码,并重新写入了配置文件。触发这一过程,指令是定义了特定的格式的,具体如下:
需要被执行label_129这个过程,而且v1的长度必须是v9的大小,v9是固定值3。
所以v1的格式应该为xxx#xxx#password
接下来就是switch case的过程(吐槽下这个程序效率……还好可以选择的不多):
可以看到case 1002的时候,而v0_1是v1的下标为1的值,现在的格式可以推定为(这里反编译软件给出的跳转存在问题):
xxx#1002#password
这个时候还差第一段的内容,我们继续看这个类,发现v1跟asw6eih.vby.xxttth5.a.b做了对比,如下图所示:
而asw6eih.vby.xxttth5.a.b的值实际上也做了定义,如下所示:
之后v1跟上面的值做了比较,其实也就是sss,如下所示:
截取了v1的前几位跟预定义字符串sss做比较(这里截取了3位)
之后定义了v3的值,其实是手机号。
控制字符串的大致格式为sssxxx#指令id#内容,由于流程内容太多,不一一描述。xxx可为任意。这里修改邮箱密码的指令应该为sssxxx#1002#password
指令:sssxxx#1011#13333333333 (xxx可为任意内容,也可无)
在下面一个字符串引起了我们的注意:
label_177,其中“转移号码设置成功”,进一步分析:
label_177来自1011指令,所以指令为sss#1011#command
c.a校验了手机号的格式,只能是13,14,15,17,18开头的手机,而且都是数字的,总共11位,可以说真是“经验丰富懂安全”的“开发人员”。
之后回复了:转移号码设置成功
并将该值放到了v5里面,也就是配置文件里面。
label_40是保存配置等,这里不多分析了。
所以,修改手机号码的格式为sssxxx#1011#13333333333,发送这样的信息就可以修改接收手机为1333333333了,注意手机号码一定得是合法的11位手机。
短信拦截功能
电话转接功能
我猜这个木马的设计者一定是个处女座,问题考虑的非常细致,这里竟然还设置了呼叫转移功能,在受骗者电话忙音的时候帮受害者接电话?
该类继承了BroadcastReceiver
当被触发时,会将电话转移到控制端。我们知道**67*手机号码#这是遇忙呼叫转移(联通/移动可用), 被转移到的号码其实就是控制端的手机号码。
木马有效期
我们发现一个奇怪的现象,在向系统注册这些组件的时候,木马做了一个判读,会判断c.b(),然后决策是否注册这些组件,如下所示:
上面的截图来自MainActivity也就是程序启动的主界面。
跟进这个方法发现是对时间的检查:
发现如果当前时间超过了设定的时间2016-10-01 14:01:00,会返回false,不再向系统注册该组件,否则返回true。也就是这个时间以后再有新用户安装就已经无效了。
1.安装手机杀毒软件定期查杀手机木马病毒。
2.定期检查手机的授权管理,如小米手机的安全中心-授权管理-应用权限管理-权限管理-短信与彩信相关权限,检查此类敏感功能处权限授予对象是否合法。
3.不要root手机(黑客除外)。
4.不要安装来路不明的应用,对于小白建议只安装手机品牌商店中的应用(起码安全性要高一些)。
5.购买银行卡盗刷理赔保险,任何时候多一道保险才多一份放心。
最后一句话也是最重要的:鉴于地下黑产牛的强大,我只能找个马甲来发表此文了。
雷锋网注: 本文作者豆芽菜,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)