資訊安全 駭客攻防戰 CTF

CTF駭客競技風靡全球 大小聯賽培養資安實戰人才

搶旗守塔考驗攻防技巧 電競式資安賽練出真功夫

Capture The Flag(CTF)競賽著重於資安知識面的應用以及發現並修復漏洞的能力,使各個「駭客」或資訊安全相關人員能透過此競賽切磋技術,甚至獲得成長的機會。而在擁有「駭客」能力的同時,是否反思其倫理道德,本文將會帶領大家一探究竟。

 

不斷鑽研資訊安全技術的各路好手,明白能力越大責任越大,可是自身空有資安技術,卻沒有向他人施展拳腳的平台甚至練兵的機會。為了讓擁有資安實力的各路好手有增進技術以及互相砥礪的機會,建立一個安全的切磋環境是必要的,而將這樣的攻防環境以賽制或遊戲的方式呈現,則是為了使資安攻防技術的展現更加大眾化,使其成為一種運動形式,除了增加眾人的參與意願外,更降低大眾加入所需的門檻。此活動是被稱為駭客攻防戰的「Capture The Flag(CTF)」競賽,透過奪取旗幟(Flag)取得勝利,著重考驗駭客或資訊安全相關人員關於資安知識面的應用,以及發現並修復漏洞問題的能力。

資安類的CTF最早可追溯至1996年,由全球最大的計算機安全會議之一DEFCON承辦,由於當時賽制及比賽環境皆僅有雛形,未有明確的規範,甚至需要自己準備競賽目標防守並嘗試攻擊由對手提供的目標,因此公平性有待商榷,另外亦有裁判的專業能力參差不齊、使用手工計分、網路計時不穩定等缺失,導致不當的配置、計分產生延遲以及不可靠的網路誤差等問題,使得比賽招致極大的爭論與不滿。

但凡事皆有進步的空間,隨著時間的推移,之後的比賽在不斷吸收先前系列賽的優點以及缺失後,逐步地完善CTF競賽規則、命題、裁判組織,甚至將計分方式系統化,使得DEFCON CTF成為資安界公認的世界盃CTF比賽。

然而,世界盃比賽有其專業水平的要求,並非人人有心皆可報名,高手過招與新手磨練的場合畢竟各有所異。面向的程度不同,反而難以展現其真正實力,導致無法在競賽當下超越自我,因此現代資安類型的CTF公開賽亦具備權重制度,必須在權重較大的競賽中贏得名次,才能進一步取得該年度進入世界盃CTF大賽的門票。

另外其他著名的CTF比賽有XCTF、PlaidCTF、Boston key party、CodeGte、RuCTFE、SECCON、HITCON CTF等。剛踏入資安領域的新手也不用擔心,現在網路上有許多CTF平台,還有為了鼓勵與啟發學生對資安興趣的CTF比賽像My First CTF,本文將介紹CTF常見的應用相關環境以及比賽體制。

CTF競賽的三種搶旗模式介紹

以下將針對CTF競賽中的三種搶旗模式,在此先進行簡介,並說明不同種競賽所需具備的技能。

解謎式(Jeopardy)

解謎式由主辦方準備各種不同的題目,根據難度的不同給予不定量的提示參考,隨著題目的難度越高,解題後給予的分數也越高。另外,為了獎勵最快解出題目的隊伍,前幾名解題的參賽者將會得到額外分數,最終則由得分最高的組別獲得勝利。由於採用解謎填答的方式進行,因此舉辦比賽的形式較為自由,可於特定地點或線上進行比賽,其定位通常為CTF競賽的初階遴選或單場比賽,不要求具備進行漏洞修復、防禦攻擊的能力,使初學者僅具有基礎的破解功夫後亦可一同進行解謎,是難度可控、裁判專業度要求較低、可組隊也可單打、受眾相對較廣的模式。在競賽過程中,會要求參賽者在網站、封包、檔案、程式等與電腦相關的領域中實際找出Flag並進行填寫,而Flag則如圖1表示,是帶有Flag字眼的字串。在一般CTF競賽中,Flag格式通常為「競賽名稱{字串}」,只要找出並填入指定作答區中,即可得到對應的分數。

圖1  隱藏於網頁原碼中的Flag字串。

尋找Flag的方法並無限制,因此其實際操作理念如同淘金解謎的過程一般,有些人不使用工具,像徒手一般進行挖掘與解謎,雖然速度較慢,但卻可以將每一寸土壤與每個關卡都仔細端詳,找出難度較高,因關卡崎嶇而難以找到的Flag。另外,有些人亦會利用網路上現有的工具等,像使用鏟子一寸一寸地挖掘,雖然挖掘速度較土法煉鋼更快,但碰到較顛簸的關卡便難以背著上路。

更甚者,有人會透過暴力破解的方式,像開挖土機直接將Flag大量地挖掘出來,然而這樣的做法卻容易忽略Flag藏在哪一寸土壤中,且容易因為挖土機的大小而增加卡關風險。

因此,最佳的做法是熟悉現有的解題方法並靈活地隨機應變,快速瞭解與判斷哪些題型需要使用何種方法處理,依情況用上擁有的挖土機、鏟子還有雙手,即可快速而準確地進行解題。

攻防模式(Attack and Defence)

攻防模式對於資安技術的要求較高,不僅要求參賽團隊精通破解技術,防守的技術實力亦要求有所成就,並且更需要團隊之間互相合作的默契,才能順利地從比賽中脫穎而出。其競賽方式為主辦單位替每個隊伍準備多個象徵Flag的伺服器,這些伺服器可能是網站、IoT連網設備,抑或是轉傳網路封包的閘道器。

參賽隊伍必須挖掘對手伺服器相關的服務漏洞,並進入其中盜取資料或留下到此一遊的證據,真正做到取得權限,才可贏得攻擊分數。然而,對手的隊伍亦非省油的燈,己方伺服器也可能淪為被對方使用已知CVE攻擊的目標,因此必須做好防守的準備才能避免丟分,最終則以各隊伍取得分數的多寡進行勝負裁定,分數越高的隊伍即是該次競賽的冠軍。

而此模式的挑戰,就在於需要攻守兼備的能力且顧及攻守之間的平衡,在想攻略對方伺服器,卻不明白對方提供服務的弱點,甚至連提供服務內容皆不瞭解的情況下,盲目不停地出擊雖然有連續取得分數的可能,卻也可能只是徒勞而不自知,導致自信不停地流失。然而,一昧地進行防禦,不懂得怎麼出擊,則只能隨著時間流逝變得緊守著不多的分數。

偏重於攻或偏重於守皆不是正解,想要攻守兼顧則容易忙不過來,導致在最後一刻過勞而翻車。因此,最好的方法是透過團隊分工分配攻擊與防禦,並做到知己知彼的程度,對外除了知道對手伺服器所提供服務具有何種漏洞外,還要能順水推舟發現其他漏洞,使對手忙於進行自我修復;對內則明確將重點放在對方在意的缺點以及對手針對何種漏洞進行攻打,僅修復會遭到攻擊而失分的漏洞即可,如此不僅增添一份從容,團隊亦可準確地做出戰略規劃及決策施行,以沉著的態度取勝。

搶灘遊戲(King of the Hill)

搶灘遊戲與攻防模式相似,皆是需要參賽團隊熟知攻守技術,以及注重團隊合作的競賽,但與之相異的部分在於搶灘遊戲是由主辦方提供一至多台伺服器,每回合由主辦方依據參賽團隊占領機台的數量給分,占領得越久,則該隊的得分會一直累加,最終由得分最高的隊伍獲得勝利。

其競賽方式不僅要與所有競賽團隊搶快,在成功占領伺服器後還要守住不被其他團隊奪走。如何才能保證伺服器不被其他環境更優渥、條件更好的團隊奪走?是針對伺服器對外的所有連線進行管理?又或是約法三章地權限控管伺服器能對內提供但不能對外提供的服務內容?這些都是維持伺服器占領以及達成長久的方法,但過於像控制狂般的限制存取條件,則容易使伺服器缺乏人際關係且無法對外提供服務,對於伺服器本身有無法成長的危害。

那麼是花費時間以及貢獻心力投資伺服器以升級防禦工程?又或是跑程式測試伺服器是否變心,才能避免伺服器慘遭他人奪走?這些方法雖然也是能長久之計,但過於稀少的執行次數無異於漠不關心,過於頻繁的行動則容易使伺服器超載而當機,有時稀少有時頻繁的做法,則容易使伺服器運作不穩定。而後亦需要擁有適當的「安全感」,那什麼是「安全感」呢?安全感與安全不同,摩天大樓上有透明的高空玻璃走道,玻璃的強化係數足以承受大象的重量,是充分安全的,可是依然有些人不敢踩上去,為什麼呢?因為沒有安全感。那麼要怎麼做才能擁有安全感呢?仍是採用知己知彼的策略,知道伺服器所能承受的負載量、明白有沒有其他追求者連線進來、曉得追求者擅長攻擊的點、明瞭團隊自身擅長與不擅長的防守技術等,以及最重要的是適可而止,認知到正在爭奪的那台伺服器是手拉手帶著一起長大的,過於急躁或過於散漫方法將影響到伺服器對內或對外的成長面向。因此「知道」是最能在搶灘遊戲中消除不安全感的方法,也是決定團隊能否拿到最終勝利的關鍵。

CTF比賽流程說明

關於比賽的流程,以下分成初賽和決賽兩部分加以說明。

CTF初賽

CTF初賽通常以解謎式較為常見,其主要目的在於考驗參賽隊伍對於現有資安漏洞的理解及發現能力,在實際針對資安問題進行解決前,需要先定義且明確化所遭受的問題,是高風險高難度的燒腦題?抑或是高風險低難度的營養題?又或者是低風險高難度的待解題?還是低風險低難度的送分題?唯有清楚定義問題後才能知己知彼,找出最有效率修復資安漏洞的方法。

解謎式的賽制上會將各種資安問題包裝成不同類型的謎題,並根據危害風險以及解題難度配置適當的分數,要求參賽隊伍在規定時間內針對謎題定義尋找方法,並嘗試解開謎題以奪得Flag,才可取得對應的分數,最終由分數累積最高的隊伍獲勝。

由於競賽題目以猜謎解題的形式為主,因此參賽環境較不受地理限制,可以遠端連線或現場連網的形式參加,是受眾較為廣泛的競賽模式。以下將針對常見的競賽謎題類型如Reserve、Pwnable、Web、Crypto、Forensic以及Misc進行說明及分析,以窺探CTF初賽的通關要領。

Reverse逆向工程類型

題目涉及執行檔反組譯、程序逆向爆破等技術,要求擁有較紮實的編譯邏輯以及原始碼閱讀技能,參賽者在競賽期間會拿到一份程式,依據執行逆向的流程不同可區分為靜態分析(Static Analysis)和動態分析(Dynamic Analysis)兩種。

靜態分析不運行程式,而是直接將程式進行拆解,並從反組譯出的程式碼、組合語言、程式流程圖等原始碼或執行邏輯進行分析,以找出暗藏在程式碼中的Flag,如圖2演示,針對程式進行反組譯後,在0x400618位置發現Flag。

圖2  靜態反組譯並釋出Flag。

動態分析則直接執行程式,並根據當下程式執行狀況,將Registers(暫存器)和Memory(記憶體)中所儲存的值進行分析,如圖3表示,在程式執行的過程中一步步進行中斷並觀察記憶體堆疊區的變化,並觀察到從記憶體ebp-0x28位置開始有大量寫入的動作,因此可懷疑程式此時正在執行將特定數值存入記憶體的階段。接著再一步一步執行每行組合語言,直到整個寫入過程結束後再將整段記憶體位置上的數值輸出,即可取得Flag字串。

圖3  動態反組譯從記憶體中取出Flag。

Pwnable弱點或漏洞分析類型

Pwnable題目與Reserve逆向工程類似,參賽者亦會拿到一份程式,不同之處在於Pwnable必須設法找到各種程式漏洞並利用相關邏輯缺陷取得更高權限,才能取得主機的控制權以達成解題條件,主要考驗紮實的漏洞挖掘以及程式破解功夫。

接著,將以實例解說如何利用Buffer Overflow漏洞獲取admin權限的過程。首先有一份程式如圖4表示,輸入chad後,會顯示一般user不具有admin權限,當發現無法輕易取得登入權限時,先利用反組譯工具將整份程式進行反組譯,並從反推而來的程式碼中確認是否具有相關漏洞可以進一步利用。

圖4  一般user登入。

如圖5所示,程式碼會判斷permission變數是否為admin,可是提供輸入的地方為name變數,那麼該如何有效地影響permission變數中的數值呢?這時能夠觀察到0x72657375是數值「user」的16進制且為Little Endian反著儲存的方式,因此可以推測記憶體位置是倒著儲存的。

圖5  反組譯後的程式碼。

接著,再觀察name變數的記憶體位置為ebp-18h,permission變數的記憶體位置是ebp-10h,其中共差距8個byte,一個字元為一個byte,因此共相差8個字元,此時便可推理輸入超過8個字元後即可覆蓋掉原本記憶體中的數值「user」。如圖6所示,緊接著輸入chadCHADadmin,便會因為字串過長而使permission變數記憶體中的數值被覆蓋為admin,迫使判斷條件成立,進而取得admin權限。

圖6  成功利用Buffer Overflow漏洞以admin身分登入。

Web網頁安全類型

與網頁安全相關的題目皆會歸類於此,題目涉及多種網頁漏洞、如注入攻擊、XSS攻擊、遠端命令執行、上傳漏洞等,不僅需要網頁語言撰寫的相關知識,更需要擁有對於相關傳輸協定的理解,方能針對網頁進行解謎。與其他解謎類型相比,網頁類型僅須使用瀏覽器連上特定網站即可進行解謎,不需要額外的環境建置以及下載執行檔,是CTF競賽中較常見的出題類型。且由於題目包含平時一般民眾連上網路的動作,如帳密登入、封包傳遞、網頁轉址、加密連線、檔案上傳及檔案下載等,較貼近真實生活環境,因此參賽者可以更容易感受到這些安全漏洞所帶來的危害。

題目的難易度,主要考驗參賽者的技術沉澱以及漏洞查找能力,如圖7所示,是一個需要輸入帳號以及密碼的網頁登入口,這時由於沒有可登入的帳號密碼,因此可嘗試使用如admin、passward、abcde以及123456789等弱密碼進行登入,但這裡無法使用此種方式登入,因此可嘗試搭配SQL注入攻擊「’OR’1’=’1」進行強制符合判斷條件的語法進行登入,其登入結果如圖8所示,語法為方框框選所標記的部分passward會被強制導向為判斷空白或「’1’=’1’」是否符合,且「’1’=’1’」在條件判斷上必然會符合,因此即可繞過原始的密碼對網站進行登入並取得Flag。

圖7  SQL注入攻擊。
圖8  SQL注入結果。

Crypto加解密類型

此類型的題目主要以密碼學的相關知識為主,包含古典加密技術、現代加密技術,甚至是出題者自創的編碼方法都在競賽題目的範圍內,接著會要求參賽者必須從看不懂的字串中找出規律並嘗試解回明文,以考驗參賽者對於演算法漏洞的分析以及理解能力。

參賽者於競賽期間將拿到一份經過特殊編碼後的文字,如圖9所示。可以從中觀察這串編碼的特性,如編碼長度、各個英文字母的出現次數、是否存在規律的英文字母排列等,接著可以發現這串編碼中有許多英文字母和一個符號,因此可先推測是使用某種加密演算法,而不是使用雜湊函式或Base64編碼產生的數值,接著再搭配ASCII的編碼規則,推測可能使用凱撒(Caesar)或維吉尼亞(Vigenere)等古典加密法。這時再寫個程式運用加密邏輯逆推這串編碼,並將其全部印出如圖10表示,即可得出第三個解密結果為看得懂的文字即揭曉答案Flag。

圖9  經過編碼後的密文。
圖10  逆向回推所有使用Caesar加密的結果。

而另一種常見的作法為暴力破解法,透過程式統計編碼中英文字母重複出現的頻率,並將最常出現的字母假定成由a到z的字母加密而來,接著根據最常出現字母與假定字母間的距離位移其他編碼內的字母,估計寫程式最多僅需重複跑英文字母的總數量26次即可得到解答。

Forensic數位鑑識類型

數位鑑識類型的題目顧名思義就像犯罪現場的鑑識小組一樣,需要推理、蒐證並觀察因果關係,有偵探精神逐步抽絲剝繭才能找到被隱藏起來的Flag。主辦方會將Flag以各種方式隱藏到不同的檔案中,其中包含文字檔、圖檔、音訊檔或網路封包等載體,一般採用Steganography技術進行隱藏,因此題目要求參賽者對於這些檔案格式以及隱寫技術有基本的認識,才能透過檔案處理找出與正常情況相異的線索,並循線追查出Flag。

圖11為針對QR Code進行解謎的題目,正常拿手機掃描並不會出現任何東西,其原因在於此QR Code遭受破壞,導致掃描無法辨識。QR Code是由黑色與白色組成,與一般QR Code最大的不一樣在於「回」字標記的定位點已經被破壞變成空白方格,此時只需要將QR Code列印成紙張,並拿起黑色簽字筆將方框補回黑白間隔比例1:1:3:1:1,即可取得對應的解答。

圖11  損壞的QR Code。

圖12為兩張看似透明色與黑色相間的隨機圖片,單獨兩張完全看不出有任何資訊,即使有部分重疊也依然無法取得任何資訊,然而這時可發現重疊部分比沒重疊部分的顏色顯得更加暗沉,因此可猜測題目使用Visual Secret Sharing隱寫技術,接著再將兩張圖片完全疊合後,即可因為黑色與透明色重疊的對比度差異,看出中間所隱藏的文字如圖13所示。

圖12  視覺上為兩張佈滿雜訊的圖片。
圖13  兩張圖片完全疊合後的結果。

Misc綜合類型

除了上述五種類型的題目外,亦有未明確分類的題型,如流量分析、人肉搜索、大數據統計或AI識別等需要特殊解法才能解開的題目,而這些題目皆會被歸類至Misc類型,屬於覆蓋的技術層面最廣,解題時間最難掌控,且通常仰賴多種特殊工具進行解謎的題型,因此主要考驗參賽者對於基礎資安綜合知識以及相關資安工具的熟悉程度。

解題策略則多半仰賴直覺以及經驗,題目範例如圖14所示,為30 Gigabyte的超大型文字檔,因此可猜測Flag通常藏在檔案的中間行或最後一行,而使用一般Windows內建的編輯器會因為檔案過大而無法開啟。

圖14  開啟30 Gigabyte大型文字檔的最後幾行。

因此,這時候需要使用特殊工具(例如EmEditor編輯器)將大型文字檔開啟倒數31999971個字節,即可發現倒數最後一行存在Flag。

CTF決賽

在經過預賽的篩選後,剩下的參賽者皆對於弱點分析與漏洞攻擊有一定程度的實力,但是僅知道有效的攻城卻不懂得如何守城的人,容易失去打下江山的意義,比如只知道破解卻不明白防禦的駭客,在一開始的預賽中表現得優異於常人,是破解實力滿分的駭客,但卻也容易在決賽最後關頭中疏於守護而失去某些重要的東西,如設備反遭其他駭客破解。

因此,最後關頭決賽的通關條件通常會採用攻防模式或搶灘模式等形式,不僅是針對各參賽團隊實際攻擊能力的切磋,亦是考驗防守能力平衡的掌握。以攻防模式為舉例,主辦方會為每組隊伍準備連網伺服器,並且在現場準備計分板,每間隔五分鐘刷新一次,以即時地顯示比賽當下的戰況。

競賽總時間長度則不固定,可為數小時甚至高達數天,並且攻擊與防守會分為多回合交叉進行,特定時段或白天回合內可一對多針對別人的伺服器攻擊以賺取分數,另一時段或夜晚回合則規定大家偃旗息鼓,修復自身漏洞並分析其他隊伍的攻擊流量以解析相關弱點,以待下一時段或明日回合的開賽時段進行零時差攻擊以賺取大量分數,而被找到漏洞攻擊的參賽隊伍則會持續扣分,直到將漏洞修復為止。

另外,參賽隊伍亦可選擇將伺服器的服務關閉,以減少連續被對手賺取分數的機會,但關閉服務亦會導致持續扣分,且分數會平均分配給該回合結束後,這項服務還存活的隊伍身上,此規則屬於一種為隊伍止住失分的策略考量,避免某一隊伍因持續遭受同一弱點攻擊而不斷送分給對方。再經過多回合甚至多天的賽程後,最終則由分數最高的隊伍獲得冠軍,是耗費體力與專注於考驗攻防技術實力的賽制。

如何進入CTF的世界

在經過對於CTF競賽流程的解說後,便可從中窺探CTF競賽的樣貌,但在加入競賽之前,參賽者是如何進行相關練習來加強實力呢?正所謂工欲善其事,必先利其器,方法不外乎尋找各種競賽之考古題進行練習、加入資安相關課程進行修習、參與資安主題講習以及關心資安時事議題等,充實自己對於資安各方面的知識,便能對於現存的資安技術以及環境有一定程度的理解,進而在競賽中取得名次。

然而,資安領域的技術偏向需要瞭解電腦的底層邏輯、洞悉各種傳輸協定運作原理與分析攻擊手法的逆向操作等專業技術,雖然仍是強調自學且重視實事求是的科學領域,對於從零開始學習的新手顯得不夠友好,容易在充實自我之前,產生對於資安知識學習上的挫折與困惑。

那麼是否存在其他更簡單且可以快速提升資安實力的管道呢?有的,那便是尋找「榜樣」,可是為什麼需要尋找「榜樣」呢?雖然自我學習亦是非常重要且必要的能力,但缺乏目標的努力則容易使自己空轉且蹉跎大量時間,若有位會說話能伴隨且思想睿智的「榜樣」能帶領繼續往前走,這是否正是所謂學習的捷徑?透過向一位或多位資安知識淵博的「榜樣」老師進行學習,並從中汲取智慧以及實務經驗,便能使自身因為目標明確而快速成長,進而由捷徑通向CTF的世界。

<本文作者:社團法人台灣E化資安分析管理協會(ESAM, https://www.esam.io/)/三甲科技股份有限公司,2016年創立,由一群擁有資訊安全背景的工程師共同創立,目前公司由營運總監魏國瑞博士帶領團隊提供資訊安全技術服務,包括弱點掃描、滲透測試、郵件社交、APP檢測、資安健診、ISMS導入、資安顧問等服務。>

 


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!