哒哒哒......哒哒哒......手指在键盘上快速敲击,电脑屏幕上应声出现一行行代码。敲击键盘的人手边,还散落着几瓶喝完的可乐易拉罐,隔壁会议室里不时有人呼呼大睡。这一幕,在8月初的上海腾云大厦11层会议室里不断上演。
三天后,敲击声静止了,两个小时“漫长”的等待后,转而被爆发的欢呼声替代——经过59个小时的鏖战,腾讯A*0*E战队以970分问鼎全球顶级赛事DEF CON CTF,这是中国战队首次夺冠。
因为队名以字母A打头,“不走运”地成为其他战队优先攻击的“靶子”,却又在比赛结束时“幸运”地以两分的微弱优势领先。跌宕起伏的比分背后,连续第四年参赛的A*0*E战队经历过哪些至暗时刻,又迎来过哪些峰回路转?
战术:从固定组队到灵活调度
夺旗赛(CTF,Capture The Flag)是全球顶级安全会议DEF CON的保留节目,参赛团队之间通过攻防对抗、程序分析等形式,率先从主办方给出的比赛环境中得到一串具有一定格式的字符串或其他内容,并将其提交给主办方,从而获得分数。
DEF CON CTF是网络安全领域公认最知名、最具影响力的技术竞赛,被誉为网络安全领域的极客“世界杯”。
因为疫情,往年在美国拉斯维加斯举办的DEF CON CTF决赛首次以线上形式进行。16支国际最顶尖的CTF战队通过资格赛、外卡赛从几千支战队中脱颖而出,在总决赛交锋。这当中包含五次获得冠军的美国PPP战队,有专门为了打这场决赛而成立More Bush Smoked Whackers联合战队,还有集结了日本国内顶尖选手出征的/bin/tw联合战队等等。
其实,这已经是A*0*E战队第四次参加DEF CON CTF了,前几次的最好成绩是第三名。由于A*0*E战队由腾讯eee战队、上海交大0ops战队、复旦大学******战队以及浙江大学AAA战队组成,培养默契成为赛前的头等大事。
与往年一样,今年的DEF CON CTF总决赛继续沿用“攻防模式”与“King of The Hill(KoH)”的混合赛制。攻防模式下参赛队伍需要主动寻找和发现对方服务器的安全漏洞,利用漏洞发起攻击进而得分,同时也需要尽快修补己方漏洞、阻止其他队伍攻击自己的服务器。而在KoH模式下,全体参赛队伍要同时解同一道题,比拼哪只队伍的解法更优秀。
A*0*E战队副队长马会心表示,往年他们试着把队员固定成几个小队,每个小队负责一道题目。而在实际比赛中,面对难以预测的情况,预先的分组容易被拆散,所以今年采取了相较灵活的方法。
为了培养队员之间的默契,A*0*E战队队长刘耕铭透露,他们在赛前了解了每一位队员擅长的领域,为其贴上“标签”;在模拟赛中刻意打散队伍,随机抽签分配,尝试不同的组合。
他介绍,第一次训练把战队分成6个队伍,模拟攻防对抗。第二次所有人组成一支队伍,模拟决赛中不断“放题”的模式,比如刚开始放两道题,过一小时再放一道题。此时必须从前两道题的队员中抽调一部分,投入到新的题目中。这是为了模拟比赛中新题出来时如何进行人员调度和分配。
“针对队员的属性,进行不同的分工。但要保证的是,每道题目必须同时存在手快、心细、思维活跃等不同属性的队员。”刘耕铭举例,细心的队员适合相对枯燥、耗费时间的任务。思维比较快的队员可以快速了解整个题目的大概框架,并以最快的速度发现题目的漏洞。
措手不及的开局
根据规则,比赛从北京时间8月7日晚八点开始,进行每节八小时共计四节的比赛。每两节比赛期间可休息九个小时。在长达59个小时的比赛里,很多队员仅休息了几个小时。
“拉锯战式”的比赛要求队员最大限度地保持脑力和体力。被征用为比赛场地的上海腾云大厦11层会议室错落有序地排列着20张左右气垫床,队员困了就在上面休息片刻;后勤人员还准备了充足的罐装可乐,队员累了就狂灌可乐、提神醒目。
会议室的气垫床。
尽管做了充足的准备,主办方在竞赛伊始放出的一道题就打得整个战队措手不及。这也是令A*0*E战队教练谢天忆印象深刻的题目之一,本意是考察与一款古老的计算机相关的知识。
这款古老的计算机是“曼彻斯特数据流计算机(MDFM)”,属于动态数据流计算机领域的先驱,采用了与传统的冯·诺伊曼存储程序计算机完全不同的设计架构,具有高度的并行计算能力,但从未在商业上有成功的通用数据流计算机。如今这种计算机架构仅在一些特殊的计算领域偶有见到。
谢天忆回忆,A*0*E战队在第一节处于领先地位,而后美国PPP战队(七年内五次获得冠军)凭借这道题在第二节将比分拉开。
“像这种(上述古老的计算机)知识,我们比赛时需要从零学起,而对手可能已经有一定了解,会有很大优势。”刘耕铭介绍,美国计算机基础教育的内容与国内不同,而比赛出题人的教育经历与美国战队成员比较接近,接受过同样的计算机教育熏陶。
“我们参加比赛的目的就是为了冠军。”带着这个信念,刘耕铭带领队员从网上搜索论文、国外教学视频等,试图在短时间内攻克知识盲区,可惜始终未能攻克。
尽管失掉一道大题,A*0*E战队所有队员的心态并没有受到太大影响。“这个情况发生过太多次了,是很常见的情况,我们也不会有太多的想法。”谢天忆说。
比赛中一道题目的赛况视频。
自动“杀敌”脚本称霸全场
第一节比赛结束时已是凌晨四点,虽然到了休息时间,但A*0*E战队的队员依然保持在比赛状态中。改变这一被动局面的,正是第二节比赛放出的一道“RHG”题目。
刘耕铭介绍,这个题目类似于“吃鸡游戏”:所有战队的游戏人物随机处于地图的某一位置,身上只有一个Flag(旗帜)。地图上有各式各样与网络安全相关的道具,比如杀毒软件等。只要战队利用这些道具攻击对手战队,抢走Flag就能得分。
很快,A*0*E战队就找出了题目的漏洞——他们可以偷偷拿到其他战队的Token(类似登陆用的账号密码),然后登录他们的账号直接得分。凭借这一漏洞,A*0*E战队疯狂“狙击”其他战队,迅速缩小了与PPP战队的差距。
然而,在两节比赛之间的休息时间里,该题在主办方的服务器中下线,也就是说A*0*E战队不能再登录其他选手的账号去“干坏事”。但凭借之前对战的信息,A*0*E战队搭建了自己的服务器来模拟主办方的比赛环境,还写了一些自动“杀敌”脚本等。
第三节比赛一开赛,“我们基本上称霸全场,干掉了除我们控制的人物以外的所有队伍,抢了很多Flag”。刘耕铭认为这是战队追回比分的关键。
在此之后,A*0*E战队与PPP战队的比分就长期处在“拉锯”争夺中。离比赛结束还有四个小时,A*0*E战队仍然落后PPP战队近四十分,也是这个时候,比赛开始“封榜”,所有战队看不到比赛成绩。
此时,有两道题目放出来已有20个小时左右,但没有战队能解出来。“这对选手来说是很绝望的,而且看不到希望。”刘耕铭说,为了争夺冠军,战队必须靠其中一道题目来反败为胜。
凭借不懈地坚持,他们终于率先拿下其中一题。这道题是关于Linux操作系统的综合性题目,“不是说最后的漏洞本身藏得有多深”,而是需要从头开始理解整个系统的设计逻辑、运作方法和交互方式,直到最后一步才能掌握漏洞的原理和利用漏洞发起攻击的方法。
“但根据当时现场的解题情况,感觉战队并没有因此获得很多分数。”成绩公布前,谢天忆猜测最终得分“可能是(与冠军队)相差二三十分”,但结果几乎超出了所有人的预料。
现在想来,刘耕铭还是觉得最终夺冠多少有些运气成分,“如果再多打一轮,说不定就失去了冠军。”不过相应的,A*0*E战队也在比赛中吃了不少“亏”。
“按照战队名称的首字母排序,我们是一号队伍。其他战队写循环攻击脚本时,一般都是从第一支队伍开始,好几轮都只打了我们一个队伍,超级亏!”
鏖战59个小时后比赛终于结束,但成绩并未即刻宣布。在等待闭幕式上宣布结果的“漫长”的两个小时里,因为实在扛不住,超过一半队员就回去休息了,还有多位队员直接趴在桌子上睡觉。
当比赛结果最终公布时,所有人都非常激动,“因为大家都没有想到是这个结果……这是DEF CON CTF历史上冠军争夺最焦灼的一次。”谢天忆说,“永不放弃的战队精神和世界一流的技术实力帮助我们夺得了世界冠军。”
所有战队成绩变化视频。
文/南都个人信息保护研究中心研究员 尤一炜
编辑:蒋琳