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