淘新聞

白帽駭客教主 TK 告訴你,駭客的遊戲 CTF 究竟是什麼 | 硬創公開課總結文+視頻

知乎裡曾有一個熱門回答“智商被碾壓是一種怎樣的體驗”。

由於經常面對異常機智的駭客,雷鋒網編輯捂著胸口,表示小心心好痛。但是,如果是看著一群高智商駭客互相“碾壓智商”,開展一場技術、策略與智商的較量,感覺還是挺爽的!

CTF(Capture The Flag)就是這樣一種較量,它又被稱為“奪旗賽”,是網路安全技術人員之間進行技術競技的一種比賽形式,起源於1996年DEFCON全球駭客大會,以比賽形式代替駭客們之間的真實技術比拼。

也就是說,這是一場實打實的火拼啊!

這次,雷鋒網宅客頻道邀請到了國際頂尖白帽駭客、騰訊安全聯合實驗室旗下玄武實驗室負責人,在國內駭客界被尊稱為“TK 教主”的于暘與騰訊安全聯合實驗室旗下科恩實驗室安全研究員騰訊 eee 戰隊隊長謝天憶主講這次公開課,聚焦 CTF的歷史和資訊安全人才培養,以及前不久舉辦的騰訊資訊安全爭霸賽(TCTF)線上預賽試題解讀等內容。

【TK教主(左)、謝天憶(右)】

以下是公開課總結文實錄+視頻,在不妨礙原意的表達上,雷鋒網編輯對該實錄略有整理和修訂:

一、TK 教主發言記錄

大家好!我叫于暘,從事安全技術研究工作已經有15年了。愛好比較廣泛,接觸過很多類安全技術。精通的較少,主要擅長的還是軟體安全方面。我現在在騰訊負責玄武實驗室的工作,如果你是一個安全愛好者,可以在搜索“騰訊玄武實驗室”的微信公眾號或微博帳號,我們每天會推送國際上最新的安全技術資訊。

CTF是什麼?

這個概念是從歐美傳過來的,字面上是“奪取旗幟”,原本是西方的一種傳統戶外遊戲,相當於我們的丟沙包或者跳大繩。原始的 CTF每個隊伍真的有一面旗幟。比賽目標就是奪取位於對方“基地”的旗幟,並帶著旗子安全返回自己的基地,當然,實際規則還要更複雜一些,比如還有“監獄”的概念。

後來,“奪旗”的概念也被引入資訊安全攻防比賽。因為在比賽中,選手需要通過解開題目,或攻破目標奪得“Flag”。

現在,我們用CTF來代指資訊安全領域的奪旗比賽。

CTF 的比賽形式有以下幾種:

1.

真的是“題目”的解題模式,

包含逆向、漏洞(也稱攻防)、演算法、審計、綜合……,難度不一,分值不一,越難的題目分值越多。

逆向題一般是一個二進位程式,Flag 就藏在這個檔裡,需要選手有高超的逆向技巧,找出 Flag。

漏洞題一般也是給二進位程式,選手需要從程式中找出漏洞,並寫出漏洞利用的攻擊代碼。雖然做漏洞題一般也需要逆向技巧,但對漏洞技術要求更高,用寫出的漏洞利用代碼實際攻擊成功,才能取得 Flag。

演算法題是指演算法分析題,給你一段某種演算法處理過的資料,選手需要對付一個或多個演算法。

審計題給出的文件就多種多樣了。可能是一張隱藏了資訊的圖片,看起來像風景照或者人像,但其中有線索指向某個 Flag 。也有可能給你一個網路資料包,包含大量網路通信資料,需要你分析。

還有一些難以歸類的題目,或者由幾類題型組合的題,稱為綜合題。

解題模式是比較常見的模式,不少 CTF 都選擇這種模式,特別是在預賽階段。

2.攻防模式。

這個模式更加熱鬧和刀光劍影。因為,它真的是隊伍之間進行攻防。攻防模式一般可以分為三種:

第一種,每一支隊伍一同攻擊同一個目標,考驗攻擊能力;

第二種,所有參賽隊伍進行防守,遭受攻擊,考驗防守能力;

第三種,結合前兩種,綜合考驗攻防能力。這種模式對技術、戰術、策略要求更高。一般是回合制,一個回合五分鐘。可以按照自己的策略選擇優先攻擊或防守,打誰不打誰,隊伍自己決定,一個回合暫停一次。

還有一種模式,這種模式在國內不常見,稱為“King of The Hill”,我把它叫做“山大王”

——大家同時攻擊一個伺服器,比誰佔領伺服器的時間長,保持自己的控制權,不被別人幹掉。這其實和傳統奪旗更像,守好自己搶奪的東西,也被人稱作“懶人的 CTF”,因為佔領方有很大優勢,有時候可以打得比較悠閒。

 CTF 現狀

近幾年,國際、國內的CTF種類越來越多。舉辦CTF的組織方各有目的,有些有政府背景,比如,韓國的 Codegate CTF;有些是戰隊辦的,比如,PPP 的 PlaidCTF,這種比較常見;有些是企業辦的,比如騰訊的 TCTF ;有些是安全會議牽頭辦的,比如著名的 DEF CON CTF,實際具體操辦的也是戰隊。DEFCON CTF是目前還在辦的歷史最悠久的CTF。最早一屆DEFCON CTF 是 1996年辦的。

剛才提到的這些都是公開的CTF。還有一類是不公開的 CTF,不會公開徵集報名,開展預賽之類。比如,有些國內、國外企業會舉辦面向內部員工的 CTF。另外,從公開信息可以瞭解到,美國國防部從 2014 年開始舉辦名為“CyberStakes”的 CTF 。美國國防部有一個網路安全人才的培養計畫,目標是花3年時間在美國軍隊裡培養 4000 名安全專家。而且標準很具體,要求會挖漏洞,會寫Exploit。訓練的一個環節就是CyberStakes”。而且他們邀請了 David Brumley 教授來授課。這位教授是 2016 年 CGC 最後 7 支入圍隊伍之一 ForAllSecure 的創始人。CGC 是 CTF 歷史上的轉捩點,不再只是人和人打,而是和機器打。他們招募了一些隊伍設計了一套系統,和人類戰隊打 CTF。就像阿法狗與人類下圍棋一樣。不過,CGC最後的戰勝隊還是人類隊伍。雖然機器隊伍沒有橫掃千軍,但也不是最後一名,還是有兩支人類隊伍輸給了機器。

所以,在安全攻防領域,至少在 CTF 領域,目前人類雖然依然保持優勢,但畢竟也有兩支失敗的隊伍,所以,大家要努力。

CTF這兩年在國內的發展

CTF最近兩年在國內發展迅速,可以從我給的這兩個截屏看出來。左邊這幅是我在2015年在手機上的截屏,右邊這幅是我在2017年的手機上的截圖。

大家可以看到,2015年,在谷歌翻譯上輸入“CTF contests”,翻譯是“周大福競賽”。但在2017年,谷歌翻譯就已經認識 CTF了,我覺得這能說明一點問題。

為什麼CTF越來越多

教育部高等學校資訊安全專業教學指導委員會秘書長封化民曾說過:中國資訊安全人才需求將以每年 1.5 萬人的速度遞增,到 2020 年相關人才需求將增長到 140 萬。我還看到畢馬威對英國大企業的調查顯示:安全人才越來越供不應求,有 52% 的被調查者表示,甚至願意雇傭有網路犯罪前科的人,因為人才供不應求。美國蘭德公司發佈的一份報告指出:美國高端資訊安全人才存在短缺,尤其是在聯邦政府內,這會對國家安全造成不利影響,建議聯邦政府放寬雇用規則、投資資訊安全教育。

所以,可以看出,安全人才缺乏是一個國際性問題。而 CTF 是培養安全人才的重要手段。我覺得這是近年 CTF 熱門的的最重要原因。

學習CTF 的好處

研究安全技術過程中訓練出來的思維能力是很有用處的,即使以後不去做網路安全。我經常跟大家講的一個案例是,1996 年成立的駭客技術團體“w00w00”的成員中至少包括:

WhatsApp 的聯合創始人

Jan KoumNapster(世界最早的音樂共用平臺) 的聯合創始人

Shawn FanningArbor Networks 的聯合創始人

Dug SongNmap 的開發者

Gordon Fyodor LyonCounterTack 的 CTO Michael A. DavisGoogle 元老

David McKayYammer 安全主管

Josha BronsonAccuvant Labs 的 Joshua J. Drake

Veracode 的 Andrew Reiter

這個團體不是特別大,卻出了這麼多人才。有些人後來雖然沒有從事網路安全的工作,但在自己的工作崗位上做得非常出色。

如果,你不但對安全感興趣,而且想未來從事安全工作,那麼就要明白,CTF中的技術對安全工作來說一部分,不是全部。工作中遇到的有些問題可以用 CTF中涉及的知識解決。還有很多問題則需要用到 CTF 之外的技能。

這是京華時報的一個報導截圖:有人發現自己一卡通的金額突然變成了4000多萬,有一點電腦基礎知識的人,一看就知道是怎麼回事:處理一卡通的機器在設計中存在問題,扣費沒考慮餘額,把錢扣成了負數。報導裡提到餘額被扣成了-1.8元,但當再次把卡插入機器,機器在讀取餘額時,按無符號數處理,就變出了4000多萬。

類似的事情用 CTF 裡的知識就能解釋。但安全工作中還需要很多其它技能。如果能在比賽之余,找機會接觸一下安全行業,瞭解行業裡有哪些角色,瞭解每種角色需要什麼技能,瞭解自己適合哪種崗位,在將來進入行業時會有很大幫助。

CTF 和現實安全技術工作的關係

打 CTF 是非常好的安全技術能力訓練方式,優秀 CTF 選手在從事安全技術工作時也會有很大優勢。不過大多數現實中的安全技術工作其實沒有 CTF 中的問題那麼困難,但會複雜得多。另外,打 CTF 的目標是得分,處理現實安全問題的時候要考慮更多因素,比如,解決問題的同時還要保持業務運行。

我所列出的資訊安全技術方向只是粗粗列舉,實際上不止這些。CTF直接涉及的只是其中一部分。當然,在 CTF 中訓練的基本功可以幫助你比較順暢地去學習那些沒接觸過的領域。

另外,除了和 CTF 相關的技術能力,從職業的角度看,通用能力也很重要。比如,很基本的三點:能想清楚、能寫清楚、能講清楚,這體現了你邏輯是否嚴密、語句是否通順、表達是否清晰。有些通用能力對專業能力提升也有幫助,比如分析能力、判斷能力、規劃能力、搜集能力、學習能力、提煉能力。無論以後你想從事什麼工作,在學生時代加強這些能力的培養,對你整個人生都會有很大的説明。

二、謝天憶的發言記錄

第二部分,謝天憶講解騰訊 CTF (TCTF)初賽題目及解答,由於涉及到很多術語和代碼,雷鋒網編輯整理了謝天憶的PPT,請讀者配合視頻直接“服用”。

三、問答互動

1.小白對 CTF 感興趣,能否推薦學習路徑?

天憶:我回憶一下當年自己小白時,是怎麼學習的。首先,CTF和資訊安全相關,資訊安全是和電腦科學相關的一門學科,所以先要學習電腦科學的基礎知識,比如,學習程式設計、寫演算法、資料結構等。我在高中參加資訊學競賽時,考察的是學生的編碼能力,對後來學習非常重要。其次,你要學習計算底層的原理知識,比如,電腦的組成結構、CPU的實現原理和組合語言等,理解為什麼一個程式可以跑出這樣的一個結果。然後可以再學習更多的上層知識,比如其他高階語言等。在這些基礎上,就可以開始學習一些安全相關的特定領域知識,比如逆向分析、漏洞挖掘與利用、Web安全或者密碼學等。除此之外,掌握數學知識也很重要。

在這些基礎上,再學習安全相關的一些領域,比如,Web 安全、密碼學。

2.有沒有專門可以學習 CTF 的入門級網站?

天憶:

網上有許多的 wargame 或是 OJ 平臺,但是風格和難度不一,題目品質也是有好有壞,在練習時要根據自我感覺和實際情況來調整。在Github上 (

https://github.com/ctfs)

有人專門搜集了歷年 CTF 比賽的題目和解答,最近三四年的比賽都有。

3. CTF 怎麼訓練更高效?

天憶:

要有自我訓練的意識,這個影響是潛移默化的。比如, 把打遊戲的時間拿出 50% 來就可以多訓練幾道題目,或者在做同一道題目的時候不滿足于現有的解法,去想想有沒有其他更好的方法來解決,要舉一反三儘量深挖一道題目。另外,多參加一些比賽也是有益的,特別是高水準的國際比賽,通常這些比賽的題目都會有很高的品質,可以在其中學到更多的東西。

TK : 充分的時間、精力投入是必要的,可能沒有太多取巧的辦法,天憶可以介紹一下自己的經歷供大家參考。

天憶:我在讀研究生時接觸CTF,但在更早以前,是小時候我爸拿過來一個叫做“中華學習機”的東西,沒有圖形介面。但我一直保持好奇心,在初中時誤打誤撞學習程式設計,覺得非常有趣,而且可以解決複雜的數學問題,發現了電腦的無窮潛力。

讀書時,因為課業多,不會專門花時間,但會在業餘時間在紙上寫寫代碼,有機會摸到電腦時,就會趕緊敲進去。我本人也不是完全不打遊戲,週末會抽時間打遊戲,但在研究技術時會百分百投入,這一點非常重要,三、四個小時能抵得上十個小時。

4,為了 CTF ,如何學習逆向和反彙編,有沒有書籍推薦?

TK : 這個話題很大,一兩句講不清楚。從我自己的經驗看,逆向和反彙編屬於門檻比較高的事情,你在門檻外看,會覺得很困難、很痛苦。就像你去學英語,先讓你學的不是字母表,而是丟過來一本莎士比亞的著作,所以要有方法度過陣痛期,陣痛期過後,就比較容易了。

所以,要先選幾個小目標,雖然有些枯燥,但小目標在逆向和分析後,是能達成一些成果的。舉個例子,我最早的逆向是逆向《仙劍奇俠傳》的程式,為了能在遊戲多得到一些錢,有這樣一個目標,達成目標後有正向的回饋激勵,就能堅持下去。

一般講逆向的書都很厚,我不太推薦一開始就去買書,書太厚會造成心理壓力。先在網上找幾個教程學習一下,學會一點之後再去買書就不怕了,可以跟著書系統地學習。

5.請介紹一下 BadTunnel 漏洞的發現過程。

TK : 這是屬於設計類和系統多點耦合的問題,我這幾年一直在關注這個方向。2015 年 4 月,我去深圳出差,飛機要飛四個小時,我沒什麼事情做,就在腦子裡過了前一陣子看的一些網路通訊協定,忽然有個靈感冒出來,覺得在這個地方可能有問題。不過當時工作比較多,耽擱了,沒有驗證。直到 6 月的時候,我才寫了一個程式去驗證,然後發現確實有問題。

6.CTF 隊伍的隊員應該有哪些技能?

天憶:

CTF 題目一般有幾個大類,而選手可以選擇一個或多個方向進行發展,一個全能型選手往往可以有多個方向的技能,比如,二進位、密碼學或者是 Web 安全等。但是,作為一個戰隊整體來說,保持隊伍成員的技能多樣化是很重要的,這樣在碰到各種各樣不同類型的題目時都能夠有合適的人選來解決,而這樣的隊伍綜合能力才是最強的。

7.這次 TCTF 有什麼特色?

TK+天憶:這次TCTF 是DEFCON CTF的外卡賽。也就是說,TCTF 打好了,直接一個電梯升上去就到拉斯維加斯了。在比賽本身上,我們選用的比賽賽題形式是解題模式,而且題目品質很高。考慮到和 DEFCON CTF接軌,二進位的題目多一些。DEFCON CTF主要是二進位的題目,不過我們 TCTF 還是盡可能會保持一定多樣性。

8.CTF 比賽裡有什麼特殊套路和技巧?

TK+天憶:攻防模式下有一種“攪屎棍”的做法,對吧?一些比較不會放在明面上的東西比較多,比如,種後門。我記得有次比賽的時候,有個團隊知道別人會用Wireshark去分析他們的資料,結果他們發了一個漏洞資料在這個包裡,別人一抓包就悲劇了。當然,即使用套路,還是要基於你的技術能力。

一個比賽如果都是套路,意義不大。但是,如果通過題目,可以想出沒有見過的套路,這就是意義。TCTF 解題模式不僅考察技術能力,還能考察別的能力。

以前在 DEFCON CTF上,很多工作人員的精力也有很多要花在搗蛋的人身上。

四、公開課視頻