网络安全竞赛:开启安全人才培养通道
2019-10-23姜开达武永兴
文/姜开达 武永兴
(作者单位为上海交通大学)
CTF 竞赛逐渐演变成为网络安全竞赛的一种重要形式
随着全社会对网络空间安全的重视程度日益增加,高校的网络安全人才培养和各行业在职安全人员专业能力提升教育日益重要,网络安全人才供不应求的局面还将长期持续。
各类网络安全竞赛作为培养安全人才,发现安全人才的有效途径,这几年在国内出现了爆发式增长。比赛提供了一个完美的平台,参与者能够综合运用各种手段,进行漏洞挖掘和有效利用,开展取证分析和积极防御,像攻击者一样来思考问题,在攻防相长的过程中完成自我升华。比赛选手或主动或被动,补全了计算机和网络安全基础理论知识,培养了从理论转向实践的动手能力,并且能够在安全领域结合业务活学活用。同时伴随竞赛也凝聚了一支支蓬勃发展的安全团队,他们有着共同的理想和奋斗目标,互相鼓舞激励前行。
Capture The Flag(简称CTF)直译为“夺旗赛”,起源于1996 年美国举办的DEF CON 全球黑客大会,最早是交流安全技术的重要途径。随着时间的推移,CTF 竞赛逐渐演变成为网络安全竞赛的一种重要形式,发展成为全球范围网络安全圈的流行比赛,成为了学习锻炼网络安全技术,展现安全能力和水平的绝佳平台。参赛队伍需要通过解决网络安全的技术问题来获取尽可能多的flag。flag 可能来自于一台远端的服务器,一个复杂的软件,也可能隐藏在一段通过密码算法或协议加密的数据,或是一组网络流量及音频视频文件中。选手需要综合利用自己掌握的安全技术,并辅以快速学习新知识,通过获取服务器权限,分析并破解软件或是设计解密算法等不限定途径来获取。
四种主流竞赛形式
目前主流的网络安全竞赛体现为以下几种形式:
1.解题赛(Jeopardy)
这是大多数国内外CTF 比赛的主流形式,选手自由组队参赛,题目通常在比赛过程中陆续放出。解出一道题目后,提交题目对应的flag 即可得分,比赛结束时分高者胜(同分时比较总提交时间)。为了向现实生活中实际场景靠拢,近年也出现了一种新的Real World 形式,题目载体一般是现实中真实出现过的漏洞。
2.攻防赛(AWD,Attack With Defense)
通常为现场比赛采用,是多数CTF决赛的比赛形式,选手自由组队参赛,但通常队伍人数会受到限制(3~6 人不等),比赛中更为注重临场反应和解题速度,考察团队多方面的综合安全能力,要求攻防能力均衡,不能存在短板。
3.破解赛(Pwn)
国内知名的破解赛有GeekPwn(极棒)安全极客大赛,“天府杯”国际网络安全大赛等。这类比赛没有明确命题和答案,主要来自参赛选手提交的0day 漏洞。
4.混合赛(Mix)
CTF 线下赛可能是解题赛,可能是攻防赛+解题赛,比如XCTF 国际网络攻防联赛总决赛,也有可能是攻防赛+Real World,比如第三届强网杯全国网络安全挑战赛。
常见题目类型
常见的比赛题目类型包含但不限于以下几类:
1.Web 安全
通过浏览器访问题目服务器上的网站,寻找网站漏洞,利用网站漏洞获得服务器的部分或全部权限,拿到flag。具体考察:操作系统和网站应用服务器安全,网站多种语言源代码审计分析(特别是php),数据库管理和SQL 语句查询,Web 漏洞挖掘和利用(SQL 注入和XSS 等),各种服务器提权,编写代码补丁并修复网站漏洞。
2.逆向工程
题目就是一个软件,但通常没有软件的源代码。需要利用工具对软件进行反编译甚至反汇编,从而理解软件内部逻辑和原理,找出与flag 计算相关的算法并破解这个算法,拿到flag。具体考察:Windows / Linux / Android 在 x86 / x86_64 /ARM 平台多种编程语言的熟练掌握,对源代码及二进制文件的分析和理解,对多种反编译乃至反汇编逆向工具和脱壳调试技巧的熟练掌握,Android 移动应用APK文件的逆向分析,掌握加解密、内核编程、算法、反调试和代码混淆技术。
3.漏洞挖掘与漏洞利用
访问一个本地或远程的二进制服务程序,通过逆向工程找出程序中存在的漏洞,并利用程序中的漏洞获取远程服务器的部分或全部权限,拿到flag。具体考察:Windows / Linux 平台的二进制程序漏洞挖掘,掌握C / C++ / Python / PHP / Java / Ruby/ 汇编等语言,掌握缓冲区溢出和格式化字符串攻击,编写shellcode 并进行利用。
4.密码学
分析题目中的密码算法与协议,利用算法或协议的弱点来计算密钥或对密文进行解密,从而拿到flag。具体考察:掌握古典密码学和现代密码学,分析密码算法和协议,计算密钥和进行加解密操作。
5.其他杂类
利用隐写术等保护技术将信息隐藏在图像、音频、视频中,或者信息就在一段内存镜像或网络流量中,尝试将隐藏的信息恢复出来即可拿到flag。ACM 算法题,游戏或其他安全常识题目,都需要一定的编程基础。具体考察:信息搜集能力,编程能力,移动(Mobile)应用安全,隐写术和信息隐藏,计算机取证 (Forensics) 技术和文件恢复,计算机网络基础以及对网络流量的分析能力。
赛题的质量是最重要的
目前国内外安全比赛风起云涌,但也同时存在一些问题。比赛数量越来越多,几乎每周都有比赛,但质量参差不齐。国际比赛难度越来越高,对新人不友好,可能会打击到入门新人的积极性。一些国内比赛题目直接挪用以前的陈题,脑洞太大导致选手花费了很多时间却没有学到知识,还有一些队伍为了利益或名声存在作弊的行为。种种怪现象影响了安全比赛的健康发展。
高难度的竞赛对选手的知识积累与技术熟练度要求非常高
现在很多比赛奖金不菲,但对于参与者来说,奖金并不是最吸引人的,最重要的还是赛题的质量。好的题目能够引导选手去注意到一些以前忽略的知识点,可以是一些新的利用方法,也可以是现实生活中遇到的漏洞的复现等等。要让选手在经过数小时奋战之后,获得感满满,而不是为了强行提升难度去增加脑洞题数量。
高难度的竞赛对选手的知识积累与技术熟练度要求非常高,因此如果想要在竞赛中取得好成绩,需要首先具备扎实的计算机理论和实践基础。其中涉及到的重要基础课程包括:计算机组成与系统结构、操作系统、编译原理、数据结构、计算机网络、密码学、离散数学、数论、近世代数、数字电路等。
安全竞赛已经成为了安全从业人员非常好的入门途径,获奖经历也成为了很多学生求职的敲门砖,一些在安全赛场上表现出色的选手,在实际工作中同样表现优秀。对于参加比赛的选手来说,要想从一个比赛中有所收获,首先要明白竞赛题目和实战的区别,比赛一般会涉及到最新的知识点,可能会触及到知识的盲区,这时不能产生畏难的情绪。参加比赛最锻炼的不是技术水平,而是融会贯通,快速学习的能力。技术和知识可能会随着时间而过时,但是快速学习的能力对个人的成长会一直有益。比赛之后要积极地和命题人交流,了解题目的考察点,有没有非预期解法等,要乐于分享自己的解题思路(Writeup),和其他选手交流互通有无。最重要的是多寻找一些志同道合的伙伴,尽快参与到实际的竞赛中来,队员之间多交流,多总结,从而迅速熟悉当下竞赛的题目风格和形式,通过实战获得能力上的最大提升,同时也能够促进团队的默契与凝聚力。知识的积累,能力的提升从来没有快速通道,只有一次次地参与比赛挑战,长期沉淀下来才能小有所成。
纸上得来终觉浅,绝知此事要躬行,这也正是网络安全竞赛的魅力,吸引着一代代安全爱好者走入网络空间的神秘殿堂。