在這篇文章中,對於 CTF (Capture the Flag) 這個網路安全競賽的內容我不會在這邊詳述。
我主要要來聊聊如果要來打 CTF 時大概要怎麼做,提供一個簡單的 SOP 策略。
當然啦,我不是專業 CTF 的玩家,也不是現役的資深資安工程師。
但是作為一個業餘的資安嗜好者,還是希望提出我的論點跟大家討論討論!
雖這篇文章不聊 CTF 的定義,
不過我可以提供 ChatGPT 版本的說明~
以上來自於 ChatGPT 的說明
資料來源:飛飛 - 資安這條路 https://feifei.tw/attck-intro/
先標註資料來源,因為我覺得他講的夠好了!
如果對於這個標題有興趣的人,可以參閱上面的資料來源!
但是為什麼我要先來講 ATT&CK® 呢?
因為我覺得 CTF 其實就是資安攻擊、防禦與鑑識的一種縮影,理所當然的也很適合使用資安攻擊時的一些步驟與策略。
當然,CTF 的題目是死的,而真實世界的狀況是變動的,
要取其精華才能有一個好的 SOP。
其實,ATT&CK® 並不適合作為 SOP,因為他並不強調「線性」的階段任務,而是認為從哪邊開始都可以。
不過我覺得,本來在解題策略上面,甚至是攻擊策略上面,本來就不是單純「線性」的階段關係,而是不斷的輪迴測試。
感覺有點像是在軟體工程上講的「瀑布式開發 Waterfall」和「敏捷開發 Agile」之間的關係。
不過不管哪一種,還是會定義各種「階段」上面要做的事情。
可以看到以下圖片內容:
在這張圖中,可以看到其實 ATT&CK® 反而沒有所謂階段的,而是 ATT&CK® for Enterprise 。
但是可以注意到另一個叫做 「網路攻擊狙殺鏈 Cyber Kill Chain」是有階段性的內容任務。
為了方便起見,我們就用 Cyber Kill Chain 的階段來說明。
畢竟 ATT&CK® 的技巧階段實在有點多…
我們可以看到在資料來源提供的圖片裡面,他提到的幾個基本階段:
我們對照到 CTF 的內涵,可以有以下比較:
Cyber Kill Chain | CTF Game | |
---|---|---|
偵查階段 | 收集目標對象的資料。 | 審題、確認搶旗目標、基本掃描目標測試各種目標可能攻擊點。 |
武裝階段 | 使用現成的開源工具或是自行開發專屬的惡意程式。 | 將蒐集到的階段轉為工具的選擇或是編寫程式。 |
傳遞階段 | 攻擊者將攻擊武器送入目標的系統內。 | *看題目是否有這個需求 |
弱點攻擊階段 | 確保遞送的惡意軟體,利用目標對象的系統漏洞。 | 針對之前蒐集到的情報、弱點開始進行嘗試攻擊,並找到 Flag。 |
安裝階段 | 攻擊者確保自身可以長期控制目標的系統內,將惡意軟體安裝於目標系統中。 | |
執行與控制階段 | 攻擊者潛伏在目標的系統內,收集資料,探索環境。 | |
行動階段 | 根據攻擊者的最終目標,採取行動,如破壞系統、竊取機密資料、勒索目標對象。 | 提交 Flag。 |
其實在網路攻擊中,還有一個「維持階段」,畢竟若是目標系統是非常有價值的,你會想要一來再來,但是不想從頭開始攻擊,這時候就要「維持權限」,讓你下次還可以進入目標系統行動。
但是, CTF 的階段當然不用這麼多,你可以注意到上方表格裡面,並不是每一格都有填上。
所以我們其實重點就在:
接下來我們用 Web Exploitation 來說明各階段的應用。
對於一個網頁來說,怎麼樣的地方是可以被攻擊的?
最具體的當然就是「可以被使用者拿來輸入的地方」。
第二個就是「交互的 API Request & Response」。
所以我們在偵查階段就是測試所有可以被使用者拿來輸入的地方是否有存在漏洞。
通常就是在 html 寫有 <input />
或是 <textarea></textarea>
的地方。
所以你可以用開啟原始碼的方式,或是用 dev-tools 來進行偵查。
如果可能有多個頁面,你也可以用爬蟲的方式來進行偵查標注。
這邊要特別標註出來,是我們初階攻擊者可能會遺忘的地方,
那就是 「網址列」 ,這也是一個可以被使用者輸入的地方,所以也有可能是攻擊點喔!
然後就是稍微嘗試一下漏洞存在的可能性,例如輸入一些資料送出後,看看會發生什麼事情。
這時候我們會去看一下 dev-tools 給的 network 情報,看看在網路傳輸過程中產生了什麼樣的改變。
當然,如果網路傳輸過程看不出什麼端倪,我們可以試著找找看能不能引發「錯誤」訊息。
當然,這個錯誤不能是 404 啦。
401、403、500 等都是有可能存在的攻擊點。
當然你會說 401、403 不能被攻擊,
但是你卻從這次偵查中知道他們有可能是要一些認證手段,你就可以去關注那些「身份認證」相關的漏洞了。
確認了一些攻擊點後,你就可以進入到下一個階段。
這個階段當然就是來開始選擇攻擊的武器。
雖然有些攻擊在偵查階段就結束了。
但是若是還沒,那麼我們就要從剛剛蒐集到的情報中來進行武裝。
這些武裝的內容小至找一找線上工具、開源工具,大到自己客製化一個工具。
當然,通常要客製化的內容在 CTF 中真的就比較小型(應該是不至於到 1000 行以上的程式碼啦!)
但是能夠客製化就代表你不用東湊西湊,就可以建構出合理好用針對性強的攻擊道具。
所以程式設計其實在資安領域內也是一種基本功。
這階段就真的比較少見…
說不定有,但是我不知道哈哈。
到了弱點攻擊階段,就是真正攻擊的開始。
就按照之前蒐集到的情報、弱點,用選擇好的武器,就可以發動攻擊了。
值得注意的是,若是在這個階段已經找到的情報、弱點都沒辦法打穿(pass through),
那通常我們就會退回偵查階段,重新找弱點;
或是你也可以退回武裝階段,重新找一找有沒有更適合的武器。
那如果成功打穿,那麼就恭喜你會拿到 flag。
如小標,不說明…
這已經很白話了啦!
通常,一個 flag 他的型態大概長這樣:
[舉辦的CTF競賽名稱]{[flag 字串]}
例如 PicoCTF 舉辦的競賽,他的 flag 大多長成:
picoCTF{ajd8q20jiajoqwj082jf}
有沒有例外?當然可能有。
但是應該很少啦!
不然參賽者怎麼會知道 flag 在哪…
光要辨別 flag 可能就用暴力破解還比較快了..
根據 ATT&CK® 的說明內涵,其實可以根據你的狀況去調整階段。
我也是這麼想。
例如你明明在偵查階段就發現了一個輸入一行指令就可以得到 flag 的漏洞,你難道還要經過 Weaponization Stage 嗎?
當然不用啊,直接上,到 Exploitation Stage 然後快樂的提交 Flag,這樣不是很快樂?
所以雖然上面介紹了這麼多階段:
但是如果你發現可以直接用哪一個階段來解決問題,不用一步步走,直接衝就可以了!
當然啦,如果發現被騙了,怎麼打都打不穿,也要設定一個合理的停損點,
回到偵查階段慢慢找情報囉。
畢竟現代戰爭,打的是情報戰嘛!