0
本文作者: 李勤 | 2017-04-20 10:52 | 專題:雷峰網(wǎng)公開課 |
知乎里曾有一個熱門回答“智商被碾壓是一種怎樣的體驗”。
由于經(jīng)常面對異常機智的黑客,雷鋒網(wǎng)編輯捂著胸口,表示小心心好痛。但是,如果是看著一群高智商黑客互相“碾壓智商”,開展一場技術(shù)、策略與智商的較量,感覺還是挺爽的!
CTF(Capture The Flag)就是這樣一種較量,它又被稱為“奪旗賽”,是網(wǎng)絡(luò)安全技術(shù)人員之間進行技術(shù)競技的一種比賽形式,起源于1996年DEFCON全球黑客大會,以比賽形式代替黑客們之間的真實技術(shù)比拼。
也就是說,這是一場實打?qū)嵉幕鹌窗。?/p>
這次,雷鋒網(wǎng)宅客頻道邀請到了國際頂尖白帽黑客、騰訊安全聯(lián)合實驗室旗下玄武實驗室負(fù)責(zé)人,在國內(nèi)黑客界被尊稱為“TK 教主”的于旸與騰訊安全聯(lián)合實驗室旗下科恩實驗室安全研究員騰訊 eee 戰(zhàn)隊隊長謝天憶主講這次公開課,聚焦 CTF的歷史和信息安全人才培養(yǎng),以及前不久舉辦的騰訊信息安全爭霸賽(TCTF)線上預(yù)賽試題解讀等內(nèi)容。
【TK教主(左)、謝天憶(右)】
以下是公開課總結(jié)文實錄+視頻,在不妨礙原意的表達(dá)上,雷鋒網(wǎng)編輯對該實錄略有整理和修訂:
大家好!我叫于旸,從事安全技術(shù)研究工作已經(jīng)有15年了。愛好比較廣泛,接觸過很多類安全技術(shù)。精通的較少,主要擅長的還是軟件安全方面。我現(xiàn)在在騰訊負(fù)責(zé)玄武實驗室的工作,如果你是一個安全愛好者,可以在搜索“騰訊玄武實驗室”的微信公眾號或微博賬號,我們每天會推送國際上最新的安全技術(shù)信息。
CTF是什么?
這個概念是從歐美傳過來的,字面上是“奪取旗幟”,原本是西方的一種傳統(tǒng)戶外游戲,相當(dāng)于我們的丟沙包或者跳大繩。原始的 CTF每個隊伍真的有一面旗幟。比賽目標(biāo)就是奪取位于對方“基地”的旗幟,并帶著旗子安全返回自己的基地,當(dāng)然,實際規(guī)則還要更復(fù)雜一些,比如還有“監(jiān)獄”的概念。
后來,“奪旗”的概念也被引入信息安全攻防比賽。因為在比賽中,選手需要通過解開題目,或攻破目標(biāo)奪得“Flag”。
現(xiàn)在,我們用CTF來代指信息安全領(lǐng)域的奪旗比賽。
CTF 的比賽形式有以下幾種:
1.真的是“題目”的解題模式,包含逆向、漏洞(也稱攻防)、算法、審計、綜合……,難度不一,分值不一,越難的題目分值越多。
逆向題一般是一個二進制程序,F(xiàn)lag 就藏在這個文件里,需要選手有高超的逆向技巧,找出 Flag。
漏洞題一般也是給二進制程序,選手需要從程序中找出漏洞,并寫出漏洞利用的攻擊代碼。雖然做漏洞題一般也需要逆向技巧,但對漏洞技術(shù)要求更高,用寫出的漏洞利用代碼實際攻擊成功,才能取得 Flag。
算法題是指算法分析題,給你一段某種算法處理過的數(shù)據(jù),選手需要對付一個或多個算法。
審計題給出的文件就多種多樣了??赡苁且粡堧[藏了信息的圖片,看起來像風(fēng)景照或者人像,但其中有線索指向某個 Flag 。也有可能給你一個網(wǎng)絡(luò)數(shù)據(jù)包,包含大量網(wǎng)絡(luò)通信數(shù)據(jù),需要你分析。
還有一些難以歸類的題目,或者由幾類題型組合的題,稱為綜合題。
解題模式是比較常見的模式,不少 CTF 都選擇這種模式,特別是在預(yù)賽階段。
2.攻防模式。
這個模式更加熱鬧和刀光劍影。因為,它真的是隊伍之間進行攻防。攻防模式一般可以分為三種:
第一種,每一支隊伍一同攻擊同一個目標(biāo),考驗攻擊能力;
第二種,所有參賽隊伍進行防守,遭受攻擊,考驗防守能力;
第三種,結(jié)合前兩種,綜合考驗攻防能力。這種模式對技術(shù)、戰(zhàn)術(shù)、策略要求更高。一般是回合制,一個回合五分鐘??梢园凑兆约旱牟呗赃x擇優(yōu)先攻擊或防守,打誰不打誰,隊伍自己決定,一個回合暫停一次。
還有一種模式,這種模式在國內(nèi)不常見,稱為“King of The Hill”,我把它叫做“山大王”——大家同時攻擊一個服務(wù)器,比誰占領(lǐng)服務(wù)器的時間長,保持自己的控制權(quán),不被別人干掉。這其實和傳統(tǒng)奪旗更像,守好自己搶奪的東西,也被人稱作“懶人的 CTF”,因為占領(lǐng)方有很大優(yōu)勢,有時候可以打得比較悠閑。
CTF 現(xiàn)狀
近幾年,國際、國內(nèi)的CTF種類越來越多。舉辦CTF的組織方各有目的,有些有政府背景,比如,韓國的 Codegate CTF;有些是戰(zhàn)隊辦的,比如,PPP 的 PlaidCTF,這種比較常見;有些是企業(yè)辦的,比如騰訊的 TCTF ;有些是安全會議牽頭辦的,比如著名的 DEF CON CTF,實際具體操辦的也是戰(zhàn)隊。DEFCON CTF是目前還在辦的歷史最悠久的CTF。最早一屆DEFCON CTF 是 1996年辦的。
剛才提到的這些都是公開的CTF。還有一類是不公開的 CTF,不會公開征集報名,開展預(yù)賽之類。比如,有些國內(nèi)、國外企業(yè)會舉辦面向內(nèi)部員工的 CTF。另外,從公開信息可以了解到,美國國防部從 2014 年開始舉辦名為“CyberStakes”的 CTF 。美國國防部有一個網(wǎng)絡(luò)安全人才的培養(yǎng)計劃,目標(biāo)是花3年時間在美國軍隊里培養(yǎng) 4000 名安全專家。而且標(biāo)準(zhǔn)很具體,要求會挖漏洞,會寫Exploit。訓(xùn)練的一個環(huán)節(jié)就是CyberStakes”。而且他們邀請了 David Brumley 教授來授課。這位教授是 2016 年 CGC 最后 7 支入圍隊伍之一 ForAllSecure 的創(chuàng)始人。CGC 是 CTF 歷史上的轉(zhuǎn)折點,不再只是人和人打,而是和機器打。他們招募了一些隊伍設(shè)計了一套系統(tǒng),和人類戰(zhàn)隊打 CTF。就像阿法狗與人類下圍棋一樣。不過,CGC最后的戰(zhàn)勝隊還是人類隊伍。雖然機器隊伍沒有橫掃千軍,但也不是最后一名,還是有兩支人類隊伍輸給了機器。
所以,在安全攻防領(lǐng)域,至少在 CTF 領(lǐng)域,目前人類雖然依然保持優(yōu)勢,但畢竟也有兩支失敗的隊伍,所以,大家要努力。
CTF這兩年在國內(nèi)的發(fā)展
CTF最近兩年在國內(nèi)發(fā)展迅速,可以從我給的這兩個截屏看出來。左邊這幅是我在2015年在手機上的截屏,右邊這幅是我在2017年的手機上的截圖。
大家可以看到,2015年,在谷歌翻譯上輸入“CTF contests”,翻譯是“周大福競賽”。但在2017年,谷歌翻譯就已經(jīng)認(rèn)識 CTF了,我覺得這能說明一點問題。
為什么CTF越來越多
教育部高等學(xué)校信息安全專業(yè)教學(xué)指導(dǎo)委員會秘書長封化民曾說過:中國信息安全人才需求將以每年 1.5 萬人的速度遞增,到 2020 年相關(guān)人才需求將增長到 140 萬。我還看到畢馬威對英國大企業(yè)的調(diào)查顯示:安全人才越來越供不應(yīng)求,有 52% 的被調(diào)查者表示,甚至愿意雇傭有網(wǎng)絡(luò)犯罪前科的人,因為人才供不應(yīng)求。美國蘭德公司發(fā)布的一份報告指出:美國高端信息安全人才存在短缺,尤其是在聯(lián)邦政府內(nèi),這會對國家安全造成不利影響,建議聯(lián)邦政府放寬雇用規(guī)則、投資信息安全教育。
所以,可以看出,安全人才缺乏是一個國際性問題。而 CTF 是培養(yǎng)安全人才的重要手段。我覺得這是近年 CTF 熱門的的最重要原因。
學(xué)習(xí)CTF 的好處
研究安全技術(shù)過程中訓(xùn)練出來的思維能力是很有用處的,即使以后不去做網(wǎng)絡(luò)安全。我經(jīng)常跟大家講的一個案例是,1996 年成立的黑客技術(shù)團體“w00w00”的成員中至少包括:
WhatsApp 的聯(lián)合創(chuàng)始人
Jan KoumNapster(世界最早的音樂共享平臺) 的聯(lián)合創(chuàng)始人
Shawn FanningArbor Networks 的聯(lián)合創(chuàng)始人
Dug SongNmap 的開發(fā)者
Gordon Fyodor LyonCounterTack 的 CTO Michael A. DavisGoogle 元老
David McKayYammer 安全主管
Josha BronsonAccuvant Labs 的 Joshua J. Drake
Veracode 的 Andrew Reiter
這個團體不是特別大,卻出了這么多人才。有些人后來雖然沒有從事網(wǎng)絡(luò)安全的工作,但在自己的工作崗位上做得非常出色。
如果,你不但對安全感興趣,而且想未來從事安全工作,那么就要明白,CTF中的技術(shù)對安全工作來說一部分,不是全部。工作中遇到的有些問題可以用 CTF中涉及的知識解決。還有很多問題則需要用到 CTF 之外的技能。
這是京華時報的一個報道截圖:有人發(fā)現(xiàn)自己一卡通的金額突然變成了4000多萬,有一點計算機基礎(chǔ)知識的人,一看就知道是怎么回事:處理一卡通的機器在設(shè)計中存在問題,扣費沒考慮余額,把錢扣成了負(fù)數(shù)。報道里提到余額被扣成了-1.8元,但當(dāng)再次把卡插入機器,機器在讀取余額時,按無符號數(shù)處理,就變出了4000多萬。
類似的事情用 CTF 里的知識就能解釋。但安全工作中還需要很多其它技能。如果能在比賽之余,找機會接觸一下安全行業(yè),了解行業(yè)里有哪些角色,了解每種角色需要什么技能,了解自己適合哪種崗位,在將來進入行業(yè)時會有很大幫助。
CTF 和現(xiàn)實安全技術(shù)工作的關(guān)系
打 CTF 是非常好的安全技術(shù)能力訓(xùn)練方式,優(yōu)秀 CTF 選手在從事安全技術(shù)工作時也會有很大優(yōu)勢。不過大多數(shù)現(xiàn)實中的安全技術(shù)工作其實沒有 CTF 中的問題那么困難,但會復(fù)雜得多。另外,打 CTF 的目標(biāo)是得分,處理現(xiàn)實安全問題的時候要考慮更多因素,比如,解決問題的同時還要保持業(yè)務(wù)運行。
我所列出的信息安全技術(shù)方向只是粗粗列舉,實際上不止這些。CTF直接涉及的只是其中一部分。當(dāng)然,在 CTF 中訓(xùn)練的基本功可以幫助你比較順暢地去學(xué)習(xí)那些沒接觸過的領(lǐng)域。
另外,除了和 CTF 相關(guān)的技術(shù)能力,從職業(yè)的角度看,通用能力也很重要。比如,很基本的三點:能想清楚、能寫清楚、能講清楚,這體現(xiàn)了你邏輯是否嚴(yán)密、語句是否通順、表達(dá)是否清晰。有些通用能力對專業(yè)能力提升也有幫助,比如分析能力、判斷能力、規(guī)劃能力、搜集能力、學(xué)習(xí)能力、提煉能力。無論以后你想從事什么工作,在學(xué)生時代加強這些能力的培養(yǎng),對你整個人生都會有很大的幫助。
第二部分,謝天憶講解騰訊 CTF (TCTF)初賽題目及解答,由于涉及到很多術(shù)語和代碼,雷鋒網(wǎng)編輯整理了謝天憶的PPT,請讀者配合視頻直接“服用”。
1.小白對 CTF 感興趣,能否推薦學(xué)習(xí)路徑?
天憶:我回憶一下當(dāng)年自己小白時,是怎么學(xué)習(xí)的。首先,CTF和信息安全相關(guān),信息安全是和計算機科學(xué)相關(guān)的一門學(xué)科,所以先要學(xué)習(xí)計算機科學(xué)的基礎(chǔ)知識,比如,學(xué)習(xí)編程、寫算法、數(shù)據(jù)結(jié)構(gòu)等。我在高中參加信息學(xué)競賽時,考察的是學(xué)生的編碼能力,對后來學(xué)習(xí)非常重要。其次,你要學(xué)習(xí)計算底層的原理知識,比如,計算機的組成結(jié)構(gòu)、CPU的實現(xiàn)原理和匯編語言等,理解為什么一個程序可以跑出這樣的一個結(jié)果。然后可以再學(xué)習(xí)更多的上層知識,比如其他高級語言等。在這些基礎(chǔ)上,就可以開始學(xué)習(xí)一些安全相關(guān)的特定領(lǐng)域知識,比如逆向分析、漏洞挖掘與利用、Web安全或者密碼學(xué)等。除此之外,掌握數(shù)學(xué)知識也很重要。
2.有沒有專門可以學(xué)習(xí) CTF 的入門級網(wǎng)站?
天憶:網(wǎng)上有許多的 wargame 或是 OJ 平臺,但是風(fēng)格和難度不一,題目質(zhì)量也是有好有壞,在練習(xí)時要根據(jù)自我感覺和實際情況來調(diào)整。在Github上 (https://github.com/ctfs) 有人專門搜集了歷年 CTF 比賽的題目和解答,最近三四年的比賽都有。
3. CTF 怎么訓(xùn)練更高效?
天憶:要有自我訓(xùn)練的意識,這個影響是潛移默化的。比如, 把打游戲的時間拿出 50% 來就可以多訓(xùn)練幾道題目,或者在做同一道題目的時候不滿足于現(xiàn)有的解法,去想想有沒有其他更好的方法來解決,要舉一反三盡量深挖一道題目。另外,多參加一些比賽也是有益的,特別是高水平的國際比賽,通常這些比賽的題目都會有很高的質(zhì)量,可以在其中學(xué)到更多的東西。
TK : 充分的時間、精力投入是必要的,可能沒有太多取巧的辦法,天憶可以介紹一下自己的經(jīng)歷供大家參考。
天憶:我在讀研究生時接觸CTF,但在更早以前,是小時候我爸拿過來一個叫做“中華學(xué)習(xí)機”的東西,沒有圖形界面。但我一直保持好奇心,在初中時誤打誤撞學(xué)習(xí)編程,覺得非常有趣,而且可以解決復(fù)雜的數(shù)學(xué)問題,發(fā)現(xiàn)了計算機的無窮潛力。
讀書時,因為課業(yè)多,不會專門花時間,但會在業(yè)余時間在紙上寫寫代碼,有機會摸到電腦時,就會趕緊敲進去。我本人也不是完全不打游戲,周末會抽時間打游戲,但在研究技術(shù)時會百分百投入,這一點非常重要,三、四個小時能抵得上十個小時。
4,為了 CTF ,如何學(xué)習(xí)逆向和反匯編,有沒有書籍推薦?
TK : 這個話題很大,一兩句講不清楚。從我自己的經(jīng)驗看,逆向和反匯編屬于門檻比較高的事情,你在門檻外看,會覺得很困難、很痛苦。就像你去學(xué)英語,先讓你學(xué)的不是字母表,而是丟過來一本莎士比亞的著作,所以要有方法度過陣痛期,陣痛期過后,就比較容易了。
所以,要先選幾個小目標(biāo),雖然有些枯燥,但小目標(biāo)在逆向和分析后,是能達(dá)成一些成果的。舉個例子,我最早的逆向是逆向《仙劍奇?zhèn)b傳》的程序,為了能在游戲多得到一些錢,有這樣一個目標(biāo),達(dá)成目標(biāo)后有正向的反饋激勵,就能堅持下去。
一般講逆向的書都很厚,我不太推薦一開始就去買書,書太厚會造成心理壓力。先在網(wǎng)上找?guī)讉€教程學(xué)習(xí)一下,學(xué)會一點之后再去買書就不怕了,可以跟著書系統(tǒng)地學(xué)習(xí)。
5.請介紹一下 BadTunnel 漏洞的發(fā)現(xiàn)過程。
TK : 這是屬于設(shè)計類和系統(tǒng)多點耦合的問題,我這幾年一直在關(guān)注這個方向。2015 年 4 月,我去深圳出差,飛機要飛四個小時,我沒什么事情做,就在腦子里過了前一陣子看的一些網(wǎng)絡(luò)協(xié)議,忽然有個靈感冒出來,覺得在這個地方可能有問題。不過當(dāng)時工作比較多,耽擱了,沒有驗證。直到 6 月的時候,我才寫了一個程序去驗證,然后發(fā)現(xiàn)確實有問題。
6.CTF 隊伍的隊員應(yīng)該有哪些技能?
天憶:CTF 題目一般有幾個大類,而選手可以選擇一個或多個方向進行發(fā)展,一個全能型選手往往可以有多個方向的技能,比如,二進制、密碼學(xué)或者是 Web 安全等。但是,作為一個戰(zhàn)隊整體來說,保持隊伍成員的技能多樣化是很重要的,這樣在碰到各種各樣不同類型的題目時都能夠有合適的人選來解決,而這樣的隊伍綜合能力才是最強的。
7.這次 TCTF 有什么特色?
TK+天憶:這次TCTF 是DEFCON CTF的外卡賽。也就是說,TCTF 打好了,直接一個電梯升上去就到拉斯維加斯了。在比賽本身上,我們選用的比賽賽題形式是解題模式,而且題目質(zhì)量很高??紤]到和 DEFCON CTF接軌,二進制的題目多一些。DEFCON CTF主要是二進制的題目,不過我們 TCTF 還是盡可能會保持一定多樣性。
8.CTF 比賽里有什么特殊套路和技巧?
TK+天憶:攻防模式下有一種“攪屎棍”的做法,對吧?一些比較不會放在明面上的東西比較多,比如,種后門。我記得有次比賽的時候,有個團隊知道別人會用Wireshark去分析他們的數(shù)據(jù),結(jié)果他們發(fā)了一個漏洞數(shù)據(jù)在這個包里,別人一抓包就悲劇了。當(dāng)然,即使用套路,還是要基于你的技術(shù)能力。
一個比賽如果都是套路,意義不大。但是,如果通過題目,可以想出沒有見過的套路,這就是意義。TCTF 解題模式不僅考察技術(shù)能力,還能考察別的能力。
以前在 DEFCON CTF上,很多工作人員的精力也有很多要花在搗蛋的人身上。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。