CTF 全称 Capture the Flag,译为「夺旗赛」,起源于 1996 年 DEFCON 全球黑客大会。比赛中,选手会得到一个题面,可能是一段话、一个压缩包、一张图片、一个网站、一个链接、一份源码、一个程序等;选手需要根据题面,通过各种手法找到诸如 flag{xxx} 的内容,这便是题目的答案。

Jeopardy-解题

参赛队伍可以通过互联网或者现场网络参与,通过与在线环境交互或对文件进行离线分析,解决网络安全技术挑战并获取相应分值,类似于 ACM 编程竞赛、信息学奥林匹克赛,根据总分和时间进行排名。

不同的是,这个解题模式一般会设置一血(First Blood)、二血(Second Blood)、三血(Third Blood),也即最先完成的前三支队伍会获得额外分值。这不仅是对率先解出题目的队伍进行鼓励,也是一种团队能力的间接体现。

当然,还有一种流行的计分规则是:设置每道题目的初始分数后,根据该题的成功解答队伍数,逐渐降低该题的分值。也就是说,如果解出这道题的人数越多,那么这道题的分值就越低;最后会下降到一个保底分值后便不再下降,一般称之为 动态积分

题目类型主要包含 Web 网络攻防、RE 逆向工程、Pwn 二进制漏洞利用、Crypto 密码攻击以及 Misc 安全杂项这五个类别,个别比赛会根据题目类型继续扩展。

AwD-攻防模式

Attack with Defense(AwD)全称攻防模式。在攻防模式 CTF 赛制中,参赛队伍连接到同一个网络空间。主办方会预先为每个参赛队分配要防守的主机,该主机称之为 GameBox。每个队伍之间的 GameBox 配置及漏洞通常是完全一致的,选手需要在防护自己 GameBox 不被攻击的同时,挖掘漏洞并攻击对手服务来得分。

在 AwD 中,主办方会运行一个名为 Checker 的程序,定时检测选手 GameBox 的运行状态。若检测到状态不对,则判定该 GameBox 宕机,并按照规则扣除一定分数。攻防模式 CTF 赛制可以实时通过得分反映比赛情况,最终也以得分直接分出胜负,是一种竞争激烈、观赏性强、透明度高的网络安全赛制。

这种赛制不仅比拼参赛队员的智力和技术,也比拼体力,因为比赛一般都会持续 24 至 48 小时左右,同时也考验团队之间的分工配合与合作。

AwD 通常仅包含 WebPwn 两种类型的题目。每个队伍可能会分到多个 GameBox,随着比赛的进行,最早的 GameBox 可能会下线,同时也会上线新的 GameBox

ADP-攻防增强

Attack Defense Plus(ADP)全称攻防增强模式。在该模式下,参赛队伍连接到同一个网络空间。主办方会在平台上放置题目,选手需要登录平台获得题目信息。

攻击模式下,平台会给出题目的访问链接,选手按照解题模式做题并提交 flag 即可完成攻击;当完成攻击后,每轮计算分数时都会计算该题目的攻击得分。

防御模式下,选手需要自行挖掘题目的漏洞,并制作漏洞补丁包上传至平台,之后点击验证。验证时,平台会新建一个完全干净的题目环境,使用预置的 Exploit 进行攻击。若攻击失败,则验证通过,后续每轮计算分数均会认为该题目已防御。

也就是说,对于每个题目,仅需要攻击成功一次、防御成功一次,该题就可以认为已完成,后续无需继续关注。

ADP 通常仅包含 WebPwn 两种类型的题目。随着比赛的进行,最早的题目可能会下线,后续也有可能会上线新的题目。

ADP 相较于 AwD 来说,选手无须编写批量攻击脚本,也无需持续关注题目的环境是否被攻击、服务是否异常等等;要做的只是攻击一次、防御一次,因此选手可以有更多时间聚焦于还未完成的题目。从主办方角度来说,这也大大减轻了比赛的硬件成本和运维成本。

RHG-自动化 [AI 自动化]

Robo Hacking Game(RHG)利用人工智能、AI 或自动化攻击程序来全自动地挖掘并利用漏洞,考验选手对于 漏洞理解 以及 工程化 的能力。比赛开始前,一般会提前 1 至 4 周左右给出测试环境以及相关接口文档。选手需要编写自动化程序请求接口,获取题目相关信息。

这类程序通常称之为 bot,需要在程序中全自动地访问目标、挖掘漏洞、完成利用并获取 flag,最后再由程序自动提交。RHG 因为是由 bot 全自动进行工作,所以比赛开始几乎就等同于结束,剩下的一切都取决于参赛选手编写的自动化 bot 的稳定性与成功率。

比赛过程中通常不允许选手对 bot 进行任何操作,包括 debug、patch 等;选手只能看到自己的 bot 完成了哪些题,以及当前的得分情况等等。

RW-真实世界

Real World(RW)首次于 2018 年由 长亭科技 主办的 RealWorldCTF 中出现。该赛制着重考察选手在面对真实环境时的漏洞挖掘与利用能力。通常 RW 模式出题也会围绕真实渗透攻击中常见的漏洞,例如 VM/Docker 逃逸、针对浏览器的攻击、针对 IoT/Car 等设备的攻击、Web 类攻击等等。

在 RW 赛制中会有一个 Show Time。当选手认为自己已经可以完成题目时,可以在比赛平台上提交展示申请,由工作人员根据申请先后顺序进行排期。选手展示之前需要上台并连接相关网络,同时现场大屏会切换至目标的正常页面。选手确认连接并测试无误之后开始计时。

一般情况下,上台攻击时间为 5 分钟。选手一旦完成攻击,现场大屏幕会实时看到攻击效果,此时裁判会根据效果是否符合题目要求来判定该题是否完成。如果在攻击时间内依然未能看到展示效果,则认为本次攻击失败。现如今,为了防止选手恶意排期,通常会限制一个队伍的总展示次数,例如在 2019 年数字经济云安全公测大赛中,每个队伍只允许上台展示 30 次,因此选手也需要尽可能保证上台之后攻击的成功率。

举个例子,题目要求攻击位于比赛网络中的某个网站,并将首页替换为包含队伍名称的页面。题目会给出该网站的一些信息,例如源代码、数据库等等。选手经过本地漏洞挖掘之后,提交展示申请,排期到了之后进行上台展示。注意,因为 RW 模式是以展示效果作为题目是否完成的准则,所以在 RW 模式中并 不存在 Flag

KoH-抢占山头

King of Hill(KoH)是近些年新衍生的一种赛制。该赛制有点类似于 AwD,但又和 AwD 不太一样。选手面对的是一个黑盒目标,需要先挖掘漏洞并利用漏洞控制目标,将自己的队伍标识(队伍名称Token 一类)写入到指定文件。随后还需要在该主机上进行加固等操作,防止其他队伍再次攻击。

主办方会定期检查标识文件,根据文件中的队伍标识来判定本回合分数归属于哪个队伍。可以看出,KoH 也是一种对抗极为激烈的赛制,同时考察选手的渗透能力与防御加固能力。

Mix-混合

混合模式结合了以上多种模式。现如今,单一赛制已经无法完全满足比赛及选手的参赛需求,因此大部分比赛会同时采用多个模式。例如参赛队伍先通过解题(Jeopardy)获取一些初始分数,再通过攻防对抗(AwD)进行得分增减的零和博弈,最终以总分高低分出胜负。