上一篇裡面寫到了從台灣到美國的過程,以及對拉斯維加斯的一些心得,這篇就來寫一下 DEF CON 本身以及 CTF 的一些心得。
讓我們先來看一下 DEF CON 的會場長什麼樣子:
這是第一天去的時候在門口拍的,就是個很大的會議廳,這只是入口而已,真的議程在其他地方,然後這是今年的 badge:
好像是個可以拿來錄音然後做取樣的小玩具,後面要放三顆電池才會動,但因為我聽隊友說如果被金屬碰到一不小心可能會短路然後燒掉(推特上有人講的),所以其實我從頭到尾都沒打開過,到現在也是。
接著既然來講一下 DEF CON,這邊除了有幾間是給議程以外,其他很多間都是給不同的「Villege」,可以想成是很多不同的主題,例如說 Car Hacking Villege:
就是在探討各種跟汽車相關的攻擊手法,所以你可以看到超多 Villege,例如說有 Physical Hacking 的,甚至還有衛星相關的之類的。而除了我這次參加的 DEF CON CTF 以外,現場還有各種其他的 CTF,可以說是 CTF 遍地開花。
例如說有一個好像就是社交工程的 CTF,然後現場直接放幾台電話,應該是要你直接現場社交工程XD
或是有一個聽我隊友說應該是現場弄一個會偷資料的 WiFi 之類的,會把偷來的東西打碼以後直接投影出來:
總之呢,現場可以看到各式各樣的主題,還滿有趣的。不過因為這次主要是來參賽,所以也沒有聽議程,然後會場也只是隨意逛逛看看有什麼而已。
接著來寫一下這次 CTF 的心得,這次我是跟著 Water Paddler 這個隊伍參賽,而不是台灣聯隊(Balsn.217@TSJ.tw),我們這支隊伍基本上是個國際隊伍,像這次去 on-site 的選手就來自世界各國,跟其他 CTF 隊伍相比,比較像是那種網路上的「公會」那種概念,成員之間彼此都沒見過面,所以這次同時也是網友見面會。。
實體的場地大概長這樣:
左邊很亮那個燈那裡是主辦單位坐的地方。
遠方那些一團一團的人,都圍著一個圓桌,最多坐八個人,一張圓桌就是一個隊伍。所以你可以看到隊伍之間距離是滿近的,大聲討論的話可能會被聽到(我以為會遠一點)
然後現場會放很吵的音樂,所以大部分選手都有戴耳機來隔絕音樂。另外還有一點很傻眼,就是開賽以後他們把大門打開,開始放人進來參觀…這個超乎我預料以外,我本來以為是個封閉場所,沒想到開放到不行,變成跟動物園一樣,會有很多會眾走進來參觀。
至於右前方那個桌子則是這次的新賽制:LiveCTF,這個是一對一的電競比賽,參賽選手的畫面會同步到 YouTube 上面,也會有主播跟賽評來講解現在選手的狀況。
參賽的隊伍總共 16 隊,LiveCTF 每次是一對一,然後是單淘汰賽,不同名次有不同分數:
- 第一名:4011 分
- 第二名:2674 分
- 3~4 名:1337 分
- 5~8 名:668 分
- 9~16 名:0 分
而除了 LiveCTF 以外的主賽制的分數計算是每 5 分鐘一輪,在這一輪之內你要做到幾件事情:
- 保證自己服務不會壞掉(SLA),壞掉 -30 分
- 修補漏洞,保護自己的服務不被打下來(Defense)
- 打別的隊伍,拿到他們的 flag(Attack)
做到會加分,沒做到會扣分。
服務被打下來,flag 被拿到的話會 -15 分,這 15 分會分配給其他攻擊成功的隊伍,所以一道題目理論上一輪可以拿的最高分數應該是 15*15 = 225 分。
這邊可以看到 LiveCTF 的分數有多誇張,第一名的 4000 分就是你要在主賽事當中打全場打 18 輪,也就是 90 分鐘,在中間完全沒有人可以攻擊以及防禦,才能拿到 4000 分。
第一天剛開賽就放出兩題,其中一題是 web,所以我們這隊的幾個人就開始看 web,是個 Java 的服務,然後光是看懂資料到底怎麼傳的就花了不少時間。
然後主辦單位有提供延遲 20 分鐘的網路封包內容,在某個時刻我們從網路封包裡面發現其他隊伍的攻擊流量,因為是明文的所以可以直接抄來用,「抄別人作業」其實在比賽中也滿重要的,你越早抄到,就可以拿越多分。
而攻擊的隊伍也要想辦法不讓別人抄作業,不然辛苦努力得來的分數都被整碗端去了QQ
第一天裡面官方的 SLA check 會出一些怪問題,例如說服務明明就沒動它,但是卻說 SLA failed 然後被扣分之類的,總之就是小問題不斷。不過 web 那一題雖然我們到最後還是沒有很清楚到底怎麼攻擊,但就是先把感覺會有問題的地方 patch 掉(要 patch jar 好麻煩…),最後應該是防住了大部分的攻擊。
總之呢,第一天的比賽是從 11 點到 7 點(表定 10 點到 6 點,但延遲一個小時開始),結束之後主辦單位說中間那些 SLA fail 的東西他們會全部 review 一遍,然後把分數更正。
第一天結束後,我們隊伍暫居第三名,然後今天的題目第二天都不會出現,所以沒有回家作業。
Day2
第二天的計分板是主辦單位修過的版本,其中有一個隊伍因為昨天用 fork bomb 所以被扣分,不過儘管如此,名次卻比第一天高了一位XD
早上有跟台灣聯隊稍微聊一下,也算是個網友見面會,見到了以前有看過部落格文章的 KaiBro 跟 bookgin!
第二天沒有 web 題,不過我在刷後台的時候看到了一個應該是自動排程釋出的服務:「web4ransom」,就想說下午應該會出這個(結果都沒有出)。
而第二天也出現了另一種類型的題目:King of the Hill,這次的題目是這樣的,server 那邊會執行 ./vm offset file1 file2
然後每個隊伍都可以上傳檔案,每一輪的 offset 會不同,看誰的檔案會贏。
至於贏的條件是什麼,就要 reverse vm binary 才會知道了。
計分板長得像這樣:
一樣是每五分鐘一輪。
剛開始的時候大家都是 TIE,接著過一陣子我們發現 Balsn 傳了一個檔案之後直接贏全場,就趕快抄作業拿來用,也跟著贏,接著就有更多隊伍發現,於是沒抄的就變成弱勢了,後來到中場變成大家都抄一樣的檔案,又變回平手XDD
然後主辦單位的 infra 又開始不穩,有幾輪延遲,然後有幾輪結果是 N/A,完全不知道自己到底是贏還輸。
到後半段的時候則是有隊伍開始慢慢把 vm 逆完了,知道規則是什麼,可以寫出在主場必贏的檔案。
然後今天的 LiveCTF 我們輸掉了,所以在這部分沒有分數可以拿。
而這天的其他題目在賽後有說明天會繼續用,這就是寫作業的信號了,今天賽後有很多選手基本上是熬夜沒睡覺在研究那幾題,打算隔天早上大殺四方。
而我們打 web 的有好理由相信今天看到的 web4random 既然昨天沒出,明天應該會出,所以就準備明天再打一題 web。
喔對了,今天結束後我們隊伍依然暫居第三。
Day3
最後一天的比賽只從 10 點比到 2 點,半天而已,總共 4 個小時。
經過一個晚上的準備,有一兩題我們已經準備好 exploit,準備開始拿分數了,一開賽的時候滿順利的,有一輪甚至直接拿到 +300 分,殊不知接下來就悲劇了。
還記得我說過一輪是 5 分鐘嗎?接下來每一輪開始慢慢變長,主辦單位說是因為碰到一些問題在修,所以會延長,而其中某一輪甚至維持了快一個小時…
這就代表原本有 12 輪可以拿分,變成只有 1 輪,對於可以拿分的隊伍來說其實是少了很多分數的。
而這中間主辦單位也有人跑來說我們其中有一題的 patch 雖然有過 SLA,但是不行(???),原因是後台顯示的 SLA 其實只有一半,另外一半是線下做的,要兩個部分都過關才算數。
然後可能是因為今天從開賽就很混亂,所以主辦單位表示今天不會有任何新的題目,因此昨天盼望的那題 web 也沒了。
round delay 的狀況一直沒有解決,scoreboard 遲遲沒有更新,我們選手自己有個非官方的 Discord 群組,我看到裡面已經有人開始揪下棋跟打 Tetris,因為我那時也沒什麼事情做,所以就進去一起玩(拿了幾次第一名,以前玩Facebook tetris battle 的肌肉記憶還存在一部分)。
結果,玩著玩著到了一點的時候,我隊友突然說比賽結束了!因為主辦單位一直沒有辦法解決 infra 的問題,所以乾脆提早一個小時結束。
於是就在我還在打 Tetris 的時候,我的第一次 final 就這樣在混亂中結束了,而比賽也停在了 tick 196,也出現了一堆選手做的迷因:
其實滿傻眼的,而且很多選手應該覺得滿幹的,昨天熬夜做的作業就這樣化為塵土,賽後可以看到一堆選手在推特上面開噴,人之常情。
LiveCTF 則是繼續比總決賽,拿了冠軍的隊伍加分之後變成了第三名,我們掉到第四名去,為這次的 final 畫下了句點。
聽說每年的 DEF CON CTF 都會出一些小問題,但今年似乎是出最多問題或是最嚴重的,第三天真的超級混亂。
說實在的覺得滿可惜,雖然前兩天問題不斷但也都覺得還 OK,第三天就是真的大爆炸沒辦法救了。只能期待明年 infra 會穩一點,然後繼續努力繼續加油。
第三篇傳送門:https://hulitw.medium.com/def-con-30-ctf-final-3-e19eeeed8e44