目前,以“积分兑换”名义兴起的钓鱼网站横行于互联网,多数网民曾收到这类诱骗登录后安装手机木马的钓鱼短信,而手机一旦被植入木马将很难删除。木马会窃取手机用户的大量个人隐私,并通过短信广播对手机通讯录中的所有联系人群发钓鱼短信,以扩大感染面积。保守估计,2015年网民通过各类钓鱼短信及诈骗短信损失的金额约百亿元。
猎豹安全实验室的云端监控数据显示,某月截获的“短信拦截”类样本变种数量超过10万个,影响用户数达数百万。短信拦截木马作为安卓手机病毒的一类常见样本,近年来显现出爆发增长的趋势,其背后的黑色产业链也日益发展壮大,短信拦截木马的日趋泛滥已经成为移动支付、网银财产等环节的重点安全问题。
收集手机木马文件的步骤如下。
01 收集欺诈网站地址
在日常生活中,我们经常会收到“10086”号码发送的短信通知,告知用户进行积分兑奖,然后给出一个短链接地址或者正常的网站地址,单击该地址会要求用户输入银行卡密码、手机号码、银行卡号、姓名等敏感信息,同时还会要求用户下载apk文件。例如,在某短信中提及的网站“l0086wrd.cc”明显不是10086的官方网站,而是典型的10086移动积分兑换网站。用户在登录网站的过程中输入银行卡信息,完成后跳转到木马下载页面,如图6-14所示。
02 下载并反编译手机apk木马文件
将下载的apk木马文件解压,可以找到存放主要数据的文件classes.dex。下载baksmali.jar文件,下载链接为https://github.com/JesusFreke/smali。执行反编译命令“java -jar baksmali.jar -o /root/output”,将dex文件提取至output目录,然后分析该木马的行为,大致流程如图6-15所示。
图6-14 要求用户下载手机apk木马文件
图6-15 短信拦截木马的工作流程
下面我们分析一下这个木马程序。
1.获取邮箱账号
查看Java源代码。从前面的流程中我们分析出该短信拦截木马的主要数据渠道为电子邮件,所以木马的数据文件中一定保存着接收手机信息的邮箱账号和密码。在其代码中,我们果然找到了如图6-16所示的代码。
图6-16 获取邮箱账号
2.获取更多信息
通过对文本内容的检索,定位到“com/phone/db/a.smali”文件。该文件中保存着木马控制者的收信信息。同时我们也了解到,该木马存在授权时间,因此可知该木马为商业用途的木马。
分析a.smali文件,得到该木马控制者控制端的手机号、邮箱账户、邮箱密码等信息。
通过得到的信息登录邮箱,可以查看邮箱中存放的大量被害用户的短信内容,如图6-17所示。
图6-17 进入邮箱
下面介绍如何编写一个自动提取木马敏感信息的程序。
1.自动提取账号和密码的思路
既然我们已经知道了保存key的文件路径,那么编写一个自动提取账号和密码的脚本就可以实现批量解密。利用Python编写自动提取账号和密码的脚本,思路如下。
01 利用baksmali.jar直接将dex文件数据提取出来(前提是已配置好JDK环境)。
02 定位apk账号和密码的路径(为了演示方便,笔者没有采用遍历目录查找文件内容的方式,有兴趣的读者可以自行尝试)。
03 通过Python的OS库控制Shell执行系统命令。在本例中没有进行容错处理,默认操作系统为Linux。
04 完善输出信息。保存提取的信息,并自定义数据存储目录。
主要函数如图6-18所示。
2.运行脚本
脚本编写很简单,并未进行过多的容错处理。这里的思路只是提取同类型(如“10086”)的短信拦截木马内容。但是目前除了短信拦截木马,还有其他类型的Android手机木马,该类木马存储收信账号和密码的文件路径并不固定,所以需要对文件夹中文件的内容进行查找。
我们找到另一个“10086”积分钓鱼网站测试一下脚本的运行情况。运行命令“python unkey.py 10086.apk”,成功输出信息,如图6-19 所示。
图6-18 主要函数
图6-19 测试脚本
3.查看结果
账号和密码从脚本中成功提取出来,日志信息保存在本地目录的10086.txt文件中,如图6-20所示。
图6-20 查看提取结果