Exegol:专为渗透测试和红队设计的现代化环境
I. 介绍
如果您的攻击性工具集部署比docker run
更简单会怎样?本文将讨论名为Exegol的进攻性网络安全工具解决方案。我们将了解该工具的工作原理、起源、理念以及使用演示。
进攻性网络安全是一个复杂领域,涉及多种技术、语言和工具。其中最重要的元素当然是选择用于培训、练习或进行实际测试的工具集。
现有许多解决方案,从"一体式"操作系统到从零开始的配置。在这些不同选项中,最近出现了一种轻量级、最新、高效且易于使用的解决方案:Exegol。
II. 完整的进攻性安全环境
A. Docker镜像和Python包装器:简单高效
Exegol是基于Docker的攻击性工具集。这是一个极其简单的解决方案,无论是设计还是使用都如此。它基于几个知名且稳健的构建块:
- Docker:允许隔离环境,这对进攻性安全非常重要;
- 预构建、可定制、保持更新并针对特定场景(web、OSINT、AD)优化的Docker镜像;
- 通过命令行简化不同Docker容器和镜像管理的Python包装器,以及Exegol特有功能的使用;
- 离线资源,如单词字典、不同的可执行文件和枚举脚本、后门等;
- 历史记录和凭据管理器、命令日志记录及大量功能;
- 您自己的工具和资源。
只需几秒钟,容器闪电启动,即时访问我所有的工具、进行中的测试和工作区文档,一切就绪,随时可用。简单切换容器,我就能切换到当前项目,拥有自己的上下文、数据和配置的工具。我甚至可以完全销毁或修改容器,主机将保持完好,之后我可以从同一镜像重新创建容器。
为了更好地理解Exegol诞生和当前成功的原因,我需要谈谈我使用传统工具进行渗透测试的经验及其局限性。
B. 现有工具的局限性
我在网络安全领域工作已近10年,任务中始终包含操作性的进攻性网络安全部分(即渗透测试、入侵测试)。直到不久前,我还在使用安装在电脑上的Kali Linux虚拟机。首先,因为这是我开始时的"默认"选择,但也因为缺乏严肃且耗时少的替代方案。
这种解决方案似乎很有趣:拥有虚拟机可以通过任务结束时的快照恢复到初始状态,与主机隔离,可以为每个客户拥有多个虚拟机等。然而,日常使用这种解决方案出现了几个我从未完全解决的问题:
- 资源紧张:实际上,虚拟机在消耗资源的操作(自动扫描、密码破解)上难以跟上。为隔离任务克隆多个虚拟机?存储很快饱和,性能有限。
- 长期不稳定:即使使用成熟的虚拟机管理程序,错误仍是我日常工作的常态:意外冻结、显示问题或复制粘贴失效。在维护上损失的时间比测试还多。
- 理论隔离:我们知道,每个客户一个虚拟机是规则。无论是"快速重新测试"先前范围,还是简单的概念验证,实际上我们并不总是花时间恢复到原始快照,尤其是在任务进行中。这带来了数据分离的风险。
- 脆弱定制:为任务安装的工具?恢复快照或更新后,一切需要重做。更不用说配置和快捷方式需要系统重新应用。
- 依赖更新:“一体式"发行版在工具版本上严重滞后。结果:我不得不从源代码编译,失去了集成解决方案的好处。
对于渗透测试人员来说,拥有最新版本的工具至关重要,漏洞及其补丁的发布节奏使得等待几天(甚至几小时)进行有效操作变得不可行。
为什么这很棘手?在渗透测试中,每一分钟都宝贵。虚拟机变慢、过时工具或每次重新配置,都是被从最重要的东西中偷走的时间:操作效率。
使用Kali Linux多年后,我已经自动化安装了许多符合我方法和需求的特定工具和资源。然而,我必须承认,上述不同限制很沉重,拖慢了我的日常工作。因此,我打破了我的习惯和对变化的抗拒(每个人都会变老),给了Exegol一个机会。
C. 我对Exegol的看法:测试并认可
我必须说,我原本不愿改变习惯,因为我在创建我的小Kali Linux设置上花费了大量时间。但是,不断听到同事谈论这个工具,尤其是找不到解决不同限制的方案后,我心想:为什么不试试呢!
我对该解决方案的主要先入之见包括:
- 在Docker下访问图形工具一定很麻烦,这真的适合吗?
- 访问本地监听工具进行网络攻击、我的CyberChef或Bloodhound界面,该怎么做?
- Docker镜像是静态的,我无法添加自己的工具?容器停止时我的痕迹怎么办?
Python包装器和Exegol的运行方式回答了我对所有怀疑场景的兼容性问题。Exegol的完整功能列表可在此页面找到:Exegol - Features
因此,我花了几天时间探索该解决方案,测试不同镜像,开始修改我的设置、笔记(特别是与TheHackerRecipes的集成)和方法论。我很快意识到,这是解决使用Kali Linux、ParrotOS、虚拟机等固有问题的方案。
我决定永久转向这个更轻量、易于定制且更符合攻击性工具集应有的样子的解决方案。
如果要我总结一下对Kali Linux(及其等效产品)和Exegol不同解决方案的看法,我会说Kali Linux非常适合发现网络安全和工具。有点暗色的壁纸、图形菜单、按主题或TPP组织的工具等。但是,对于严肃和操作性的工作,最好转向Exegol。这个工具更快、更新更及时且日常管理更简单。所有这些让我能够集中精力并将时间花在主要和操作性任务上:进行入侵测试,而不是管理快照、处理复制粘贴问题或意外冻结。
III. 法国工具和理念
我还没提到吗?Exegol是由法国人制作的,即使该工具相对较新(首次发布:2020年3月),它已经在网络安全专业人士中享有国际声誉。
它由ShutDown(Charlie Bromberg)创建,他也是不可或缺资源TheHackerRecipes的作者,该资源汇集了关于网络攻击的方法论、解释和命令,特别是关于Active Directory。正是TheHackerRecipes的高质量让我真正想尝试Exegol。
顺便说一句,在GentilKiwi(Benjamin Delpy,Mimikatz作者)、Vincent Le Toux(PingCastle作者)和ShutDown(我肯定忘记了许多其他人)之间,法国对其对网络安全世界的贡献无需感到羞愧。
Charlie Bromberg在接受我们本文撰写采访时回答了我们的问题,以下是我们交流的总结。
Exegol:源于协作并面向效率的解决方案
Exegol诞生于2020年,基于一个简单的想法:集中努力,而不是看到每个用户在各自角落开发类似且往往短暂的解决方案。该项目旨在解决进攻性网络安全专业人员遇到的具体问题。自推出以来开源,其价格模式已演变为混合模式,提供Pro版以资助其发展,同时保持其可访问性和社区精神。代码本身保持完全开源。
坚实、简单和可扩展的基础
Exegol的雄心很明确:提供一个稳健直观的解决方案,覆盖用户80%的需求,同时为剩余20%提供定制选项。得益于开放和可扩展的架构,该工具允许每个人根据自己的特定需求调整环境。
严格筛选工具
与像Kali Linux这样常因积累维护不善或冗余工具而受到批评的发行版不同,Exegol优先考虑有针对性的高质量方法。每个集成都根据三个标准仔细评估:轻量性、社区支持和操作相关性。相反,如果工具变得过时或使用较少,可以在咨询社区后移除,确保解决方案始终与专业人员的实践同步。
面向所有人的专业工具
主要面向专家和未来的进攻性网络安全专业人员,Exegol也吸引了其他受众,如系统管理员。其易用性和容器化方法允许创建一次性安全环境,非常适合入门攻击性工具(Nmap、BloodHound等)或加强防御。
IV. 安装和探索Exegol
A. 如何在Linux上安装Exegol
我们现在将更具体地了解Exegol是什么,从安装开始。对于此演示,我使用的是Linux Ubuntu 24.04系统。Exegol也可以安装在MacOS、Windows上,甚至可以通过WSL2使用(有一些限制)。
对于安装,需要事先在系统上安装Docker、git、Python3和pipx。完整安装过程以及这些不同依赖项的安装步骤在官方文档中:docs.exegol.com/first-install。
|
|
不要忘记打开新终端以使新别名生效,我们可以检查exegol命令是否功能正常。要执行的第一个命令是exegol info
,它允许显示活动容器(目前我们没有),以及可用和可下载的镜像:
下一步是安装Exegol镜像。正如我们所见,Exegol基于预构建的Docker镜像,其中包含所有必要工具。我们将从使用free镜像开始。还有web、light、osint、ad、full和nightly镜像,它们属于Pro包。
镜像之间共享某些工具,因此下载一个可以减少其他镜像的下载时间(和存储空间)。
请注意,free镜像对于开始和探索Exegol完全足够。以下命令允许从Exegol仓库下载镜像:
|
|
可用镜像之间的区别是什么?
每个镜像的工具列表可在Exegol文档的此空间找到:docs.exegol.com/images/tools。您可以在那里下载每个镜像列出所有可用工具的CSV文件:
free镜像中的工具列表摘录(总共超过400个)
可用工具列表是每个镜像之间的唯一区别。free镜像在应用更新方面略有延迟,但包含完整的工具列表,对于非专业任务、学习和培训进攻性网络安全完全足够。
下载Exegol Docker镜像时的视图,free镜像将占用大约50 GB的磁盘空间:
B. 管理Exegol容器和镜像
下载完成后,我们可以再次确认镜像可用,使用exegol info
命令。正如我们所见,它允许显示已创建的容器、活动容器(目前我们没有),以及可用和可下载的镜像:
这里,命令告诉我我的电脑上有最新版本的free镜像可用。以下图表展示了通过Exegol容器的典型生命周期:
Exegol容器的生命周期
准备阶段通常相当短。因此,我们有exegol install
命令来安装镜像,这通常在工具首次使用时完成一次。之后,我们可以使用exegol update <镜像名>
来更新我们的镜像,并享受可用的新工具和更新。
基于可用镜像创建容器通过命令exegol start <容器名> <镜像名>
。如果我想基于free镜像创建名为lab的容器,以下是使用的命令:
|
|
项目或任务结束时,我们可以使用exegol remove <容器名>
删除容器,如果愿意,还可以删除关联的工作区。通常,工作区会保留更长时间以便处理收集的数据(例如用于报告)。但请注意不要忘记它们太久,提醒一下,每个容器的工作区默认位于主机的~/.exegol/workspace/
目录中。
现在让我们进入核心主题,我们将进入我们的第一个容器,看看里面有什么!
C. 演示,通过exegol进行渗透测试
要进入容器,只需重新执行其启动命令(如果已存在,则不需要镜像名):
|
|
请注意此处显示的信息,它们让我们了解了容器的参数设置,以及Exegol的许多独特功能:
Exegol容器启动
我们看到容器名、其镜像版本,然后:
- 凭据:为root用户生成的凭据,在某些情况下用于远程SSH访问等;
- 远程桌面选项状态:允许在Web界面或VNC服务中显示容器的GUI;
- GUI控制台激活:允许在主机上显示容器的图形界面,例如BurpSuite或像Dbeaver这样的本地客户端;
- 容器所在的网络,我们完全可以为特定情况隔离它,甚至自动启动带有VPN配置;
- 与主机共享时区;
- 指向资源共享、自定义设置和工作区的不同目录的路径;
- 容器中命令/输出日志记录状态;
- 容器的特权或非特权状态。
所有这些选项都响应具体需求,并可通过专用选项管理。Exegol中可用功能的完整列表,包括网络级别容器隔离、命令日志记录、与主机的目录或端口共享等,可在此处找到:docs.exegol.com/wrapper/features
我最常使用的选项是命令日志记录以及启动tmux shell,这让我能够快速管理多个终端:
|
|
如果您偏好的选项与默认选项不同,可以保存在~/.exegol/config.yml
文件中。
现在让我们关注Exegol容器的主要目录:
容器目录 | 描述 |
---|---|
/opt/tools/ |
包含所用Docker镜像中的所有工具,free镜像拥有超过400个!此目录存在于$PATH 变量中,因此工具可以从任何地方使用。 |
/workspace/ |
主机和容器之间的永久目录,特别用于在容器删除后保留您的痕迹和数据。此目录对每个容器是唯一的,不在容器之间共享。在主机上,工作区位于~/.exegol/workspaces 目录中。 |
/opt/my-resources/ |
您自己的资源,您想添加到Exegol的资源,无论是二进制文件、数据还是配置。这是到主机~/.exegol/my-resources/ 目录的Docker绑定挂载。 |
/opt/resources/ |
包含Exegol提供的离线资源、枚举二进制文件、隧道工具,所有可以部署到受损主机上的内容。这是到主机~/.exegol-resources/ 目录的Docker绑定挂载。 |
/opt/lists/ |
包含用于密码破解、模糊测试和暴力破解的单词字典集合 |
/opt/rules |
包含可由hashcat工具使用的密码破解规则集合 |
关于数据管理的说明
工作区中的数据隔离,以及通过为每个任务或上下文使用唯一容器实现的隔离非常重要。某些法规和控制要求审计员严格隔离客户之间的技术范围和数据。在这方面,Exegol提供了一种可能的选项,以便在此类上下文的审计中合规。
从这里开始,您可以自由地在容器上进行您想要的实验和测试。我借此向您展示Exegol的两个为我节省大量时间的功能:环境变量和基于TheHackerRecipes的历史记录。
提醒一下,TheHackerRecipes是由ShutDown管理的知识库,它引用了大量攻击方式,主要围绕Active Directory。
有趣的是,该知识库中的大多数命令(以及更多)已插入到您的Exegol容器的历史记录中。因此,输入命令开头时,Zsh会在自动完成中建议可能的完整命令,我们可以使用通常的Ctrl + R搜索此历史记录:
Exegol集成命令历史记录使用演示
如您所见,此历史记录中的命令(如TheHackerRecipes中提供的命令)使用每个人必须修改/替换以适合其上下文的变量。然后,我们可以在终端中根据我们的上下文预配置这些变量:
|
|
然后快速调用所有使用这些变量的命令,无需重新输入登录名、密码、域、目标IP地址等:
使用Exegol历史记录的环境变量使用演示
如您所见,Exegol的默认ZSH在终端提示符中重新插入我们所在的上下文(user@domain),这允许避免错误,在打开多个终端时轻松找到方向,并在报告的任何证据中清晰显示此上下文等。我觉得这非常实用和智能!
“exh"或"exgol-history"实用程序也可用于管理这些环境变量。例如,我们将使用"exh add creds"或"exh set creds"来添加凭据(此功能目前处于测试阶段 🙂 )。
V. 结论
Exegol已成为想要培训、练习,尤其是进攻性网络安全专业人士不可或缺的资源。我已经非常频繁地使用它几个月了,并且不考虑回到像Kali Linux这样的解决方案。
了解工具效率的最佳方式仍然是尝试它,我只能强烈鼓励您这样做,无论您是学生、爱好者还是网络安全专业人士。
为了进一步学习,我在此留下一些指向Exegol仓库及其文档的链接:
- Exegol - 文档
- Exegol - Github
别忘了访问TheHackerRecipes,这是关于攻击技术的最新最佳知识库之一:
- TheHackerRecipes