怎样才能办好一场高质量的CTF比赛——赛题篇

2019/06/01 CTF

大家好,我是Atum,我们战队(r3kapig)为刚刚结束DEFCON外卡赛之一的Baidu CTF提供了10道赛题(一共13道),并作为比赛的总裁判把控了比赛的赛制和部分规则以及比赛赛题质量。Baidu CTF 是一个新生的外卡赛,我们也做了一些尝试,比如让AEG战队和人类顶尖战队在比赛中同场PK。虽然在不断试新的过程中出现了不少小问题,但是在大家的共同努力下,我们还是贡献出了一场合格的外卡赛。今天,我想以这场比赛为契机,来谈一谈我个人对CTF比赛的一些理解。这是第一篇,希望后面不会咕咕咕。

在进入正题之前,我想问一个开放性问题:一场CTF应该考什么? 你可能会回答,PWN/RE/Crypto/WEB,这个回答很棒。

如果我进一步问,PWN应该考什么? 你的答案或许是各种各样的漏洞利用技术的熟练掌握,如house of orange, house of roman, fastbin attack, unsortedbin attack, tcache attack等等等等。

如果参与过比较接近实战的CTF比赛,你的答案也可能是各大主流平台的漏洞利用技术,如浏览器利用、虚拟机逃逸、内核提权等,考了这些,也就相当于填上了CTF跟实战之间的鸿沟。

不过,这些都不是我的答案。而且,我认为这个问题本身就问的略失偏颇。 所以接下来,我想逐渐从问题出发,介绍我现阶段对CTF的一些想法和观点。这些观点和想法并不一定是正确的,但是,我非常希望这些观点能够抛砖引玉,来促使大家一起去思考对这些问题看法。

一场CTF应该考什么

我认为CTF不应该被定位为考试。众所周知,考试的主要目的是考察选手对知识的掌握和灵活应用。将CTF定义为考试也就意味着赛题大多数都是侧重于考察已有知识的掌握和灵活应用。然而,安全技术的发展是非常迅速的,对于安全研究而言,探索新的未知的挑战的能力更为重要。

不幸的是,现在国内的大多数比赛都将CTF定位为考试。赛题的考察的内容大多也都是已有知识的掌握,如我在开头中提到的这些各种各样的漏洞利用技术等。有的比赛甚至像考试那样全程电磁屏蔽,使得引导选手探索新的未知挑战成为了不可能(因为上不了网)。

因此,这个问题应该换一种问法:一场CTF比赛应该有怎样的赛题?

一场CTF应该有怎样的赛题

在回答这个问题之前,我首先要介绍一下我认为的CTF的赛题类型

  1. 智障赛题:考察点为无意义的脑洞,或考察点太过于简单。
  2. 辣鸡赛题:考察点有难度却较为无聊。
  3. 初级赛题:主要考察对已有知识的掌握和灵活应用。
  4. 中级赛题:满足初级赛题的条件,但难度相对较高。
  5. 高级赛题:赛题的考察点对于绝大多数选手来说都是陌生且足够有趣。出题人通过对赛题进行精巧的设计,从而使得做题过程中可以一步一步被引导学习到出题人想要分享的有趣的idea和知识。高级赛题一般来说都比较有难度(毕竟要学很多新东西),却难的合情合理。
  6. 顶级赛题:满足高级赛题的条件,且赛题难度和步骤设置合理,能够及时的让做题人得到及时反馈和成就感。

智障赛题的经典例子就是给一个带密码的zip包,题目描述说是弱口令,然后让大家去猜。这一类题目在比赛中已经越来越少了,这是一个很好的现象。

辣鸡赛题的例子之一就是某些混淆后的代码的逆向。如果一个混淆代码的逆向题只考察选手能否耗费巨量时间把带混淆的代码逆明白,那这个题就算辣鸡赛题。混淆代码的逆向题的正确姿势应该是通过设计特殊的带混淆赛题来分享一类新的混淆或去除混淆的方法。这一类赛题在一些自认为质量的CTF比赛中经常作为“高质量难题”出现。

初级赛题很好理解,就是考察对现有知识的掌握,如考察glibc堆中各式各样的知名利用技巧的使用。做题人只要熟练的掌握了这些技术,就能够无需google即可顺利的做出代码。

中级赛题可以说是初级赛题的加强版,但是题目仍无创新性。如通过增加一些限制来增加堆题的解题难度,但是仍然可以通过各样的知名利用技巧来绕过这些限制。我认为现在国内大多数CTF比赛中,初级赛题和中级赛题仍是主流。

高级赛题是属于国际赛中高质量赛题,一个例子便是是今年Defcon 27 Qualifier的Hotel Califonia,它的考察点是Intel 硬件特性TSX的使用。TSX对于大多数做题者都是陌生的,但是做题者拿到赛题之后却能够受到赛题的引导去学习Intel TSX的各种知识。不过我认为这道题目有一个考点对做题人不太友好:最后的利用trick(获取随机数)与TSX的跨度较大,从而可能会误导解题者的思路和解题方向。

顶级赛题不仅具有高级赛题的特点,且对做题人来说更为友好。如HITCON CTF 2017的babyfs。这道题引导选手去学习glibc File Object的内部机理,虽然难度很高,但是确实能够在做题的过程中不断的学到很多东西。当然,如果现在再出一道新的与babyfs类似的题目,那题目就会沦为初级赛题了。换句话说,现有的知名利用技巧在第一次出现的时候都可以被认为是高级赛题或顶级赛题,因为第一次出现就意味着其考察点对大多数选手都不熟悉,且选手在做题过程中会被出题人引导去学习新的东西。但是当这些利用技巧逐渐变得流行和广为人知,再出同样的赛题就无法起到引导做题者学习的效果了。

值得一提的是,现在real world赛题慢慢开始火了起来,且被认为是高质量赛题。我认为其中的一个很重要的原因便是real world攻防对于大多数做题者来说都是不熟悉且足够有趣的。如果未来有一天,大多数做题者都掌握了主流平台的主流利用技术,这时再出一道高质量的real world的赛题就会变得非常困难。

在介绍完这些之后,我就可以回答最初的问题了:一场CTF比赛应该有怎样的题目?

  1. 如果这个比赛是面向新手玩家,如校赛,那我建议一初级赛题或中级赛题为主,因为对于新手而言,初级赛题和中级赛题已足以引导他们学习新的知识。
  2. 如果这个比赛是面向的既有经验丰富的战队又有在成长期的新星战队,且办赛质量要求不高时,可以平衡一下初级和中级赛题与高级和顶级赛题的比例,一方面是为了控制比赛难度,另一方面也是为了降低办赛成本。
  3. 如果这个比赛是面向国际顶级战队如DEFCON外卡赛,则建议以高级赛题和顶级赛题为主。
  4. 除非你想办一场比赛智障比赛和辣鸡比赛,否则我不建议在比赛中放入智障赛题和辣鸡赛题。

(未完待续,希望不鸽)

Search

    Post Directory