ZNIU,首个利用DirtyCow漏洞的android恶意应用。
DirtyCOW (CVE-2016-5195) 是2016年发现的Linux内核提权漏洞,利用竞争条件下的写时竞争可以进行权限提升,影响Linux kernel 2.6.22后的所有版本,而Android 1.0使用的内核是kernel 2.6.25,所以DirtyCOW漏洞存在于所有Android系统版本中。
最近,Trend Micro 的研究人员发现了ZNIU (AndroidOS APP)的一些样本,ZNIU是首个利用DirtyCow漏洞的android恶意应用。
上个月,在超过40个国家检测到ZNIU,主要是中国和印度。截至目前,有超过5000名的感染者。数据显示,有超过1200个携带ZNIU的恶意应用,一般伪装成色情和游戏应用。
图1: 隐藏ZNIU的色情应用
我们去年发布的PoC只能修改系统的服务代码,而ZNIU对DirtyCow的利用可以绕过SELinux机制并植入root后门。ZNIU的rootkit有6个,其中4个是DirtyCow的利用,其他2个是KingoRoot和Iovyroot exploit (CVE-2015-1805),使用这两个rootkit的原因是利用DirtyCow无法root ARM32位的CPU设备。
感染流
ZNIU一般伪装成色情应用,诱导用户点击恶意网址上的链接下载并安装ZNIU应用程序。ZNIU安装后,会与C&C服务器通信,获取最新的代码,同时利用DirtyCow漏洞进行本地提权并植入后门。
图2: ZNIU感染链
进入设备的主UI后,恶意程序会手机用户的运营商信息,然后通过短信支付订购扣费服务。而通过SMS收费的服务商是中国一家公司。当付费交易完成后,恶意软件会删除设备上的扣费短信。如果运营商不是中国的,就不能通过SMS与运营商完成交易,所以恶意软件会先植入一个后门。
Figure 3: 恶意软件发送到运营商的交易请求代码
基于以上分析,恶意软件主要通过受感染用户的手机订购中国运营商的付费服务。而每笔业务的交易金额很小,一般20元人民币左右,一般不会引起用户的注意。
图4: SMS 交易成功截图
ZINU首先需要获取设备root权限才可以进行以上交易,而且需要注入后门并远程加载其他的恶意代码才能继续从受感染设备处获利。
ZNIU Rootkit
Figure 5: Snipper of ZNIU code activated on the network
恶意软件可以在不改变应用其他组件的情况下向第三方应用注入rootkit,因此可以大范围传播。为了方式逆向分析,恶意软件运营者加密并打包了ZNIU的DEX代码,进一步调查后,我们发现当用户设备联网或连接电源时,ZNIU就会用broadcast receiver来激活利用代码。恶意软件随后直接传输并执行本地恶意代码。
图6: ZNIU本地代码
ZNIU的本地代码逻辑如下:
手机设备的型号信息
从远程服务器获取合适的rootkit
加密漏洞利用程序
触发利用,检查结果,删除利用文件
报告利用是否成功
图 7: ZNIU网络活动
远程服务器的URL,与远程服务器的通信都是加密的。用字符串解密后,我们发现了恶意利用服务器的细节,域名和服务器主机都位于中国。
图 8: 后台管理服务器
下载成功后,在ZLIB的帮助下,rootkit ‘exp*.ziu’ 会解压缩为 ‘exp*.inf’ 。
图9: ZLIB 解压缩 ziu文件
所有rootkit需要的文件都被打包在一个.inf文件中,该文件以ulnz开头并含有多个ELF和脚本文件。
图 10: inf文件结构
ZNIU rootkit可以向vDSO(虚拟动态链接共享对象)任意写操作,vDSO代码在kernel环境下运行,并没有SELinux的限制。ZNIU使用利用代码来向vDSO向shellcode,并创建了一个逆向的shell。然后对SELinux策略进行补丁操作来解除限制,并植入一个后门root shell。
图11: Dirty COW补丁vDSO代码
解决方案
从可信第三方下载应用程序
使用手机安全服务,如XX手机卫士
来源
http://blog.trendmicro.com/trendlabs-security-intelligence/zniu-first-android-malware-exploit-dirty-cow-vulnerability