作者: 启明星辰ADLab

1、概述

随着移动互联网的快速普及,移动支付在人们生活中扮演的角色越来越重要。从支付宝、微信、各类支付钱包以及各大银行的支付应用都在挖空心思抢占用户移动支付入口就可见一斑。特别是近两年,零现金支付在很多用户身上尤其是年轻用户身上早已成为现实,这极大的丰富和方便了人们的生活。然而,随着移动支付的不断普及和涉及的金钱数额越来越大,移动支付这块肥肉也吸引了越来越多的攻击者。

近日,启明星辰ADLab就发现了一款银行类 Android APP 钓鱼木马。经过我们对该钓鱼木马的深入分析发现,与大部分采用 java 层代码加密和方法混淆技术的 Android 恶意代码不同的是,该 Android 银行钓鱼木马采用了类似于加固(加壳)保护的技术,将真正的恶意实体进行加密并隐藏起来,在恶意软件运行时通过 SO 动态解密并加载以执行真实的恶意软件实体。这样不仅可以绕过杀毒软件的查杀,还增加了安全研究人员的逆向分析难度。此外,该钓鱼木马不仅通过伪造银行图标和登录界面来实施钓鱼攻击,它还会在后台实时监视感染系统中的活动界面,一旦发现用户启动合法的银行 APP,便对其进行劫持并替换成自己伪造的银行登录页面。该钓鱼木马的劫持目标为招商银行、交通银行和中国邮政储蓄银行,当用户在伪造的界面上输入银行账号密码等登录信息后便会被上传到黑客预先配置好的 C&C 服务器上,同时银行钓鱼木马会弹出输入错误等信息来迷惑用户。此时,拥有受害者银行登录账号密码的黑客就可以利用该银行钓鱼木马的短信劫持功能来获取验证码,登录到受害者银行账户进行恶意转账或者透支信用卡等等操作(示意图如下)。本文后续将对该银行钓鱼木马进行深入的剖析,并对黑客身份信息进行追踪分析。

2、银行类钓鱼木马行为简介

该银行类钓鱼木马的劫持目标为招商银行、交通银行和中国邮政储蓄银行,并且采用了类似于加固(加壳)的技术。(“壳”指的是一个程序外面再包裹上另外一段代码,目的是保护里面的代码不被非法的修改或者反编译。被加壳程序执行的时候,首先得到执行的是壳的代码,然后由壳代码来实现被保护实体的解密和加载执行。)该钓鱼木马运行后,先执行壳的代码,在壳的 SO 代码中解密被保护的恶意实体 jar 文件,再通过自定义的 DexClassLoader 动态加载解释执行该恶意实体。

恶意实体首先利用注册短信广播接收器的方式来接收短信控制指令。在完成伪装和自我保护之后,恶意实体会实时监视感染系统中的活动界面,一旦发现用户启动合法的银行 APP,便对其进行劫持并替换成自己伪造的银行登录页面。用户很难发现新的窗口被打开了,当用户在伪造的界面上输入银行账号密码等登录信息后便会被上传到黑客预先配置好的 C&C 服务器上,同时银行钓鱼木马会弹出输入错误等信息来迷惑用户。此时,拥有受害者银行登录账号密码的黑客可利用该银行钓鱼木马的短信劫持功能来获取验证码登录到受害者银行账户以进行恶意转账或者透支信用卡等等操作。

然后,恶意实体通过拦截系统默认的短信应用,拿到对系统短信数据库的读写权限。更通过使用观察者模式,实时监视用户短信,以实现对用户的持续侵害。当攻击者发起一笔交易,银行的验证码和消费回执信息就会被拦截,窃取后再行删除。这样等于破解了银行的双重验证机制,并在用户没有丝毫察觉的情况下完成交易,对用户的财产安全构成严重威胁。该钓鱼木马运行流程图如下:

3、脱壳解密分析

为了使得壳程序先行执行,该银行类钓鱼木马自定义了 MyApplication 类继承自 Application 类(Application 是Android程序的入口,Application 和 Activity、Service 一样是 Android 框架的一个系统组件。当 Android 程序启动时,系统会创建一个 Application 对象且仅创建一个,用来存储系统的一些信息。通常我们是不需要指定一个 Application 的,系统会自动帮我们创建。如果需要创建自己的 Application ,需要创建一个类继承 Application 并在 manifest 的 application 标签中进行注册,给 application 标签增加一个 name 属性,把自己的 application 的名字指定给它即可。application 对象的生命周期是整个程序中最长的,它的生命周期就等于这个应用程序的生命周期。因为它是全局的单例的,所以在不同的 Activity、Service 中获得的对象都是同一个对象。可以通过 Application 来进行一些数据传递、数据共享和数据缓存等操作。)并在 mainifest 中的 标签中进行了注册,见下图:

我们从上图可以看到 MyApplication 类加载了 native 库 libload.so,并在 attachBaseContext 方法中调用了 native 函数 run。解密真实恶意实体的处理流程即在run函数中进行。 钓鱼木马运行后,在 data/data/t8/ool/lib 目录下有3个SO文件,其中 libload.so 负责解密和加载真实的恶意实体。

libload.so 首先利用反射机制调用 javax.crypto 包中的加解密函数对 asset 目录下的加密文件 mycode.so 进行 AES 解密操作。解密后的文件保存在 data/data/t8/ool/app_cathe 目录下并被命名为 mycode.jar 。再利用自定义的 DexClassLoader 加载解释执行 mycode.jar ,最后删除之。我们通过动态调试 libload.so ,在 libload.so 删除 mycode.jar 之前拿到解密文件,最后修复、重新打包、安装分析。相关细节如下。

Base64解密AES key:xo3Kiw9jekmadw/SUtJwiA==

初始化cipher:

解密逻辑(执行到断点处,解密完成):

此时,在data/data/t8/ool/app_cathe目录下生成了解密文件 mycode.jar,见下图:

我们将 mycode.jar 复制到pc端,用 winrar 打开,里面的 classes.dex 即为该钓鱼木马的真实恶意实体(如下图所示),接下来我们就对该 dex 文件进行深入的分析。

4、真实攻击逻辑分析

该钓鱼木马申请的权限如下图所示,其中,涉及到的敏感权限包括短信的读写权限、打电话权限、读取或写入系统设置权限、自启动权限和获取最近运行应用权限等。

4.1、注册广播接收器,接收控制指令

该钓鱼木马注册了短信广播接收器,用来接收控制指令。当短信内容是000#,设置配置文件inter的值为1,截断广播;当短信内容是0#,设置配置文件inter的值为0,截断广播;当短信内容是555#,收集用户本机所有短信,企图邮件回传,截断广播。并且,如果短信内容为控制命令000#,就以 json 格式 post 用户手机 sim 卡序列号、手机号码、短信内容,发送者、发送时间到 C&C 服务器:http://103.55.26.147/servlet/SendMassage2 , 如下图。

4.2、创建配置文件,完善配置信息

接下来,钓鱼木马开始初始化本地 SharedPreferences 对象,用于保存配置信息。其中包括攻击者邮箱地址、邮箱密码、C&C 服务器、钓鱼 APP 首页地址、攻击者手机号码、钓鱼木马运行时间等重要信息。

钓鱼木马运行后,我们在本地打开 mybank.xml 文件。

我们提取出比较重要的攻击者配置信息,见下表。

4.3、启动钓鱼服务

4.3.1、提示肉鸡上线
接着,钓鱼木马会收集用户sim卡序列号、手机号码、手机型号、系统版本、手机运营商等信息,以 json 格式 post 到 C&C 服务器:http://103.55.26.147/servlet/OnLine ,用于提示肉鸡上线。

4.3.2、伪装和自我保护
钓鱼木马还会启动设备管理器,引导用户激活自己为设备管理器,伪装成系统应用避免被轻易卸载。并且后台每隔10s检测用户手机是否是感染设备,如果是,就不断提示用户激活。

Android 设备管理器对于一个普通 APP 而言并不太常用,但在很多病毒中十分常见。一旦应用被激活成为系统管理员,则在设置->应用程序下无法直接删除该 APP ,只有取消激活后才能卸载。所以对于不了解的应用,千万不可乱激活。见下图:

运行结果如下图:当用户点击激活后,钓鱼木马就获得了设备管理员权限,这样会导致普通用户很难卸载掉该钓鱼木马。

4.3.3、接管短信应用
钓鱼木马接着引导用户设置自己为系统短信应用,接管短信服务,以获得对短信数据库的操作权限(见下图)。Android 4.4 及其以后,只能设置一个默认的 SMS 短信 APP ,当短信到达后会首先通知设置的默认 APP ,并且只有该APP对短信数据库有修改的权限和短信的发送权限。

运行效果如下图,当用户点击“是”后,钓鱼木马即成功接管短信服务,拿到了对短信数据库的操作权限。

4.3.4、实施钓鱼
以上准备完成后,钓鱼木马会每隔1秒检测感染设备当前活动界面是否是:中国邮政储蓄银行、交通银行、招商银行的 APP 。如果是,则打开对应的钓鱼页面.

我们下面仅列出针对招商银行的钓鱼页面代码。可以看到钓鱼木马利用钓鱼页面窃取用户的 sim 卡序列号、手机号码、登录密码等后,以 json 的格式 post 到 C&C 服务器http://103.55.26.147/servlet/CMBSubmit ,见下图。

4.3.5、监控用户短信
钓鱼木马使用内容观察者模式,监视用户短信。当短信内容是000#,设置配置文件inter的值为1,删除短信;当短信内容是0#,设置配置文件inter的值为0,删除短信;当短信内容是555#,删除短信,并收集用户本机所有短信,企图邮件回传。并且,如果短信内容为控制命令000#时,就以 json 格式 post 用户手机 sim 卡序列号、手机号码、短信内容,发送者、发送时间到 C&C 服务器:http://103.55.26.147/servlet/SendMassage2 。见下图。

攻击者控制用户手机后,每发起一笔交易,银行的验证码和消费回执信息就会被拦截窃取再行删除(见下图),这样等于破解了银行的双重验证机制,并在用户没有丝毫察觉的情况下完成交易。对用户的财产安全构成严重威胁。

4.3.6、服务常驻
钓鱼木马还定义了广播接收器,用于自启动。当用户手机重启或者解锁时,启动钓鱼服务,继续其侵害过程。

4.3.7、检测杀毒软件
除了以上功能之外,该钓鱼木马还内置有检测杀毒软件的功能,判断感染设备是否安装有360杀软相关应用(见下图)。现在在很多恶意样本中都能看到针对杀毒软件的处理函数,一般是判断某流行杀软是否存在,如果存在,就后台静默卸载。不过该函数未在该版本中调用。所以初步推断该钓鱼木马目前还处于前期的开发调试阶段,后续极有可能大规模感染,我们应该给予持续的关注和跟进。

5、溯源

5.1、邮箱信息

我们尝试使用钓鱼木马配置文件中的攻击者邮箱和密码来登录攻击者的126邮箱,但目前已无法正常登录(见下图),应该是攻击者已经修改了密码。

5.2、C&C 服务器信息

通过以上分析我们知道该钓鱼木马的C&C为103.55.26.147,目前该C&C的IP依然有效,但是通过反查的域名并没有发现有价值的线索。

5.3、其他线索

我们尝试在 appscan.io 中查询攻击者邮箱zhihe4344@126.com,结果发现除了我们分析的当前钓鱼木马,还有其他3个相关应用(见下图)。文档.apk样本变化不大,我们试图从录像.apk入手寻找线索。经分析发现,录像.apk部分代码结构和代码逻辑与本文分析的银行类钓鱼木马高度相似,可以断定这两个 apk 为同一个作者。

我们在录像.apk的 so 文件中,得到了一组邮箱密码和一个手机号码(见下图)。经分析该邮箱为攻击者控制的信息回传邮箱。该手机号码为攻击者短信回传的目的手机号码。

我们尝试登录该126邮箱,登录成功!

我们发现此邮箱确为攻击者控制的信息回传邮箱。并且在其网盘里发现了一个视频.apk恶意文件。邮箱里面记录了窃取到的用户手机通讯录列表、短信列表、截获到的短信等敏感数据(见下图)。这些信息最早日期是2015年11月30日,最晚为2016年10月11日且都处于未被打开状态,但从信息数量来看并不大。我们可以推断,“视频.apk”为该时间段攻击者的一个测试样本,并未全面使用。

另外,从邮箱的其他收信内容来看,该邮箱注册的重要账户有:Apple ID、支付宝、淘宝、微博、Facebook、Turo租车等。从关联到的微博账户和Facebook账户内容来看,初步判断该邮箱很有可能是被攻击者盗用的一个受害者邮箱账户。

在其网盘发现的一个2015视频.apk文件,显示时间为2015年9月20日。

窃取到的受害人敏感信息:

截获到的新短信:

窃取到的短信列表:

窃取到的通讯录:

再来看看手机号码:183****5246,我们在支付宝中未查到该手机注册相关账户,但在微信中倒是查找到一个关联用户(见下图)。

5.4、溯源总结

通过简单的溯源分析,我们找到了攻击者使用的一个控制邮箱并在登录成功后,查看到了其回传的受害者敏感信息。但还没有准确定位到攻击者本身。我们通过内置手机号码分别在支付宝和微信上查找注册信息,最终找到了微信上关联的一个用户。根据现有的线索,对攻击者的信息溯源目前就到此为止。因为该钓鱼木马还是一个前期测试样本,相信在后续的跟进中会挖掘出更多的攻击者相关信息。

6、总结及建议

6.1、技术总结

与大部分采用 java 层代码加密和方法混淆技术的 Android 恶意代码不同的是,该 Android 银行钓鱼木马采用了类似于加固(加壳)保护的技术,将真正的恶意实体进行加密并隐藏起来,在恶意软件运行时通过 SO 动态解密并加载执行真实的恶意软件实体。这样不仅可以绕过杀毒软件的查杀,还增加了安全研究人员的逆向分析难度。可以预见,随着攻防的不断升级,越来越多的恶意软件开始使用加壳技术来自我保护,安全分析工作任重而道远。

6.2、安全建议

目前由于该银行类钓鱼木马的 C&C 服务器无法连接,故其还处于无法正常使用状态。不过,从代码逻辑和功能来看,有部分功能代码并没有调用,比如检测360杀毒软件。可以判定,该恶意软件仍然处于开发调试阶段,并不成熟,我们将持续关注和跟进。

对于 Android 用户,建议不安装不明来源的 APP,对申请可疑权限尤其是短信读写、打电话以及需要激活设备管理器的 APP 要特别留意。涉及金钱的操作要格外谨慎,遇到操作异常或扣费异常,要及时联系银行冻结账户或者拨打110报警,避免遭受更大损失。


启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员。截止目前,ADLab通过CVE发布Windows、Linux、Unix等操作系统安全或软件漏洞近300个,持续保持亚洲领先并确立了其在国际网络安全领域的核心地位。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:http://paper.seebug.org/319/