第8章 特勤组——破解、利用和技巧

0800

本章重点介绍各种有用的资源,这些资源对红队和渗透测试人员非常有用。虽然这些资源并不一定在每次行动中都用到,但是对于特定场景或个别场景非常有用。

随着基于启发式的终端安全防护机制越来越强大,攻击方式需要快速应变。我们通常可以编写恶意软件规避杀毒软件的检测,即使通过了初次安全防护检测,但是一旦使用类似mimikatz(在内存中)工具或者横向渗透到另一台主机,就会引发警报。为了解决这个问题,我总是告诉红队在首次尝试攻击时就被发现。在通常情况下,蓝队在发现我们的基本/默认样式(或稍微混淆)的恶意软件时,认为取得胜利,但是首次尝试的真正目的是了解目标的环境。初始静荷自动运行多个侦察脚本,实现上述目的。在下文中,我们将介绍一些快速自动运行的脚本,这些脚本可以帮助我们自动化一些攻击。

使用Metasploit,我们可以高效运行后渗透脚本,方法如下。

从“post”结果中,选择要使用的所有模块,方便在Meterpreter Shell中自动执行。在这种情况下,添加特权迁移后渗透模块(http://bit.ly/2vn1wFB)。配置Meterpreter Shell,在受感染主机的初始连接中,运行这个静荷,我们需要指定AutoRunScript参数。您可以根据需要,添加尽可能多的AutoRunScript,实现转储有关系统/网络的信息、横向移动等功能。

下面创建处理程序和AutoRunScript。

Empire具有与Metasploit资源文件类似的功能,可以自动完成许多重复性任务。首先,我们需要创建一个文件(在示例中,创建一个名为/opt/empire_autoload.rc的文件),然后在Empire实例中加载它。

0801

图8.1

正如您看到的,当代理回连时,它会自动运行get_user和get_computer PowerShell脚本。这些脚本的所有结果都存储在agent.log文件中。在这种情况下,我们的代理名称为N6LM348G,因此,日志将存储在/opt/Empire/downloads/N6LM348G/agent.log中。

Cobalt Strike功能强大的主要原因之一是Aggressor Script。使用Cobalt Strike的Aggressor Script,您不仅可以配置自动运行样式脚本,而且可以创建非常复杂的攻击。

例如,我经常碰到共享工作站的情况,比如实验室或会议室。我可能希望代理程序做的一件事是每隔半小时运行mimikatz获取明文凭证。使用Aggressor Script,我们可以执行这些操作以及其他更多的操作。

最后,有一些很值得关注的项目正朝着自动化、智能化突破和APT攻击的方向发展。我坚信攻击的自动化将成为未来的突破,我们需要能够有这种能力从而测试/验证安全防护机制的效果。我认为在自动化方面具有巨大潜力的两个工具是Portia和Caldera。

我最新的密码字典是最近的41GB密码转储,其中包含14亿用户名及其密码。现在,我不想直接提供torrent链接,因为其中包含很多敏感的用户名(或电子邮件)和相关密码,您可以搜索BreachCompilation.tar.bz2查找更多的相关信息。在下载这些非常敏感的信息之前,请查阅当地的法律条款。我建议您不要下载原始转储,而只是下载密码列表。我已经下载了41 GB转储,删除了所有用户名/电子邮件,只获取了密码字典。在我的个人主机上,使用8x Gigabyte GV-N108TTURBO-11GD AORUS GeForce GTX 1080 Ti Turbo 11G显卡。您可以自己搭建一个硬件,包括机箱、内存、电源、SSD硬盘和GPU显卡。当然,机箱至少需要4U机架(例如,SYS-4028GR-TR2)和功率足够大的电源。虽然价格不菲,但我们可以每秒大约计算472 000 000 000个散列值,暴力破解NTLM(Windows)散列值。这是8个GPU的hashcat基准测试,散列模式为1000 - NTLM。

Speed.Dev.#1.....: 59436.3 MH/s (63.16ms)
Speed.Dev.#2.....: 58038.3 MH/s (64.70ms)
Speed.Dev.#3.....: 59104.4 MH/s (63.55ms)
Speed.Dev.#4.....: 59123.0 MH/s (63.52ms)
Speed.Dev.#5.....: 58899.7 MH/s (63.74ms)
Speed.Dev.#6.....: 59125.8 MH/s (63.51ms)
Speed.Dev.#7.....: 59256.3 MH/s (63.36ms)
Speed.Dev.#8.....: 59064.5 MH/s (63.56ms)
Speed.Dev.#*.....: 472.0 GH/s

对于那些买不起大型GPU设备的人来说,还有其他选择。虽然也不是很便宜,但您可以考虑云破解。最近,亚马逊云集成了TESLA GPU(不是汽车),处理能力比1080Ti更强。在Medium上有一篇很棒的文章介绍如何基于这些GPU搭建破解服务器。

来自Iraklis Mathiopoulos论文的统计数据,散列模式为1000 - NTLM。

Speed.Dev.#1.....: 79294.4 MH/s (33.81ms)
Speed.Dev.#2.....: 79376.5 MH/s (33.79ms)
Speed.Dev.#3.....: 79135.5 MH/s (33.88ms)
Speed.Dev.#4.....: 79051.6 MH/s (33.84ms)
Speed.Dev.#5.....: 79030.6 MH/s (33.85ms)
Speed.Dev.#6.....: 79395.3 MH/s (33.81ms)
Speed.Dev.#7.....: 79079.5 MH/s (33.83ms)
Speed.Dev.#8.....: 79350.7 MH/s (33.83ms)
Speed.Dev.#*.....: 633.7 GH/s

NTLM计算总的速度比使用TESLA GPU大约快34%。运行AWS云的总成本约为每小时25美元。因此,您需要统筹规划自己的预算、要求和目标。

实验

最近,Troy Hunt 在“Have I Been Pwned”网站上发布了一个密码散列的SHA1列表,压缩文件大小约为5.3 GB。这是由以前泄露的数据生成的大字典,可以作为一份测试密码破解能力的实验数据。

随着这些GPU变得越来越快,10个字符以下的密码可以在相对合理的时间范围内进行智能破解。其中一些使用设置合理的密码掩码可以实现破解,但在大多数情况下,需要使用密码字典破解。使用真实漏洞的密码字典是破解大于12个字符密码的一种极快的方法。查看过去所有的泄露数据,我们可以很快地了解人类如何创建密码、混淆密码的常用技巧以及常用的单词。

使用具有复杂规则集的这些密码字典,我们将能够快速破解密码(有时超过25个字符)。但是请记住,密码字典取决于构建方式和更新方式。作为红队,我们定期跟踪破解的所有账户,分析它们,并将它们添加到密码字典中。我们还需要不断监控新的数据泄露、pastebin/pastie类型的网站等,查找新的密码。

常用的密码字典

将好的密码字典进行组合,我们可以在这些密码字典之上,添加规则,查找更多密码。就hashcat而言,规则定义了是否需要对密码字典进行修改。介绍规则的一种方式是使用一个易于理解的例子。我们可以使用KoreLogicRulesAppendYears规则集,如下所示。

它会在每个密码后面附加1949年~2019年的年份。如果密码字典中包含单词“hacker”,那么它会尝试计算字符串“hacker1949”~“hacker2019”的散列值。请记住,您制定的规则越复杂,完成单词列表所需的时间就越多。

幸运的是,我们不需要自己创建规则,因为已经有很多很好的规则。当然,还有默认的hashcat规则,它们来自许多较早的数据泄露,以及常见的密码操作方法。这是一个很好的起点。Kore规则来自Korelogic的密码竞赛,是另外一个标准。另外,NSAKEY和Hob0Rules这两个规则肯定需要更长的时间,但有非常详细的规则集。在过去,我应用所有规则,将它们放到一个文件中,并且唯一标识这个文件。但是现在,NotSoSecure已经为您完成这个功能,规则如下。

您突破CSK公司,获取了大量的密码。在有限的时间内,您如何取得最好的“收益”?以下演练将指导您完成初始步骤,我们需要尽可能多地破解密码。虽然,我们通常只需要几个域管理员、LDAP 管理员和公司管理员账户,但我的强迫症倾向驱使我破解所有密码。

在开始之前,您确实需要了解散列的密码格式。一旦理解了散列类型,最好先进行一些初始测试,确定密码散列算法的速度。这将对您的密码破解方法产生巨大影响。例如,在查看Windows散列时,我们看到NTLM(Windows)的执行速度大约是5 000 MH/s。常见的Linux散列值SHA-256的执行速度约为5 000 MH/s。

这意味着对于SHA-256散列,您的GPU可以每秒猜测5 000 000 000次。这可能看起来很多,但是当您有大量的单词字典和复杂规则集时,它可能不够强大。这是因为与NTLM相比,SHA-256算法的计算速度非常慢且成本高,NTLM可以达到每秒75 000 000 000个散列值。在例子中,我们将使用8个1080Ti GPU,通过NTLM的快速散列转储。

在获得域管理员访问权限后,您可以使用DCSync攻击方法,从域控制器转储所有散列值。您现在的目标是尽可能多地尝试破解散列。您能够在以后的行动中使用这些账户,并向被攻击者公司展示员工密码使用方面的问题。

我们在名为cat.txt的文件中保存所有NTLM Windows散列值。为了使读者更容易理解,我们将省略初始的hashcat执行命令。每个命令执行都将以“hashcat -w 3 -m 1000 -o hashes.cracked ./hashes/cat.txt”开头。

因此,每当您看到“[hashcat]”字符串时,可使用以下命令替换它:“hashcat -w 3 -m 1000 -o hashes.cracked ./hashes/cat.txt”。现在,快速破解NTLM散列值,我们可以在8 个GPU 1080Ti平台上高效工作。

0802

图8.2

您的最终目标是什么?通过对不同的密码生成工具、分析技术和其他技术进行大量研究,可以找到更快的破解密码的方法。

进入公司内部的红队,在行动中可能更有创造性。我经常进行的活动是模拟勒索软件。WannaCry爆发的时候,我们可以模拟勒索软件攻击。随着勒索软件攻击方式越来越流行,我们确实需要测试业务恢复/灾难恢复程序。

我们在现实生活中见证了WannaCry事件,WannaCry通过SMB共享横向移动,利用“永恒之蓝”漏洞,加密文件,甚至删除了主机系统上的所有备份。作为一个IT组织,我们需要确定的问题是,如果我们的某个用户单击了该恶意软件,会产生什么影响?我们可以恢复用户文件、共享文件和数据库等吗?我们一直听到的答案是:“我想是这样……”,但如果没有红队来提前验证这些流程,我们最后等到房子被烧成灰烬才会知道真正的答案。

这就是我喜欢为组织提供内部红队的原因。我们可以在受控环境中真正证明并验证安全性和IT是否正常运行。本书并不包括勒索软件的例子,因为这样做很危险。您可以自己构建工具,并在客户允许的情况下,开展相关测试。

下面是有关模拟勒索软件的提示。

作为红队,我们一直在寻找独特的方法,尝试禁用任何类型的日志记录。虽然有一些办法来执行这些攻击,但我们仍在不断寻找新的简单技术。

以下是leechristensen的示例,可用于禁用PowerShell日志记录。

如果您通过应用程序漏洞获得执行权限,通过Office文件或PDF获得Shell,那么接下来的步骤可能是下载并执行后续恶意软件。对于这些情况,我们可以利用Windows“功能”完成工作。大多数例子来自arno0x0x和@subtee的研究成果。

这些只是一些示例,还有大量的方法通过命令行执行后续代码。您可以找到隐藏传统日志记录的其他技术。

有多种方式可以通过本地管理员账户获取系统权限。当然,常见的方法是使用Metasploit的getsystem,但这并不总是可用。decoder-it创建了一个PowerShell脚本,将本地管理PowerShell提示符转换为System权限,通过创建一个新进程,设置新进程的父进程为系统进程。可以找到这个PowerShell,并执行以下操作,如图8.3所示。

0803

图8.3

Elad Shamir进行了广泛的研究,并且清楚地分析了如何在不接触LSASS的情况下获取NTLM散列值。在这种攻击方法出现之前,Windows 10企业版和Windows Server 2016操作系统中提供保护机制——通过mimikatz访问LSASS无法获取散列法。Elad开发了一种称为Internal Monologue的攻击方法,操作方法如下所示。

0804

图8.4

测试恶意软件的一个比较有挑战性的工作是建立一个非常快速的测试环境。Chris Long构建的一个名为Detection Lab的强大工具是Packer和Vagrant脚本的集合,允许您快速将Windows 活动目录联机。该工具包含一系列主机安全工具和日志记录工具。检测实验室由4个主机组成。

对于红队来说,“欺骗”和技巧是能力的一部分。我们必须不断研究被攻击用户、系统,以及规避检测的更好方法。这需要数小时到数年的练习、汗水和眼泪。