在台灣成立已超過十年的民間組織HITCON(台灣駭客年會),可說是培育本土頂尖資安人才的搖籃。今年度(2017)HITCON CTF戰隊參加第25屆全球駭客攻防競賽的總決賽DEF CON CTF(搶旗攻防賽),更是以第二名的優異成績,再次展現台灣資安實力,還首度榮獲總統蔡英文召見嘉勉。
日前HITCON CTF領隊李倫銓在一場CyberRangers@TW資安小聚活動上分享參賽經驗時提到,全球資安駭客群體大致區分為三種類型,包括國家培養的團隊、社群與資安產業,以及黑色產業。DEF CON大會就是在社群與資安產業中,公認為全球最強的駭客競賽殿堂,也是唯一對大眾公開的場域。
近5年來DEF CON CTF是由LegitBS主辦,每年的主題都不一樣。總決賽共有15隊參加,選拔方式是去年參賽的第一名,加上預賽錄取前8名,以及各地的種子賽冠軍選出6隊,加起來總共15隊,參加在拉斯維加斯所舉辦的CTF競賽。
三種DEF CON CTF競賽題型
|
▲ HITCON CTF領隊李倫銓提醒,研究資安技術與惡意入侵本質上是一體兩面,開始投入時必須先掌握分界點,否則將很容易走錯路。 |
就CTF競賽的形式來看,主要為解題型、對打攻防型、山丘之王。所謂山丘之王,李倫銓解釋,必須先攻佔一個地方,若守住超過5分鐘就予以加分,直到被其他隊打敗。
競賽的設計方式也很多元,例如有一年為撰寫加密程式碼,若破解對手加密程式碼,則可取而代之佔領山丘。
解題型主要是透過九宮格,每次解開謎題即可取得分數,最高分者得勝。例如2015年的題目是檔案上傳到指定的虛擬環境中,執行巨集指令後產出特定的旗標(Flag)。李倫銓解題時發現,在Word檔案中撰寫巨集完成後,卻發現Http無法連線,但是nslookup指令可正常查詢DNS服務,表示該網路環境可透過UDP封包傳輸把資料外送出去。
當時的解法是在外部架設DNS服務,把檔案附掛在網址前面的主機名稱再送出查詢網域,外部DNS接收到Request後,再利用DNS通道把檔案外送出去。在僅允許DNS查詢的隔離網路環境中,把撰寫的巨集外送出去,運用的是SSRF(伺服器端請求偽造)攻擊手法。
對打攻防型的競賽則屬於零和賽制,最能顯現出資安的殘酷現實,讓大家理解世界上沒有所謂的「投降輸一半、怕被打就關閉網站」。每隊參賽者皆可得到一台主機,環境會啟用許多服務,可能潛藏漏洞,必須先經過分析後撰寫攻擊程式,以搶奪分數。若直接關閉逃避攻擊,仍舊會被扣分,主要目的是鼓勵攻擊的同時也撰寫修補漏洞程式。因此參賽隊伍必須具備各領域的技能,包括分析漏洞、修補漏洞、撰寫Exploit、熟悉各類IT技術、通訊協定與工具。
競賽攻防戰實作 主題反映真實環境
|
▲Team T5漏洞研究員Sean分享CTF攻防競賽的反制策略之一,在於未遭受攻擊的漏洞先不要修補,可拖延3或4回合的攻防;同時在發動漏洞攻擊時植入後門程式,設計以進階條件觸發執行。 |
近年來DEF CON競賽主題設計相當貼近實務應用環境,曾參加過四屆的李倫銓即提到,2014年CTF競賽是以物聯網、手機安全為主題,不再使用傳統x86處理架構,開始嘗試用運用在手機、嵌入式設備的ARM、MIPS處理器,以無線通訊方式破解,藉此考驗參賽者分析問題的能力。當年台灣HITCON CTF戰隊首次取得第二名成績。
2015年主題是貼近真實世界的資訊戰,當時南韓隊在開賽數小時內便挖到漏洞橫掃全場,以壓倒性的高分取得冠軍,主要原因在於南韓恰巧於前一年,以國家力量支持進行許多漏洞分析工具的研發,累積的成果與經驗才得以在短時間內取得最高分。
較特別的是2016年,是由美國國防高等研究計劃署(DARPA)推出的漏洞自動攻防競賽CGC,也是有史以來由電腦互打的競賽,主辦單位DARPA重新設計DECREE開放原始碼系統,只有7個System Call,相較於現有作業系統環境更為單純,且程式漏洞無法互通。參賽隊伍最後要實作出一台網路推理決策系統(CRS)自動執行漏洞分析、修補漏洞、增設防火牆、製作攻擊封包,可說相當具挑戰性。
今年台灣HITCON CTF戰隊再次取得第二名成績的主題,則是主辦單位花了兩年時間研發打造的全新處理器指令集架構cLEMENCy,特別之處在於將每個Byte(位元組)定義為9個位元(Bit),而非如x86架構以8位元為1位元組的編碼方式。如此一來,就算參賽隊伍事先準備許多可用來輔助分析的工具,也無用武之地,而且大會在競賽前一天才公布考題,所有隊伍皆為徒手應戰,必須熟知處理器架構運作模式,以及作業系統層級核心邏輯,基於cLEMENCy架構重新撰寫輔助攻防的工具。
戰隊精英紮實技術 應戰cLEMENCy架構
DEF CON CTF特別為今年賽事準備的cLEMENCy架構,僅提供內建除錯功能與反組譯功能的模擬器、使用文件。身為HITCON CTF戰隊成員之一的Team T5漏洞研究員Sean說明,x86處理器的暫存器存放二進位(Binary)數字,在32位元環境,一個暫存器為4個位元組,cLEMENCy的暫存器為3個位元組,共27個位元,在記憶體中存放運算指令位址不同。I/O的方式可透過記憶體Mapping,把實際的運作對應到記憶體讀寫即可。
「當我們第一天拿到手冊時先著手通訊開發,處理9位元字串,否則I/O無法運作。方式是用Python撰寫程式,把9位元轉換成位元流(Bitstream),再以8位元為一組方式切開。」Sean說。因此Sean認為,位元組增加並不難,挑戰之處是Middle-Endian記憶體存放規則,會遇到指令編碼順序問題。由於cLEMENCy架構的指令長度會改變,最多有6位元組,因此會發現愈長的指令編碼排序皆不同,造成撰寫底層的組譯器(Assembler)變得相當複雜。
但是整起賽事得分的關鍵,Sean強調,「主要在於我們基於cLEMENCy架構開發的逆向工具,利用模擬器的反組譯功能,撰寫IDA Plugin實作逆向工程,自行定義處理模組,調配運用cLEMENCy內建的132條指令,讓程式可支援整體運行架構。」
面對從未見過的cLEMENCy架構,HITCON CTF戰隊成員充分展現處理器通訊模式與系統核心層的技術能力,贏得亞軍的榮耀可謂實至名歸。