夺旗 (CTF) 事件是一个游戏化练习,你可以用来测试工程技能,如网络安全、DevOps 或操作故障排除。 本文介绍如何使用 Azure 平台即服务 (PaaS) 和开源 CTFd 平台运行 CTF 游戏服务。
体系结构
下载此体系结构的 PowerPoint 文件。
工作流
此方案介绍基于 CTFd 的开源 CTF 解决方案,客户可在其中预配和配置游戏服务。 以下工作流与上图相对应:
从 Azure 容器注册表检索 CTFd Docker 映像,并使其准备好为客户提供服务。
CTF 管理员和参与者可从任何设备访问 CTF Web 应用程序。
CTFd 平台将 Web 应用程序作为 Docker 容器托管,该容器在用于容器的 Azure 应用程序服务 Web 应用上运行。
Azure Database for MySQL 维护 CTFd 数据,包括用户、挑战、标志和游戏过程。
Azure Cache for Redis 存储状态、用户会话和其他 CTFd 值。 此配置支持横向扩展到多个 CTFd 实例。
Azure 密钥保管库保留用于数据库和缓存的密钥。 只有 Web 应用程序才能访问机密。
虚拟网络可将 Azure 资源相互连接,并提供逻辑隔离。 在此体系结构中,Web 应用程序通过网络与数据库、缓存和密钥保管库通信。
Web 应用程序将日志发送到 Azure Log Analytics,后者聚合来自所有实例的日志,以便服务可以轻松查询日志。
网络配置
该模板支持前面的网络配置以及使用 vnet 输入参数的更简单的配置(不使用虚拟网络)。 下图描述了更简单的配置解决方案。 上述工作流不包括步骤 7。
组件
用于容器的应用程序服务 Web 应用托管容器化 Web 应用程序,无需直接管理基础结构即可实现自动缩放和高可用性。
Azure Database for MySQL 是基于云的关系数据库服务。 此服务基于 MySQL 社区版数据库引擎。
Azure Cache for Redis 可以提高极其依赖于后端数据存储的系统的性能和可伸缩性。 为了提高系统效率,它将频繁访问的数据临时复制到应用程序附近的快速存储中。
Key Vault提供安全的凭据和证书管理。
Log Analytics 是一种 Azure Monitor 日志工具,可用于信息诊断、信息日志记录,以及使用查询以对此数据进行排序、筛选或可视化。 Azure 根据消费情况对此服务收费。 可以使用 Log Analytics 托管此解决方案中所有服务的诊断和使用情况日志。
Azure 网络提供各种网络功能,因此网络可与 Azure 中的其他虚拟网络对等互连。
可以通过 Azure ExpressRoute 或站点到站点与本地数据中心建立连接。 此体系结构在虚拟网络中为 Azure Database for MySQL、Azure Cache for Redis 和 Key Vault 使用专用终结点。 虚拟网络上启用应用程序服务虚拟网络集成,以确保所有数据仅流经 Azure 虚拟网络。
备选方法
可以使用 GitHub 上的 CTFd 存储库中的 Docker compose 定义。 但是,Docker Compose 定义将所需的 Web 应用程序、缓存和数据库服务预配到单个主机中,这既不可缩放,也不具有高度可用性。
可以根据 GitHub 上的 CTFd 存储库中的 Docker compose 定义所述,将所需的服务预配到 Azure Kubernetes 服务 (AKS),但之后必须管理基础结构即服务 (IaaS)。
可以使用 CTFd 付费层,并根据所选计划获取带有新增功能的 PaaS。
方案详细信息
夺旗是网络安全练习,其中程序或网站包含隐藏的旗帜。 竞争者在攻防模式 CTF 中从其他竞争者那里,或在解题模式挑战中从组织者那里夺得旗帜。
你可以将其他工程实践作为 CTF 活动进行教学和实践,但是可以并不总是使用术语 CTF。 例如,Microsoft OpenHack 内容包类似于 CTF 及其进程。 OpenHack 包括 AI 驱动的知识挖掘、机器学习、DevOps、容器、无服务器计算和 Azure 安全性等主题。
开源 CTF 框架可以通过可配置的挑战页面、排行榜和你期望从 CTF 获得的其他功能(例如零代码)将任何挑战变成 CTF 事件。 例如,Open Web Application Security Project (OWASP) Juice Shop 有一个 CTF 插件,该插件支持多个你可以预配和运行的常用 CTF 平台,以便你的团队能够在这些平台上进行安全训练。
最常用的开放式 CTF 平台之一是 CTFd。 CTFd 采用开源组件构建,易于使用和自定义。 你可以从多个托管主机计划和功能中进行选择,或者你可以部署和维护自己的环境。 管理环境会带来成本和维护方面的影响。 但它的成本通常较低,你拥有数据,并且可以将环境与组织的网络集成。 与虚拟化基础结构组件相比,使用云供应商提供的 PaaS 可以获得免费的开源软件,并且易于维护和 IT 处理。
应用本文中的指南,并使用 Azure PaaS 设置自托管 CTFd 环境。 然后,可以轻松维护和缩放 CTF 环境,以适应参与者。
可能的用例
此解决方案针对开发人员、DevOps 和网络安全社区以及想要运行 CTF 事件的团队进行了优化。
任何技能提升、黑客攻击或错误清除事件都可以使用此设置运行 CTFd,以管理和跟踪基于质询的进度、团队进度或个人进度。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
安全性
安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅可靠性设计审查检查表。
在适当的应用程序服务 Web 应用程序参考体系结构中审核安全性注意事项。
Azure Database for MySQL 会自动加密和备份数据。 可以配置 Microsoft Defender for Cloud 来进一步缓解威胁。 有关详细信息,请参阅为开源关系数据库启用 Microsoft Defender 和响应 Defender 开源数据库警报。
通过传输层安全性 (TLS) 访问 Azure Database for MySQL 会加密服务器和应用程序之间的数据流,以帮助抵御中间计算机攻击。 根证书必须在 Docker 映像中可用。 此解决方案使用可在生成时提取证书的自定义 Docker 映像。 Azure 容器注册表管理自定义映像。
适用于 Azure 资源的托管标识为帐户提供对其他资源的访问权限。 此解决方案使用托管标识向应用程序服务中的 Web 应用程序授予从密钥保管库读取机密的权限。
Azure 密钥保管库以机密形式存储凭据,例如数据库或缓存连接字符串等。 应用程序服务使用托管标识访问密钥保管库,以避免将机密存储在应用程序设置或代码中。
该体系结构在整个设计过程中提供了网络安全性。 从公开可用的 Web 应用程序到内部服务的所有流量都通过虚拟网络路由。 所有后端服务(如数据库、缓存和密钥保管库)都不允许公共网络访问。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化设计评审核对清单。
CTFd 环境是临时的。 可以使用事件所需的资源轻松地部署和拆解环境。
要估计此解决方案的实现成本,请使用 Azure 定价计算器。
卓越运营
卓越运营涵盖了部署应用程序并使其在生产环境中保持运行的运营流程。 有关详细信息,请参阅设计卓越运营的审查清单。
Azure Monitor 与应用程序服务集成,以支持从所有 Web 应用程序实例到单个位置的日志记录。 Monitor 诊断设置收集 CTFd 容器日志并将其发送到 Log Analytics 工作区。 在此处,可以使用 Kusto 查询语言跨聚合日志写入查询。
Log Analytics 和 Monitor 根据引入到服务中的数据的 GB 单位数量计费。 有关详细信息,请参阅 Monitor 定价。
性能效率
性能效率是指工作负荷能够以高效的方式扩展以满足用户对它的需求。 有关详细信息,请参阅性能效率设计评审核对清单。
此解决方案至少需要基本层,因为级别更低的层不支持与虚拟网络建立混合连接。
CTFd Web 应用程序组件要求每个实例至少 1 个 CPU 和 1 GB RAM。
若要了解如何缩放基本 Web 应用的详细信息,请参阅缩放应用程序服务应用。
可以纵向扩展 Azure Database for MySQL 以满足更高的要求。 动态更改目标工作负载所需的 vCore 数和存储量。
部署此方案
可以在 GitHub 上找到 Bicep 基础结构即代码 (IaC) 形式的解决方案部署文件。
将解决方案部署到订阅的最简单方法是使用存储库的主要自述文件中快速入门部分中的部署到 Azure 按钮。
作者
本文由 Microsoft 维护, 最初由以下参与者撰写。
主要作者:
- Avishay Balter | 首席软件工程师
要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。