Check Point研究人员在Google Play中发现了一个Joker Dropper和Premium Dialer 监控恶意软件的新变种。该更新版的Joker可以下载其他恶意软件到设备上,下载的Premium Dialer可以在无需用户同意或用户不知情的情况下让用户订阅付费服务。
图 1 Google Play中的Joker应用
Joker是一款典型的安卓恶意软件类型,一直在不断地寻找绕过谷歌官方应用市场安全检测的方法。此次的Joker最新变种利用了一种来自PC威胁图谱的古老的绕过简述来绕过谷歌应用市场的安全检测。
为了实现让app用户订阅付费服务而不知情或不告知,Joker使用了两个主要的组件——Notification Listener服务和动态dex文件。Notification Listener服务是原始Joker应用的一部分,动态dex文件是从C2服务器加载的,可以让用户注册不同的服务。
为最小化Joker的指纹,攻击者选择从远程C2服务器来动态加载dex文件,将恶意dex文件以base64编码的字符串的形式隐藏在应用中,来实现解码和加载。
技术分析
之前的版本中用于与C2通信和下载动态dex文件的代码位于classes.dex文件中,现在classes.dex 文件的功能还包括加载新的payload。
Joker会通过注册一个与C2通信的新对象来检查攻击活动是否仍在进行来从Activity触发恶意流。确认之后,就可以准备要加载的payload模块。
图 2 – 恶意对象的创建
图 3 – 与C2通信的恶意对象
图 4 – 来自C2服务器的响应
加载dex文件的第一个 方法是从manifest文件读取内容。研究人员检查manifest文件时发现,有另一个metadata域中含有一个base64编码的dex文件。所以只需要从manifest文件中读取数据、解码payload和加载新的dex文件。
图 5 – 含有base64编码的dex的Manifest文件
图 6 – 从manifest 文件中读取数据
研究人员还发现了一个仍在开发过程中的变种,该变种将.dex 文件隐藏成base64字符串中,而不是将字符串加入到manifest文件中,这些字符串位于main应用的内部类中。在该例中,恶意代码运行只需要读取字符串、从base64字符串中解码、然后用反射的形式加载。
图 7 – main应用中的字符串
图 8 – 读取class字符串和解码
图 9 – 加载含有反射的dex文件
图 10 – 解密的字符串
新payload中含有原始Joker文件的主dex文件中的代码,包括Notification Listener服务的注册、使用户订阅付费服务等等。攻击者隐藏功能只需要将C2服务器设置为在状态码中返回false,没有恶意活动会出现。
总结
研究人员建议感染了恶意app的用户:
· 从设备中卸载受感染的应用;
· 检查手机号和信用卡账单检查是否订阅了相关付费服务,如果订阅了那么尽快取消;
· 安装安全解决方案来预防未来可能的感染。
本文翻译自:https://research.checkpoint.com/2020/new-joker-variant-hits-google-play-with-an-old-trick/如若转载,请注明原文地址