今天小编分享的互联网经验:Promon发现了用于攻击银行的新安卓恶意軟體:FjordPhantom,欢迎阅读。
Promon 公司发现了一种新的安卓恶意軟體,并命名为命名为 FjordPhantom,它具有很强的隐蔽性和传播能力,本文将深入探讨 FjordPhantom 的性质及工作原理。
背景
通过合作伙伴 i-Sprint,Promon 安全研究团队在 9 月初知道了一种新的安卓恶意軟體在东南亚(主要在印尼、泰国和越南)传播的消息。它主要通过消息传递服务传播,将基于应用程式的恶意軟體与社交工具相结合,以欺骗银行客户。Promon 与该地区的银行交流后得知,在撰写本文时,一名客户被骗走了约 28 万美元。
Promon 已收到了从终端用户设备中提取的恶意軟體样本。这个样本针对一家特定的银行,但含有的代码也可以针对其他银行应用程式。目前未能找到更多的恶意軟體样本,也无法找到任何关于该恶意軟體的公开信息,于是我们自行进行了技术分析。安卓银行恶意軟體无处不在,而这个恶意軟體的独特之处在于,使用虚拟化技术攻击应用程式,虚拟化通常用作逆向工程中的工具,这是我们此前从未见过的。
FjordPhantom 如何传播?
FjordPhantom 主要通过电子邮件、短信和消息传递应用程式传播。用户被提示下载一个看起来像银行正规应用程式的应用程式,实际上,下载的应用程式包含银行真实的安卓应用程式,但它在虚拟环境中运行,额外组件可以对应用程式进行攻击。
下载后,用户会受到社会工程攻击。通常,这是由呼叫中心的攻击团队支持的。他们假装是银行的客户服务,指导客户完成运行应用程式的步骤。
恶意軟體使攻击者能够跟踪用户的操作,从而引导用户执行交易或使用该过程窃取凭据,他们可以使用这些凭据发动另外的攻击。
FjordPhantom 如何使用虚拟化?
恶意軟體使用可以在 GitHub 上找到的不同开源 / 免费项目组合而成。最重要的是,它嵌入了一个虚拟化解决方案和一个钩子框架来执行攻击。
虚拟化解决方案允许在虚拟容器中安装和运行应用程式,近年来,它们在安卓上变得非常流行。因为其中许多应用程式都可以从 Google Play Store 下载,所以谷歌也接受了这种解决方案。此外,使用这种解决方案的一个普遍原因是能够多次安装相同的应用程式,以便用不同的帐户登录。这在安卓上通常是不可能实现的。
在这种情况下," 虚拟容器 " 的确切含义因不同的虚拟化解决方案而异。
在 FjordPhantom 使用的解决方案中,虚拟化解决方案是一个可以托管不同应用程式的应用程式。托管的应用程式被安装到虚拟檔案系统中。当托管的应用程式启动时,解决方案创建一个新进程,将应用程式加载到其中,然后启动该进程。
从安卓系统的角度来看,只有一个应用程式(主机)。这意味着当托管的应用程式启动时,它们也会看到自己在托管应用程式的上下文中运行,这将导致不同类型的应用程式出现许多问题,而它们期望在定义明确的环境中运行。此外,如前所述,托管的应用程式被安装到虚拟檔案系统中。因此,为了使托管的应用程式正常执行,虚拟化解决方案严重依赖钩子、修改安卓运行时环境的不同属性,以及代理托管的应用程式所做的许多事情。
虚拟化突破安卓沙盒
以这种方式将应用程式加载到虚拟容器中的危险之处在于它突破了安卓沙盒。
安卓上的每个应用通常在自己的沙盒中独立运行,在这样的虚拟化解决方案中,不同的应用程式都运行在同一个沙盒中。这使它们能够访问彼此的檔案和内存,并调试对方。也意味着,对于攻击者来说,虚拟化解决方案可能是不错的选择。突破沙盒通常需要对设备拥有 root 访问权。然而,当应用程式安装到同一个沙盒中时,就不需要这样了。这就使得攻击变得更容易,因为不需要获得设备的 root 权限,而且它还阻止 root 检测(针对安全关键应用程式的一种流行检查)。因此,虚拟化解决方案在攻击者中变得非常流行。
到目前为止,我们所看到的所有涉及虚拟化解决方案的攻击都是由试图攻击其安装的应用程式的安卓设备用户进行。这适用于使用调试器(比如 gdb 或 lldb)或钩子框架(比如 Frida)分析应用程式,或使用 GameGuardian 等工具在没有 root 访问权的情况下在游戏中作弊。
除此之外,恶意軟體使用的此类虚拟化解决方案还可以用来向应用程式注入代码,因为虚拟化解决方案首先将自己的代码(以及应用程式中发现的所有其他内容)加载到一个新进程中,然后加载托管应用程式的代码。传统上,最流行的代码注入方法一直是用附加代码重新包装应用程式。因此,许多安全攸关的应用程式执行重新包装检测,这使得攻击更难得逞。然而,使用虚拟化注入代码将绕过这些检测,因为原始应用程式并没有被修改。
FjordPhantom 如何工作?
图 1
FjordPhantom 使用上述的虚拟化解决方案。它嵌入它所攻击的特定银行应用程式的 APK,当它启动时,就在虚拟容器中安装并启动嵌入的应用程式。对于用户来说,看起来银行应用程式启动,没有虚拟化解决方案的明显痕迹。FjordPhantom 的独特之处在于:与我们之前看到的虚拟化攻击相比,不是设备用户调用了虚拟化,而是安卓恶意軟體在用户不知情的情况下调用了虚拟化。
在虚拟容器中托管目标应用程式使恶意軟體能够执行攻击。如上所述,它有许多攻击可能性。
以 FjordPhantom 为例,虚拟化主要用于将额外代码加载到托管应用程式的进程中,注入的代码是实际恶意軟體本身的代码和恶意軟體使用的钩子框架。
FjordPhantom 本身以模块化的方式编写,以便攻击不同的银行应用程式。它将对这些应用程式执行各种攻击,具体取决于嵌入到恶意軟體中的银行应用程式。
以恶意軟體样本为例,有一个特定的银行应用被嵌入,并成为直接攻击的对象。但在恶意軟體代码中,我们发现它还可以攻击另外 7 个银行应用程式。恶意軟體对目标应用程式执行几种不同的攻击,如下所述。
FjordPhantom 如何使用钩子框架?
FjordPhantom 使用它嵌入的挂钩框架来挂钩到应用程式通常使用的 API,以确定是否打开了可访问性服务以及当前启用了哪些服务。这是应用程式用来检测恶意恶意螢幕阅读器的标准方法,通过挂钩这些 API 并返回错误信息,就可以绕过螢幕阅读器检测方法。这使得攻击者可以使用螢幕阅读器在应用程式不知道的情况下从应用程式的螢幕上抓取敏感信息。
类似地,安卓恶意軟體使用它嵌入的钩子框架来挂钩到与 GooglePlayServices 相关的 API,使其看起来不可用。GooglePlayServices 由 SafetyNet 使用,通常用于检测 root 权限。通过假装 GooglePlayServices 不可用,试图检测 root 权限的应用程式可能上当受骗,跳过 root 权限检查的 SafetyNet 部分。
对于一些应用程式,恶意軟體还挂钩到与对话框相关的 UI 功能,如果它们包含某些文本,它将自动关闭它们。我们调查了目标应用程式中的这些对话框,它们警告用户,在其设备上检测到了一些可能恶意的活动。大多数对话框不能关闭,防止用户在可能恶意的场景中使用应用程式。通过阻止用户看到这些对话框,并让用户可以正常使用应用程式,恶意軟體就能在不引起怀疑的情况下对这些应用程式进行进一步攻击。
最后,我们还看到恶意軟體放置了许多钩子,这些钩子记录目标应用程式所做的不同操作,而不修改它们的行为,这很可能是恶意軟體中留下来的调试功能,用于开发针对不同应用程式的攻击。这表明 FjordPhantom 正在积极开发中,可能会完善或已经完善到攻击其他应用程式的程度。