设置安全 CTF 服务器

信息安全 开发 硬化 服务器
2021-08-23 17:00:04

我正在从有运行黑客夺旗挑战经验的人那里寻找资源和信息。

总结为一个简单的一句话问题:您如何设置服务器,以便您可以通过非常特定的漏洞对其进行黑客攻击,同时(a)不让自己和他人面临过度风险,以及(b ) 防止一名参与者破坏其他人的体验。

这与运行蜜罐有很多共同点,但主要区别在于重点是为所有访问者保持一致的体验,这样一个访问者就不会为其他访问者“破坏”它。

作为背景知识,这不是作为竞赛而设立的,而是作为一种向程序员展示不良编码实践的危险和本质的方式,向他们展示它们是如何被利用的。因此,服务器将无限期地保持可访问性,而不仅仅是在比赛期间。

首先:我们现有的设计包括精简的极简 Linux 机器,在 KVM 下作为 VM 运行,所有持久存储都以只读方式安装,所有 FS 更改仅持久保存到 RAM。服务器会定期重新启动,清除任何可能的更改并重新开始。除非有问题的漏洞利用需要,否则不允许进出网络连接。

4个回答

我没有运行或设置此类东西的经验,但以下是我对避免不当风险的想法:

  • 您将需要对 VM 上的关键服务进行一些外部监控。导致崩溃的漏洞肯定会毁掉其他所有人。如果有人破坏在盒子上运行的网站,只要所有必要的指向其他页面的链接保持不变,就可以了,但如果他们破坏得如此严重,以至于网站的其余部分变得无法访问或开始向500 Internal Error访问者扔回代码甚至崩溃完全是 HTTP 守护进程,应该快速检测和修复。

  • 如果您不监督攻击者的机器,它们可能会受到一些威胁。谷歌搜索他们针对的产品发现的第一个漏洞利用工具包与实际漏洞利用工具一样可能包含恶意软件。

  • 政治/法律风险。签署豁免表格供他们保留,明确允许他们尝试利用这台特定的机器。解释在没有签名表格的情况下执行这些相同操作的后果。

还有一些关于运行这个东西的一般想法:

  • 许多漏洞利用没有明显的成功迹象。当然,这是学习经验的一部分,向开发人员展示简单地关闭错误显示并不能完全阻止有能力的攻击者。但是最好有一个单独的界面来显示数据库中用户表的当前内容或特定目录的内容或机器上正在运行的进程列表。这可能是您稍后关闭的东西,因为开发人员可以更好地自己检测自己的成功。

  • 保持分数。对于那些天生对安全不感兴趣的人来说,让它变得有趣是保持他们注意力的关键,一点点友好的竞争会有所帮助。如果您只考虑允许一个漏洞,那么分数就不会像谁已经做过和谁没有做过的清单那样重要,但是如果开发人员实际上发现了您预期的额外漏洞在那里,他们应该以某种方式受到公开表扬。

  • 由于您的目标是开发人员而不是渗透测试人员,因此他们的日常工作将是不那么迷人的防御角色。一旦他们利用了代码,后续任务可能是在看到您的团队集体提出的最佳解决方案之前,看看他们是否可以自己保护代码。

我在 CTF 挑战方面没有任何丰富的经验。但我参加过一些,我不是专家。但我可以谈谈我的经历。

  • 首先,在运行 CTF 挑战时,我们可以警告用户注意事项。但这并不能确保不会那样做。简单地说,我们可以告诉他们不要做 DoS,但不能确保他们不会对您的 CTF 游戏服务器使用 DoS
  • 当我们提供服务或网站以供利用时,我们应该确保这里只有这种攻击是可能的,其余的安全措施都很严密。这发生在我和我的朋友们在我的大学里进行了一次简单的黑客比赛时。我们给了一个应用程序来破解。我们测试了该应用程序以确保只有一个漏洞存在。但是竞争对手使用了其他复杂的方法来利用,他们做到了。
  • 安全就是糟糕的编码。因此,请确保您的服务或应用程序没有漏洞。
  • 我记得我的朋友正在参加一个 CTF 比赛。他说这将是 6 小时的比赛,但比赛在 30 分钟后结束,因为其中一名参赛者利用了 CTF 服务器中的漏洞,一切都崩溃了。所以该做什么和不该做什么不是问题。

只需在应用程序中创建一个可利用的漏洞即可。但是利用者会做各种测试来破解它,因为他们不知道这里的确切漏洞是什么。可能是您错过的一个小漏洞会危及您的服务器。

我相信 stripe.com 已经举办了 2 场 CTF 比赛。

他们在以下博客文章中讨论了设计。您可能会发现它很有用:

https://web.archive.org/web/20140729004028/https://blog.gregbrockman.com/2012/08/system-design-stripe-capture-the-flag/

对于 Linux 和 Unix 系统,我建议每 24 小时通过诸如https://fogproject.org之类的平台创建某种反刍状态,该平台通过 PXE 引导工作(可能有助于理解脚本和 cronjobs)。基本上,设置一堆机器(虚拟或非虚拟)并让它们每天启动一次新的基线图像。

对于评分系统,请查看此代码库https://github.com/TowerofHanoi/CTFsubmitter - 或者可能是这个 - https://github.com/JGillam/openflagserver

如果你喜欢 Ubuntu 和 Vagrant,请查看 Facebook 的 CTF 服务器——https: //github.com/facebook/fbctf

可能最好的平台基础是——https://ctfd.io——你可以阅读本节——https://ctfd.io/about/——其中包括涵盖在没有适当的情况下运行 CTF 的陷阱的论文准备和计划。

DEF CON CTF 和 HackUCF 团队也在 GitHub 上提供了他们的代码库 -- https://github.com/vito-lbs?tab=repositories -- https://github.com/HackUCF

我的一位同事还在这里开源了他的记分牌和 CTF 服务器 -- https://github.com/moloch--/RootTheBox