导语:koadic 是在DEFCON黑客大会上被公布出来的一个后渗透(post-exploitation)工具,虽然和PowerShell Empire有些相似,但是Koadic主要是通过使用Windows ScriptHost进行大部分的操作,其核心兼容性支持Windows2000到Window 10的环境中使用

zombie-graveyard.jpg

koadic是在DEFCON黑客大会上被公布出来的一个后渗透(post-exploitation)工具,虽然和PowerShell Empire有些相似,但是Koadic主要是通过使用Windows ScriptHost(也称为JScript / VBScript)进行大部分的操作,其核心兼容性支持Windows2000到Window 10的环境中使用,Koadic也试图兼容Python 2和Python 3。

本文是“Koadic Post-Exploitation Rootkit”系列的一部分,本系列本扩两部分:

1.Koadic——基于 Python C2服务器来实现的恶意软件分析工具;

2.Koadic——基于 Pen Test, Pivot以及JavaScript来实现的恶意软件分析工具

在我关于Windows二进制文件的epic系列文章中,我已经向你接受了黑客如何秘密下载和启动基于脚本的远程恶意软件。在其中,我不仅教你如何使用rundll32和mshta,我还提到了使用Pen Test方法的渗透测试人员一直在积极探索如何在后渗透中更好地使用living-off-the land (LoL) 方法。

我是在偶然的情况下了解到Koadic的,为了挑战,我决定配置一个“javascript rundll32 exploitation”的关键字组合,看看会出现什么结果。搜索结果让我找到了Koadic后渗透rootkit,根据描述,其大部分操作都是使用Windows Script Host进行的。我对此很感兴趣。顺便说一句,Koadic是COM命令和控制的黑客技术。

要想学习Koadic,最好的办法就是深入学习一下由两位开发人员Sean Dillon和Zach Harding在Defcon大会上的演讲稿。Koadic的操作界面和分析原理类似于PowerShell Empire,都是基于脚本的。然而,关键的区别在于,Koadic依赖于受害者计算机上的JavaScript和VBScript。

正如他们在演讲中所讲的那样,IT安全团队现在更加关注攻击者使用的PowerShell。换句话说,安全团队正在Windows事件日志中寻找异常的PS活动,而忽略对Windows Script Host运行的专注,这就是Koadic被设计出来的初衷,其实,我更愿意称它为JavaScript Empire。

微软还通过添加具有PowerShell的日志记录模块来加大防御力度,这也是我在关于混淆技术的系列文章中所探讨的一个主题。

虽然安全团队可以打开PS日志,但他们是不能对JavaScript做同样事情的。

1.jpg

要记录脚本活动(PowerShell除外),Windows会强制你启用对每个启动过程的审核

要分析Koadic的脚本活动,你必须启用详细的日志记录,这将形成Windows中启动的每个进程的条目。不过,这个过程并不能帮助我隐藏Koadic的渗透分析活动。

用Mshta Stager开始渗透分析

现在,就让我带你深入了解Koadic的功能和架构,使用Koadic的一个主要原因是,它的基于脚本的渗透方法,可以使分析者能够实时更改代码,并快速适应新的测试环境。

显然读到这里,你需要将安全分析的思维从Windows事件日志转移到底层文件系统。

首先,我们在AWS环境中的一个Ubuntu样本上安装了Koadic,主要目的就是安装Koadic的Python模块。是的,Koadic的服务器端是基于Python的。

此时,Koadic利用了Windows二进制代码,这些二进制代码会偷偷的引入远程JavaScript或VBScript。基本上都是mshta,rundll32和regsvr32。但是,经过测试,只有mshta有效,这就是我在测试中使用的stager。

现在,让我们假设mshta stager是通过网络钓鱼邮件传播给受害者的。一旦激活,Koadic就会创建一个“僵尸”,这是它控制受害者设备的方式。所谓的僵尸化过程,是通过基于JavaScript的植入库完成的。

2.jpg

在现实的pen test场景中,首要任务是解决who和where的问题。毕竟,有效载荷已经出现在随机用户的笔记本电脑或服务器上。

Koadic的implant/manage/exec_cmd与真实的攻击一样,允许你远程运行单个shell命令。与所有植入的内容一样,你输入“info”命令就可以查看基本参数是什么,然后相应地设置它们。

3.jpeg

who和where的问题,可以通过远程运行shell命令得到回答

对于exec_cmd,我让僵尸程序在我的虚拟受害者的计算机上执行whoami,hostname和ipconfig,虚拟受害者来自我的AWS样本中的Windows Server 2012。

一旦你掌握了这些基础知识,就可以利用Koadic帮助你发现你所使用的Windows环境的全称域名(Full Qualified Domain Name,FQDN)。这样做的目的是,你需要将这些域名从被黑客攻击过的计算机上移出来。

为此,我需要将cmd参数设置为GetHostByName($env:computerName),以便使用PowerShell。这是一个良性的PS cmdlet,所以理论上来讲,如果它被记录时,是不会引起引起任何分析故障的。

4.jpg

通过PowerShell cmdlet获取域名

现在,让我们开始扫描网络以了解IP地址的情况,这就是implant/scan/tcp发挥作用的地方,还可以通过implant/gather/user_hunter来发现当前登录的用户。

简而言之,Koadic内置了支持获取重要环境信息的功能,当然还可以通过运行shell命令填补其他缺失的功能。顺便说一下,可以在Github上找到所有命令的详细描述。

进行Psexec Pivot

除非黑客非常幸运,并且能够登陆一个拥有数百万未加密信用卡号码的服务器,否则它他需要跳到另一台计算机上,来获取域的凭证,并最终找到具有提升权限的凭证,最后执行恶意软件的攻击。

很久以前,我写过如何使用mimikatz和psexec来完成此过程的文章,感兴趣的可以看一下。不过,Koadic提供了一种基于mimikatz的植入方法,用于从SAM内存中检索凭证,而且它还能支持psexec。

mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,不过缺点是,你必须将psexec可执行文件上传到受害者的计算机并设置明确的路径名称。

例如,要检索凭证,我运行了implant/inject/mimikatz_dynwrapx。

5.jpeg

Koadic的mimikatz dll提供了NTLM哈希表甚至密码,这些都归功于wdigest安全漏洞

你可以在上图中看到NTLM哈希值,如果需要,你可以离线破解这些哈希值。但由于臭名昭着的wdigest安全漏洞,你还可以获得纯文本密码。WDigest.dll是在Windows XP操作系统中引入的。摘要认证协议设计用于超文本传输协议(HTTP)和简单认证安全层(SASL)交换,WDigest的问题是它将密码存储在内存中,并且无论是否使用它,都会将其存储在内存中。除非密码以明文保存在内存中,否则WDigest无法正常工作。

我不会在这篇文章中介绍如何利用此漏洞进行pivot(PIVOT通过将表达式某一列中的唯一值pivot为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合),但你可以参考implant/pivot/psexec的设置。

6.jpg

顺便说一句,你从creds命令得到了一个流水号,它会自动为你提供PtH!

我将在下一篇文章中,介绍如何通过使用初始mshta stager填充cmd参数来实现真正的pivot,从而创建另一个僵尸。其基本思路还是继续使用mimikatz获取凭证然后pivot。这意味着,你最终控制了一群僵尸。

Koadic本质上是一种远程访问木马或RAT,只不过,我们给它起了命令和控制(C2)服务器这样好听的名字。但这还是暴露了其执行原则,即客户端执行来自远程服务器的命令。

在Koadic中,客户端执行并不是像早期的RAT那样是二进制的,而是100%的JavaScript。这意味着,客户端唯一的功能是循环和植入,并从基于python的Koadic服务器上导入远程嵌入式系统(用JavaScript或VBScript编写),然后运行这些系统并将结果发回。

顺便说一句,在Koadic中存在一些聪明的编程技巧,其中服务器端Python打造了真实的JavaScript植入。

以下是Koadic中实际启动psexec的原始JavaScript:

try
  {
    var rpath = "~RPATH~"
    var UNC = "~RPATH~\\psexec.exe ";
    var domain = "~SMBDOMAIN~";
    var user = "~SMBUSER~";
    var pwd = "~SMBPASS~";
    var computer = "\\\\~RHOST~ ";
  

    UNC += computer;
  

    if (user != "" && pwd != "")
    {
        if (domain != "" && domain != ".")
        {
          user = '"' + domain + "\\" + user + '"';
        }
  

        UNC += "-u " + user + " -p " + pwd + " ";
    }
  

    UNC += " -accepteula ~CMD~";
  

    // crappy hack to make sure it mounts
    var output = Koadic.shell.exec("net use * " + rpath, "~DIRECTORY~\\~FILE~.txt");
  

    if (output.indexOf("Drive") != -1)
    {
      var drive = output.split(" ")[1];
      Koadic.shell.run("net use " + drive + " /delete", true);
    }
  

    Koadic.WS.Run("%comspec% /q /c " + UNC, 0, true);
  

    Koadic.work.report("Complete");
  }
  catch (e)
  {
    Koadic.work.error(e);
  }

那些带波浪线的变量在被发送到目标系统之前被真实的JavaScript植入替换了,关键是我还能成功地对psexec数据模块进行了一些调整,以使其在我们的AWS环境中运行。

不过,我认为mimikatz的植入内容在解析全称域名时存在一些问题。

在下一节中,我将创建一个真实的psexec pivot并深入了解pen test。我还将分析Koadiac产生的事件,以便让你了解到从原始日志中检测出异常活动,有多么不容易。

如果我们能够利用Koadic来获取活动目录信息(比如域组),岂不是有利于 pen test吗,这就有点像PowerView的功能了。

根据这个想法,下次我就可以创建我自己的植入任务了。

源链接

Hacking more

...