sl-abstract-block-module-structure-1200x600.jpg

2022 年 7 月 7 日,CISA 发布了一篇题为“朝鲜国家支持的攻击者使用Maui 勒索软件攻击医疗保健和公共卫生部门”的警报。最近,卡巴斯基实验室的研究人员又对Maui 勒索软件进行了研究,并将其出现的时间从2021 年 5 月提前到了 2021 年 4 月 15 日。由于早期事件中的恶意软件是在2021年4月15日编译的,而所有已知样本的编译日期都是相同的,因此这次事件可能是有史以来第一次涉及Maui 勒索软件的事件。

虽然 CISA 在其报告中没有提出有力的证据将此次攻击归咎于朝鲜攻击者,但卡巴斯基实验室的研究人员确定,在将Maui部署到初始目标系统大约10小时前,该组织向目标部署了众所周知的DTrack恶意软件的变体,几个月前又部署了3proxy(一个由俄罗斯人开发的多平台代理软件)。综上所述,研究人员十分有把握,认为这与针对韩国的APT组织Andariel类似。Andariel是Lazarus组织下的一个子组,主要攻击目标为韩国企业和政府机构。

2020.12.25:发现可疑的 3proxy 工具;

2021.4.15:发现DTrack 恶意软件;

2021.4.15:发现Maui 勒索软件;

DTrack 恶意软件

1.png

一旦运行这个恶意软件,它就会执行一个嵌入的 shellcode,加载一个最终的 Windows 内存中的有效负载。该恶意软件负责收集受害者信息并将其发送到远程主机。它的功能几乎与以前的 DTrack 模块相同。该恶意软件通过 Windows 命令收集有关受感染主机的信息。内存中的有效负载执行以下 Windows 命令:

2.png

此外,该恶意软件还会收集浏览器历史数据,并将其保存到 browser.his 文件中,就像旧变种一样。与旧版本的 DTrack 相比,新的信息收集模块通过 HTTP 将被盗信息发送到远程服务器,该变体将被盗文件复制到同一网络上的远程主机。

Maui 勒索软件

Maui 勒索软件是在同一服务器上的 DTrack 变种后十小时检测到的。

3.png

Maui 勒索软件存在多个运行参数。在此事件中,我们观察到攻击者使用“-t”和“-x”参数,以及特定的驱动器路径进行加密:

4.png

在这个示例中,“-t 8”将勒索软件线程数设置为 8,“-x”命令恶意软件“self melt”,“E:”值将路径(在这个案例中为整个驱动器)设置为加密。勒索软件的功能与之前Stairwell 报告中描述的相同。

该恶意软件创建了两个密钥文件来实现文件加密:

5.png

不同受害者身上的类似 DTrack 恶意软件

根据对相邻主机的渗透信息,研究人员在印度发现了更多受害者。其中一台主机最初于 2021 年 2 月遭到攻击。Andariel 很可能窃取了提升的凭据以在目标组织内部署此恶意软件,但这种猜测是基于路径和其他工件,具体细节还需要继续分析。

6.png

该恶意软件的主要目标与上述受害者的情况相同,使用不同的登录凭据和本地 IP 地址来窃取数据。

7.png

Windows命令来窃取数据

从同一个受害者身上,我们发现了其他使用不同登录凭据的 DTrack 恶意软件 (MD5 87e3fc08c01841999a8ad8fe25f12fe4)。

新增DTrack模块和初始感染方法

“3Proxy”工具可能是攻击者使用的工具,于 2020 年 9 月 9 日编译,并于 2020 年 12 月 25 日部署给受害者。基于这个检测和编译日期,研究人员扩大了研究范围,发现了一个额外的 DTrack 模块。该模块编译于2020年09月16日14:16:21,并在2020年12月初检测到,与3Proxy工具部署的时间点相似。

8.png

这个DTrack模块非常类似于DTrack的事件跟踪模块,该模块之前被报告给我们的威胁情报客户。在一个受害系统中,我们发现一个知名的简单HTTP服务器HFS7部署了上面的恶意软件。在一个易受攻击的HFS服务器上使用未知漏洞并执行“whoami”后,执行下面的Powershell命令从远程服务器获取额外的Powershell脚本:

9.png

mini.ps1 脚本负责通过 bitsadmin.exe 下载并执行上述 DTrack 恶意软件:

10.png

另一个受害者操作了一个易受攻击的 Weblogic 服务器。根据分析,攻击者通过 CVE-2017-10271 漏洞攻击了该服务器。研究人员看到 Andariel 在 2019 年年中滥用了相同的漏洞并破坏了 WebLogic 服务器。在本案例中,被利用的服务器会执行 Powershell 命令来获取额外的脚本。获取的脚本能够从我们上面提到的服务器(hxxp://145.232.235[.]222/usr/users/mini.ps1)下载 Powershell 脚本。因此攻击者至少在 2020 年底之前滥用了易受攻击的面向互联网的服务来部署他们的恶意软件。

受害者分析

2022年7月的 CISA 警报指出,医疗保健和公共卫生部门已成为美国 Maui 勒索软件的攻击目标。然而,根据我们的研究,我们认为这项业务并不针对特定行业,而且其影响范围是全球性的。可以确认,有一家日本住房公司于 2021 年 4 月 15 日成为 Maui 勒索软件的攻击目标。此外,来自印度、越南和俄罗斯的受害者在类似的时间范围内被日本 Maui 事件中使用的 DTrack 恶意软件感染,时间是从2020 年底至 2021 年初。

研究表明,该攻击者相当投机取巧,无论其业务范围如何,只要拥有良好的财务状况,就可能成为其攻击对象。攻击者很可能偏爱易受攻击的暴露于互联网的 Web 服务。此外,Andariel 有选择地部署勒索软件以获取经济利益。

11.png

幕后攻击者是谁?

根据卡巴斯基威胁归因引擎(KTAE),来自受害者的DTrack恶意软件与之前已知的DTrack恶意软件具有高度的代码相似性(84%)。

此外,我们发现 DTrack 恶意软件 (MD5 739812e2ae1327a94e441719b885bd19) 使用与“Backdoor.Preft”恶意软件 (MD5 2f553cba839ca4dab201d3f8154bae2a) 相同的 shellcode 加载程序,此后门由赛门铁克发布。请注意,赛门铁克最近将 Backdoor.Preft 恶意软件描述为“aka Dtrack, Valefor”。除了代码相似性之外,攻击者还使用了 3Proxy 工具 (MD5 5bc4b606f4c0f8cd2e6787ae049bf5bb),该工具之前也被 Andariel/StoneFly/Silent Chollima 组织 (MD5 95247511a611ba3d8581c7c6b8b1a38a) 使用。赛门铁克将 StoneFly 归咎于 DarkSeoul 事件背后的攻击者。

总结

综合分析,Maui 勒索软件事件背后的攻击者 TTP 与过去的 Andariel/Stonefly/Silent Chollima 活动非常相似:

在初始感染后使用合法代理和隧道工具或部署它们以保持访问权限,并使用 Powershell 脚本和 Bitsadmin 下载其他恶意软件;

使用漏洞攻击已知但未修补的易受攻击的公共服务,例如 WebLogic 和 HFS;

专门部署DTrack,也被称为Preft;

目标网络中的驻留时间可以在活动之前持续数月;

出于经济利益,在全球范围内部署勒索软件。

sl-abstract-block-module-structure-1200x600.jpg

2022 年 7 月 7 日,CISA 发布了一篇题为“朝鲜国家支持的攻击者使用Maui 勒索软件攻击医疗保健和公共卫生部门”的警报。最近,卡巴斯基实验室的研究人员又对Maui 勒索软件进行了研究,并将其出现的时间从2021 年 5 月提前到了 2021 年 4 月 15 日。由于早期事件中的恶意软件是在2021年4月15日编译的,而所有已知样本的编译日期都是相同的,因此这次事件可能是有史以来第一次涉及Maui 勒索软件的事件。

虽然 CISA 在其报告中没有提出有力的证据将此次攻击归咎于朝鲜攻击者,但卡巴斯基实验室的研究人员确定,在将Maui部署到初始目标系统大约10小时前,该组织向目标部署了众所周知的DTrack恶意软件的变体,几个月前又部署了3proxy(一个由俄罗斯人开发的多平台代理软件)。综上所述,研究人员十分有把握,认为这与针对韩国的APT组织Andariel类似。Andariel是Lazarus组织下的一个子组,主要攻击目标为韩国企业和政府机构。

2020.12.25:发现可疑的 3proxy 工具;

2021.4.15:发现DTrack 恶意软件;

2021.4.15:发现Maui 勒索软件;

DTrack 恶意软件

1.png

一旦运行这个恶意软件,它就会执行一个嵌入的 shellcode,加载一个最终的 Windows 内存中的有效负载。该恶意软件负责收集受害者信息并将其发送到远程主机。它的功能几乎与以前的 DTrack 模块相同。该恶意软件通过 Windows 命令收集有关受感染主机的信息。内存中的有效负载执行以下 Windows 命令:

2.png

此外,该恶意软件还会收集浏览器历史数据,并将其保存到 browser.his 文件中,就像旧变种一样。与旧版本的 DTrack 相比,新的信息收集模块通过 HTTP 将被盗信息发送到远程服务器,该变体将被盗文件复制到同一网络上的远程主机。

Maui 勒索软件

Maui 勒索软件是在同一服务器上的 DTrack 变种后十小时检测到的。

3.png

Maui 勒索软件存在多个运行参数。在此事件中,我们观察到攻击者使用“-t”和“-x”参数,以及特定的驱动器路径进行加密:

4.png

在这个示例中,“-t 8”将勒索软件线程数设置为 8,“-x”命令恶意软件“self melt”,“E:”值将路径(在这个案例中为整个驱动器)设置为加密。勒索软件的功能与之前Stairwell 报告中描述的相同。

该恶意软件创建了两个密钥文件来实现文件加密:

5.png

不同受害者身上的类似 DTrack 恶意软件

根据对相邻主机的渗透信息,研究人员在印度发现了更多受害者。其中一台主机最初于 2021 年 2 月遭到攻击。Andariel 很可能窃取了提升的凭据以在目标组织内部署此恶意软件,但这种猜测是基于路径和其他工件,具体细节还需要继续分析。

6.png

该恶意软件的主要目标与上述受害者的情况相同,使用不同的登录凭据和本地 IP 地址来窃取数据。

7.png

Windows命令来窃取数据

从同一个受害者身上,我们发现了其他使用不同登录凭据的 DTrack 恶意软件 (MD5 87e3fc08c01841999a8ad8fe25f12fe4)。

新增DTrack模块和初始感染方法

“3Proxy”工具可能是攻击者使用的工具,于 2020 年 9 月 9 日编译,并于 2020 年 12 月 25 日部署给受害者。基于这个检测和编译日期,研究人员扩大了研究范围,发现了一个额外的 DTrack 模块。该模块编译于2020年09月16日14:16:21,并在2020年12月初检测到,与3Proxy工具部署的时间点相似。

8.png

这个DTrack模块非常类似于DTrack的事件跟踪模块,该模块之前被报告给我们的威胁情报客户。在一个受害系统中,我们发现一个知名的简单HTTP服务器HFS7部署了上面的恶意软件。在一个易受攻击的HFS服务器上使用未知漏洞并执行“whoami”后,执行下面的Powershell命令从远程服务器获取额外的Powershell脚本:

9.png

mini.ps1 脚本负责通过 bitsadmin.exe 下载并执行上述 DTrack 恶意软件:

10.png

另一个受害者操作了一个易受攻击的 Weblogic 服务器。根据分析,攻击者通过 CVE-2017-10271 漏洞攻击了该服务器。研究人员看到 Andariel 在 2019 年年中滥用了相同的漏洞并破坏了 WebLogic 服务器。在本案例中,被利用的服务器会执行 Powershell 命令来获取额外的脚本。获取的脚本能够从我们上面提到的服务器(hxxp://145.232.235[.]222/usr/users/mini.ps1)下载 Powershell 脚本。因此攻击者至少在 2020 年底之前滥用了易受攻击的面向互联网的服务来部署他们的恶意软件。

受害者分析

2022年7月的 CISA 警报指出,医疗保健和公共卫生部门已成为美国 Maui 勒索软件的攻击目标。然而,根据我们的研究,我们认为这项业务并不针对特定行业,而且其影响范围是全球性的。可以确认,有一家日本住房公司于 2021 年 4 月 15 日成为 Maui 勒索软件的攻击目标。此外,来自印度、越南和俄罗斯的受害者在类似的时间范围内被日本 Maui 事件中使用的 DTrack 恶意软件感染,时间是从2020 年底至 2021 年初。

研究表明,该攻击者相当投机取巧,无论其业务范围如何,只要拥有良好的财务状况,就可能成为其攻击对象。攻击者很可能偏爱易受攻击的暴露于互联网的 Web 服务。此外,Andariel 有选择地部署勒索软件以获取经济利益。

11.png

幕后攻击者是谁?

根据卡巴斯基威胁归因引擎(KTAE),来自受害者的DTrack恶意软件与之前已知的DTrack恶意软件具有高度的代码相似性(84%)。

此外,我们发现 DTrack 恶意软件 (MD5 739812e2ae1327a94e441719b885bd19) 使用与“Backdoor.Preft”恶意软件 (MD5 2f553cba839ca4dab201d3f8154bae2a) 相同的 shellcode 加载程序,此后门由赛门铁克发布。请注意,赛门铁克最近将 Backdoor.Preft 恶意软件描述为“aka Dtrack, Valefor”。除了代码相似性之外,攻击者还使用了 3Proxy 工具 (MD5 5bc4b606f4c0f8cd2e6787ae049bf5bb),该工具之前也被 Andariel/StoneFly/Silent Chollima 组织 (MD5 95247511a611ba3d8581c7c6b8b1a38a) 使用。赛门铁克将 StoneFly 归咎于 DarkSeoul 事件背后的攻击者。

总结

综合分析,Maui 勒索软件事件背后的攻击者 TTP 与过去的 Andariel/Stonefly/Silent Chollima 活动非常相似:

在初始感染后使用合法代理和隧道工具或部署它们以保持访问权限,并使用 Powershell 脚本和 Bitsadmin 下载其他恶意软件;

使用漏洞攻击已知但未修补的易受攻击的公共服务,例如 WebLogic 和 HFS;

专门部署DTrack,也被称为Preft;

目标网络中的驻留时间可以在活动之前持续数月;

出于经济利益,在全球范围内部署勒索软件。

sl-abstract-block-module-structure-1200x600.jpg

2022 年 7 月 7 日,CISA 发布了一篇题为“朝鲜国家支持的攻击者使用Maui 勒索软件攻击医疗保健和公共卫生部门”的警报。最近,卡巴斯基实验室的研究人员又对Maui 勒索软件进行了研究,并将其出现的时间从2021 年 5 月提前到了 2021 年 4 月 15 日。由于早期事件中的恶意软件是在2021年4月15日编译的,而所有已知样本的编译日期都是相同的,因此这次事件可能是有史以来第一次涉及Maui 勒索软件的事件。

虽然 CISA 在其报告中没有提出有力的证据将此次攻击归咎于朝鲜攻击者,但卡巴斯基实验室的研究人员确定,在将Maui部署到初始目标系统大约10小时前,该组织向目标部署了众所周知的DTrack恶意软件的变体,几个月前又部署了3proxy(一个由俄罗斯人开发的多平台代理软件)。综上所述,研究人员十分有把握,认为这与针对韩国的APT组织Andariel类似。Andariel是Lazarus组织下的一个子组,主要攻击目标为韩国企业和政府机构。

2020.12.25:发现可疑的 3proxy 工具;

2021.4.15:发现DTrack 恶意软件;

2021.4.15:发现Maui 勒索软件;

DTrack 恶意软件

1.png

一旦运行这个恶意软件,它就会执行一个嵌入的 shellcode,加载一个最终的 Windows 内存中的有效负载。该恶意软件负责收集受害者信息并将其发送到远程主机。它的功能几乎与以前的 DTrack 模块相同。该恶意软件通过 Windows 命令收集有关受感染主机的信息。内存中的有效负载执行以下 Windows 命令:

2.png

此外,该恶意软件还会收集浏览器历史数据,并将其保存到 browser.his 文件中,就像旧变种一样。与旧版本的 DTrack 相比,新的信息收集模块通过 HTTP 将被盗信息发送到远程服务器,该变体将被盗文件复制到同一网络上的远程主机。

Maui 勒索软件

Maui 勒索软件是在同一服务器上的 DTrack 变种后十小时检测到的。

3.png

Maui 勒索软件存在多个运行参数。在此事件中,我们观察到攻击者使用“-t”和“-x”参数,以及特定的驱动器路径进行加密:

4.png

在这个示例中,“-t 8”将勒索软件线程数设置为 8,“-x”命令恶意软件“self melt”,“E:”值将路径(在这个案例中为整个驱动器)设置为加密。勒索软件的功能与之前Stairwell 报告中描述的相同。

该恶意软件创建了两个密钥文件来实现文件加密:

5.png

不同受害者身上的类似 DTrack 恶意软件

根据对相邻主机的渗透信息,研究人员在印度发现了更多受害者。其中一台主机最初于 2021 年 2 月遭到攻击。Andariel 很可能窃取了提升的凭据以在目标组织内部署此恶意软件,但这种猜测是基于路径和其他工件,具体细节还需要继续分析。

6.png

该恶意软件的主要目标与上述受害者的情况相同,使用不同的登录凭据和本地 IP 地址来窃取数据。

7.png

Windows命令来窃取数据

从同一个受害者身上,我们发现了其他使用不同登录凭据的 DTrack 恶意软件 (MD5 87e3fc08c01841999a8ad8fe25f12fe4)。

新增DTrack模块和初始感染方法

“3Proxy”工具可能是攻击者使用的工具,于 2020 年 9 月 9 日编译,并于 2020 年 12 月 25 日部署给受害者。基于这个检测和编译日期,研究人员扩大了研究范围,发现了一个额外的 DTrack 模块。该模块编译于2020年09月16日14:16:21,并在2020年12月初检测到,与3Proxy工具部署的时间点相似。

8.png

这个DTrack模块非常类似于DTrack的事件跟踪模块,该模块之前被报告给我们的威胁情报客户。在一个受害系统中,我们发现一个知名的简单HTTP服务器HFS7部署了上面的恶意软件。在一个易受攻击的HFS服务器上使用未知漏洞并执行“whoami”后,执行下面的Powershell命令从远程服务器获取额外的Powershell脚本:

9.png

mini.ps1 脚本负责通过 bitsadmin.exe 下载并执行上述 DTrack 恶意软件:

10.png

另一个受害者操作了一个易受攻击的 Weblogic 服务器。根据分析,攻击者通过 CVE-2017-10271 漏洞攻击了该服务器。研究人员看到 Andariel 在 2019 年年中滥用了相同的漏洞并破坏了 WebLogic 服务器。在本案例中,被利用的服务器会执行 Powershell 命令来获取额外的脚本。获取的脚本能够从我们上面提到的服务器(hxxp://145.232.235[.]222/usr/users/mini.ps1)下载 Powershell 脚本。因此攻击者至少在 2020 年底之前滥用了易受攻击的面向互联网的服务来部署他们的恶意软件。

受害者分析

2022年7月的 CISA 警报指出,医疗保健和公共卫生部门已成为美国 Maui 勒索软件的攻击目标。然而,根据我们的研究,我们认为这项业务并不针对特定行业,而且其影响范围是全球性的。可以确认,有一家日本住房公司于 2021 年 4 月 15 日成为 Maui 勒索软件的攻击目标。此外,来自印度、越南和俄罗斯的受害者在类似的时间范围内被日本 Maui 事件中使用的 DTrack 恶意软件感染,时间是从2020 年底至 2021 年初。

研究表明,该攻击者相当投机取巧,无论其业务范围如何,只要拥有良好的财务状况,就可能成为其攻击对象。攻击者很可能偏爱易受攻击的暴露于互联网的 Web 服务。此外,Andariel 有选择地部署勒索软件以获取经济利益。

11.png

幕后攻击者是谁?

根据卡巴斯基威胁归因引擎(KTAE),来自受害者的DTrack恶意软件与之前已知的DTrack恶意软件具有高度的代码相似性(84%)。

此外,我们发现 DTrack 恶意软件 (MD5 739812e2ae1327a94e441719b885bd19) 使用与“Backdoor.Preft”恶意软件 (MD5 2f553cba839ca4dab201d3f8154bae2a) 相同的 shellcode 加载程序,此后门由赛门铁克发布。请注意,赛门铁克最近将 Backdoor.Preft 恶意软件描述为“aka Dtrack, Valefor”。除了代码相似性之外,攻击者还使用了 3Proxy 工具 (MD5 5bc4b606f4c0f8cd2e6787ae049bf5bb),该工具之前也被 Andariel/StoneFly/Silent Chollima 组织 (MD5 95247511a611ba3d8581c7c6b8b1a38a) 使用。赛门铁克将 StoneFly 归咎于 DarkSeoul 事件背后的攻击者。

总结

综合分析,Maui 勒索软件事件背后的攻击者 TTP 与过去的 Andariel/Stonefly/Silent Chollima 活动非常相似:

在初始感染后使用合法代理和隧道工具或部署它们以保持访问权限,并使用 Powershell 脚本和 Bitsadmin 下载其他恶意软件;

使用漏洞攻击已知但未修补的易受攻击的公共服务,例如 WebLogic 和 HFS;

专门部署DTrack,也被称为Preft;

目标网络中的驻留时间可以在活动之前持续数月;

出于经济利益,在全球范围内部署勒索软件。

1.CloudGuard Spectral 在 PyPI 上检测到 10 个恶意包,pypi 是 Python Package Index 的首字母简写,其实表示的是 Python 的 Packag 索引,这个也是 Python 的官方索引;

2.恶意程序包安装信息窃取程序,使攻击者能够窃取开发人员的私人数据和个人凭据;

3.一旦检测到,CPR 就会披露这些信息并提醒 PyPI 这些包裹,稍后将被 PyPI 删除;

4.CPR 敦促用户注意这些包裹。

PyPI 是领先的 Python 存储库,是 Python 用户最常用的存储库。每个 Python 开发者都熟悉“pip install”日常程序,以提供他们所需的python软件。

Pypi 帮助开发人员查找和安装由该社区其他开发人员开发和共享的软件。该平台目前是免费的,开发人员每天都使用该存储库。截止目前,Pypi有超过612240名活跃用户,参与391325个项目,发布了3664724个版本。

许多用户没有意识到这样一个事实,这一简单的命令会使他们面临更高的风险。 pip install 命令触发包安装,其中可以包含一个setup.py脚本。此脚本可以包含 Python 片段,以在目标安装程序的计算上完成所需的安装过程。黑客利用该特性将恶意代码作为安装脚本的一部分,这些代码在用户的设备上秘密运行而不被发现。在这种情况下,必须要做好防护,因为这类攻击通常会获取非常关键的数据点,如密码和Api令牌。此外,此类攻击正在增加。一个相关的例子是最近的pygrata攻击,恶意软件包被用来窃取AWS(亚马逊网络服务)密钥和环境变量,这是供应链攻击的一部分。需要注意的是,攻击者并没有等待,正如你将看到的,相同的攻击者似乎已经生成了针对PyPI用户的新活动。我们检测到的包的详细信息会在本文中进行详细的描述。

Ascii2text

Ascii2text是一个恶意程序包,仅通过名称和描述模仿流行的程序包。有趣的是,他们非常聪明地复制了除了发布部分的整个项目描述,从而防止用户意识到这是一个假包。

1.png

假冒的ascii2text描述VS原始包描述

包恶意部分在包__init__.py文件中,由setup.py安装脚本导入。__init__.py文件中的代码负责下载和执行一个恶意脚本,该脚本会搜索本地密码并使用discord web hook上传它们。

2.jpg

__init__.py中的恶意代码片段

3.jpg

它下载的恶意脚本

Pyg-utils、Pymocks 和 PyProto2

Pyg-utils似乎是最近Pygrata活动的产物,该活动的目的是获取用户的AWS证书。作为setup.py安装的一部分,Pyg-utils会连接到相同的恶意域名(pygrata.com),该域名可能是网络钓鱼攻击的基础设施。有趣的是,Pymocks和PyProto2具有几乎相同的代码,但针对的是不同的域——pymocks.com。Pyg-utils是在15/6发布的,Pyg-utils 于6月 15日发布,Pymocks 和 PyProto 发布的时间较晚(分别为 6月 24 日和  7月4 日)。Pymocks.com域名也是在同一天( 6月 24 日)创建的。因此,假设所有这些包都是由同一个恶意的攻击者制作的,这可能是出于 Pyg-utils 隐藏并决定复制并重新触发他们的恶意活动这一事实的动机。

4.png

Pyg-utils恶意的setup.py文件出现在几乎相同的pymock和PyProto2文件旁

Test-async

Test-async在其描述中被描述为“非常酷的测试包,非常有用,每个人都需要100%的测试”。在它的setup.py安装脚本中,它从网上下载并执行可能是恶意的代码。有趣的是,在下载该片段之前,它会通知 Discord 频道“新运行”已开始。

5.jpg

测试async setup.py安装脚本

Free-net-vpn

Free-net-vpn和Free-net-vpn2是针对环境变量的恶意包。在setup.py安装脚本中有一个干净的、有文档记录的代码,以获取用户的凭证(甚至黑客也在关注代码标准)。然后,这些秘密被发布到动态DNS映射服务映射的网站。

6.jpg

free-net-vpn setup.py 安装脚本

Zlibsrc

zlibsrc 包可能试图将合法用户与流行的 Python 内置 zlib 包混淆。在其 setup.py 脚本中,它会在安装过程中下载并运行恶意文件。

7.jpg

Zlibsrc __init__ . py脚本

Browserdiv

Browserdiv 是一个恶意程序包,其目的是通过收集安装程序凭据并将其发送到预定义的不和谐 webhook 来窃取安装程序凭据。有趣的是,虽然根据它的命名,它似乎针对与网页设计相关的编程(bowser、div),但根据它的描述,该软件包的动机是允许在 discord 中使用 selfbot。

8.jpg

Browserdiv setup.py安装脚本

WINRPCexploit

一个恶意的包,窃取用户的凭证作为其setup.py安装脚本的一部分,有趣的是,根据其描述,它是一个“利用 windows RPC 漏洞的包”,实际上它只是窃取了安装程序的凭据。

9.jpg

WINRPCexploit setup.py安装脚本

供应链攻击旨在利用组织和外部各方之间的信任关系。这些关系可能包括合作伙伴关系、供应商关系或第三方软件的使用。攻击者会破坏一个组织,然后向供应链上游扩散,利用这些可信的关系进入其他组织的环境。近年来,这样的攻击变得越来越频繁,影响也越来越大,因此,开发人员必须确保他们的行动是安全的,反复检查使用中的每一个软件成分,尤其是从不同的存储库下载的软件,特别是那些不是自己创建的。

1.CloudGuard Spectral 在 PyPI 上检测到 10 个恶意包,pypi 是 Python Package Index 的首字母简写,其实表示的是 Python 的 Packag 索引,这个也是 Python 的官方索引;

2.恶意程序包安装信息窃取程序,使攻击者能够窃取开发人员的私人数据和个人凭据;

3.一旦检测到,CPR 就会披露这些信息并提醒 PyPI 这些包裹,稍后将被 PyPI 删除;

4.CPR 敦促用户注意这些包裹。

PyPI 是领先的 Python 存储库,是 Python 用户最常用的存储库。每个 Python 开发者都熟悉“pip install”日常程序,以提供他们所需的python软件。

Pypi 帮助开发人员查找和安装由该社区其他开发人员开发和共享的软件。该平台目前是免费的,开发人员每天都使用该存储库。截止目前,Pypi有超过612240名活跃用户,参与391325个项目,发布了3664724个版本。

许多用户没有意识到这样一个事实,这一简单的命令会使他们面临更高的风险。 pip install 命令触发包安装,其中可以包含一个setup.py脚本。此脚本可以包含 Python 片段,以在目标安装程序的计算上完成所需的安装过程。黑客利用该特性将恶意代码作为安装脚本的一部分,这些代码在用户的设备上秘密运行而不被发现。在这种情况下,必须要做好防护,因为这类攻击通常会获取非常关键的数据点,如密码和Api令牌。此外,此类攻击正在增加。一个相关的例子是最近的pygrata攻击,恶意软件包被用来窃取AWS(亚马逊网络服务)密钥和环境变量,这是供应链攻击的一部分。需要注意的是,攻击者并没有等待,正如你将看到的,相同的攻击者似乎已经生成了针对PyPI用户的新活动。我们检测到的包的详细信息会在本文中进行详细的描述。

Ascii2text

Ascii2text是一个恶意程序包,仅通过名称和描述模仿流行的程序包。有趣的是,他们非常聪明地复制了除了发布部分的整个项目描述,从而防止用户意识到这是一个假包。

1.png

假冒的ascii2text描述VS原始包描述

包恶意部分在包__init__.py文件中,由setup.py安装脚本导入。__init__.py文件中的代码负责下载和执行一个恶意脚本,该脚本会搜索本地密码并使用discord web hook上传它们。

2.jpg

__init__.py中的恶意代码片段

3.jpg

它下载的恶意脚本

Pyg-utils、Pymocks 和 PyProto2

Pyg-utils似乎是最近Pygrata活动的产物,该活动的目的是获取用户的AWS证书。作为setup.py安装的一部分,Pyg-utils会连接到相同的恶意域名(pygrata.com),该域名可能是网络钓鱼攻击的基础设施。有趣的是,Pymocks和PyProto2具有几乎相同的代码,但针对的是不同的域——pymocks.com。Pyg-utils是在15/6发布的,Pyg-utils 于6月 15日发布,Pymocks 和 PyProto 发布的时间较晚(分别为 6月 24 日和  7月4 日)。Pymocks.com域名也是在同一天( 6月 24 日)创建的。因此,假设所有这些包都是由同一个恶意的攻击者制作的,这可能是出于 Pyg-utils 隐藏并决定复制并重新触发他们的恶意活动这一事实的动机。

4.png

Pyg-utils恶意的setup.py文件出现在几乎相同的pymock和PyProto2文件旁

Test-async

Test-async在其描述中被描述为“非常酷的测试包,非常有用,每个人都需要100%的测试”。在它的setup.py安装脚本中,它从网上下载并执行可能是恶意的代码。有趣的是,在下载该片段之前,它会通知 Discord 频道“新运行”已开始。

5.jpg

测试async setup.py安装脚本

Free-net-vpn

Free-net-vpn和Free-net-vpn2是针对环境变量的恶意包。在setup.py安装脚本中有一个干净的、有文档记录的代码,以获取用户的凭证(甚至黑客也在关注代码标准)。然后,这些秘密被发布到动态DNS映射服务映射的网站。

6.jpg

free-net-vpn setup.py 安装脚本

Zlibsrc

zlibsrc 包可能试图将合法用户与流行的 Python 内置 zlib 包混淆。在其 setup.py 脚本中,它会在安装过程中下载并运行恶意文件。

7.jpg

Zlibsrc __init__ . py脚本

Browserdiv

Browserdiv 是一个恶意程序包,其目的是通过收集安装程序凭据并将其发送到预定义的不和谐 webhook 来窃取安装程序凭据。有趣的是,虽然根据它的命名,它似乎针对与网页设计相关的编程(bowser、div),但根据它的描述,该软件包的动机是允许在 discord 中使用 selfbot。

8.jpg

Browserdiv setup.py安装脚本

WINRPCexploit

一个恶意的包,窃取用户的凭证作为其setup.py安装脚本的一部分,有趣的是,根据其描述,它是一个“利用 windows RPC 漏洞的包”,实际上它只是窃取了安装程序的凭据。

9.jpg

WINRPCexploit setup.py安装脚本

供应链攻击旨在利用组织和外部各方之间的信任关系。这些关系可能包括合作伙伴关系、供应商关系或第三方软件的使用。攻击者会破坏一个组织,然后向供应链上游扩散,利用这些可信的关系进入其他组织的环境。近年来,这样的攻击变得越来越频繁,影响也越来越大,因此,开发人员必须确保他们的行动是安全的,反复检查使用中的每一个软件成分,尤其是从不同的存储库下载的软件,特别是那些不是自己创建的。

众所周知,Gootkit使用无文件技术来释放CobaltStrike和其他恶意负载。研究人员最近发现的一次攻击,表面其战术又有了更新。

研究人员对异常PowerShell脚本的深入分析揭示了与Gootkit加载程序相关的攻击集。过去,Gootkit使用免费软件安装程序来屏蔽恶意文件;现在它使用法律文件来诱骗用户下载这些文件。我们通过托管扩展检测和响应(MxDR)以及调查PowerShell脚本的标志来发现这种攻击策略,该标志允许我们阻止它造成任何损害并释放其有效载荷。众所周知,Gootkit使用无文件技术来传递值得注意的威胁,例如SunCrypt和REvil(Sodinokibi)勒索软件、Kronos特洛伊木马和CobaltStrike。

攻击概述

在与各种有效负载对比之后,我们可以假设Gootkit运行在一个访问即服务模型上。因此,它可以被不同的组织用来进行攻击,因此值得对其进行监控,以防止更大的威胁成功进入系统。

下图说明了其感染程序。它从用户在搜索引擎中搜索特定信息开始。在这种情况下,用户搜索了关键词“披露协议房地产交易”。结果中有一个被Gootkit运营商攻击的网站,这意味着用户打开这个被攻击的网站并不是偶然的。事实上,运营商通过使用搜索引擎优化(SEO)攻击来调整对他们有利的几率,使该网站在搜索结果中排名靠前,从而导致用户访问受感染的网站。这也意味着该网站的URL将不会长时间可用,如果不立即进行全面分析将难以进行。

1.png

MxDR看到的GootkitLoader感染链

打开该网站后,我们发现它以在线论坛的形式出现,直接回答受害者的问题。该论坛包含一个包含恶意.js文件的ZIP压缩文件。当用户下载并打开此文件时,它会生成一个混淆脚本,该脚本通过注册表填充,在注册表中安装了一大块加密代码,并添加了计划任务以实现持久性。然后通过PowerShell反射加载注册表中的加密代码,以重建CobaltStrike二进制文件,该二进制文件直接在内存中无文件运行。

我们刚刚描述的大部分内容仍然与我们在2020年报告的行为一致,但有一些小的更新。这表明GootkitLoader仍在积极开发中,并且已证明成功地攻击了毫无戒心的受害者。

两个明显的变化引人注目:

搜索词现在利用法律文档模板而不是免费软件安装程序。

加密注册表现在使用自定义文本替换算法而不是base64编码。

被攻击的网站

通过追踪用户的行为,我们现在可以看到攻击中访问的网站。众所周知,攻击者只会攻击一个易受攻击或配置错误的网站来植入他们的恶意软件或工具,而不是创建或注册一个新的恶意操作。在Gootkit的案例中,由于它破坏了一个合法域名,所使用的网站很可能通过了信誉服务。对于毫无戒心的用户来说,访问该网站不会引起怀疑,因为它对于歌唱和语音教练来说似乎是一个无害的网站。

2.png

受感染网站的主页

对下载的文件执行搜索(“房地产交易披露协议”)表明,该网站的内容与其所有者及其目的无关。此外,通过导航网站的主页本身无法找到这些搜索结果链接。这是该网站已被攻击的证据,因为它允许攻击者注入或创建新的不相关的Web内容。当我们通过托管网站的Shodan查询IP地址时,我们还发现了更多漏洞证据。

3.png

谷歌搜索显示网站中不需要的内容

这种策略对Gootkit来说并不是什么新鲜事。再加上SEO攻击,Gootkit运营商可以将受害者集中到一个受感染的网站,并诱使他们下载他们正在寻找的文件。在这次事件中,我们能够在Gootkit加载程序释放其有效载荷之前阻止它。然而,该用户已经访问了该网站,下载了恶意的ZIP文件,并打开了它。这些操作导致的异常PowerShell脚本提醒我们可能有恶意活动。在这次调查中,我们试图找出如果PowerShell脚本没有被标记并被允许运行会发生什么。

调查分析

如上所述,用户访问了受感染的网站并使用GoogleChrome下载了ZIP压缩文件。根据TrendMicroVisionOneTM的记录,他们访问的确切URL如下:

4.png

截至撰写本文时,该URL已无法访问。但是,我们能够分析用户下载的ZIP压缩文件。如前所述,它被命名为披露协议房地产交易(8321).zip。在另一个例子中,JavaScript文件被命名为家庭成员之间的租赁协议template(98539).zip。这两个文件名都强烈表明Gootkit利用了引用法律文档模板的关键字,可能会引诱用户下载文件。需要注意的是,这个选择的搜索词和主题一直在发生变化。

5.png

VisionOne界面显示用户访问受感染网站并下载ZIP压缩文件的证据

ZIP压缩文件已成功保存在下载文件夹C:\Users\{username}\Downloads\disclosureagreementrealestatetransaction(8321).zip中。

6.png

ZIP压缩文件成功保存在用户的Downloads文件夹中

然后,用户打开了ZIP压缩文件中的.js文件,该文件生成了一个混淆的PowerShell脚本。检测到的命令行包括wscript.exe,Windows操作系统的默认脚本解释器。此命令行运行恶意JavaScript文件。文件夹文件路径和文件名如下所示:

7.png

通过.js文件生成的混淆PowerShell脚本

通过使用VisionOne的AMSI跟踪分析,该团队能够在运行时查看解码的脚本并构建它生成的事件顺序。在已解码的脚本中,列出了三个可能受到威胁的域。这些域名本身就是合法的网站。Gootkit只选择一个并构造完整的URL以获取下一阶段的脚本执行。这里列出了三个域:

learn[.]openschool.ua–教育

Lakeside-fishandchips[.]com–餐厅和美食

kristinee[.]com–个人网站

8.png

VisionOne的AMSI追踪记录的解码脚本

对脚本进行解码也让我们发现,为了完成操作需要两个阶段的脚本。第一阶段脚本执行以下操作:

1.它检查注册表HKCU\PJZTLE,如果找不到则创建它。正如我们在之前的博客中讨论的那样,这可以作为感染标记。

2.然后它会检查当前用户是否登录到可能用于绕过沙盒工具的域。

3.接下来,它连接到构造的URL以获取下一个要执行的脚本。在本例中,它从hxxps://learn[.]openschool[.]ua/test.php?mthqpllauigylit=738078785565141检索第二阶段脚本。

然后,它会在运行获取的代码之前休眠10秒。

9.png

VisionOne的AMSI分析记录的第一阶段脚本执行流程

从上述受感染网站检索到的第二阶段脚本完成了此处列出的信息:

1.它通过环境字符串获取当前用户名;

2.它检查目标注册表并在它不存在时创建它。它为持久性执行注册表填充,其中创建了两组注册表,每组都包含加密的二进制文件,稍后将被解码和执行:

10.png

VisionOne的AMSI追踪记录的\\Phone\\{loggedOnUser}\\上的注册表填充

11.png

VisionOne的AMSI追踪记录的\\Phone\\{loggedOnUser}0\\上的注册表填充

在这两个阶段之后,它最终执行了两个同样由AMSITelemetry记录的加密PowerShell脚本。第一个解密注册表\\Phone\\{loggedOnUser}0\\的二进制文件,并用于启动名为“Test”的函数。

12.png

VisionOne的AMSI追踪记录的第一个PowerShell的解码脚本

第二个PowerShell脚本通过计划任务安装持久性机制,其中它将用户名分配为其任务名称。

13.png

VisionOne的AMSI追踪记录的第二个PowerShell解码后的脚本

计划任务将二进制文件加载到\Phone\{loggedOnUser}0注册表,然后使用相同的反射代码加载技术解密并执行在\Phone\{loggedOnUser}注册表中找到的最终有效负载。

发现此实例的最终有效负载是一个CobaltStrike二进制文件,该二进制文件也被发现连接到CobaltStrike的命令和控制(C&C)服务器。

CobaltStrike有效载荷

CobaltStrike二进制文件以反射方式直接加载到内存中,已连接到IP地址89[.]238[.]185[.]13。使用内部和外部威胁情报,该团队确认该IP地址是Cobalt Strike C&C。CobaltStrike是一种用于后期开发活动的工具,它使用信标组件作为主要有效负载,允许执行PowerShell脚本、记录击键、截屏、下载文件和生成其他有效负载。

14.png

总结

从这个案例中得到的一个关键结论是,Gootkit仍然很活跃,并不断迭代其技术。这意味着该操作已被证明是有效的,因为其他攻击者似乎仍在继续使用它。用户未来可能会在其他活动中遇到Gootkit,并且它很可能会使用新的手段来发起攻击。

分析还表明,SEO攻击仍然是一种有效的钓鱼策略。SEO攻击和合法网站受损结合可以掩盖恶意活动的迹象,这些迹象通常会让用户保持警惕。这种策略突出了用户意识的重要性以及网站所有者在确保其网络空间安全方面的责任。

各类组织可以通过对其员工进行用户安全意识培训来提供帮助,该培训旨在使人们能够识别并保护自己免受最新威胁的攻击。例如,在本例中,如果用户对下载JavaScript文件更加谨慎,则可以更早地避免威胁。另一方面,网站所有者必须通过选择强调自己服务器安全性的网络托管服务提供商来做出更好的网络托管选择。

这个案例凸显了监控的重要性。值得注意的是,跨平台XDR阻止了这种攻击升级,因为我们能够迅速隔离受影响的计算机,阻止对网络造成进一步的损害。例如,CobaltStrike有效载荷可能会导致更严重的问题,例如勒索软件的部署、横向移动的凭证转储和数据泄露。托管XDR服务阻止了这一切的实现。

众所周知,Gootkit使用无文件技术来释放CobaltStrike和其他恶意负载。研究人员最近发现的一次攻击,表面其战术又有了更新。

研究人员对异常PowerShell脚本的深入分析揭示了与Gootkit加载程序相关的攻击集。过去,Gootkit使用免费软件安装程序来屏蔽恶意文件;现在它使用法律文件来诱骗用户下载这些文件。我们通过托管扩展检测和响应(MxDR)以及调查PowerShell脚本的标志来发现这种攻击策略,该标志允许我们阻止它造成任何损害并释放其有效载荷。众所周知,Gootkit使用无文件技术来传递值得注意的威胁,例如SunCrypt和REvil(Sodinokibi)勒索软件、Kronos特洛伊木马和CobaltStrike。

攻击概述

在与各种有效负载对比之后,我们可以假设Gootkit运行在一个访问即服务模型上。因此,它可以被不同的组织用来进行攻击,因此值得对其进行监控,以防止更大的威胁成功进入系统。

下图说明了其感染程序。它从用户在搜索引擎中搜索特定信息开始。在这种情况下,用户搜索了关键词“披露协议房地产交易”。结果中有一个被Gootkit运营商攻击的网站,这意味着用户打开这个被攻击的网站并不是偶然的。事实上,运营商通过使用搜索引擎优化(SEO)攻击来调整对他们有利的几率,使该网站在搜索结果中排名靠前,从而导致用户访问受感染的网站。这也意味着该网站的URL将不会长时间可用,如果不立即进行全面分析将难以进行。

1.png

MxDR看到的GootkitLoader感染链

打开该网站后,我们发现它以在线论坛的形式出现,直接回答受害者的问题。该论坛包含一个包含恶意.js文件的ZIP压缩文件。当用户下载并打开此文件时,它会生成一个混淆脚本,该脚本通过注册表填充,在注册表中安装了一大块加密代码,并添加了计划任务以实现持久性。然后通过PowerShell反射加载注册表中的加密代码,以重建CobaltStrike二进制文件,该二进制文件直接在内存中无文件运行。

我们刚刚描述的大部分内容仍然与我们在2020年报告的行为一致,但有一些小的更新。这表明GootkitLoader仍在积极开发中,并且已证明成功地攻击了毫无戒心的受害者。

两个明显的变化引人注目:

搜索词现在利用法律文档模板而不是免费软件安装程序。

加密注册表现在使用自定义文本替换算法而不是base64编码。

被攻击的网站

通过追踪用户的行为,我们现在可以看到攻击中访问的网站。众所周知,攻击者只会攻击一个易受攻击或配置错误的网站来植入他们的恶意软件或工具,而不是创建或注册一个新的恶意操作。在Gootkit的案例中,由于它破坏了一个合法域名,所使用的网站很可能通过了信誉服务。对于毫无戒心的用户来说,访问该网站不会引起怀疑,因为它对于歌唱和语音教练来说似乎是一个无害的网站。

2.png

受感染网站的主页

对下载的文件执行搜索(“房地产交易披露协议”)表明,该网站的内容与其所有者及其目的无关。此外,通过导航网站的主页本身无法找到这些搜索结果链接。这是该网站已被攻击的证据,因为它允许攻击者注入或创建新的不相关的Web内容。当我们通过托管网站的Shodan查询IP地址时,我们还发现了更多漏洞证据。

3.png

谷歌搜索显示网站中不需要的内容

这种策略对Gootkit来说并不是什么新鲜事。再加上SEO攻击,Gootkit运营商可以将受害者集中到一个受感染的网站,并诱使他们下载他们正在寻找的文件。在这次事件中,我们能够在Gootkit加载程序释放其有效载荷之前阻止它。然而,该用户已经访问了该网站,下载了恶意的ZIP文件,并打开了它。这些操作导致的异常PowerShell脚本提醒我们可能有恶意活动。在这次调查中,我们试图找出如果PowerShell脚本没有被标记并被允许运行会发生什么。

调查分析

如上所述,用户访问了受感染的网站并使用GoogleChrome下载了ZIP压缩文件。根据TrendMicroVisionOneTM的记录,他们访问的确切URL如下:

4.png

截至撰写本文时,该URL已无法访问。但是,我们能够分析用户下载的ZIP压缩文件。如前所述,它被命名为披露协议房地产交易(8321).zip。在另一个例子中,JavaScript文件被命名为家庭成员之间的租赁协议template(98539).zip。这两个文件名都强烈表明Gootkit利用了引用法律文档模板的关键字,可能会引诱用户下载文件。需要注意的是,这个选择的搜索词和主题一直在发生变化。

5.png

VisionOne界面显示用户访问受感染网站并下载ZIP压缩文件的证据

ZIP压缩文件已成功保存在下载文件夹C:\Users\{username}\Downloads\disclosureagreementrealestatetransaction(8321).zip中。

6.png

ZIP压缩文件成功保存在用户的Downloads文件夹中

然后,用户打开了ZIP压缩文件中的.js文件,该文件生成了一个混淆的PowerShell脚本。检测到的命令行包括wscript.exe,Windows操作系统的默认脚本解释器。此命令行运行恶意JavaScript文件。文件夹文件路径和文件名如下所示:

7.png

通过.js文件生成的混淆PowerShell脚本

通过使用VisionOne的AMSI跟踪分析,该团队能够在运行时查看解码的脚本并构建它生成的事件顺序。在已解码的脚本中,列出了三个可能受到威胁的域。这些域名本身就是合法的网站。Gootkit只选择一个并构造完整的URL以获取下一阶段的脚本执行。这里列出了三个域:

learn[.]openschool.ua–教育

Lakeside-fishandchips[.]com–餐厅和美食

kristinee[.]com–个人网站

8.png

VisionOne的AMSI追踪记录的解码脚本

对脚本进行解码也让我们发现,为了完成操作需要两个阶段的脚本。第一阶段脚本执行以下操作:

1.它检查注册表HKCU\PJZTLE,如果找不到则创建它。正如我们在之前的博客中讨论的那样,这可以作为感染标记。

2.然后它会检查当前用户是否登录到可能用于绕过沙盒工具的域。

3.接下来,它连接到构造的URL以获取下一个要执行的脚本。在本例中,它从hxxps://learn[.]openschool[.]ua/test.php?mthqpllauigylit=738078785565141检索第二阶段脚本。

然后,它会在运行获取的代码之前休眠10秒。

9.png

VisionOne的AMSI分析记录的第一阶段脚本执行流程

从上述受感染网站检索到的第二阶段脚本完成了此处列出的信息:

1.它通过环境字符串获取当前用户名;

2.它检查目标注册表并在它不存在时创建它。它为持久性执行注册表填充,其中创建了两组注册表,每组都包含加密的二进制文件,稍后将被解码和执行:

10.png

VisionOne的AMSI追踪记录的\\Phone\\{loggedOnUser}\\上的注册表填充

11.png

VisionOne的AMSI追踪记录的\\Phone\\{loggedOnUser}0\\上的注册表填充

在这两个阶段之后,它最终执行了两个同样由AMSITelemetry记录的加密PowerShell脚本。第一个解密注册表\\Phone\\{loggedOnUser}0\\的二进制文件,并用于启动名为“Test”的函数。

12.png

VisionOne的AMSI追踪记录的第一个PowerShell的解码脚本

第二个PowerShell脚本通过计划任务安装持久性机制,其中它将用户名分配为其任务名称。

13.png

VisionOne的AMSI追踪记录的第二个PowerShell解码后的脚本

计划任务将二进制文件加载到\Phone\{loggedOnUser}0注册表,然后使用相同的反射代码加载技术解密并执行在\Phone\{loggedOnUser}注册表中找到的最终有效负载。

发现此实例的最终有效负载是一个CobaltStrike二进制文件,该二进制文件也被发现连接到CobaltStrike的命令和控制(C&C)服务器。

CobaltStrike有效载荷

CobaltStrike二进制文件以反射方式直接加载到内存中,已连接到IP地址89[.]238[.]185[.]13。使用内部和外部威胁情报,该团队确认该IP地址是Cobalt Strike C&C。CobaltStrike是一种用于后期开发活动的工具,它使用信标组件作为主要有效负载,允许执行PowerShell脚本、记录击键、截屏、下载文件和生成其他有效负载。

14.png

总结

从这个案例中得到的一个关键结论是,Gootkit仍然很活跃,并不断迭代其技术。这意味着该操作已被证明是有效的,因为其他攻击者似乎仍在继续使用它。用户未来可能会在其他活动中遇到Gootkit,并且它很可能会使用新的手段来发起攻击。

分析还表明,SEO攻击仍然是一种有效的钓鱼策略。SEO攻击和合法网站受损结合可以掩盖恶意活动的迹象,这些迹象通常会让用户保持警惕。这种策略突出了用户意识的重要性以及网站所有者在确保其网络空间安全方面的责任。

各类组织可以通过对其员工进行用户安全意识培训来提供帮助,该培训旨在使人们能够识别并保护自己免受最新威胁的攻击。例如,在本例中,如果用户对下载JavaScript文件更加谨慎,则可以更早地避免威胁。另一方面,网站所有者必须通过选择强调自己服务器安全性的网络托管服务提供商来做出更好的网络托管选择。

这个案例凸显了监控的重要性。值得注意的是,跨平台XDR阻止了这种攻击升级,因为我们能够迅速隔离受影响的计算机,阻止对网络造成进一步的损害。例如,CobaltStrike有效载荷可能会导致更严重的问题,例如勒索软件的部署、横向移动的凭证转储和数据泄露。托管XDR服务阻止了这一切的实现。

Microsoft系统中心配置管理器(SCCM)。SCCM是一款微软产品体系架构下的桌面端,服务器,移动端管理产品。主要是负责桌面标准化,网络批量安装部署软件和操作系统,杀毒策略,资产收集,移动端管理等等。是一款作为IT管理员,企业基础架构管理的必备工具。在这篇文章中,我们将介绍 SCCM 如何使用其 HTTP API 来初始化客户端。我们还将了解如何从 SCCM 检索网络访问帐户,以及我们如何解密这些凭据而无需使用 DPAPI 或管理员帐户。

实验室设置

对于我们的实验室设置,我们将使用默认的 SCCM 部署。我发现最简单的方法是通过自动化实验室,它支持通过 ConfigurationManager 角色进行安装:

1.png

我们将在这篇文章中使用的版本是 Configuration Manager 2103,我们将把我们的主站点命名为 P01。本实验的服务器将称为 SCCM01,我们将配置为使用 HTTP 进行通信。

一旦SCCM服务器的设置完成,我们将把一切都保留为标准,并添加一个Network Access Account供以后使用:

2.png

完成后,我们就可以继续探索了!

客户端注册

让我们首先看看客户机尝试向SCCM注册时生成的请求。为了做到这一点,我们使用@_Mayyhem awesome SharpSCCM工具:

3.png

当 SharpSCCM 调用实际的 .NET 客户端库时,我们会收到一个清晰的请求,我们可以使用 WireShark 来识别它。客户端向 SCCM 服务器注册的初始步骤如下:

4.png

这个 HTTP 请求被发送到 SCCM 服务器,由两部分组成,一个是 XML 编码的标头,另一个是在多部分/混合 HTTP 请求中发送的 XML 编码的正文。有趣的是,该协议还使用了 CCM_POST 的 HTTP 方法。

标头采用 UTF-16 编码,如下所示:

5.png

请求正文是zlib压缩和Unicode编码:

6.png

为了简单起见,我删除了一些较长的十六进制字符串,但我们在这里看到的是三个十六进制blob被发送到服务器,以及一些关于我们的客户端的初始信息。

让我们转储 Signing blob:

7.png

如果我们看这个,我们实际上会看到这是一个 DER 编码的证书:

8.png

生成此证书时,添加了两个扩展密钥使用 OID:

9.png

这些将证书标记为短信签名证书(自签名)。

因此,我们看到客户端证书被传递给SCCM服务器以供稍后使用,但是SignatureValue字段呢?让我们启动dnSpy并深入研究System.ConfigurationManagement.Messaging.dll程序集,该程序集位于安装了客户端的主机上的 C:\Windows\CCM 中。

经过一番搜寻,我们在Interop.Crypt32.HashAndSignData中找到了答案:

10.png

这表明,使用带有PKCSv15填充的RSA- sha256正在使用与证书关联的 RSA 私钥对 XML 请求正文进行签名。

这里需要注意的一件奇怪的事情是,一旦生成签名,字节在ASCII十六进制编码并添加到请求¯\_(ツ)_/¯之前会被反转。

当服务器响应这个客户端注册请求时,我们再次看到有一个 XML 标头和正文,其中正文数据被 zlib 压缩。可以看到我们被分配给了 ClientID,它是在我们的客户端与服务器通信期间使用的 UUID:

11.png

在这个阶段值得注意的是,这个请求可以发送到未经身份验证的SCCM URL http://SCCM01/ccm_system/request。这足以向SCCM添加一个客户端条目,但是我们将处于“未批准”状态。这种状态在以后会变得很重要:

12.png

政策要求

客户端注册后,客户端执行的下一个阶段是检索策略列表。此调用还使用

13.png

不幸的是,这是事情变得有点复杂的地方。我们首先需要关注的是 PublicKey blob。这实际上只是客户端之前为证书生成的 RSA 公钥,但是这次它被编码为 PUBLICKEYBLOB。

接下来是 ClientIDSignature。这是我们之前看到的用于签署 ClientID 的 RSA-SHA256 签名,前面带有 GUID:,然后转换为 Unicode。例如:

14.png

最后是PayloadSignature,它是随后压缩的主体的签名。

这个请求的主体是 zlib 压缩和 Unicode 编码的,带有我们客户端的信息:

15.png

对该请求的响应是XML主体中可用的策略列表:

16.1.png

16.2.png

虽然这里有很多有趣的东西,但我们现在要关注的领域将是网络访问帐户的共享方式。

秘密政策

如果你遍历我们检索到的策略列表,你一定会遇到标记为“秘密”的策略。其中一个策略是NAAConfig,它包含了网络访问帐户:

17.png

你可能已经看到 @gentilkiwi 在 2021 年发布的 Mimikatz 更新中引用了这些帐户,这表明通常这些凭据是在 SCCM 客户端上使用 DPAPI 加密的:

18.png

但是,如果我们尝试使用 RequestAssignments 请求返回的 URL 直接下载此策略,我们会看到出现一个错误。

19.png

这样做的原因是需要对秘密策略的请求进行身份验证。但是由于这是SCCM,所以还需要进行另一种类型的身份验证。

经过一番搜寻之后,我发现了对 SCCM 服务器上名为 ccmgencert.dll 的 DLL 中使用的身份验证类型的引用:

20.png

既然我们知道了一些使用的签名方法,这些标头实际上可以很容易被创建。看看被添加到SCCM平台的客户端,我们看到它们是这样的:

21.png

ClientToken只是我们的cliententid和当前DateTime的一个连接。ClientTokenSignature是使用上面相同的RSA-SHA256算法的签名。

让将这些标头添加到我们的请求中,看看会得到什么:

22.png

这一次,我们得到了不同的回应。我的意思是我们出现错误,但我们也没有得到任何不好的数据。

事实证明,对于我们的客户端实际请求秘密策略,他们需要在服务器上处于 Approved 状态。

默认情况下,SCCM 安装有以下内容:

23.png

那么,计算机是如何自动自我认可的呢?还有另一个URL被/ccm_system_windowsauth/request的客户端使用。如果之前的XML ClientRegistrationRequest被发送到这个路径,并完成NTLMSSP验证计算机帐户,则客户端设置为 Approved 状态:

24.png

现在,当对此 URL 进行身份验证时,我们似乎可以使用任何随机域用户帐户。然而,问题是它似乎不足以迫使客户进入批准状态。相反,我们需要使用计算机帐户(尽管它不需要与我们尝试注册的客户端相对应),所以 addcomputer.py 在这里非常有用。

25.png

通过将此身份验证步骤添加到我们的注册请求并强制我们的客户端进入 Approved 状态,下次我们请求 NAAConfig 策略时,我们会得到如下所示的内容:

26.png

好吧,回到 dnSpy,我们去尝试弄清楚。答案在 Interop.DecryptMessageFromCertificateFile 方法中找到,该方法显示了 CryptDecryptMessage API 调用的使用。

27.png

参数显示此加密策略是使用 3DES CBC 的 PKCS7 编码 blob,其密钥源自我们之前在证书中提供的 RSA 公钥。

解密后,我们终于看到了一些实际的凭证,如下所示:

28.png

网络访问帐户混淆

起初,获取这些账户似乎需要更多的加密货币。但是 MimiKatz 已经向我们展示了这些凭据最终可以在客户端上访问,因此我们知道我们的客户端必须能够在使用 DPAPI 保护它们之前以某种方式解密这些凭据……那么密钥是什么?在寻找这个加密是如何完成的之后,我在客户端上找到了一个名为 PolicyAgent.dll 的 DLL。

最重要的是调试字符串:

29.png

UnobfuscateString 听起来很有希望,当然听起来比 DecryptString 更好。我没有深入研究这个反汇编的所有部分,而是创建了一个快速调试工具来调用这个函数。

30.png

当运行在与SCCM实验室网络无关的主机上时,并且连接到调试器以逐步解决通过以这种方式调用方法而发生的不可避免的访问冲突时,就会解密用户名和密码:

31.png

32.png

这意味着所使用的加密与描述的完全一样,它是被混淆的!我们拥有在密文中解密这些凭证所需的所有信息,而且我们可以完全离线完成!

通过重新创建unobfuscation方法的步骤,我们可以创建如下所示的解密代码。

33.1.png

有了计算机帐户,我们就可以在SCCM 中添加虚假客户端,下载加密的网络访问帐户凭据,并对其进行解密,而无需处理提升权限或任何 DPAPI 解密。

Microsoft系统中心配置管理器(SCCM)。SCCM是一款微软产品体系架构下的桌面端,服务器,移动端管理产品。主要是负责桌面标准化,网络批量安装部署软件和操作系统,杀毒策略,资产收集,移动端管理等等。是一款作为IT管理员,企业基础架构管理的必备工具。在这篇文章中,我们将介绍 SCCM 如何使用其 HTTP API 来初始化客户端。我们还将了解如何从 SCCM 检索网络访问帐户,以及我们如何解密这些凭据而无需使用 DPAPI 或管理员帐户。

实验室设置

对于我们的实验室设置,我们将使用默认的 SCCM 部署。我发现最简单的方法是通过自动化实验室,它支持通过 ConfigurationManager 角色进行安装:

1.png

我们将在这篇文章中使用的版本是 Configuration Manager 2103,我们将把我们的主站点命名为 P01。本实验的服务器将称为 SCCM01,我们将配置为使用 HTTP 进行通信。

一旦SCCM服务器的设置完成,我们将把一切都保留为标准,并添加一个Network Access Account供以后使用:

2.png

完成后,我们就可以继续探索了!

客户端注册

让我们首先看看客户机尝试向SCCM注册时生成的请求。为了做到这一点,我们使用@_Mayyhem awesome SharpSCCM工具:

3.png

当 SharpSCCM 调用实际的 .NET 客户端库时,我们会收到一个清晰的请求,我们可以使用 WireShark 来识别它。客户端向 SCCM 服务器注册的初始步骤如下:

4.png

这个 HTTP 请求被发送到 SCCM 服务器,由两部分组成,一个是 XML 编码的标头,另一个是在多部分/混合 HTTP 请求中发送的 XML 编码的正文。有趣的是,该协议还使用了 CCM_POST 的 HTTP 方法。

标头采用 UTF-16 编码,如下所示:

5.png

请求正文是zlib压缩和Unicode编码:

6.png

为了简单起见,我删除了一些较长的十六进制字符串,但我们在这里看到的是三个十六进制blob被发送到服务器,以及一些关于我们的客户端的初始信息。

让我们转储 Signing blob:

7.png

如果我们看这个,我们实际上会看到这是一个 DER 编码的证书:

8.png

生成此证书时,添加了两个扩展密钥使用 OID:

9.png

这些将证书标记为短信签名证书(自签名)。

因此,我们看到客户端证书被传递给SCCM服务器以供稍后使用,但是SignatureValue字段呢?让我们启动dnSpy并深入研究System.ConfigurationManagement.Messaging.dll程序集,该程序集位于安装了客户端的主机上的 C:\Windows\CCM 中。

经过一番搜寻,我们在Interop.Crypt32.HashAndSignData中找到了答案:

10.png

这表明,使用带有PKCSv15填充的RSA- sha256正在使用与证书关联的 RSA 私钥对 XML 请求正文进行签名。

这里需要注意的一件奇怪的事情是,一旦生成签名,字节在ASCII十六进制编码并添加到请求¯\_(ツ)_/¯之前会被反转。

当服务器响应这个客户端注册请求时,我们再次看到有一个 XML 标头和正文,其中正文数据被 zlib 压缩。可以看到我们被分配给了 ClientID,它是在我们的客户端与服务器通信期间使用的 UUID:

11.png

在这个阶段值得注意的是,这个请求可以发送到未经身份验证的SCCM URL http://SCCM01/ccm_system/request。这足以向SCCM添加一个客户端条目,但是我们将处于“未批准”状态。这种状态在以后会变得很重要:

12.png

政策要求

客户端注册后,客户端执行的下一个阶段是检索策略列表。此调用还使用

13.png

不幸的是,这是事情变得有点复杂的地方。我们首先需要关注的是 PublicKey blob。这实际上只是客户端之前为证书生成的 RSA 公钥,但是这次它被编码为 PUBLICKEYBLOB。

接下来是 ClientIDSignature。这是我们之前看到的用于签署 ClientID 的 RSA-SHA256 签名,前面带有 GUID:,然后转换为 Unicode。例如:

14.png

最后是PayloadSignature,它是随后压缩的主体的签名。

这个请求的主体是 zlib 压缩和 Unicode 编码的,带有我们客户端的信息:

15.png

对该请求的响应是XML主体中可用的策略列表:

16.1.png

16.2.png

虽然这里有很多有趣的东西,但我们现在要关注的领域将是网络访问帐户的共享方式。

秘密政策

如果你遍历我们检索到的策略列表,你一定会遇到标记为“秘密”的策略。其中一个策略是NAAConfig,它包含了网络访问帐户:

17.png

你可能已经看到 @gentilkiwi 在 2021 年发布的 Mimikatz 更新中引用了这些帐户,这表明通常这些凭据是在 SCCM 客户端上使用 DPAPI 加密的:

18.png

但是,如果我们尝试使用 RequestAssignments 请求返回的 URL 直接下载此策略,我们会看到出现一个错误。

19.png

这样做的原因是需要对秘密策略的请求进行身份验证。但是由于这是SCCM,所以还需要进行另一种类型的身份验证。

经过一番搜寻之后,我发现了对 SCCM 服务器上名为 ccmgencert.dll 的 DLL 中使用的身份验证类型的引用:

20.png

既然我们知道了一些使用的签名方法,这些标头实际上可以很容易被创建。看看被添加到SCCM平台的客户端,我们看到它们是这样的:

21.png

ClientToken只是我们的cliententid和当前DateTime的一个连接。ClientTokenSignature是使用上面相同的RSA-SHA256算法的签名。

让将这些标头添加到我们的请求中,看看会得到什么:

22.png

这一次,我们得到了不同的回应。我的意思是我们出现错误,但我们也没有得到任何不好的数据。

事实证明,对于我们的客户端实际请求秘密策略,他们需要在服务器上处于 Approved 状态。

默认情况下,SCCM 安装有以下内容:

23.png

那么,计算机是如何自动自我认可的呢?还有另一个URL被/ccm_system_windowsauth/request的客户端使用。如果之前的XML ClientRegistrationRequest被发送到这个路径,并完成NTLMSSP验证计算机帐户,则客户端设置为 Approved 状态:

24.png

现在,当对此 URL 进行身份验证时,我们似乎可以使用任何随机域用户帐户。然而,问题是它似乎不足以迫使客户进入批准状态。相反,我们需要使用计算机帐户(尽管它不需要与我们尝试注册的客户端相对应),所以 addcomputer.py 在这里非常有用。

25.png

通过将此身份验证步骤添加到我们的注册请求并强制我们的客户端进入 Approved 状态,下次我们请求 NAAConfig 策略时,我们会得到如下所示的内容:

26.png

好吧,回到 dnSpy,我们去尝试弄清楚。答案在 Interop.DecryptMessageFromCertificateFile 方法中找到,该方法显示了 CryptDecryptMessage API 调用的使用。

27.png

参数显示此加密策略是使用 3DES CBC 的 PKCS7 编码 blob,其密钥源自我们之前在证书中提供的 RSA 公钥。

解密后,我们终于看到了一些实际的凭证,如下所示:

28.png

网络访问帐户混淆

起初,获取这些账户似乎需要更多的加密货币。但是 MimiKatz 已经向我们展示了这些凭据最终可以在客户端上访问,因此我们知道我们的客户端必须能够在使用 DPAPI 保护它们之前以某种方式解密这些凭据……那么密钥是什么?在寻找这个加密是如何完成的之后,我在客户端上找到了一个名为 PolicyAgent.dll 的 DLL。

最重要的是调试字符串:

29.png

UnobfuscateString 听起来很有希望,当然听起来比 DecryptString 更好。我没有深入研究这个反汇编的所有部分,而是创建了一个快速调试工具来调用这个函数。

30.png

当运行在与SCCM实验室网络无关的主机上时,并且连接到调试器以逐步解决通过以这种方式调用方法而发生的不可避免的访问冲突时,就会解密用户名和密码:

31.png

32.png

这意味着所使用的加密与描述的完全一样,它是被混淆的!我们拥有在密文中解密这些凭证所需的所有信息,而且我们可以完全离线完成!

通过重新创建unobfuscation方法的步骤,我们可以创建如下所示的解密代码。

33.1.png

有了计算机帐户,我们就可以在SCCM 中添加虚假客户端,下载加密的网络访问帐户凭据,并对其进行解密,而无需处理提升权限或任何 DPAPI 解密。

研究人员最近发现了一个新的勒索软件家族,研究人员称之为HavanaCrypt,它伪装成一个谷歌软件更新应用程序,并使用一个微软的网络托管服务IP地址作为它的命令和控制服务器来规避检测。

根据趋势科技智能防护网络的数据,研究人员在2022年第一季度通过电子邮件、URL和文件层检测和阻止了超过440万勒索软件威胁,比2021年第四季增加了37%。

勒索软件之所以如此普遍,还在于它的进化能力:它使用不断变化的策略和计划来欺骗不知情的受害者,并成功地渗透到环境中。例如,今年就有报道称,一些勒索软件冒充Windows 10、Google Chrome 和 Microsoft Exchange 更新的形式传播,以欺骗潜在的受害者下载恶意文件。

最近,趋势科技的研究人员发现了一个全新的勒索软件家族,它采用了一个类似的方案:它把自己伪装成一个谷歌软件更新应用程序,并使用一个微软网络托管服务IP地址作为它的命令和控制(C&C)服务器来规避检测。研究人员的调查还显示,该勒索软件在其文件加密例程中使用了 QueueUserWorkItem 函数、一个 .NET System.Threading 命名空间方法,该函数将方法排队等待执行,以及开源密码管理器 KeePass Password Safe 的模块。

在这篇文章中,研究人员对这个新的勒索软件家族(研究人员称之为HavanaCrypt)的感染技术进行了深入的技术分析。

HavanaCrypt是假冒的谷歌软件更新应用程序。

Fig1_HavanaCrypt%20Ransomware.webp.jpg

HavanaCrypt二进制文件的文件描述

该恶意软件是一个 .NET 编译的应用程序,受 Obfuscar 保护,Obfuscar 是一种开源 .NET 混淆器,用于帮助保护 .NET 程序集中的代码。

Fig%202_HavanaCrypt%20Ransomware.webp.jpg

Detect It Easy 工具中显示的 HavanaCrypt 二进制文件的属性,该工具用于确定文件类型

该恶意软件还具有多种反虚拟化技术,帮助它在虚拟机中执行时避免动态分析。为了分析示例并生成去混淆代码,研究人员使用了de4dot和DeObfuscar等工具。

Fig%203_HavanaCrypt%20Ransomware.webp.jpg

混淆的 HavanaCrypt 勒索软件代码示例

4.png

去除混淆的HavanaCrypt勒索软件代码样本

执行后,HavanaCrypt 使用带有参数 0 (SW_HIDE) 的 ShowWindow 函数隐藏其窗口。

Fig%205_HavanaCrypt%20Ransomware.webp.jpg

HavanaCrypt使用的ShowWindow函数

HavanaCrypt 然后检查 AutoRun 注册表以查看是否存在“GoogleUpdate”注册表。如果注册表不存在,恶意软件将继续执行其恶意程序。

6.png

包含 HavanaCrypt 在检查注册表项时使用的参数的函数

然后,它继续执行反虚拟化例程,如果发现系统运行在虚拟机环境中,它会自行终止。

反虚拟化

HavanaCrypt有四个阶段来检查受感染的计算机是否在虚拟化环境中运行。

Fig%207_HavanaCrypt%20Ransomware.webp.jpg

HavanaCrypt 用于实现其反虚拟化机制的函数

Fig%208_HavanaCrypt%20Ransomware.webp.jpg

HavanaCrypt的整个反虚拟化程序

首先,它会检查 VMWare Tools 和 vmmouse 等虚拟机使用的服务。

9.png

HavanaCrypt 检查的服务

其次,它检查与虚拟机应用程序相关的常用文件。

10.png

HavanaCrypt 检查的虚拟机文件

它检查虚拟机为其可执行文件使用的文件名:

11.png

HavanaCrypt 检查的虚拟机可执行文件

最后,它检查计算机的MAC地址,并将其与虚拟机通常使用的组织唯一标识符(OUI)前缀进行比较。

12.png

HavanaCrypt正在检查OUI前缀

13.png

虚拟机的OUI范围或前缀

在验证受害计算机没有在虚拟机中运行后,HavanaCrypt 从 20[.]227[.]128[.]33(Microsoft Web 托管服务 IP 地址)下载名为“2.txt”的文件并保存作为批处理 (.bat) 文件,其文件名包含 20 到 25 个随机字符。

14.png

Microsoft Web 托管服务 IP 地址的详细信息

然后,它使用带有“/c start”参数的 cmd.exe 继续执行批处理文件。批处理文件包含用于配置 Windows Defender 扫描首选项的命令,以允许在“%Windows%”和“%User%”目录中检测到任何威胁。

15.png

包含下载和执行批处理文件的函数

16.png

在Microsoft web托管服务IP地址上看到的base64编码的2.txt文件

17.png

从 Microsoft Web 托管服务 IP 地址下载的解码批处理文件

HavanaCrypt还会终止计算机中运行的某些进程:

agntsvc
axlbridge
ccevtmgr
ccsetmgr
contoso1
culserver
culture
dbeng50
dbeng8
dbsnmp
dbsrv12
defwatch
encsvc
excel
fdlauncher
firefoxconfig
httpd
infopath
isqlplussvc
msaccess
msdtc
msdtsrvr
msftesql
msmdsrv
mspub
mssql
mssqlserver
mydesktopqos
mydesktopservice
mysqld
mysqld-nt
mysqld-opt
ocautoupds
ocomm
ocssd
onenote
oracle
outlook
powerpnt
qbcfmonitorservice
qbdbmgr
qbidpservice
qbupdate
qbw32
quickboooks.fcs
ragui
rtvscan
savroam
sqbcoreservice
sqladhlp
sqlagent
sqlbrowser
sqlserv
sqlserveragent
sqlservr
sqlwriter
steam
supervise
synctime
tbirdconfig
thebat
thebat64
thunderbird
tomcat6
vds
visio
vmware-converter
vmware-usbarbitator64
winword
word
wordpad
wrapper
wxserver
wxserverview
xfssvccon
zhudongfangyu
zhundongfangyu

18.png

HavanaCrypt终止的进程

需要注意的是,这个列表包括与数据库相关的应用程序(如Microsoft SQL Server和MySQL)的进程。Microsoft Office和Steam等桌面应用程序也被终止。

在它终止所有相关进程之后,HavanaCrypt查询所有可用的磁盘驱动器,并继续删除影子副本,并将最大存储空间大小调整为401 MB。

19.png

HavanaCrypt 删除卷影副本并将可用驱动器的最大存储空间调整为 401 MB

它还通过Windows Management Instrumentation (WMI)检查系统恢复示例,并通过使用SRRemoveRestorePoint函数继续删除它们。

20.png

HavanaCrypt通过WMI删除系统恢复示例

然后,它以可执行文件(.exe)的形式在%ProgramData%和%StartUp%文件夹中删除自己的副本,这些文件的文件名包含10到15个随机字符。然后它们的属性被设置为“隐藏”和“系统文件”。

21.png

HavanaCrypt在%ProgramData%和%StartUp%文件夹中删除自己的副本

22.png

HavanaCrypt将删除的文件设置为“隐藏”和“系统文件”

HavanaCrypt还将名为“vallo.bat”的文件放到%User Startup%上,其中包含可以禁用任务管理器的函数。

23.png

HavanaCrypt 将 vallo.bat 放到 %User Startup%

24.png

vallo.bat的内容

收集计算机信息

HavanaCrypt使用QueueUserWorkItem函数为其其他有效负载和加密线程实现线程池。此函数用于在线程池变为可用时执行任务。

25.png

HavanaCrypt使用的QueueUserWorkItem函数

它还使用DebuggerStepThrough属性,该属性使它在调试期间逐步遍历代码,而不是进入代码。在分析函数内部之前,必须删除此属性。

26.png

HavanaCrypt使用的DebuggerStepThrough属性

在继续其加密程序之前,HavanaCrypt 收集某些信息并将它们发送到其 C&C 服务器 20[.]227[.]128[.]33/index.php。这些是唯一标识符 (UID) 以及令牌和日期。

UID

UID包含计算机的系统指纹。HavanaCrypt收集计算机信息片段,并通过将它们附加到另一个来组合它们,然后将信息转换为其格式的 SHA-256 哈希:

27.png

HavanaCrypt用于收集计算机信息的功能

28.png

HavanaCrypt将收集到的计算机信息转换成SHA-256哈希

HavanaCrypt收集的计算机信息包括:

The number of processor cores
The processor ID
The processor name
The socket designation
The motherboard manufacturer
The motherboard name
The BIOS version
The product number

令牌和日期

HavanaCrypt将字符串" index.php "替换为" ham.php ",以" Havana/1.0 "作为用户代理向其C&C服务器(hxxp[:]//20[.]227[.]128[.]33/ham.php)发送GET请求。

30.png

HavanaCrypt 用于向其 C&C 服务器发送 GET 请求的函数

31.png

研究人员通过Fiddler(一个web应用程序调试工具)获得的来自20[.]227[.]128[.]33/ham.php的响应

HavanaCrypt在Base64中解码ham.php的响应,并使用以下参数通过AES解密算法解密:

32.png

HavanaCrypt然后将输出存储在两个不同的数组中,以“-”作为分隔符。第一个数组用作标记,而第二个数组用作日期。

33.png

HavanaCrypt在AES解密中使用的参数的初始化

34.png

HavanaCrypt通过AES解密

使用CyberChef(一个提供编码和加密等操作的web应用程序),研究人员使用20[.]227[.]128[.]33/ham.php的响应复制了HavanaCrypt的解密程序:

35.png

研究人员用CyberChef软件复制了HavanaCrypt的解密程序

在收集所有必要的计算机信息后,HavanaCrypt使用" Havana/1.0 "作为用户代理,通过POST请求发送到hxxp://20[.]227[.]128[.]33/index.php。

36.png

研究使用 Fiddler 获得的 HavanaCrypt 对 hxxp[:]20[.]227[.]128[.]33/index[.]php 的 POST 请求

如果请求成功,HavanaCrypt将收到一个包含加密密钥、秘密密钥和其他详细信息的响应。

37.png

研究人员使用 Fiddler 获得的来自 hxxp[:]20[.]227[.]128[.]33/index[.]php 的响应

HavanaCrypt检查“%AppDataLocal%/Google/Google Software Update/1.0.0.0”中是否已经存在hava.info。如果它没有找到该文件,它将删除hava.info文件,该文件包含HavanaCrypt使用RSACryptoServiceProvider函数生成的RSA密钥。

38.png

研究人员使用控制台十六进制编辑器HIEW获得的hava.info的内容

39.png

HavanaCrypt使用RSACryptoServiceProvider函数生成的RSA密钥

加密程序

研究人员已经注意到HavanaCrypt在其加密程序中使用了KeePass Password Safe模块。特别是,它使用CryptoRandom函数来生成加密所需的随机密钥。HavanaCrypt所使用的功能和GitHub上的KeePass密码安全模块之间的相似性是显而易见的。

40.png

HavanaCrypt用于生成随机字节的函数

41.png

来自 GitHub 的 KeePass Password Safe 代码片段

HavanaCrypt 加密文件并附加“.Havana”作为文件扩展名。

42.png

HavanaCrypt的加密程序

它避免加密具有某些扩展名的文件,包括已经附加了“.Havana”扩展名的文件。

43.png

HavanaCrypt用来避免某些文件扩展名的函数

44.png

HavanaCrypt避免加密的文件扩展名文件

HavanaCrypt还避免对某些目录中的文件进行加密。

45.png

HavanaCrypt避免加密文件的目录

46.png

HavanaCrypt用来避开某些目录的函数

47.png

一些被HavanaCrypt加密的文件

在加密过程中,HavanaCrypt创建一个名为“foo.txt”的文本文件,该文件记录了包含加密文件的所有目录。

48.png

foo.txt 文本文件,其中包含包含加密文件的目录日志

结论

HavanaCrypt勒索软件将自己伪装成谷歌软件更新应用程序,目的是诱骗潜在的受害者执行恶意二进制文件。该恶意软件还通过检查与虚拟机应用程序相关的进程、文件和服务来实现许多反虚拟化技术。

勒索软件使用C&C服务器是微软网络托管服务的一部分,可能被用作网络托管服务以避免检测,这种情况并不常见。除了不同寻常的C&C服务器,HavanaCrypt还在加密阶段使用KeePass密码安全的合法模块。

该勒索软件的作者极有可能计划通过Tor浏览器进行通信,因为Tor是该软件避免加密文件的目录之一。需要注意的是,HavanaCrypt还加密了文本文件foo.txt,并没有放弃赎金通知。这可能表明HavanaCrypt仍处于开发阶段。