导语:在上一篇文章中,我介绍了Koadic实现一个依据。今天,我就接着介绍Koadic实现的另一个依据,如何基于 Pen Test, Pivot以及JavaScript来实现。

在上一篇文章中,我介绍了Koadic实现一个依据。今天,我就接着介绍Koadic实现的另一个依据,如何基于Pen Test, Pivot以及JavaScript来实现。

Koadic利用的Windows二进制软件Mshta和rundll32早就被黑客所熟知,如果你看看Mitre的ATT&CK数据库,你会发现rundll32已经成为多年来黑客发起攻击的基础。诸如Koadic之类的Pen Test工具已经承认这些黑客技术并将之用于渗透测试,从而帮助IT人员深入了解威胁并提高网络防御能力。

ATT&CK(对抗战术、技术与常识)是在公共和私营公司、学术机构和政府机构的帮助下建立的一个全球性网络对手战术和技术知识库。该知识库能够阐明威胁,并以通用的语言和框架来定义,从而跨越多学科的障碍以推动安全性的改进。通过在许多不同的组织中收集各种各样的攻击检测分析,用户可以更好地检测到攻击者,进而创建弹性和欺骗性策略,帮助客户快速适应和应对网络攻击。

我还要补充一点,深入了解Koadic的设计是非常有必要的,因为这样你才能获得更多有关防御策略的认知。

实施Pen Test 

在上一节中,我已经介绍了Koadiac是如何像所有的命令和控制或C2服务器一样,让我们将命令从其远端控制台发送到目标计算机的。在目标计算机上,一个占用空间很小的JavaScript shell(下面将详细介绍)启动实际的Windows命令。

若要进行Pen Test,你要学习的第一件事,便是是否有有趣的数据可以访问,然后复制或导出。在我虚拟的AWS环境中,你可以在看到我是如何使用legacy findstr处理包含敏感数据文件的,点此查看。然后,我使用implant/util/download_file将其返回。

2.jpg

现在,让我以安全管理员的身份,快速浏览一下Windows事件日志。

为了了解正在发生的事情,我启用了非常精细的日志记录。我这样做是为了对Pen Test的使用有详细的理解,但你可能无法依赖现实世界后渗透分析中的详细日志。然而,正如你很快就会看到的那样,Koadic确实会将信息泄露到文件中,这就为不同类型的防御提供了一个机会。

第一个有趣的日志条目,显示了rundll32是如何插入一个远程脚本的,我曾在我的LoL系列文章中讨论过https://blog.varonis.com/the-malware-hiding-in-your-windows-system32-folder-more-alternate-data-streams-and-rundll32/,不过这并不是此实用程序的标准用法。顺便说一句,Windows Defender(在Windows 10中)可以发现这个LoL运行的隐秘用途。

3.jpeg

然后,进一步了解在日志中的这个显而易见的条目。

4.jpg

此时,间接执行命令以及输出的重定向,会让人产生疑问。

当然,这是我之前发送给我的僵尸的findstr命令的结果。不过重点在于,它是通过启动cmd shell间接运行,然后运行findstr。这实际上是在JavaScript中运行shell命令时发生的情况:你使用ActiveX创建一个shell会话,然后将命令传递给它,如下所示。

var r = new ActiveXObject("WScript.Shell").Run("finstr /I private C:\VIPs");

不知你是否注意到日志条目中的1>和2> 1&命令标识?如果你是一个有经验的编程人员,你会立即意识到,这些命令标识是用于将标准输出定向到文件并将标准错误重定向到标准输出的Unix / Linux。

这样做的风险就是,将命令(由恶意软件启动)的输出转发回黑客的攻击服务器,然后服务器再将输出内容保存到文件,进而对文件进行读取和删除,这个过程实际上就是Koadic的分析过程。

不过详细的事件记录并不总是包含有用的信息,但没关系,如果你可以将这些临时的文件创建和删除活动与用户很少访问的可执行文件(例如rundll32)和复制包含敏感信息的文件联系起来,那么你就可以检测并阻止一次可能发生的攻击。

简而言之,恶意软件通常会产生一些文件噪音,这些噪音可以被那些基于用户监控的杀毒软件检测为异常文件活动。

利用Koadic实施Pivot

在上一节中,我已经向你介绍了如何配置Koadic以进行pivot。现在,就让我们进入实操阶段。

假设有其他域凭证可用,Koadic就会提供implant/inject/mimikatz_dynwrapx模块来提取缓存的哈希值,如果可能的话,还会提取真实密码。如果你随后输入creds命令,则可以使用数字标识符引用凭证。

6.jpg

使用Koadic的凭证ID号,我可以将提取的哈希值(或密码)传递给psexec

假设我已经知道了masa是acme.corp域中的另一个服务器,并且我正在使用名为lex用户的凭证,这样我就可以运行implant/pivot/exec_psexec了。

为此,我将路径名设置为我之前上传的psexec可执行文件,该文件提供了lex的凭证,并为远程命令的执行提供了最初的mshta stager,这样,我进可以侵入受害者的计算机了。通过简单地植入另一个Koadic Javascript客户端,你就可以跳到下一台计算机。

按理说,这些条件具备后,我就可以开始利用Koadic实施Pivot。但是, Koadic似乎并没有从缓存中正确地提取凭证的全称域名。所以我不得不调整JavaScript代码,被迫通过set命令配置的确切信息覆盖已经缓存的域信息。

不过,困难还远没有结束,因为我还必须为“elevated credentials”提供-h选项(即使它有明文密码),这其中就涉及到很多代码的修改。

7.jpg

使用Koadic进行Pivoti,相同的mshta stager,却针对不同的目标

不过幸运的是,基于脚本的Koadic运行环境使得代码的修改变得相对容易一些,还有就是你需要仔细看看exec_psexec植入。

一旦psexec与mshta有效载荷成功运行,此时,Koadiac就会建立另一个僵尸。至此,我就有两个僵尸:一个控制pepper.corp.acme,即我的初始目标,第二个控制masa.corp.acme。此时,我俨然成了一个僵尸控制高手!

如果要与新建立的僵尸进行通信,我只需要设置一个适当的僵尸编号,然后运行以下命令。

8.jpg

深入理解Koadic Kode和Kraziness

我认为,要真正理解你的Pen Test并深入了解后渗透,就应深入理解Koadic的架构。

描述Koadic以及其他恶意软件创建的过程是非常复杂的,其中使用的运行命令的方式并不简单,另外就是C2环境本质上也很复杂。

带有初始有效载荷的mshta stager很快就会启动rundll32,加载主要的Koadic客户端代码。此时,客户端就处于循环中,等待来自Koadic服务器的命令,而此命令则来自我上面介绍的客户端控制台。

9.jpg

上图显示了rundll32引入的一小部分客户端JavaScript,你可以看到从Koadic C2服务器发送的Windows命令启动代码,请注意其中的HTA。

一旦收到例如执行“ipconfig”的命令,Koadic的客户端就会像Unix/Linux shell一样,运行forking and execing http://cs241.cs.illinois.edu/wikibook/forking-part-1-introduction.html 命令。在我本文所举的例子中,Koadic客户端就启动了另一个rundll32,其唯一的功能便是负责连接Koadic服务器并提供专门的JavaScript——实质上是ActiveX代码,以启动Windows shell会话来运行ipconfig。而这个子rundll32只是暂时的,它会在执行完单个命令后退出,而父rundll32则执行下一个命令。

如果你对Koadic感兴趣,建议点此链接进行仔细研究,读的时候,要注意stdlib.js构成了Koadic客户端的核心。

源链接

Hacking more

...