Pwn2own 競賽介紹
Pwn2Own 是一場富有盛名的資訊安全駭客競賽,主要目的是發現並利用各種軟體和作業系統中的漏洞,指出風險所在。這個活動為網路安全研究人員和道德駭客提供一個平台,透過試圖破解常見軟體和設備的安全性,來展現他們的技術能力。由趨勢科技(Trend Micro)下的組織 Zero Day Initiative(ZDI)主辦,Pwn2Own 也因為在發現和解決重大安全漏洞上的貢獻而受到關注。
在比賽期間,參與者針對各種軟體應用程式、Web瀏覽器、作業系統和其他平台進行攻擊,成功利用漏洞的狀況,通常包括執行任意程式碼或繞過安全機制。而成功攻破系統的參賽者將獲得現金獎勵,也可能免費得到他們攻破的設備。
Pwn2Own 透過獎勵機制,來鼓勵道德駭客發現並採取負責任揭露安全漏洞的方式,對改進網路安全扮演關鍵角色。這個競賽不僅培養安全研究人員之間的競爭精神,還鼓勵軟體開發人員和供應商提升其產品的穩健性。從競賽中所獲得的經驗與累積,亦有助於資訊安全的改善與發展,這也使其成為資訊安全社群必要關注的一個重大活動。
Pwn2Own 初體驗
這次參賽對我們來說更像一次嘗試性的體驗,並由於我們最近的研究方向主要是在物聯網(IoT)領域,我們便從 SOHO Smash-up 標的中,憑直覺挑選了一些目標——Initial Stage 、Final Stage 各一個」。
Initial Stage 的設備都是路由器,很可能因某種原因暴露在 Internet 上;Final Stage 的設備只是一些普通的日常設備,如: IP Camera、NAS 和印表機等。此外,如果你能夠讓你的攻擊從 Inital Stage 打到 Final Stage 還會獲得額外的分數,這也是 SOHO Smash-up(徹底搗毀)這個名稱的由來。
挑選好目標之後,我們便開始評估可利用的攻擊面。這裡值得一提的是,Pwn2Own 除了接受一般我們認為的從外網(WAN)攻破設備本身取得權限外,他們也接受中間人攻擊( Man in the Middle, MitM )的方式,也就是說如果你有辦法讓設備跟你互動,例如:設備常態性請求某個 DNS 域名、設備本身支援某種發現協定使攻擊者可以偽造成 client 與其互動等,又或者基於該設備一般常見的使用設定,達到使用者與設備互動的狀態,也可以嘗試與主辦方討論,確認是否有達到漏洞利用的比賽目標。
在正式比賽之前,官方會先線上舉行抽籤,讓大家知道自己的漏洞利用執行程式(exploit)會在哪天被測試,我們能同時看到別人的測試時間與標的設備,當你注意到有人跟你測試一樣的目標時,心裡就會開始出現一些諸如: 「會不會撞洞?」、「沒有撞的話,他們是用甚麼漏洞打設備的?」 等念頭。
當然必不可少的,參賽者在正式比賽的前幾天,會需要簽署保密協定書(NDA) ,表示遵守漏洞發現原則,以負責任的方式通報設備供應商,待供應商修補漏洞後,參賽者再行公布漏洞細節,以免被惡意攻擊者濫用該漏洞,造成供應商客戶的損失;參賽者也須提前遞交最後的白皮書與漏洞概念驗證(PoC)。
*撞洞:已有他人先行發現特定漏洞,與我方發現的漏洞相同
在正式測試前幾天,會收到 Pwn2Own 官方來信,信中內容會確定各個標的設備之最終測試版本,與正式比賽期間,我們要用到的線上會議連結與注意事項。
到了測試當天,主辦方會請我們確認是否需要檢查設備的相關設定與漏洞利用 (exploit)所需要安裝的函式庫與所使用的語言版本等。主辦方並重申(exploit)測試的規則:共有三次測試機會;每次執行的時間不可以超過十分鐘;全部三次測試機會的總時長須在三十分鐘內。
待一切設定確定就緒,主辦方就會開始計時並執行指定的漏洞利用執行程式 (exploit),雖然我們已於本地環境測試了無數次,但在主辦方執行 exploit 的那一剎那,看著螢幕 logging 一行一行的出現,心裡還是不由自主的緊張了起來,心理期待的那個 root shell 到底會不會出現。
出現惹....!! 成功 get shell 🤩
*root shell:指取得設備或系統的管理者權限。在 Pwn2Own 比賽中,即為達成最終目標。
當漏洞利用 (exploit)成功之後,主辦方會與我們確認這個漏洞的大概成因、,是否與其他參賽隊伍回報的漏洞相同。如果與先前其他參賽隊伍提供的漏洞相同(撞洞),本次所得到的點數就會減少,獎金也會變少。
比賽至此告一段落了,相關結果並可在主辦方的 X(Twitter) 或是官網看到該次測試的結果。
初試啼聲的第一個漏洞
我們在 BC500 使用的函式庫
/lib/libjansson.so.4.7.0
中找到了一個基於堆疊的緩衝區溢位。這是一個解析 JSON 格式的函式庫,被用來解析存在於設定檔中或是網頁請求中的 JSON 資料。這個弱點發生在一個被修改過的 JSON 解析函式中,存在一個
sscanf(key, "%s %s", v1, v2)
,其中 v1
與 v2
都是區域變數存於 stack 上,這個沒採取任何檢查措施的 sscanf
在處理惡意 JSON 資料的時,將會導致緩衝區溢位(buffer overflow)的發生。下面是這個存在弱點函式的虛擬碼:
json_t *parse_object(lex_t *lex, int flags, void *error)
{
// Stack variables
char v1[32];
char v2[12];
// ...
char *key;
json_t *json;
// ...
while ( 1 )
{
// ...
if ( memchr(key, 0, len) )
{
jsonp_free(key);
error_set(error, lex, "NUL byte in object key not supported");
goto error_exit;
}
v2[0] = 0
_isoc99_sscanf(key, "%s %s", v1, v2);
// ...
}
// ...
error_exit:
json_decref(json);
return 0;
}
這個弱點可以透過含有惡意構造 JSON 的網頁請求來達成遠端程式碼執行(Remode Code Execution, RCE) 進而控制裝置本身,根據官方公告該問題已經被修復,我們建議有使用到該設備的用戶,盡快更新韌體。
結語
這是我們第一次參加 Pwn2Own 競賽,一切的流程與規則對我們來說相對陌生,包含如何報名、如何提交我們的報告與漏洞概念驗證(PoC)給主辦方,及與主辦方或廠商溝通是否撞洞等。
儘管如此,從與團隊一起競賽的感覺,到主辦方按下 enter 瞬間的緊張感等,這次的嘗試體驗著實有趣。
主辦方人也很好,當與我們等待測試的同時,跟我們閒聊了一下: 「等等我們會預期看到甚麼花俏(fancy)的 logging 畫面嗎?或是記憶體洩漏(memory leak)之類的輸出呢?」,不起眼的閒聊頓時讓我們的緊張感釋放不少。
期待我們下一次參與Pwn2Own 比賽,我們會準備得更充足,帶來更多的零時差漏洞(0-Day Vulnerability),當然還有花俏(fancy)的 logging 畫面。
我們下次 Pwn2Own 見!
參考
Related Post
產品與服務
2023.10.16
什麼是漏洞研究?
vulnerability research
產品與服務
2023.10.30
什麼是資安漏洞? 資安漏洞有分級嗎?
vulnerability research