攻防最前線:一個檔案變出六種格式,MD5值完全相同
今天你可能已被“fake news”欺騙無數次,
所以我們帶來了一條真實的愚人新聞。
文 | 光譜
你可能聽說過格式工廠,是一個給檔案轉格式的工具。
但今天,矽星人見識了一個十分厲害的東西:不但一個檔案可以有六種格式,而且變出來的新檔案 MD5 雜湊值還和原始檔一樣……
需要宣告,不是故意要發在四月一日欺騙大家的感情:下面提到的都是真的,並非愚人節玩笑。
我們來一步一步看。
黑客圈有本期刊叫做 PoC||GTFO,全名是 The International Journal of Proof of Concept or Get The Fuck Out(譯為“國際概念證明或者滾蛋期刊”?),發表在上面的都是一些檔案格式、逆向工程和黑客攻擊方面雜七雜八的東西。期刊的發表方式為線上 pdf,免費傳閱,鼓勵映象。
而最新的 PoC||GTFO 0x19 這一期也很有意思:它本身是一個 pocorgtfo19 .pdf 檔案,卻可以手動修改副檔名,變成三個“完全不同”(as in 檔案格式),卻又“完全相同”(as in MD5)的檔案。
這三個相同又不同的檔案,副檔名分別為 .pdf .zip 和 .html。 你可以在 GitHub [1](點選“閱讀原文”) 上下載這個檔案(大約65MB),然後自己修改副檔名試試。如果你無法訪問,矽星人也把檔案傳到了百度網盤上 [2]。
如果我們對這三個檔案 .pdf .zip 和 .html 進行 MD5 校驗,會發現他們的 MD5 值完全一致——這並沒什麼的,因為不會對檔案造成任何影響,理論上它們還是同一個檔案(只是副檔名不同):
但它的好玩之處就在於,三個不同副檔名都可以正常工作,並且具備各自的意義。
如果你開啟 .pdf 版本,就可以閱讀這本期刊:
把副檔名改成 .zip,然後進行解壓,會得到這一期 PoC||GTFO 所引用作品的原始文件:
最後我們把格式改成 .html,就可以在瀏覽器裡打開了,會得到下面這樣一個靜態頁面:
這還沒完,更有趣的還在後面呢。這個頁面上寫的是:drop me here so that I can parse myself(把我拽到這個地方,這樣我就能解析我自己了)。這又是什麼意思?
因為你現在開啟的是 .html 檔案, 所以 正確的做法是把 .html 檔案再拖回到上面那段字所在的地方:
這個 html 自己解析自己,居然又解出來了四個檔案????
解出來四個新檔案的分別為:影象 .png 、微軟可執行 .ex 、視訊 .mp4, 以及和最初的 .pdf 完全相同的另一個 .pdf 檔案)。
如果你再去對這四個新檔案檢查 MD5 值,可能世界觀會崩塌: 它們的 MD5 值跟原始的 .pdf 仍然一樣。
而且你需要注意到:新出來的其中三個檔案(.png .ex 和 .mp4)並不是從原檔案直接改副檔名得到的, 而是那個 .html 檔案作為一個解析器,對自己進行解析,所得到的次生檔案。
因為在 macOS 上,矽星人就不開啟 .ex 檔案了;如果我們開啟 mp4 檔案,會得到一段很短賽車視訊:
在解析後的頁面裡,這個小玩意的作者如此解釋: 這個檔案是一個 HTML,但同時它也是一個 PDF polyglot.
Polyglot 的字面意義是通曉多種語言。在電腦科學上,它描述的是多種計算機語言寫在一個檔案裡得到的“雜交體”,可以被這些語言對應的編譯器編譯。
用普通程式設計師的話來講,Polyglot 就是一個程式可以同時用 PDF 和 HTML 編譯器通過。用人話翻譯一遍,就是一個檔案,它可以被當做圖片、視訊和文件開啟,也可以當做可執行程式執行……
作者繼續解釋道:它不僅僅是一個 HTML 和 PDF 的 polyglot,還同時和另外四個檔案(也就是剛才解析出的 .png .ex .mp4 和 .pdf)實現了 MD5 碰撞。
這究竟是什麼魔法???
剛才我們還有一個檔案沒開啟,也就是 .png。如果你用 Chrome 瀏覽器開啟它,能看到下面這張圖:
它其實描述的就是這個檔案的結構。簡單來說: 對一個檔案的編碼“排版”進行刻意的修改,在裡面同時加入 html、png、mp4、pe 的檔案頭 (header) 和內容。
基因學有個詞叫做嵌合體,描述的是一個生物體同時擁有多套 DNA,體現出不同的特徵。比如雜交,如果成功,得到的就是一種最典型的生物嵌合體。
而這個 html/pdf 檔案,就像是計算機上的嵌合體。它看起來是一種檔案,實際上還包含了其他多種檔案的“特徵”……
網友對這個小玩意給出了很高的評價:
無限接近魔法了Twitter @suburbsec
哈哈非常酷!向著 SHA-2 進發!Twitter @_unwriter
笑翻了。MD5 彆著急,你到不是完全沒用,只是變成梗了 :-)Twitter @037
小心這些碰撞的碎片(雙關梗,碎片-彈片-彈殼-殼-shell)Twitter @dntlookbehindu
這個小玩意的主要作者是 Ange Albertini 和 Marc Stevens。
Albertini 是 PoC||GTFO 的編輯之一,以及期刊 GitHub“官方頁面”的所有者。他在 Google 的瑞士蘇黎世辦公室擔任安全工程師,在這個小玩意裡主要負責逆向工程的工作。
Marc Stevens 為該專案提供了雜湊碰撞方面的重要幫助。他在荷蘭國家研究機構 CWI 從事加密科學研究,於2017年和 Google 合作首次完成了 SHA-1 碰撞破解,也就是著名的 SHAttered 事件。
前面提到,MD5 在多年前就被證明可以碰撞破解,但是碰撞起來很費時費力。而Albertini 和 Stevens 共同開發出了一個 “一鍵指令碼”,能夠輕鬆 實現兩個(甚至更多)檔案的 MD5 碰撞。
“碰撞任何兩個檔案多年前就實現了,問題是每次都需要幾個小時,沒有捷徑。 我們在此提供一種技巧,面向特定檔案格式和預先計算好的碰撞字首,讓碰撞即可完成。
這一技術的工作原理大致是這樣的:通過預先計算,瞭解 JPG, PNG, PDF, MP4 這樣的常用檔案格式的 prefix(可以被理解為檔案內容的“目錄”)可以怎樣相容,然後在一個單獨的檔案 A 上做文章,使得 A 檔案可以包含 b.jpg、c.png、d.pdf 和 e.mp4 四個不同檔案的資料。
現在,這些研究者可以在 JPG, PNG, PDF, MP4, GIF 這些常用格式的檔案之間快速實現碰撞——不僅他們可以,你也行。 他們已經在 GitHub - corkami/Collision [3]上開源了這些技術,“git clone,執行,搞定。”Albertini 寫道。
說實話這個技術沒太多創造價值的用途……無非是 1)證明了 MD5 真的太不安全了,建議棄用;2)可以被用於黑客攻擊。
安全研究員晨月舉了一個雜湊碰撞攻擊的簡單例子:“比方防毒軟體對可執行檔案很嚴格,但有個 exe 檔案偽裝成了 jpg 檔案,圖片看起來也沒什麼問題,就被通過了,然後進入系統展開攻擊。”(當然,現在的殺軟也沒那麼傻,安全行業也一直對雜湊碰撞保持高度關注。)
這種攻擊造成的傷害,可能更多是社會意義上的。
比如,某政客的網站上有一段視訊總結了他的政治理念和綱領,而黑客製作了一段雜湊值和原視訊完全相同,但意義完全相反的視訊,再注入到網站上,讓政客丟臉,使其失去選民的信任。
這樣看的話,基於這一技術的黑客攻擊就大有潛力了……
兩個不同的視訊,MD5 值一致[4]
這個小玩意的其他貢獻者者還有 Rafał Hirsz,他跟 Albertini 是同事,負責 JavaScript;Kurt Pfeifle,一位 PDF 檔案/PostScript語言方面的專家,PDF Association 成員;Philippe Teuwen,比利時安全公司 QuarksLab 研究員,為專案提供檔案格式幫助;以及 .mp4 視訊的作者是 Gustavo Torres,一位獨立視覺藝術家。
因為檔案格式和雜湊演算法確實不是矽星人的專業,我們就不深入探討了……
如果你感興趣的話,可以下載 PoC||GTFO 的0x19期,然後自己動手該副檔名玩一玩,然後到 GitHub - corkami/Collision 上了解技術詳情。
Have fun.
[1] https://github.com/angea/pocorgtfo/blob/master/releases/pocorgtfo19.pdf
[2] https://pan.baidu.com/s/1D4elZHUzg5vvzvfqLrgf4A 提取碼: jx77
[3] https://github.com/corkami/collisions
[4] 視訊1 https://github.com/corkami/collisions/blob/master/examples/collision1.mp4;視訊2 https://github.com/corkami/collisions/blob/master/examples/collision2.mp4
宣告:本文來自矽星人,版權歸作者所有。文章內容僅代表作者獨立觀點,不代表安全內參立場,轉載目的在於傳遞更多資訊。如有侵權,請聯絡 [email protected]。