最后更新于2023年8月31日星期四15:10:21 GMT

在Rapid7,我们喜欢一个好的渗透测试故事. 所以他们经常表现出聪明, 技能, 弹性, 对客户安全的奉献只能来自于积极尝试打破它! 在本系列中, 我们将分享一些来自渗透测试台的我们最喜欢的故事,并希望强调一些您可以提高自己组织安全性的方法.

在Rapid7上执行红队练习是一种情绪的过山车. 第一周以兴奋和乐观开始, 因为您有一个全新的客户环境需要深入研究. 所有资产和员工都在范围内,毫不留情. 从黑客的角度来看, 这真的是令人兴奋的释放与无限的可能性反弹在你的头脑中,你将如何突破边界, 设置的持久性, 横向移动, 并获得公司“皇冠上的宝石”.”

然后第一周结束了,你意识到这家公司已经锁定了他们的资产, 缺少开发和部署一个0-day, 您将不得不求助于其他入门方法,例如社会工程. 兴奋褪去,但乐观依旧,直到第一条钓鱼鱼立刻被烧了. 然后第二个失败了. 想要“赢”的渴望开始袭来,你发现自己通宵达旦地工作, 试图在他们的网络中找到一个看似不存在的问题, 这一切都是为了获得第一个立足点.

我们最近的一支红队跟随这种情绪过山车走到了“T”. 我们的任务是攻击一家软件开发公司,最终目标是访问他们的代码库和云基础设施. 我们有四周的时间, 两位Rapid7渗透测试顾问和许多红牛来破解我们所掌握的所有东西. 头两天我们都在表演 开源情报(OSINT) 收集. 这一阶段是一种被动侦察方法, 我们在网上搜索目标公司的公开信息. 感兴趣的领域包括该公司拥有的公共网络范围, 域名, 最近的收购, 公司内部使用的技术, 以及员工的联系方式.

我们的OSINT显示,该公司是云优先的,外部足迹有限. 他们为客户提供了一些带有api的HTTPS服务, 软件下载门户, 客户票务系统, 通常的. 电子邮件是云托管在Office365上,通过Okta处理单点登录(SSO). 唯一的外部员工资源是需要身份验证的外联网页面, 需要多因素身份验证(MFA)和证书的VPN门户, 电子邮件云托管在Office365, 和Okta使用MFA处理单点登录(SSO).

初步侦察后, 我们确定了三个可能的入口点:破坏一个API端点, 利用有效载荷或MFA旁路对用户进行网络钓鱼, 或者猜一个密码,希望它可以在不需要MFA的情况下登录. 我们花了头两天的时间梳理客户的产品API文档,并测试任何端点,这些端点可以在没有身份验证的情况下访问或被利用来获取有用的信息. 我们在这里受到阻碍,这是公司的光荣.

了Phishin”

然而,当我们着眼于B计划时,我们的乐观和兴奋仍然很高, 网络钓鱼的员工. 我们发起了一个基本的网络钓鱼活动,伪装成一个新的第三方员工合规培训门户网站. 绕过web内容过滤, 我们购买了一个最近过期的域名,分类为“信息/技术”.然后我们创建了一个假的登陆页面,上面有我们的新公司标志和一个“用SSO登录”按钮.

员工们几乎没有意识到, 而他们看到的是正常的Okta登录页面, 这是一个代理网络钓鱼页面 Evilginx 这将捕获他们的证书和 认证Okta会话. 唯一明显的区别是URL. 在捕获员工的Okta会话后,我们将他们重定向回我们的假第三方合规平台, 要求他们下载包含我们有效负载的HTML应用程序(HTA)文件.

我们向网上发现的50个员工电子邮件地址发起了网络钓鱼活动, 确保任何在其标题中带有“信息安全”的人都从目标列表中删除. 然后我们等着. 一个小时过去了. 两个. 三个. 与竞选团队没有互动. 恐惧开始袭来. 我们怀疑一整天的辛苦工作都被垃圾邮件过滤器吞噬了, 或者更糟, 识别和域名立即被封锁.

失败迫在眉睫, 我们开始准备第二次网络钓鱼活动, 突然我们的TMUX会话与Evilginx运行显示了一个绿色的文本. 捕获了一个有效的凭据以及Okta会话令牌. 当我们切换到命令与控制(C2)服务器仪表板时,我们屏住呼吸, 祈祷, 就在那里. 来自钓鱼用户工作站的回调. 他们打开了工作站的HTA. 它绕过了EDR解决方案,执行了我们的有效载荷. 我们在.

建立初始访问的兴奋是令人振奋的. 然而,在这一刻,我们必须深吸一口气,集中注意力. 通过网络钓鱼进行初始访问是一件很脆弱的事情,如果用户报告了,我们将失去我们的外壳. 如果我们触发EDR内的警报,我们就会失去保护壳. 如果用户晚上回家后重启电脑,我们就可以设置持久性, 我们会失去我们的外壳.

重要的事情先做, 我们迅速将钓鱼页面上的HTA有效负载替换为良性负载,以防活动被报告,安全运营中心(SOC)对着陆页面进行分类. 我们不能让他们从我们的有效负载中提取入侵指示器(ioc),并将其与他们环境中的初始访问主机相关联. 从这里, 一个运营商专注于设置持久性和识别横向移动路径,而另一个运营商使用被盗的Okta会话令牌在用户的云应用程序过期之前检查用户的云应用程序. 三小时后,我们还能进入, 侦察正在进行中, 我们发现了一些有趣的 Kerberoastable 服务帐户,如果被破解,将允许横向移动.

事情正朝着我们的方向发展. 然后一切都崩溃了.

在感觉像是成功的高潮时,我们收到了另一个成功的带有凭据的网络钓鱼. 我们破解了使用kerberos提供的服务帐户密码,并且……丢失了初始访问shell.  查看员工的Teams消息, 我们看到SOC发来的消息,询问他们的资产是否有可疑活动,因为他们准备隔离它. 我们又累又泄气,只好从头开始. 但, 就像所有过山车一样, 当我们意识到最近捕获的凭证是帮助台团队的实习生时,我们开始上坡. 而第一级服务台员工在公司没有太多的访问权限, 他们可以在SaaS票务解决方案中查看所有可用的员工支持票务. 我们笑得合不拢嘴,假装自己是乐于助人的公司IT服务台.

嗨,我们是来帮忙的

我们很快制作了一个有效负载,它利用了与恶意DLL一起打包的合法Microsoft二进制文件, 通过via加载 AppDomain 注射,并包装成一个漂亮的 ISO. 然后,我们确定了一名员工,他向服务台提交了一个请求,请求帮助连接一个抛出错误的内部应用程序. 深吸一口气, 我们伪造了服务台的电话号码,打电话给需要帮助的员工.

“你好,女士,我是IT服务台的亚瑟. 我们收到了您关于无法连接到传送门的通知, 我想和你一起解决问题. 现在方便吗?”

注意:你可能想知道员工在这里可以做得更好的地方, 但最后, 责任在于公司没有在他们的帮助台门户上提供多因素. 作为服务台,它为我们提供了回答员工可能提出的任何问题所需的信息.

这名员工很高兴能这么快得到服务台的帮助. 我们甚至付出了额外的努力,花时间试图解决员工的实际问题, 感谢我们的努力. 最后,我们要求员工尝试应用“最后一次更新”来解决问题. 我们引导他们去一个网站托管我们的有效载荷, 下载ISO, 打开它, 然后运行“安装程序”.他们答应了,因为我们在整个通话过程中已经建立了融洽的关系. 过了一会儿,我们在员工的工作站找到了一个shell.

带着壳, 服务帐户凭证被破解, 从我们的第一枚炮弹开始,所有嘈杂的侦察都消失了, 我们直接进入了横向运动. 服务帐户允许我们以管理员身份访问MSSQL服务器. 我们挂载了服务器的C$驱动器,并找到了已经安装的使用微软的程序 .微软网络框架. 我们上传了一个恶意DLL和配置文件,并使用 Windows管理工具(WMI)),再次利用AppDomain注入加载我们的DLL. 成功! 我们从MSSQL服务器收到了对新C2域的回调. 横向运动,第一跳,完成.

使用 Rubeus, 我们检查了内存中的Kerberos票据,发现了一个为Domain Admin用户缓存的Kerberos票据授予票据(KRBTGT). KRBTGT可以用在 Pass-the-Ticket (PTT) 攻击以验证帐户身份, 也就是说我们拥有域名管理权限直到门票在大约四小时后到期. 一切都很顺利,我们已经为下一次挫折做好了准备. 但它没有来. 而不是, 我们使用票据对云管理员员工的工作站进行身份验证,并在主机上建立另一个shell. 我们很幸运, 公司在他们的活动目录描述中有每个人的角色和头衔, 员工工作站还在描述字段中包含相关的员工名, 这使得识别云管理员工的工作站变得轻而易举.

在云管理员的工作站上使用我们的shell, 我们执行了自己的Chrome cookie提取器, “HomemadeChocolateChips,在记忆中, 它催生了Chrome与调试端口和 提取所有cookie 从当前用户的配置文件. 这为我们提供了一个Okta会话令牌,我们将其与 袜子代理 通过员工的机器访问来自内部IP地址的Okta仪表板. 该公司将其配置为一旦通过Okta认证, 它来自于公司的IP领域, Azure Okta chiclet没有再次提示MFA. 随着一阵兴奋的尖叫,我们以管理员权限进入了他们的Azure门户.

在Azure, 在虚拟机的配置和操作选项卡下有一个方便的功能,称为“运行命令”.这允许管理员按照它的说明执行操作, 在虚拟机上运行PowerShell脚本. 好像不能再轻松了, 我们确定了一个标记为“Jenkins Build Server”的虚拟机,并启用了“Run Comm和”. 运行一个快速的PowerShell脚本下载我们的zip文件与后门的合法二进制文件, 展开存档, 然后执行它们, 我们在构建服务器上建立了C2立足点. 从那里我们找到了构建作业使用的GitHub凭据, 哪一个可以让我们访问我们的目标:公司应用程序的源代码.

疲惫但胜利, 我们的眼袋和颤抖的咖啡因引起的能量, 我们设置了几个长途C2连接,以便在评估结束时保持持久的网络访问. 我们还会见了客户,以确定我们的下一步, 比如故意提醒他们的安全团队有漏洞. 嗯,周末好好喝杯啤酒,睡个午觉之后.

前面的故事是几个最近的攻击工作流的合并,以混淆客户端身份并展示一个内聚的评估.