(接上文)
在提供有效载荷和Web资源时,我们希望最小化事件响应者查看文件的能力,并增加成功执行有效载荷的机会,无论是建立C2还是收集情报。
Jeff Dimmock写的关于 Apache Mod_Rewrite的用法和示例:
· 使用 Apache mod_rewrite 模块加强你的网络钓鱼方法
· 使用Apache mod_rewrite模块设置无效的 URI 重定向
· 使用 Apache mod_rewrite模块创建基于操作系统的重定向
· 使用 Apache mod_rewrite 模块对抗安全事件响应人员
· 使用 Apache RewriteMap 模块设置过期的钓鱼链接
· Apache mod_rewrite 模块在渗透测试中的几个应用
· 使用 Apache mod_rewrite 模块提供随机的有效载荷
其他关于Apache mod_rewrite的用法和示例:
· 使用 mod_rewrite 规则规避供应商沙盒 by Jason Lang @curi0usjack
· 如何通过 NGINX 提供随机的有效载荷- Gist by jivoi
要在重定向器服务器上自动设置Apache Mod_Rewrite,请查看Julain Catrambone的( @n0pe_sled ) 博客两篇文章—— 自动化设置 Mod_Rewrite 模块 和 accompanying tool 。
重定向C2流量背后的意图有两个:一个是为了混淆后端的团队服务器,如果被事件响应人员浏览了网站,则可以迷惑他们,让网站看起来似乎是合法的网站。通过使用Apache mod_rewrite或其他代理(例如使用Python的Web框架Flask),我们可以可靠地过滤来自调查流量的真实C2流量。
· 使用 Apache mod_rewrite 模块创建 Cobalt Strike HTTP C2 重定向器 – Jeff Dimmock
· 使用 Apache mod_rewrite 模块保护你的 Empire C2 – Gabriel Mathenge (@_theVIVI)
· 扩展你的视野: Red Team – 现代 SAAS C2 – Alex Rymdeko-Harvey (@killswitch-gui)
· 混合的 Cobalt Strike 重定向器介绍 – Zach Grace (@ztgrace) and @m0ther_
在上面的“C2重定向”的基础上的另一种方法是让你的重定向服务器使用Apache的SSL代理引擎来接受入站SSL请求,并将这些请求代理到反向HTTPS监听器的请求。加密需要在所有阶段使用,你可以根据需要在重定向器上更换SSL证书。
为了使用mod_rewrite规则,你需要将规则放在“/etc/apache2/sites-available/000-default-le-ssl.conf”中,假设你已使用LetsEncrypt(又叫做CertBot)安装了证书。此外,要启用SSL ProxyPass引擎,你需要在同一个配置文件中包含以下配置行:
# Enable the Proxy Engine #启用代理引擎 SSLProxyEngine On # Tell the Proxy Engine where to forward your requests#告诉代理引擎转发请求的位置 ProxyPass / https://DESTINATION_C2_URL:443/ ProxyPassReverse / https://DESTINATION_C2_URL:443/ # Disable Cert checking, useful if you're using a self-signed cert SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off
· 自动化配置 Apache mod_rewrite 模块以及 Cobalt Strike Profiles
· mod-rewrite-模块使用手册.com
· Apache 2.4 mod_rewrite 模块官方说明文档
· Apache mod_rewrite 模块介绍
· Apache mod_rewrite 深度解析
· Mod_Rewrite/.htaccess 字符检查器介绍
修改C2流量
Cobalt Strike使用Malleable C2配置文件修改其流量。配置文件提供高度可自定义的选项,用于修改服务器的C2流量在线路上的显示方式。 Malleable C2配置文件可用于加强规避事件响应人员的检测以及冒充已知对手或伪装成目标使用的合法内部应用程序。
· Malleable C2 Profiles 官方说明 – GitHub
· Malleable 命令及控制说明文档- cobaltstrike.com
· Cobalt Strike 2.0 – Malleable 命令及控制说明文档 – Raphael Mudge
· Cobalt Strike 3.6 – 特权提升介绍 – Raphael Mudge
· 勇敢的新世界: Malleable C2 – Will Schroeder (@harmj0y)
· 如何编写用于Cobalt Strike 的 Malleable C2 Profiles – Jeff Dimmock
· 内存中的规避技术介绍 (Video series) – Raphael Mudge
在开始创建或修改Malleable C2配置文件时,保持Beacon信息放置的数据大小限制非常重要。例如,配置profile文件使得在URL参数中发送大量数据将需要许多请求。有关这方面的更多信息,请查看Raphael Mudge的博客文章 小心低速下载 。
如果你的Malleable C2配置文件出现问题并注意到teamserver的控制台输出了错误信息,请参阅Raphael Mudge的博客文章( 突破权限限制以及 Malleable C2 Profiles )获取故障排除的提示。
Empire使用通信配置文件,它为GET请求URI,用户代理(User Agent)和HTTP头提供自定义的选项。该配置文件由每个元素组成并由管道字符分隔,并在监听器上下文菜单中使用set DefaultProfileoption进行设置。
以下是默认的配置文件示例:
"/CWoNaJLBo/VTNeWw11212/|Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)|Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*|Accept-Language:en-en"
或者,可以通过在Empire的初始设置之前修改文件/setup/setup_database.py来设置DefaultProfile的值。这将更改Empire使用的默认通信配置文件。
除了通信配置文件之外,请考虑按照Joe Vest ( @joevest ) 的文章( Empire – 修改服务端C2 指示器 )中提供的步骤来自定义Empire服务器的stage URI,服务器标头和默认的网页内容。
· 默认的 Empire 通信配置文件介绍 (in Empire GitHub repo)
· 如何制作 Empire 的通信配置文件 – Jeff Dimmock
第三方C2信道
利用C2的可信合法Web服务可以为你自己配置的域名和基础架构提供有价值的支持。配置时间和复杂性需要根据所使用的技术和服务而异。利用第三方服务进行C2重定向的一个流行案例是使用Domain Fronting。
Domain Fronting是一种审查逃避服务和应用程序用于通过合法和高度可信域名路由流量的技术。支持Domain Fronting的流行服务包括 Google App Engine , Amazon CloudFront , 和 Microsoft Azure 。重要的是要注意许多提供商,例如 Google 和 Amazon 已实施针对域名前端的缓解,因此在你尝试使用时,此Wiki中提供的某些链接资源或信息可能已过时。
简而言之,流量使用了受信任服务提供商的DNS和SNI名称,以下示例中使用的服务提供商是Google。当边缘服务器收到流量时(例如:来自gmail.com的流量),数据包将转发到数据包主机头中指定的源服务器(例如:phish.appspot.com)。根据服务提供商的不同,Origin Server会直接将流量转发到指定的域名,我们将指向我们的团队服务器,或者需要代理应用程序来执行最终的流量转发。
有关Domain Fronting如何工作的更多详细信息,请参阅白皮书( 通过 domain fronting 技术阻止通信 )和TOR项目( 说明文档 )
除了标准的前端域名(例如任何google.com的域名)之外,还可以利用其他合法域名进行前端处理。
有关搜寻前端域名的更多信息,请查看以下资源:
· 通过Cloudfront 替代域进行Domain Fronting – Vincent Yiu (@vysecurity)
· 查找Azure 域名的 Domain Fronting – thoth / Fionnbharr (@a_profligate)
· Google Groups: 使用Censys查找2000+ Azure域的博客文章
· FindFrontableDomains 工具介绍 – Steve Borosh (@rvrsh3ll)
关于Domain Fronting的更多资源
· 简化Domain Fronting – Tim Malcomvetter (@malcomvetter)
· 高声誉重定向器及 Domain Fronting – Raphael Mudge
· Empire Domain Fronting – Chris Ross (@xorrior)
· 逃脱并规避限制的网络 – Tom Steele (@_tomsteele) and Chris Patten
· 红队洞察之使用 Cobalt Strike 对谷歌服务器的Domain Fronting攻击 – Will Vandevanter and Shay Nahari of CyberArk
· SSL Domain Fronting 101 – Steve Borosh (@424f424f)
· 我们是如何发现 93k 个可用于 的 Domain Fronting CloudFront 域名的 – Chris Myers (@SWIZZLEZ_)和Barrett Adams (@PEEWPW)
· 什么是 Domain Fronting – Vincent Yiu (@vysecurity)
· 无效的 CloudFront SSL 域名 – Vincent Yiu (@vysecurity)
· CloudFront 劫持 – Matt Westfall (@disloops)
· CloudFrunt GitHub Repo – MindPointGroup
· 微软 Azure 云的 Metasploit Domain Fronting (@ch1gg1ns)
· 阿里巴巴 CDN 的 Domain Fronting – Vincent Yiu (@vysecurity)
· CloudFlare Domain Fronting: 一种简单的方法来访问(和隐藏)恶意软件的C&C – @theMiddle (Medium)
许多PaaS和SaaS提供商提供了静态子域或URL以供配置实例使用。如果关联域名通常是高度可信的,则实例可以通过购买的域名和VPS为你的C2基础架构提供额外的信任。
要设置重定向,你需要标识一个服务,该服务将静态子域名或URL作为实例的一部分发布。然后,需要使用网络或基于应用程序的重定向配置实例。该实例将充当代理,类似于此Wiki中讨论的其他重定向器。
具体实施可能因服务而有很大差异;但是,对于使用Heroku的示例,请查看这篇博客文章( 扩展你的视野 – 现代 SaaS C2 by Alex Rymdeko-Harvey (@Killswitch_GUI) )。
另一个值得进一步研究的有趣技术是使用过度宽松的Amazon S3存储桶作为C2服务器。查看 Andrew Luke (@Sw4mp_f0x) 发表的( S3 Buckets for Good and Evil )文章了解有关S3存储桶如何作为C2服务器的更多详细信息。这种技术可以与Empire的第三方C2功能结合使用,以便使用目标的合法S3存储桶来对抗它们。
有关使用PaaS作为C2服务器的另一个示例,请参阅Scott Sutherland( @_nullbind )的文章( 数据库和云: SQL Server 作为 C2 )。
在过去,已经有其他第三方服务用于C2的案例。利用允许快速发布或修改用户生成内容的第三方网站可以帮助你规避基于信誉的控制,尤其是在第三方网站通常受信任的情况下。
查看以下这些资源可以获取其他第三方C2选项:
· canisrufus (GitHub Repo) – maldevel
· 外部C2(第三方命令和控制) – Cobalt Strike说明文档
· 穿过外部C2 的 Cobalt Strike ——以最隐秘的方式回连 – Mark Bergman at outflank.nl
· 用于 Cobalt Strike C2 的 Office 365 任务 – William Knowles (@william_knows)
· 用于 Cobalt Strike 的外部C2框架 – Ryan Hanson (@ryhanson)
· 用于 Cobalt Strike 的外部C2框架 – Jonathan Echavarria (@Und3rf10w)
· 外部C2框架 (GitHub Repo) – Jonathan Echavarria (@Und3rf10w)
· 躲在云中:使用亚马逊API 的 Cobalt Strike Beacon C2 – Rhino Security Labs
· 探索 Cobalt Strike的 外部 C2 框架 – Adam (@xpn)
基础设施模糊处理
用于攻击活动的基础设施通常很容易被检测到,就像合法服务器的外壳一样。我们需要对我们的基础架构采取额外步骤,以增加在目标组织或目标可能使用的服务之间与真实服务器混合的可能性,以此来模糊化我们的基础设施。
重定向器 可以通过 重定向到无效的URI 、 到期的钓鱼有效载荷链接 或 阻塞通用的事件响应技术 来帮助混入;但是,还应注意基础主体及其指标。
例如,在John Menerick( @Lord_SQL )发表的这篇文章( 检测Empire )中介绍了在互联网上检测Empire服务器的方法。
为了对抗这些及类似的指标,最好 修改C2传输模式 和服务器登录页面,限制开放端口和修改默认的HTTP响应标头。
有关如何为多个攻击框架执行这些操作和其他策略的更多详细信息,请查看以下文章:
· Empire – 修改服务器 C2 特征 – Andrew Chiles
· 搜寻红队的 Empire C2 基础设施 – chokepoint.net
· 搜寻红队的 Meterpreter C2 基础设施 – chokepoint.net
· 发现 Empire 的 HTTP 监听器 (Tenable Blog) – Jacob Baines
· 主机标头操作- Vincent Yiu (@vysecurity)
保护基础设施
用于攻击活动的基础架构可以像任何其他连接互联网的主机一样受到攻击,并且由于使用中的数据以及与目标环境的连接,它应该被视为高度敏感的基础设施。
2016年,最常见的一些攻击工具中被披露了远程执行代码漏洞:
· 2016 Metasploit RCE静态密钥反序列化
· 2017 Metasploit Meterpreter 目录遍历 Bug 汇总
· Empire 的失败 – Will Schroeder
· Cobalt Strike 3.5.1 重要安全更新 – Raphael Mudge
iptables应用于过滤不需要的流量并限制所需的基础架构元素之间的流量。例如,如果Cobalt Strike团队服务器仅为Apache重定向器提供资产,则iptables规则应仅允许来自重定向器的源IP的80端口。这对于任何管理接口尤其重要,例如SSH或Cobalt Strike的默认端口50050。还要考虑阻止非目标国家/地区的IP。作为替代方案,请考虑使用VPS提供商提供的虚拟机管理程序防火墙。例如,Digital Ocean提供的 云防火墙 可以保护一个或多个droplet产品。
chattr可以在团队服务器上使用,可以防止修改cron目录。使用chattr,你可以限制任何用户(包括root)修改文件,直到删除chattr属性。
SSH应仅限于公钥验证,并配置为使用有限权限的用户进行初始登录。为了增加安全性,请考虑向SSH添加多重身份验证。
更新!如果没有提醒你定期更新系统并根据需要应用热修复来修复漏洞,则无法获得安全列表。
当然,此列表并不能详尽你可以采取哪些措施来保护团队服务器。在所有基础架构中遵循以下常见的强化实践:
· 红帽企业版 Linux 6 安全指南
· 有关强化的Debian文档
· 保护 Debian 安全手册
· 20 个 Linux服务器强化安全技巧 – nixCraft
· SANS 发布的 Linux 安全自查表
· 利用 Docker 实现你的命令&控制服务器 (C2) – Alex Rymdeko-Harvey (@killswitch_gui)
网上有许多资源可以讨论基础设施的安全设置和设计。并非每个设计考虑都适用于每个攻击基础架构,但了解哪些选项可用以及其他测试人员正在做什么是非常有用的。
以下是一些有关的资源:
· 负责任的红队 – Tim MalcomVetter (@malcomvetter)
· 保护红队基础设施 – Tim MalcomVetter (@malcomvetter)
· 红队基础设施之加密的AWS-EBS – @_rastamouse
· 攻击基础设施的日志记录 – Gabriel Mathenge (@_theVIVI)
自动部署
本文章中涵盖的主题加强了攻击基础设施,但通常需要大量的时间来设计和实施。通过自动化可以大大缩短部署时间,使你能够在更短的时间内部署更复杂的设置。
查看有关攻击基础架构自动化的一些资源:
· 使用Terraform自动化红队基础设施部署 – 第1部分 – @_RastaMouse
· 使用Terraform自动化红队基础设施部署 – 第2部分 – @_RastaMouse
· Mod_Rewrite 模块自动化设置 – Julian Catrambone (@n0pe_sled)
· 自动部署 Empire 基础设施 – Jeremy Johnson (@beyondnegative)
· RTOps: 使用Ansible自动执行重定向器部署 – Kevin Dick
· 使用Ansible和Docker自动化Gophish发布 – Jordan Wright (@jw_sec)
· Red Baron GitHub Repo – Marcello (@byt3bl33d3r)
· 自动化用于威胁情报响应的 Apache mod_rewrite 模块和 Cobalt Strike Malleable C2 – Joe Vest (@joevest)
· 使用 Terraform 将基础设施模块化 – Liam Somerville (@liamsomerville)
常用的部署技巧
·记录所有内容 – 运行复杂的红队基础架构意味着需要移动许多部件。请务必记录每个资产的功能及其流量的发送位置。
·在不同的服务提供商和地区之间拆分资产 – 基础设施资产应分布在多个服务提供商和地理区域。蓝队成员可能会对被识别为主动执行攻击的提供商提高监控阈值,甚至可能直接阻止给定的服务提供商。注意:如果跨境发送加密或敏感数据,请牢记国际隐私法。
·不要玩的过分 – 渗透测试人员很容易对先进的技术感到兴奋,并希望将这些技术用到目标上。如果你正在模拟特定的对抗性威胁,则只利用威胁角色使用的真实威胁角色或技能组合中的技术就行了。如果你的红队测试人员会长期攻击相同的目标,请考虑在开始时“轻松一些”并在你的评估中逐步进行更高级的攻防。与蓝队一起发展红队的技术将会一直推动企业组织向前发展,但与此同时,用蓝队打击一切可能会压倒蓝队并减缓学习的进程。
·监控日志 – 应该在整个参与过程中监控所有日志:SMTP日志,Apache日志,socat重定向器上的tcpdump,iptables日志(特定于流量转发或目标过滤),网络日志,Cobalt Strike / Empire / MSF日志。将日志转发到中央日志处理中心,例如使用 rsyslog ,以便于监控。保留操作员的终端数据可以在操作期间用于回溯历史命令的使用情况。@Killswitch_GUI创建了一个名为lTerm的易于使用的程序,它可以将所有bash终端命令记录到一个中心位置。 使用ITerm记录所有的终端输出 。查看Vincent Yiu的文章 CobaltSplunk ,了解如何将Cobalt Strike日志发送到Splunk进行高级基础架构监控和分析。
·实施高价值事件警报 – 配置攻击基础架构以生成高价值事件的警报,例如新的C2会话或凭证捕获命中。实现警报的一种流行方式是通过聊天平台的API,例如Slack。查看以下有关Slack警报的文章: Slack Shell 机器人 – Russel Van Tuyl (@Ne0nd0g) , 将Slack 通知用于 Cobalt Strike – Andrew Chiles (@AndrewChiles), 将 Slack 机器人用于钓鱼和工作k – Jeff Dimmock (@bluscreenfojeff)
·指纹事件响应 – 如果可能,在评估开始之前尝试执行被动或主动的指纹IR操作。例如,向目标发送普通的网络钓鱼电子邮件(使用不相关的基础架构)并监控基础架构接收的流量。 IR团队的调查工作可以披露出目标有关团队如何运作以及他们使用何种基础设施的大量信息。如果可以在评估之前确定,则可以直接过滤或重定向流量。
非常感谢以下所有人(按字母顺序排列),他们提供了包含在本WiKi中的工具,提示或链接,另外,感谢任何编写了此WiKi中引用的工具或文章的人!
· @andrewchiles – Andrew Chiles
· @armitagehacker – Raphael Mudge
· @beyondnegative – Jeremy Johnson
· @bspence7337
· @domchell – Dominic Chell
· @jivoi – EK
· @joevest – Joe Vest
· @killswitch_gui – Alex Rymdeko-Harvey
· @ne0nd0g – Russel Van Tuyl
· @n0pe_sled – Julian Catrambone
· @_RastaMouse
· @tifkin_ – Lee Christensen
· @Und3rf10w – Jonathan Echavarria
· @vysecurity – Vincent Yiu
· @xorrior – Chris Ross