导语:据研究人员分析,之所以脏牛漏洞时隔将近一年后才现身,是因为恶意开发者们对该漏洞进行了细致的探索和构建,而ZNIU也是第一个被发现的利用脏牛漏洞的Android木马。
脏牛漏洞的利用背景
脏牛漏洞(Dirty COW,CVE-2016-5195)是一种严重的Linux提权漏洞,在 2016 年 10 月就已经向公众披露,允许攻击者能利用脏牛漏洞获得目标系统上的 root 访问权限。根据分析,自1.0版本以来的所有Android版本都存在脏牛漏洞。这意味着目前几乎所有Android设备都存在脏牛漏洞,也就是说全都处于可以被利用的状态。紧接着2016年12月6日,据趋势科技报道,研究员又发现了一种新的针对脏牛漏洞提升操作权限的方法,该新方法可以直接将恶意代码注入正在运行的进程。
但自此以后,就再也没有关于脏牛漏洞的消息了,直到最近ZNIU的出现。ZNIU的样本已被趋势科技研究人员发现,并被检测为AndroidOS_ZNIU。根据研究人员的分析,之所以脏牛漏洞时隔将近一年后才现身,是因为恶意开发者们对该漏洞进行了细致的探索和构建,而ZNIU也是第一个被发现的利用脏牛漏洞的Android木马。
目前趋势科技已经向Google报告了ZNIU的问题,不过Google的反馈是,目前被ZNIU感染的应用程序的安全验证是由Google Play Protect负责的,言外之意就是,只要Google Play Protect 验证是不安全的,该应用自然会被删除,而Google不负责对具体的某个应用进行处理。
Google Play Protect
在2017年的I/O大会上,谷歌就已经发布了他们的“Android 官方安全助手”Google Play Protect。虽然在 Android 中,应用程序安全验证功能已经存在了一段时间,不过过去的扫描方式一直是手动。现在,扫描将作为一个后台进程,全天候保护 Android 设备,它还会在 Google Play 商店中以卡片的形式存在。如果一切正常,用户将在 Play 商店中看到绿色的通知,如果遇到了不友好的软件,该软件将被自动删除,用户也将收到提醒。
Google已授权所有认证 Android 设备在手机包装中直接放置 Google Play Protect 的 LOGO,以便于用户容易区分这款设备是否经过Google认证。
ZNIU木马的传播途径
上个月,研究人员在四十多个国家都发现了ZNIU,其中大多数受害者位于中国和印度。除此之外,美国、日本、加拿大、德国和印度尼西亚也属于重灾区。截至目前,研究人员总共检测到5000多个受影响的用户。另外,研究人员发现,ZNIU主要是通过恶意网站上的应用程序进行传播的,目前总共发现了1200多种这样的程序且都包含脏牛漏洞的root权限攻击,其中大部分都伪装成色情和游戏应用程序。
2016年12月,研究人员就为脏牛漏洞进行了一次PoC验证。研究人员在一部 Android手机上,安装了一个特殊验证应用。一旦运行,攻击者就可以利用脏牛漏洞窃取设备信息、更改系统设置,比如开启蓝牙和Wi-Fi热点、获取地理位置,并可静默安装谷歌应用商店以外的应用。当时,研究人员发现所有版本的Android操作系统都有可能被攻击,而本次利用脏牛漏洞的ZNIU木马则仅适用于具有ARM/X86 64位的Android,不过,ZNIU可能会绕过SELinux并生成根后门,而2016年的那个PoC只能修改Android系统的服务代码。
通过监测六个ZNIU rootkit,研究人员发现其中四个利用的是脏牛漏洞的漏洞。剩余的一个是获取Root权限的应用程序—KingoRoot,另一个是实施Iovyroot攻击的CVE-2015-1805漏洞,影响Android操作系统的特权提升漏洞CVE-2015-1805也是2016年被披露。ZNIU之所以使用KingoRoot和Iovyroot,是因为它们可以获取ARM 32位CPU设备上的Root权限,而Rootkit的脏牛漏洞则不能做到这一点。
ZNIU的攻击过程
ZNIU恶意程序通常是通过恶意网站下载的色情应用程序来进行传播的,具体过程如下:
攻击者会用色情信息吸引用户,当用户试图点击恶意URL时,攻击者就会将恶意程序携带的应用安装在用户的设备上。一旦恶意程序开始运行,ZNIU将与其C&C服务器进行通信。如果更新的代码可用,则会从C&C服务器检索它并将其加载到系统中。同时,脏牛漏洞能够提供本地特权升级以打破系统限制,并为未来的潜在远程控制攻击生成后门。
下图就是ZNIU感染链:
进入设备的用户界面后,恶意程序将收集用户的信息。然后通过支持SMS的支付服务与运营商进行交易,让恶意程序操作者冒充该设备持有人。通过利用受害者的移动设备,ZNIU的冒牌持有人就可以通过劫持用户的网络流量套取资金。
根据所发现的样本代码,研究者们发现,根据网络流量而套取的钱实际上被一个虚拟公司所接受,从下图可以看出,该公司位于中国。 更令人不可思议的是,当攻击者利用SMS实施完攻击后,会将所进行过的虚假交易消息痕迹删除,不会让你发现任何线索。但如果SMS运营商位于中国境外,则利用网络流量套取现金的攻击将不会发生,但恶意程序仍将在系统中植入后门。下图为恶意程序发送给运营商的交易请求代码。
另外,在恶意攻击时,为了避免被用户发现,攻击者除了使用高超的技术外,还使用了社会工程的方法,即每次只套现一小部分资金,以免被注意,下图就是SMS业务套取资金的短信通知。
由于ZNIU在授予恶意程序访问设备的SMS功能的权限时,会强制介入,所以它需要获取设备的root权限。此外,要完成攻击任务,恶意程序还需要安装后门程序,并远程加载恶意代码。
ZNIU Rootkit的深度分析
ZNIU rootkit可以通过独立的广播接收器集成到恶意应用程序中,下图就是被ZNIU代码激活的Rootkit。
恶意程序可以轻松地将rootkit注入第三方应用程序,而无需更改其他组件,这种做法有助于大规模的传播恶意程序。
为了对恶意程序被逆向分析,开发者还对ZNIU的恶意DEX代码进行了加密和打包保护。经过进一步调查,研究者发现,一旦用户将设备连接到网络或接通电源,恶意程序就会使用广播接收器激活脏牛漏洞代码。然后,再进行直接传输并执行其本地恶意代码,下图就是ZNIU本地代码
ZNIU利用本机代码进行攻击的步骤如下:
1. 收集设备的型号信息; 2. 从远程服务器获取相应的rootkit; 3. 解密漏洞; 4. 逐个触发各漏洞代码,并检查漏洞利用结果,最后删除漏洞利用文件; 5. 报告漏洞利用是否成功。
下图就是ZNIU实施的网络攻击活动:
除此之外,研究者们还发现了远程攻击服务器的URL以及客户端和服务器之间的通信都被攻击者加密过。但使用字符串解密后,恶意利用服务器的的域名和主机都位于中国。恶意攻击服务器的链接可以在本文档中找到,除此以外,本文档还列出了相关软件的哈希值(SHA256)、包名称和应用标签。下图就是服务器的管理后台。
一旦下载,该rootkit就会借助ZLIB将“exp * .ziu”解压为“exp * .inf”。下图就是利用ZLIB解压的ziu文件。
rootkit所需的所有文件都被封装在一个.inf文件中,文件名以“ulnz”开头,并包含多个ELF或脚本文件。下图就是inf文件的结构:
ZNIU rootkit可以被任意写入vDSO(虚拟动态链接共享对象),由于vDSO代码可以在不受SELinux限制的内核上下文中运行,所以利用vDSO的目的就是将一组内核空间函数导出到用户空间,以使应用程序更好的被执行。
ZNIU会使用公共漏洞利用代码将shellcode写入vDSO并创建反向shell,然后,它通过修改SELinux策略解除限制,从而植入一个带有后门的root shell。下图就是利用脏牛漏洞修改的vDSO代码。
缓解措施
老办法,还是要从Google Play或受信任的第三方应用商店中下载程序。除此之外,就是利用专业的安防软件,比如趋势科技的移动应用安全解决方案。
根据小编的推测,ZNIU的活动可能还会继续扩大,其恶意攻击行为也可能产生变异,建议大家持续关注我们的最新报道。