作为红队,我们喜欢采用社会工程(SE)攻击方式,不仅仅是因为通常对技术要求较低,更因为能够以非常低的成本成功实施高价值的行动。通常只需设置几个虚假域名、服务器,以及伪造几封电子邮件,随意丢弃一些USB记忆棒,便能在一天内取得效果。
在指标方面,我们了解了一些显而易见的事情,例如发送的电子邮件数量,单击链接的用户数量以及输入密码的用户数量。我们也努力发挥创造力,为雇用我们的公司带来实质性价值。这方面的一个例子是DefCon的社会工程竞赛,参赛的选手拨打中心和员工的电话。您可能不熟悉这个比赛,在比赛中,参赛的选手要在有限的时间找到指定公司的一些“旗帜”。“旗帜”需要通过获取公司信息夺得(例如虚拟专用网络、他们使用的杀毒软件类型、员工的具体信息或者让员工访问URL等)。如果您想了解竞赛中使用的所有“旗帜”,那么可查看2017年的比赛报告。这些类型攻击的目的是通过培训员工发现恶意行为并报告给团队,帮助公司提高内部安全意识。
在本章中,我们将简单介绍一下在行动中使用的一些工具和技术。对于社会工程类的攻击,没有正确或错误的答案。本书认为,只要攻击取得效果,就达到预期目标了。
我们在本书第2版中讨论了近似域名的话题。近似域名或者丢弃恶意软件仍然是获得最初凭证的一个有效方法。比较常见的方法是购买与目标公司非常相似的网址,或者容易输入错误的公司网址。
本书第2版有一个例子,如果攻击mail.cyberspacekittens.com网址,那么我们就会购买网址mailcyberspacekittens.com,并设置一个虚假的Outlook页面来捕获凭证。当被攻击者访问假网站并输入密码时,我们搜集这些数据,并将其重定向到公司的有效电子邮件服务器(mail.cyberspacekittens.com)。上述做法留给他们的印象是他们第一次意外地错误输入了密码,因此需要再次进行登录。
这种攻击的优势在于您不必进行任何网络钓鱼。有些人会输入错误或忘记“mail”和“cyberspacekittens”之间的点,然后输入他们的凭证。我们为被攻击者添加书签,这样被攻击者每天都会访问这个网站。
一个较好的快速复制Web应用程序身份验证页面的工具是TrustedSec的社会工程工具包(SET)。这是社会工程行动的标准工具,其中获取凭证是优先事项。设置SET工具的步骤如下。
所有文件存储在/var /www /html下,密码存放在harvester*下。在社会工程行动中复制页面的一些最佳做法如下。
我们看到更多客户使用双因子身份验证(2FA)。虽然双因子身份验证对红队来说是一个巨大的考验,但是并非不可绕过。从过去的经验来说,我们必须创建自定义页面,处理双因子认证,但现在有了ReelPhish工具。FireEye开发的ReelPhish工具允许红队利用Selenium和Chrome自动触发双因子认证,条件是被攻击者在诱骗页面上输入凭证。
如图5.1所示,我们绕过双因子认证,获得鉴权会话。尽管看起来这个工具支持Linux,但我在Kali中运行时遇到了一些问题。因此,首先在Windows中运行。
图5.1
关于双因子认证的身份认证,我想提到的一件事是确保在获得凭证后,核实所有不同的身份验证方法。我的意思是他们可能使用双因子认证,用于网站的身份验证,但对于API、旧胖客户端或所有应用程序端点,可能不需要双因子认证。我们已经看到许多应用程序在公共端点上需要双因子认证,但在应用程序的其他部分不使用双因子认证,缺乏安全保护。
红队取得巨大“成功”的另一项技术是传统的网络钓鱼。网络钓鱼的成功关键在于恐惧、紧迫性或者听起来好得令人难以置信的事情。恐惧和紧迫性确实发挥了作用,我相信很多读者以前都经历过这种情况。恐惧和紧迫性类型攻击包括以下一些情况。
对于这些一般性攻击,我们注意到公司员工变得越来越聪明。通常采用基本的网络钓鱼攻击,每10封电子邮件中至少有1封邮件被上报。在某些情况下数量要更多。持续监控这些简单的网络钓鱼攻击,确保公司是否能够更好地应对这些情况,对于红队来说是非常有价值的。
对于那些寻求更多自动化攻击的人来说,可能更愿意选择Gophish,因为它很容易设置和维护,支持模板和HTML,并跟踪/记录您需要的一切。如果您是Ruby的爱好者,那么有Phishing Frenzy;对于Python,有King Phisher。
这些自动化工具非常适合记录简单的网络钓鱼行为。对于目标开展行动,我们更多地采用手动的方法。例如,如果我们通过侦察,获得被攻击者的邮件记录,确认客户使用Office 365,那么我们就需要弄清楚,如何使用该信息构建一个非常逼真的行动。此外,我们会尝试查找该公司泄露的任何电子邮件、可能正在运行的程序、新功能、系统升级、合并以及有用的任何其他信息。
有时我们还会开展更有针对性的行动。在这些行动中,我们尝试使用所有开源工具来搜索有关人员、资产、家庭等相关的信息。例如,如果针对高管,我们会在pipl.com上搜索他们的资料,并伪造一封来自学校的电子邮件,告诉他们需要打开这个Word文档。这些操作可能会花费相当长的时间,但成功率却很高。
一种较早出现但经过实践检验的社会工程方法是向被攻击者发送恶意的Microsoft Office文件。为什么Office文件非常适合恶意静荷?因为在默认情况下,Office文件支持Visual Basic for Applications(VBA),允许代码执行。尽管最近这种方法已经很容易被杀毒软件检测到,但使用混淆方法后,在许多情况下仍然非常有效。
通常,我们可以使用Empire或Unicorn创建VBA宏。
(1)使用Empire。
(2)如果您想为Meterpreter创建静荷,那么可以使用像Unicorn这样的工具。
载荷生成后如图5.2所示。
图5.2
如您所见,上面示例中运行的是一个简单的PowerShell base64混淆脚本。这可以绕过一些杀毒软件产品,重要的是,确保在进行实际的行动之前,对其进行测试。在生成宏后,您可以快速创建一个Excel文档,如图5.3所示。
图5.3
图5.4
现在,当用户打开您的文档时,他们都会收到安全警告和启用内容的按钮,如图5.5所示。如果您可以欺骗被攻击者单击“Enable Content”(启用内容)按钮,PowerShell脚本将会执行,从而获得Empire Shell。
图5.5
如前所述,由于Macro方法是一种出现很久的攻击方法,因此许多被攻击者可能已经开始提防这种攻击。我们可以使用Office文件的另一个攻击方法,将静荷嵌入批处理文件(.bat)。在较新版本的Office中,如果被攻击者双击Word文档中的.bat文件,则不会执行对象。我们通常要“欺骗”他们,将.bat文件移动到桌面并执行,如图5.6所示。
图5.6
我们可以使用LuckyStrike以更自动化的方式完成此操作。使用LuckyStrike,我们可以在工作表中使用静荷创建Excel文档,甚至可以在Excel文档中存储完整的可执行文件(EXE),EXE文件可以使用ReflectivePE在内存中运行。
我介绍的Office文件可执行文件的最后一个工具是VBad。在运行VBad时,必须在Office中启用宏,并在宏安全设置中选中“信任对VBA项目对象模型的访问”复选框。这允许VBad Python代码更改并创建宏。
VBad对MS Office文档中的静荷做了深层次的混淆处理,如图5.7所示。VBad还增加了加密功能,采用假密钥方式迷惑了应急响应团队,最重要的是,它可以在第一次成功运行后破坏加密密钥(一次性恶意软件)。VBad的另一个特性是还可以删除静荷模块的引用,这样VBA 开发工具无法查看静荷,这使得分析和调试变得更加困难。因此,不仅逆向分析很难完成,而且如果应急响应团队尝试分析执行的Word文档与原始文档,那么所有密钥都将丢失。
图5.7
红队攻击的一个特点是,有时候时间点非常重要。在我们的一次评估中,首次发现了一个名为DDE的全新漏洞。任何杀毒软件或安全产品尚未检测到它,因此这是我们获得初始入口点的“好”方法。虽然现在有几种安全产品可以检测DDE,但在某些环境中它仍然可能是一种可行的攻击方式。
什么是DDE
Windows提供了几种在应用程序之间传输数据的方法,其中一种方法是使用动态数据交换(DDE)协议。DDE协议定义消息的格式和规则。DDE协议在共享数据的应用程序之间发送消息,并使用共享内存交换应用程序之间的数据。应用程序可以使用DDE协议进行一次性数据传输和持续的数据传输。
Sensepost团队做了一些研究,发现MS Excel和MS Word公开DDE执行接口,无须使用宏,可以执行代码,如图5.8所示。
图5.8
在Word中执行以下操作。
Empire有一个stager,它将自动创建Word文件和关联的PowerShell脚本,如图5.9所示。这个stager可以通过以下方式配置。
图5.9
有一种攻击会导致被攻击者向互联网上的攻击者服务器发出SMB请求,从而可以搜集被攻击者的NTLM鉴权散列值。这可能有效,也可能无效,因为现在大多数公司阻止SMB相关端口外联。对于那些无效的被攻击者,我们可以利用错误配置,实施subdoc_inector攻击。
作为红队,我们一直在寻找创造性方法,构建目标网页,加密静荷,并诱使用户单击运行。两个具有类似处理流程的不同工具是EmbededInHTML和demiguise。
第一个工具EmbededInHTML首先获取文件(任何类型的文件),加密文件,并将其作为资源嵌入HTML文件中,以及自动下载程序(用于响应用户单击嵌入资源),然后,当用户浏览HTML文件时,嵌入式文件即时解密,保存在临时文件夹中,接着将文件呈现给用户,就像从远程站点下载一样,这具体取决于用户的浏览器和显示的文件类型,该文件可以由浏览器自动打开,如图5.10所示。
一旦被攻击者访问恶意站点,弹出窗口就会提示被攻击者Excel正打开.xll文件。注意,对于最新版本的Excel(除非配置错误),用户需要启用加载项来执行静荷。此时是您的社会工程技巧发挥作用的时候了。
图5.10
第二个工具demiguise生成包含加密的HTA文件的.html文件。思路是当被攻击者访问页面时,页面获取密钥,在浏览器中动态解密HTA,并直接呈现给用户。这是一种规避检测技术,绕过某些安全设备的内容/文件类型检查的方法。这个工具不是为了创建出色的HTA内容而设计的,还有其他工具/技术可以帮助您完成此操作。这个工具的用途在于帮助HTA首先进入一个环境,避免被沙箱分析(如果您使用环境密钥)。
作为红队,攻击的创造性总是令我们非常兴奋。我们喜欢利用旧的漏洞并再次使它们“焕然一新”。例如,如果您一直在执行网络评估,就会知道,如果遇到无须身份验证的Jenkins应用程序(开发人员大量使用它进行持续集成),这几乎意味着完全突破。
这是因为它具有允许Groovy脚本执行测试的“特性”。利用这个脚本控制台,我们可以使用Shell执行命令,访问底层系统,如图5.11所示。
这种方法在突破方面变得如此受“欢迎”的原因是,几乎每家大公司都有使用Jenkins案例。外部攻击的问题是这些Jenkins服务都是内部托管的,无法从外部访问。
图5.11
我们如何远程执行这些服务器上的代码?在回答这个问题之前,我告诉团队退后一步,用Jenkins构建一个仿真网络进行测试。一旦我们很好地理解了代码执行请求的功能,就可以构建适当的工具,实现远程执行代码。
在测试环境中,我们通过使用JavaScript和WebRTC(网站实时通信)的多个步骤解决了这个问题。首先,一个组织的被攻击者,访问公共网站(攻击者控制)或存储XSS静荷的页面。被攻击者访问公共网站,攻击者将在其浏览器上执行JavaScript,运行恶意静荷。静荷会利用Chrome/Firefox“功能”,允许WebRTC公开被攻击者的内部IP。通过内部IP,我们可以推断被攻击者主机的本地子网,了解其公司的IP范围。现在,攻击者可以使用定制的Jenkins攻击程序,通过默认端口8080扫描网络范围内的每个IP地址(代码只扫描本地“/24”子网,但在真实的行动中,扫描范围要大得多)。
接下来的问题是,我们使用什么静荷?如果使用过Jenkins控制台Shell,就会知道漏洞对于静荷比较“挑剔”。使用复杂的PowerShell静荷可能会很困难。为了解决这个问题,我们在本书中创建了一个名为“generateJenkinsExploit.py”的工具,该工具加密二进制文件,构建恶意攻击JavaScript页面。当被攻击者访问恶意网页时,它获取其内部IP地址,并开始将漏洞利用工具发送到“/24”范围内的所有服务器。当找到存在漏洞的Jenkins服务器时,首先运行一个Groovy脚本静荷,从互联网上获取加密的二进制文件,将其解密到C:\Users\Public\RT.exe目录中,执行Meterpreter二进制文件(RT.exe)。
从理论上来讲,这与服务器端请求伪造(SSRF)非常相似,我们强迫被攻击者的浏览器重新启动内部IP的连接,如图5.12所示。
图5.12
注意:
最新版本的Jenkins中已不存在此漏洞。Jenkins 2.x之前的版本未启用CSRF保护(允许盲调用脚本)以及身份验证机制,在默认情况下是存在漏洞的。
完整的Jenkins漏洞实验室如下。
在THP Kali 虚拟机上对Jenkins实施漏洞攻击,如图5.13所示。
图5.13
现在,在完全不同的系统中,使用Chrome或Firefox访问攻击者网页http://<attacker_IP>/ badware.html,如图5.14所示。只需访问该恶意页面,被攻击者的浏览器就会加载Groovy静荷,使用JavaScript和POST请求,通过端口8080,对被攻击者的内部“/24”网络地址进行扫描攻击。当找到Jenkins服务器时,Groovy脚本通知该服务器,下载加密的Meterpreter,解密并执行。在企业网络中,被攻击者最终可能获得大量的Shell。
图5.14
Jenkins只是您可以实施攻击的一种方法,而且无须身份验证即可实现代码执行,支持GET或POST的任何应用程序都适用这个场景。在这里,您需要确定被攻击者在内部网络使用哪些应用程序,从而定制恶意攻击的方式。
由于人存在恐惧、紧迫轻易和信任的弱点,因此,通过这些弱点我们可以创建一些攻击行动,这些行动在系统突破方面具有很高的成功率。
在方法和目标方面,我们不能仅依赖网络钓鱼/电子邮件的被动攻击方式,还要积极地寻找主动攻击的方式。