Blackhat USA 2023, DEFCON31 遊記
Table of Contents
本文圖很多,注意流量
部落格搬家後的第一篇文,就用遊記開頭吧。
我以前沒寫過詳細的遊記,想寫的初衷是因為之前看到 kaibro 部落格的 DEFCON30 遊記,總覺得自己也該來多做一些記錄類型的事情,都沒留下當時的心路歷程好像蠻虧的。
這次有幸成為 DEFCON CTF 台灣代表隊 TWN48 的 一期生 一員,跟大家一起去 Las Vegas 打決賽,此文記錄了我的旅行/比賽見聞。
搭乘飛機從台灣出發到 Las Vegas 途中經過 San Francisco 轉機。
TWN48 是由 Balsn, XxTSJxX 和幾個 HITCON 年代的成員組成的台灣資安偶像團體(疑?)。
這一次除了比賽跟四處走走,還多了個支線任務:參加 Blackhat USA。
公司內的神人們投稿上 Blackhat USA 可以贈票給學生,與另一個同事就一起申請贈票,兩人都取得了好貴好貴的入場票(正常購票流程的話要 ~2000 USD/票),非常感謝公司神人們的熱情贈票🥰。
這次行程五天左右,其中兩天為自由活動去了 Blackhat 後就沒機會到處亂跑了,不然我也想去看看大峽谷…
希望明年順利打進決賽就可以圓自己的大峽谷夢,只能看著隊友拍的照片還是少了點臨場感,而且隊友也說照片拍不出大峽谷的空氣感。
Timeline⌗
8/8 出國⌗
- (UTC+8) 8/8 09:00 登機前往 San Francisco
- (UTC-7) 8/8 08:00 抵達 San Francisco
- (UTC-7) 8/8 10:00 登機前往 Las Vegas
- (UTC-7) 8/8 12:40 落地 Las Vegas
- (UTC-7) 8/8 14:30 入住 Planet Hollywood
- (UTC-7) 8/8 16:00 靶場打槍
8/9 Blackhat USA Day1⌗
- (UTC-7) 8/9 09:00 Blackhat Day1
8/10 Blackhat USA Day2⌗
- (UTC-7) 8/10 09:00 Blackhat Day2
- (UTC-7) 8/10 20:30 Day0 賽前會議
8/11 DEFCON CTF Final Day1⌗
- 打比賽 (當日排名 5th)
8/12 DEFCON CTF Final Day2⌗
- 打比賽 (當日排名 2nd)
8/13 DEFCON CTF Final Day3⌗
- 打比賽 (最終排名 3rd)
8/14 回國⌗
- (UTC-7) 8/14 8:30 出發前往機場
- (UTC-7) 8/14 10:40 登機前往 San Francisco
飛機⌗
第一次搭乘 United 的飛機,沒什麼大感想。
搭機的時候右邊坐著一個妹子。她的袋子上有一個原神角色的吊飾,一直有一個衝動想對著對方喊原神啟動。
至於機上餐點的話,就是普通的飛機餐,我覺得麵包有點難吃…
冷藏麵塊的感覺,口感怪怪的。還有很難拆開的鳳梨酥,為了拆來吃我搞到全身都是鳳梨酥屑屑。
落地前的照片:
剛抵達 Vegas 時的照片:
靶場趣聞⌗
我在高中應該要能夠參加實彈射擊體驗的,只不過當時因為疫情,所以我的體驗跟畢旅都被取消了。 免除兵役跟槍枝體驗都飛了… 所以我一直很想要去國外靶場體驗射擊的感覺。
雖然去年也有晉級 DEFCON 決賽,不過沒有去靶場玩,而是去了 OmegaMart 所以靶場夢就繼續延後了。 不過今年終於順利玩到槍了!唯一的缺點就是好貴,每發子彈都是錢。
跟隊友們一起出去打槍,同團的有@k1tten、@LJP-TW、@hexrabbit、@asef18766 與其他來觀摩開槍的隊友們(就不一一標了)。 前去的靶場是 battlefield,在靶場外面停著一堆裝甲車,似乎是可以租來玩的,但我沒那麼多錢可以花。
一進去就可以看到一堆槍砲彈藥擺在中間區域。
有蠻多套餐可以選,裡面通常會有一兩把步槍跟手槍可以玩。 我選的是 GI Jane 套餐,大家都說我是不是有 CS 情還,都拿一些 CS 會看到的槍。選的套餐裡頭有 M4, MP5 跟某一把手槍,我還額外加一把貝瑞塔。
靶場內的照片,可以看到推車桌上的槍跟子彈。
阿貓跟兔子都是同一個套餐,裡面最顯眼的應該是機槍 M249(?)。 不過阿貓多選了一發 .50 巴雷特,開槍的瞬間的聲響跟衝擊波真的很恐怖…
這樣體驗打下來也不便宜,荷包大破… 之後要更努力打工賺多點錢,以後才能多開幾發 XD
我的靶紙,飛得亂七八糟是因為全自動 Q_Q 壓不住…
Blackhat USA⌗
議程⌗
簡單敘述一下兩天下來聽到的議程:
- Core escalation
- 透過攻擊 SOC 中其他的部件來協助自己提權到 EL3
- Lost Control: Page Oriented Programming
- 通過 Page Remapping 來破壞 Kernel CFI 的保護,通過 Remapping POP Gadgets 可以製造任意 Control-flow
- DNS cache Posioning
- 打 Conditional DNS (MaginotDNS),因為以往 Harden 的方向多為 Recursive Query,在 cDNS Forwarder mode 可能會被遺忘
- 賭場洗牌機 (Hardware Hacking)
- 介紹 DeckMate 1 跟 2 的架構、功能,跟分析方式,最後透過外部設備加入洗牌機就可以任意讀取牌堆狀態。
還有介紹一些賭場會用到的 Protocol 跟 Code Verification 的機制。感覺就很適合以後出在 AIS3 EOF 之類的 XDD
Live-demo 很酷,真的搬了一個小賭桌上台,然後現場玩 Poker 並立即預測接下來的牌跟贏家給大家看,觀賞性極佳
- 介紹 DeckMate 1 跟 2 的架構、功能,跟分析方式,最後透過外部設備加入洗牌機就可以任意讀取牌堆狀態。
- Keynote
- 燈光很炫炮,開場用很重的 bass 炸大家。
創辦人上台第一句話: While you are in asleep, we smack the bass on your face 滿好笑的
- 燈光很炫炮,開場用很重的 bass 炸大家。
- Oven Repair (Hardware Hacking Way)
講者的三星烤箱壞掉了,而且發現網路上同型號都有一樣的溫度問題,講者就開始對硬體逆向。
從 Bootloader Dump 到 Firmware Dump,因為 Bootloader 有保護不讓 Firmware 可直接被讀出,所以要先繞過保護才能 Dump firmware。保護有兩個,一個是 Password,講者通過 Power Analysis 找到密碼。
另一個保護是 Fuze bit,講者通過 Fault Injection 繞過某些 instruction 完成繞過。
結果因為保護會導致維修廠家也無法讀出 Firmware,所以後續出廠的產品都沒加上這保護,做白工…然後講者說做這件事情燒很多錢,弄壞三塊板子,一塊是因為型號錯誤,另外兩塊是因為 Fault Injection 的時候時間沒掌握好直接把 EEPROM 洗白了 XDD
作為這一堆事情後,講者開始看為什麼加熱有問題,結果並不是任何的硬體錯誤,而是控制邏輯上有問題。
溫度保持並不是透過溫度當作參數,而是第一次加熱到指定溫度後就進入一個 Time Loop 循環開關,只要烤箱曾經失溫往後只會保持在失溫後的溫度。以後不要買三星烤箱。
講者用 Excel 當作 Disassembler
- 駭入軌道衛星
- 介紹了衛星上面常用的通訊機制、安全性規範等。
經過講者調查發現那些安全的通訊標準實作都太貴,只有很貴的企業級衛星可以做到,所以教育單位的衛星都破破的很好打。
講者還自嘲說自己是少數可以用超級破洞投稿上 Blackhat 的。
- 介紹了衛星上面常用的通訊機制、安全性規範等。
經過講者調查發現那些安全的通訊標準實作都太貴,只有很貴的企業級衛星可以做到,所以教育單位的衛星都破破的很好打。
- New JWT Token Attack Surface
- 因為 JWT 有很多功能,可以在 algo 欄位插入各種加解密算法,很多算是 Misconfiguration 的打法。
逛攤位⌗
其實攤位就是到處拿小禮物,跟到處拍有趣的設施。不得不說 Blackhat 的攤位佈置都很浮誇,有的甚至還有二樓可以上去。
Hackthebox,可惜沒有拿到衣服,只有拿到小小的胸針。
Elastic 的單位上空有一個超大圓盤在旋轉。
他們還有發冰品給大家吃。
Cloudflare 也有攤位。
我以為會送衣服還是小擺飾,想不到送的是蠻可愛的襪子。
通常 Conference 都會有一塊塗鴉牆之類的,在 Blackhat 則是有樂高池,可以自己拼東西放在牆上。 我就用 LEGO 拼了奧義的 LOGO,隔壁是寬寬拼的 HITCON。
Blackhat 的 Network Operation Center (NOC) 也很酷,雖然只能在外面拍拍照。
大會食物⌗
大會食物我覺得不錯吃,他會放一排讓會眾自己去拿。大概就是美國大鍋飯(?)
這些照片都是第二天的照片,因為第一天忘記拍大會食物了…
第一天的午餐是起司通心粉,很沒營養但超好吃,好爽喔…
第二天的早餐,有麵包,飲料跟薯片是我自己在飯店買的。
第二天午餐很亞洲,不錯吃。
午餐的甜點,這個不是芒果奶酪,底下是某種果子打出來的糊。超好吃 OuOb!!
Blackhat 參加心得⌗
純硬技術的議程跟其他論壇相比我認為不算多,一部分偏商業。 其中我最有印象的議程是烤箱、洗牌機跟衛星攻擊,都是很有趣的題材,但參與的人除了衛星以外都不算多(沒坐滿)。
舞台設備很浮誇,周圍設備也很不錯,然後他們有自己的手機 APP 上面可以提前選好自己想聽的議程,翻各種資訊很方便。 也許是因為商業場會有很多洽談機會,那個 APP 上面甚至可以跟別人 Booking 時間開個會,滿酷的。
參加下來的體驗是不錯的,有學到不少新東西也拿了很多讚禮物,大會食物蠻好吃的。 路邊也會放飲料台,還有下午茶點可以用,走累了也有地方可以坐下來好好喝杯茶休息。
如果問我以後會不會自費參加,答案是不會,票價太貴了… 不過體驗真的不錯!
希望以後自己可以產出有價值與份量的稿件去投稿,這樣就不用付票錢也可以享受了。
再次感謝奧義給我機會去這種場域開開眼界!
DEFCON CTF Final⌗
Day0⌗
為了方便管理隊伍戰力,這次隊上採取了 PM 制度,由 PM 進行題目管理。 比賽前夜主要在跟大家介紹一些競賽工具的小改動,跟網路架構等賽前須知事項。
然後因為貝殼組織這次的 Patch 是使用 Docker Image 然後針對 Layer size 做限制。
所以前夜我和 @LJP-TW、@hexrabbit 就開始著手研究一些限制跟整理文件。
並且嘗試開發了動態 Patch 系統,不過最後沒有用到,但概念可以留到下次比賽使用。
Day1⌗
第一天主要任務應該是把 Patch 做好、寫好 Backdoor 相關的東西,但一直被其他賽中事項打斷,最後都在解支線任務。
剛開始情況穩定後我打開了 basic 這個題目,他是一個 basic interpreter(?),總之看到幾個很裸的 gets()
回報給隊友後跟 @terrynini 開始著手寫 Patch,之後我就去看 EVM 了,後面我沒有專注在這題上。
有趣的小插曲: @terrynini 同時剛好是今年 DEFCON 講者,所以他第一天下午打一打就跑去演講了,然後 Patch 任務只能一路延遲到他回比賽房間。
EVM 是 KoH 形式的題目,乍看之下會覺得是 Ethereum VM 結果只是 Opcode 長得很像,實際上差遠了。
題目有給一個 Interpreter 跟 Game File,Game File 裡面會寫出有什麼額外的 Opcode 可以用,也會定義每個 Opcode 的 Gas Fee (可以想成操作的花費)。 基本上每隊伍都要給出一份 EVM Bytecode 送進題目中,這份 Bytecode 需要跟目標執行黨互動,目標是透過 EVM Bytecode 達成 RCE。
完成 RCE 並且 Gas 花費越少的名次就越高。
我和 @toxicpie 一起看懂 EVM 相關的邏輯,並設計與實作了一個 EVM Assembler Tool 方便隊友往後操作 EVM。
之後就開始頻繁的 Debug EVM Assembler,結果發現一些不少錯誤,結果修好之後手邊的 Exploit 還是不會動。最後只能將錯誤怪罪於 EVM IO 上了… 吃毒 EVM 🤬
這個工具到最後都還有派上用場,所以一開始就先做好分析並幫隊友寫好工具是一項良好的投資。
晚上的話跟 @terrynini 一起把 Patch 弄好,看著他把各種 C 跟 C++ 用 extern "c"
當膠水粘在一起、到處 Suppress Compiler Warning。我很確定的一件事情,這個 Code base 從此開始不乾淨了。
還有使用 217 年代的產物,還要先接受 h() = length
, hh() = to hex
這種神秘 naming。
不過到底是誰寫的不好有待商榷,根據 L4ys 所言:
最後睡前跟 @hexrabbit 一起 Debug 他的 EVM Exploit,一開始是 IO 不穩定,後面我發現 Payload Size 撞到了,修好了之後大家就洗洗睡等隔天的比賽。
Day2⌗
第二天一大早陪著隊友一起監控 EVM 題目的狀況,狀況穩定跟大致戰略討論後就前往新題目了。
其中有兩個題目 dron-ap
跟 torque
。
dron-ap
是一個 802.11 的 Kernel module,整個東西應該就是抓 Interface 上的 802.11 封包上做事情。
隊友努力嘗試架環境但一直都架不起來,我則是直接靜態逆向 dron-ap
開始標記各種 Object 的長相。
不過事後證實標記的東西在 Exploit 上沒有直接的幫助,有點白出力了,需要納入檢討方向。
因為對 802.11 完全不熟,花很多時間在看整套 kernel module 需要的東西跟 IO 上的操作。
我在隔壁靜態逆向,nini 在旁邊黑箱手戳封包,最後都沒有結果就一起棄坑去玩 torque
了。
torque
是一個遊戲引擎,包含豐富的 Script 生態,Engine 內部就是 Compiler 跟一堆東西。 然後這個 Engine 版本很低落,應該是1.2
。裡面很多洞,但有一些沒辦法直接利用的洞。
最後被拿來做 Exploit 的洞是 LFI,我原先以為這是不可能的,因為我在 Engine 裡面看到 Server/Client 握手的時候就會交換檔案資訊。
我一開始認為這東西傳遞的時候總不會是傳檔案路徑,應該要是檔案的某種 Identifier 我就沒有繼續往下追 Code。
逆向途中我大致看了 Protocol 沿路標記了一些 struct,最後體力不支睡覺去了。
在我睡覺途中,nini 在 gdb 裡面實驗直接把 Client 要求的檔案路徑改掉就發現其實還是可以 LFI。 我的粗心錯過了一個很好用的洞,讓大家多花了一堆時間,下次猜測的時候應該要更小心警慎,尤其是這種可以直接操作的漏洞,更要查驗真偽。
Day3⌗
一早起來看到 @terrynini 把 torque 的 LFI Exploit 寫好,後面我接手把 Exploit 跟 Attack Manager 串起來,這個串起來的過程也是一波三折。
因為 Exploit 需要用到 gdb 現場利用 torque engine 做事情,所以環境異常的複雜,當下也沒時間直接去拆 Protocol 並寫出 Wrapper。
第一版的串接會發現一些很嚴重的問題,像是 Exploit 無法平行化,Attack Manager 環境無法跑 torque engine…
所以只能放棄使用 Attack Manager 改寫成用人工跑 Exploit 串自動化 Submit Flag。走到這裡的時候就已經損失一些 round 的分數了。
最後 Exploit 可以成功打,但大家漸漸把 Patch 上到題目,最後只剩下 4 個隊伍可以打,收益變得不是很樂觀,但有總比沒有好。
以後應該要投資更多時間在把 Exploit 脫離原先的 Binary,不然 Exploit 環境會變得太複雜,然後也會因為 Binary 可能會有奇怪的前置條件導致無法正常平行化攻擊。
比賽心得⌗
感謝各個單位幫整個隊伍做好後勤,讓大家可以衣食無憂的好好打比賽。 也感謝跟我一起合作的隊友們,這次比賽我玩得很開心,希望我有幫上大家的忙。
今年隊伍上的題目營運制度蠻良好的,跟去年比起來在協作上感覺更清楚了一些。 溝通良好跟人員分配也是重要的一環。
雖然在競賽中沒有找不到事情做開始掛機的狀況,但事後會不太清楚自己做的事情到底對隊伍有沒有直接的貢獻。
更多時間在處理後線任務,不是在第一線打 Exploit 而是寫 Exploit Development 的工具跟拆各種東西的邏輯。
不太知道隊友們會希望我可以提供什麼方面的協助。
這次比賽我也發現自己有不少,先用猜測當底然後省略某些東西的壞習慣,因為這樣錯失了機會確實不是很好。
也有一些為了圖方便最後弄的更複雜的情況發生。
以後會多注意與改進這方面的缺點,希望明年的比賽可以幫上更多事情。
回程⌗
回程飛機也是 United,跟出發的時候不一樣,我左右兩邊沒有陌生人都是隊友,從位置上左到右分別是 @terrynini、我、 @YingMuo 多了一番親切感。
吃飯環節出了點問題,推餐車有兩個空服員,這邊稱呼 A 跟 B 好了。
空服員 A 問完 YingMuo 要喝啥之後,就把我跟 nini 忘記了,同時間空服員 B 也剛好忘記了隔壁排的某一個隊友。
空服員就這樣推著餐車跑走後,留下沒有東西喝的三人…只能呆呆的看著彼此。
之後按了服務燈還叫不到人,我嚴重懷疑我們被 slient mode 了 😡
最後的最後 nini 攔住了路過的空服員順利幫大家找到喝的,不然快要被鬆餅甜死…
United 評價--;
結語⌗
恭喜你看完這篇文章了,能撐到這真是了不起。
DEFCON 之旅結束了,
跟隊友聊天講垃圾話很開心、
去靶場開槍很開心、
比賽第三名也很開心。
總之這次旅行的結語就是很開心吧。
很少寫這麼長篇的東西,這一篇前前後後花了不少時間,確實有整理心路歷程的感覺。 明年的這個時間拿起來回憶的時候不知道會是什麼樣的心情。
如果想看多看看往後的文章,可以多關注我的部落格 Starry Skies。 下次見,掰掰。