实战 Web 安全:使用 OWASP Juice Shop 进行夺旗挑战

作为一名开发者,你是否自信你了解 Web 安全所需的知识?等等,也许你从事信息安全工作。作为一名安全专家,你是否自信你所合作的开发者拥有足够的知识去做正确的事情?

Screenshot of OWASP Juice Shop

通常,即使对于像我们在 Mozilla 一样与世界一流软件工程师合作的经验丰富的安全专业人员来说,这些问题也不容易回答。

当然,你可以观看教程视频并参加各种在线测试,但与朋友或同事一起在现实生活中尝试总是更有趣。我们最近的 Mozilla 全员大会就是一个这样的机会。

一场 夺旗挑战 (CTF) 活动提供了一种社交的动手方式来学习安全知识,并且它们通常是安全会议上的传统。

我是 Mozilla Firefox 操作安全团队 的成员,我们与所有 Mozilla 开发人员密切合作,确保 Mozilla 依赖于构建、发布和运行 Firefox 的核心服务尽可能安全。

在本回顾中,我将展示你如何使用免费和开源软件轻松地设置 CTF 活动,就像安全团队在 12 月份在奥斯汀举办 Mozilla 全员大会 活动时所做的那样。

定制 OWASP Juice Shop

我们选择了 OWASP Juice Shop,这是一款专门用于培训目的的 Web 应用程序,其设计故意存在安全漏洞。Juice Shop 使用现代技术,如 Node.js、Express 和 AngularJS,并提供范围广泛的安全挑战,从简单到复杂不等。这对我们来说很重要,因为我们的参与者拥有广泛的技能,包括很少接受过正式安全培训的开发者到专业的渗透测试人员。

Juice Shop 是一个“单用户应用程序”,但它带有 CTF 模式和关于 举办 CTF 活动 的详细说明。当启用此模式时,应用程序会在有人解决其中一项挑战时生成“CTF-tokens”。然后可以将这些令牌上传到中央评分服务器。CTF 模式还会禁用提示,这可能使一些挑战对我们更高级的玩家来说过于容易。

Juice Shop 可以以多种方式运行,但为了方便参与者,我建议使用 docker 镜像,因为它只有一个依赖项:docker。

你可以在此处找到官方的 Juice Shop docker 镜像:https://hub.docker.com/r/bkimminich/juice-shop/,或者如果你想自定义它,可以自己构建。你可以参考在线上的 自定义说明

我们启用了内置的 CTF 模式,并更改了应用程序名称和示例产品,使其更具 Firefox 风格,并隐藏其来源(因为 Juice Shop 挑战的解决方案很容易在互联网上找到)。

在我们对更改感到满意后,我们将我们的镜像上传到 dockerhub: mozilla/ctf-austin

Screenshot of Mozilla-customized OWASP Juice Shop

设置评分服务器

你需要设置一个评分服务器,让参与者可以上传他们的 CTF-tokens 并将他们的分数与其他人进行比较。这绝对有助于激发参与者之间的竞争!

评分服务器还应该提供每个挑战的摘要以及每个挑战的得分。为此,我们使用了 CTFd - 它 易于安装,并且有一个官方支持的工具可以将 Juice Shop 挑战导入 CTFd,可以使用以下命令运行:

npm install -g juice-shop-ctf-cli
juice-shop-ctf

然后你将看到一组问题,允许你根据自己的需求调整设置。

运行 CTF

要开始你的 CTF 活动,你只需要告诉参与者你的 CTFd 服务器的 URL 以及如何本地运行 Juice Shop。如果你使用的是官方镜像,以下是本地运行 Juice Shop 的方法:

docker pull bkimminich/juice-shop
docker run -d -e "NODE_ENV=ctf" -p 3000:3000 bkimminich/juice-shop

如果你使用的是自己的镜像,则更改镜像名称,如果启用了 CTF 选项,则你的代码不需要 -e "NODE_ENV=ctf" 部分

docker pull mozilla/ctf-austin
docker run -d -p 3000:3000 mozilla/ctf-austin

无论哪种情况,参与者现在都可以通过 http://localhost:3000/ 访问他们自己的本地 Juice Shop 副本。

虽然一些 Juice Shop 安全挑战可以通过使用 Firefox 来解决,但一个代理浏览器的安全工具将真正有所帮助。

一个不错的选择是 OWASP ZAP(我是该项目的负责人),这是一个免费的开源安全工具,专门设计用于查找 Web 应用程序中的安全漏洞。

ZAP 位于你的浏览器和你要测试的应用程序之间,并显示在它们之间流动的所有流量。它还允许你拦截和更改流量,并提供大量可用于测试应用程序的自动化和手动功能。如果你使用 ZAP,你无需更改浏览器设置,因为 ZAP 可以启动 Firefox(或任何其他本地安装的浏览器),预先配置为通过 ZAP 代理。

OWASP ZAP Dev Build

提醒所有参与者尽可能彻底地探索 Juice Shop - 如果你不知道某些功能,就无法找到所有问题。建议他们从最简单的挑战(得分最少的挑战)开始,然后逐步向上,因为这些挑战旨在逐渐变得更难。

A graph of the top 10 teams and their results on the challenges

如果你在几天内运行 CTF(就像我们所做的那样),最好提供帮助和建议。我们设置了一个私人 IRC 频道、一个 Google 群组,并举办了每日签到会议,任何人都可以参加,向我们提出有关活动的任何问题,并获得解决挑战的帮助。

Graphs and charts from CTFd showing Score Charts, Key Percentages, Category Breakdowns

在我们活动结束的那天,我们举办了一次最后会议,祝贺获奖者,揭示了应用程序的来源,并颁发了 Björn Kimminich(JuiceShop 项目负责人)提供的 Juice Shop 贴纸。

结果和下一步

举办夺旗挑战活动是提高团队、公司或组织安全意识和知识的绝佳方式。

Juice Shop 是 CTF 的理想应用程序,因为它基于现代 Web 技术,并包含各种挑战。它经过精心设计,并得到良好的支持。事实上,它是一个拥有真实漏洞的真实应用程序,而不是一系列复杂的任务,使其成为学习应用程序安全的理想选择。

我们的 Mozilla/Firefox 定制 Juice Shop 应用程序可以在 https://github.com/mozilla/ctf-austin 获取。除非你特别想使用 Mozilla 品牌的版本,否则我们建议使用原始的 Juice Shop 应用程序:https://github.com/bkimminich/juice-shop。(注意:它已经更新,自我们分叉我们的副本以来。)
如果你还没有尝试过,我强烈建议你这样做。它很有趣,你几乎肯定会学到一些东西。

最终,有 20 多人注册了我们的活动,他们的反馈非常积极

“cookie 和 JWT 相关内容是这部分中最有启发性的。”

“整个活动都很棒,感谢你们组织。”

“我讨厌我无法专注于自己的事情,因为我想解决更多 CTF 任务并学习一些东西。”


“很棒,因为我计划提高我的安全技能。”


“这很有趣 - 感谢你们组织它。”

Photo of Mozilla Y'All-Hands CTF participants

不出所料,我们参加活动的两位渗透测试人员表现出色,但他们被我们的一名运营人员超越了,他显然对安全知识非常渊博!

你是否有发现安全漏洞的诀窍?在 Mozilla,我们有一个 Web 和服务漏洞赏金计划。我们欢迎你帮助我们让 Mozilla 更加安全。你甚至可以为你的努力获得一些赏金奖励。我们一直在寻找贡献者来帮助我们改进 ZAP,所以如果这听起来很有趣,请查看 贡献 OWASP ZAP

关于 Simon Bennetts

Simon Bennetts 的更多文章…


一条评论

  1. Björn Kimminich

    很棒的撰写!“Mozilla CTF”定制将在即将发布的 7.0.0 版本中成为官方 Juice Shop 软件包的一部分!它是另一个非常好的“完整 UI 转换”示例,可以极大地提高目标受众的沉浸感!如果您计划在任何内部安全意识或黑客练习课程中使用 OWASP Juice Shop,我强烈建议您也为自己的公司创建一份!

    https://github.com/bkimminich/juice-shop/commit/8104443e0e697d76e7e590f5f714625c85c5b8cc

    2018 年 3 月 9 日 上午 2:29

本文的评论已关闭。