MD5碰撞的演化之路
作者:360分析團隊
主編:白名單分析組
0x00 概述
自從王小云破解MD5演算法後,國內外對MD5碰撞的相關研究與惡意利用從未停止。MD5演算法的應用領域很多,就軟體安全方面來說,陸續發現了一批利用MD5碰撞對抗安全軟體的惡意樣本。這些樣本中,大部分採用早期的一種較為成熟的快速MD5碰撞利用方式,然而有一部分比較特殊,因其採用了新型的碰撞方式。
這種新型的碰撞樣本在2014年初開始出現,當時還處於測試階段,所以只有少數樣本在傳播。直到2015年初,新型碰撞樣本大規模爆發,經過分析和追蹤,可以確定採用新型碰撞手法的大批次樣本是由同一團伙製做,後續稱為碰撞作者。2015年9月,對抗升級,碰撞作者開始結合數字簽名利用技術與安全軟體對抗。2015年11月,碰撞作者進行新的嘗試,利用雙簽名對抗查殺。下圖是該碰撞作者近兩年對抗手法的演化的過程:
圖1-1 碰撞作者近兩年的攻擊演化過程
根據上面的演化過程,本文將圍繞碰撞作者各階段的利用手法展開詳細的分析。首先,介紹新型MD5碰撞的特點,透過與早期版本的對比來認識新型碰撞手法的“先進性”。接著,進一步介紹新型MD5碰撞與數字簽名結合的高階利用手法,以及碰撞作者放棄碰撞方法而採用雙簽名進行對抗的新嘗試。然後,透過一例樣本的行為分析介紹碰撞作者的典型攻擊流程。最後,對碰撞作者的惡意軟體傳播和影響進行統計與資訊挖掘。
0x01 新型碰撞特點
早期的碰撞樣本,主要採用“字首構造法”,以同一個給定的字首程式A為基礎,在尾部新增不同的附加資料,得到兩個具有相同MD5的樣本B和C,如下圖所示:
圖2-1 早期MD5碰撞的利用手法
字首構造法碰撞後的兩個樣本只有尾部少量位元組不同,而程式程式碼是相同的。透過判斷尾部資料的差異,兩個樣本可以執行不同的程式流程。由於這種碰撞手法是透過同一字首程式碰撞生成的兩個樣本,如果其中有惡意程式碼流程則兩個樣本均包含惡意程式碼,所以比較容易被安全軟體識別,隱蔽性較差。
而採用新型的MD5碰撞手法,得到兩個MD5校驗值相同的樣本,一個是惡意程式,另一個則是正常程式,它們在功能和程式碼上完全不同。由兩個不同的字首程式A和B分別在尾部新增附加資料,構造出具有相同MD5的程式C和D,如下圖所示:
圖2-2 新型MD5碰撞的利用手法
這一階段,碰撞作者主要是透過正常程式與惡意程式兩種不同程式碰撞相同的MD5來對抗安全軟體。比如這樣一組樣本,正常程式是一個dll程式,惡意程式則是一個加了vmp強殼的流氓日曆exe程式:
圖2-3 一組新型碰撞樣本的靜態特徵
而這兩款毫不相關的程式MD5值校驗卻神奇的一致:
圖2-4 一組新型碰撞樣本的MD5計算結果
透過圖2-3和圖2-4,證實了兩種不同格式的程式,其檔案MD5是可以相同的。然而這種現象並非偶然,而是碰撞作者能夠大批次製造的真實案例。為了深究其技術手法,仔細比較一下這兩個檔案的資料如下:
圖2-5 一組新型碰撞樣本的檔案資料比較
從圖中可以看出,兩個檔案絕大部分資料不同,但尾部資料高度相似,而且檔案大小一致,這種構造方式是基於“選擇字首碰撞法”(Chosen-prefix collsion【1】)實現的,其原理圖大致如下:
圖2-6 “選擇字首碰撞法”原理
透過選擇不同的字首,計算生日數和碰撞塊新增到檔案尾部,即可得到兩個具有相同的MD5的檔案。不過,要計算出這些尾部資料並不容易,直接使用hashclash【2】的工具需要相當大的時間成本,但是碰撞作者對該工具進行改進後已經能夠高效完成大量正常程式與惡意程式的碰撞了,以下為此階段樣本的典型樣例(每組正常程式與惡意程式對照),由於碰撞的原理與檔案格式無關,所以樣本形態呈現了多樣化的特點。
圖2-7 此階段碰撞樣本的典型樣例
其中,碰撞的樣本對中,惡意程式主要為桌面軟體的元件【3】,而正常程式則是任意的軟體。由於每組樣本都對應同一個MD5指紋,碰撞作者便藉此來對抗安全軟體對其惡意程式的查殺。
0x02 簽名利用
數字簽名具有校驗程式是否被非法篡改的功能,針對簽名的攻擊形式多樣,比如Flame病毒曾利用雜湊碰撞偽造微軟的數字證書【4】。一般情況下在帶簽名的程式後面任意新增資料,簽名會顯示無效。在前一階段被使用的字首程式都沒有數字簽名,但九月初,我們捕獲到了MD5碰撞樣本的新版本,碰撞作者巧妙的使碰撞後的樣本延用了字首程式的有效簽名。
圖3-1 加入簽名利用的MD5碰撞手法
這階段碰撞樣本的顯著特點是,字首程式中的正常程式大部分是帶有簽名的msi程式,在其尾部新增了碰撞資料後簽名卻還是有效的,這主要是利用了msi程式的特性——對任意帶簽名的msi程式,在其尾部可以任意新增修改附加資料而不影響簽名的有效性,如下圖所示。於是,MD5碰撞多了數字簽名這個保護傘,大大提高了與安全軟體的對抗強度。
圖3-2 MD5碰撞對中的帶簽名msi程式新增附加資料後簽名仍有效
以下是被利用的msi程式的部分簽名列表:
Adobe Systems, Incorporated
Amazon Services LLC
Apple Inc.
IObit Information Technology
March Hare Software Ltd
Microsoft Corporation
Mozilla Corporation
Realtek Semiconductor Corp
TAOBAO (CHINA) SOFTWARE CO.,LTD.
Tencent Technology(Shenzhen) Company Limited
圖3-3 部分被利用的msi程式的簽名列表
比較特別的是,在此階段後期發現了一對特殊的碰撞樣本,分別是具有有效微軟簽名的msi程式和騰訊簽名的exe程式(如下圖)。可見,除了帶簽名的msi程式外,該碰撞作者也實現了對帶簽名PE程式的碰撞。
圖3-4 兩個程式都帶數字簽名的碰撞樣本
對比一下碰撞後的騰訊exe檔案和原始程式:
圖3-5 帶簽名PE程式碰撞後的檔案與原始檔案的對比
可以看出,碰撞作者對PE檔案結構的Security資料目錄進行了修改,說明其改變了簽名資訊的大小,擴充了尾部簽名串的資料長度,並且修改了對應的簽名資料以保證簽名的有效性,從而達到和msi程式的簽名“漏洞”一樣的效果。
0x03 雙簽名驗證
2015年11月初,發現了碰撞作者的新動向,他給一個程式構造兩種不同的數字簽名。如圖,這個惡意樣本在未打補丁的win7系統只看到一個無效的簽名,而在更新過補丁【5】的win7系統中卻顯示了兩個不同的數字簽名,第一個簽名仍是無效簽名,而第二個則是正常的簽名。
圖4-1 雙簽名樣本在不同的系統環境中的簽名顯示
碰撞作者這是有意識的利用雙簽名對抗安全軟體的簽名驗證,因為那些在舊系統中執行正常的簽名驗證程式,在升級到支援雙簽名後的系統中可能會爆發出嚴重的驗證邏輯漏洞。 為了說明這個手法,用兩個小工具【6】,分別在舊系統和支援雙簽名的系統中進行簽名校驗。
圖4-2 在未打補丁的win7系統中對雙簽名樣本進行校驗
上圖是在未打補丁的win7系統中對樣本進行簽名校驗的結果,第一步驗證簽名有效性時就出錯,即使第二步獲取的簽名串真實存在,簽名驗證的結果也是失敗。而如果是在更新了補丁的Win7系統下使用同一套工具對同一個樣本進行簽名校驗:
圖4-3 在更新過補丁的win7系統中對雙簽名樣本進行校驗
如圖,第一步驗證簽名完整性時顯示簽名正常,第二步獲取簽名資訊的時候只獲取了第一個簽名串的資訊,從而這個原本無效的偽造簽名可能會被認為是有效的。之所以這樣是因為,舊系統中不支援雙簽名,編寫簽名驗證程式時一般就預設一個程式只有一個數字簽名。
同樣,如果安全軟體在系統升級後沒有考慮到雙簽名驗證的情況,很有可能按照類似“正常”的邏輯判定這個惡意樣本偽造的簽名有效。可見,碰撞作者是想鑽雙簽名驗證這個空子來繞過簽名驗證。
0x04 典型攻擊流程分析
下面以2015年12月的樣本為例分析惡意程式的攻擊流程。
首先檢視樣本的數字簽名,發現具有一個偽造的無效簽名,但是當程式執行觸發惡意行為之後,簽名的狀態卻神奇般地變成有效的:
圖5-1 安裝樣本執行前後數字簽名的狀態對比
為了找出這種現象的原因,具體分析該樣本的程式碼。此樣本是經過NSIS打包的安裝程式,解包得到指令碼和其他資原始檔。分析安裝指令碼,該惡意程式首先對執行環境進行檢測:
圖5-2 安裝指令碼對執行環境進行檢測
透過系統呼叫遍歷程式,檢測的部分程式列表如下圖所示,其中大部分是網咖或分析除錯的系統環境,猜測是為了控制樣本傳播的範圍:
圖5-3 安裝程式檢測的部分程式列表
然後程式會判斷自身的檔名是否為“s*.exe”,並且檢測啟動該程式的父程式是否為桌面程式,目的是避免下載該程式的使用者直接點選執行觸發惡意行為引起注意,而只讓該程式作為被其他程式推廣啟動時才觸發:
圖5-4 安裝程式判斷程式檔名與父程式
當檔名判斷不透過時,程式作為桌面日曆安裝包執行,不觸發惡意行為。
圖5-5 安裝程式不觸發惡意行為的執行介面
當符合所有觸發條件時,就可以觸發惡意行為:安裝程式會靜默下載碰撞作者伺服器上的加密壓縮檔案update003.zip,使用特殊密碼解壓後執行其中的gpmc.msi程式,最後又清理了作案現場。惡意行為的主要程式程式碼如下圖所示:
圖5-6 安裝程式的主要惡意程式碼
從update003.zip解密得到的兩個檔案gpmc1.msi和gpmc1.cab,gpmc1.msi程式負責解壓gpmc1.cab檔案並呼叫其中的正常編譯工具NMAKE.exe,gpmc1.cab檔案解壓如下:
圖5-7 gpmc1.cab壓縮包內檔案列表
NMAKE.exe被執行後,makefile檔案中的命令就會執行,透過這種特殊的方式實現由正常的程式連續呼叫外部的惡意程式:
圖5-8 makefile檔案的呼叫命令
這裡關注u.exe這個程式,它其實是微軟官方的根證書列表更新工具updroots:
圖5-9 數字簽名根證書資料匯入工具
利用該工具匯入事先偽造好的一份CA根證書資料檔案u,結果會在系統登錄檔的根證書路徑新增一個信任項,並匯入偽造的CA證書公鑰等相關資料:
圖5-10 使用者系統被匯入的根證書資料路徑
惡意程式透過這樣的方式在系統種下了一顆種子,這顆種子將導致共用這一個CA認證的偽造簽名被驗證為信任狀態,如果不清除該資料項,被感染的系統將從此對碰撞作者所有具有偽造簽名的程式信任。
就本例樣本來說,在後面會被呼叫的日曆主程式DesktopGoodCalendar.exe的簽名也變為有效的:
圖5-11 主程式的另一個數字簽名前後狀態對比
DesktopGoodCalendar.exe是個加了強殼的delphi程式,執行之後仍先檢測執行環境,透過臨時目錄下的兩個檔案日誌判斷安裝程式的檔名和父程式:
圖5-12 主程式的透過兩個檔案內容判斷執行環境
當惡意條件滿足,先把使用者機器的資訊回傳伺服器:
圖5-13 回傳使用者機器的資訊
接著依次從不同的url下載幾張畫面相同的圖片:
圖5-14 碰撞作者使用的加密圖片
每次下載一張如上的圖片,都會使用同一個演算法解密其中的附加資料,並使用解密資料進行下一步操作,大致的操作過程如下:
解密“
http://www.ci***k.com/images/if.jpg
”得到一個程式列表進行分析環境檢測:圖5-15 第一張圖片解密後的內容
解密“
http://www.ci***k.com/images/before*.jpg
”得到下一張圖片下載地址:圖5-16 第二張圖片解密後的內容
根據上一步得到的下載地址解密其圖片得到一個惡意的PE程式,如下為解密得到PE程式的示意圖,以及分別從兩例地址的圖片解密得到的程式圖示:
圖5-17 第三張圖片解密後的得到惡意程式2例
經過上述的下載、解密,最後將得到的PE程式注入一個svchost的傀儡程式中並啟動:
圖5-18 主程式將惡意程式注入傀儡程式的過程跟蹤
由此,新的一個惡意程式悄然在系統程式中執行起來,後續的動作也全憑碰撞作者佈局控制,可以方便、隱蔽地進行各種流氓活動。歷史上曾從受害使用者現場發現過其會劫持瀏覽器主頁,使之跳轉到帶有商業推廣渠道標識的某導航網站,從而為碰撞作者達到盈利的目的。
以下為整體攻擊行為的流程圖:
圖5-19 整體攻擊流程圖
0x05 傳播及影響
新型MD5碰撞樣本在2015年初開始大規模傳播,經過統計發現,僅2015年受該類惡意軟體影響的使用者數量就達到5584939個,下圖為在全國各地區受影響的使用者分佈,主要集中在人口密集地區,其中廣東省是重災區,傳播量達到60多萬。
圖6-1 2015年全國各地區受影響的使用者數量分佈圖
從傳播時間來看,該類惡意軟體以5月份傳播量最高,達到130萬左右的量級,如下圖所示。
圖6-2 2015年各月份受影響使用者量
透過對該類惡意軟體的種類和來源進一步梳理,發現碰撞作者的主營軟體是以天氣、日曆類軟體的形式,透過各種渠道在網路中傳播,其業務鏈及主要傳播途徑如下所示:
圖6-3 碰撞作者的主要業務軟體及傳播途徑
藉助流氓軟體推廣渠道進行傳播。經統計,影片聊天、下載器、外掛輔助和影音播放器等型別的軟體都推廣過碰撞作者的惡意軟體。它們在推廣時,會主動連線碰撞作者的伺服器下載最新的惡意程式到使用者電腦進行安裝,整理2015年碰撞作者使用的主要傳播伺服器如下:
碰撞作者使用的伺服器 活躍時間 www.73***7.com
2015年11月至今 cdn.jo***e.com
2015年10月至今 www.y**j.org
2015年9月至今 update.z***n.net
2015年5月-2015年9月 www.ci***k.com
2015年8月 pc.t***cn.net
2015年1月-2015年7月 圖6-4 碰撞作者2015年使用的主要傳播伺服器
上傳到正規軟體下載站提供給使用者搜尋和下載。以下為在某下載站發現的碰撞樣本:
圖6-5 下載站傳播
偽裝成熱門資料分享到網盤中誘導使用者主動下載安裝。惡意軟體用炒股技巧、考研英語等誘惑性的檔名打包,如下圖所示:
圖6-6 網盤分享傳播
官網和其他渠道傳播。2015年9月份碰撞作者軟體官網截圖如下:
圖6-7 惡意軟體官網傳播
透過以上各種傳播渠道,碰撞作者的惡意軟體最終到達使用者電腦潛伏下來,每次使用者電腦啟動也跟著執行,並伺機進行主頁劫持等推廣行為進行盈利,即使一些使用者想要將之完全解除安裝也很難,給廣大普通使用者造成了無盡的煩惱。網上搜尋相關的惡意軟體名稱,會發現很多普通使用者的反饋,如下圖:
圖6-8 使用者在網上反饋的聲音
從上述的惡意軟體演化、傳播過程可以看出,碰撞作者費盡心思提高對抗技術、擴充套件傳播渠道,其目的只有一個:金錢至上。雖然碰撞作者為了自己的私利,不顧廣大群眾的使用者體驗而利用網際網路來汙染使用者的電腦,但是好在使用者的身後還有一批與之不懈對抗的安全軟體來保駕護航,以下為360安全衛士對此類碰撞惡意軟體進行攔截查殺的截圖。在這場沒有硝煙的戰爭中,對抗還將繼續,感謝廣大使用者一直以來對360的支援。
圖6-9 360安全衛士對新型碰撞類惡意軟體的攔截查殺
0x06 引用連結
- 早在2007年就由Marc Stevens提出並實現了該方法的MD5碰撞。
- 開源的hash碰撞工具,具體可參見project hash clash的開原始碼:https://marc-stevens.nl/p/hashclash/
- 下文將介紹到碰撞作者主營軟體為桌面天氣、日曆類軟體,其元件包括安裝包、主程式和動態連線庫等
- Freebuf曾對此做過報導,參見 http://www.freebuf.com/news/3482.html
- 詳見微軟對多簽名支援的安全公告:https://technet.microsoft.com/zh-cn/library/security/3033929.aspx
- 簽名校驗相關的開原始碼編譯的小工具,一個為校驗簽名的有效性,另一個則是提取簽名字串
相關文章
- MD5碰撞試驗2024-10-30
- lstm(一) 演化之路2019-01-08
- 夏軍:小米大資料整合架構演化之路2018-11-29大資料架構
- 丁俊:京東商城K-V儲存產品的演化之路2018-11-28
- 成理信安協會反序列化01-利用fastcoll實現md5碰撞2020-10-10AST
- 從規則到神經網路:機器翻譯技術的演化之路2023-12-26神經網路
- 從分歧走向融合:圖神經網路歷經了怎樣的演化之路?2022-05-31神經網路
- MVP框架的演化2019-01-17MVP框架
- 資訊的演化2018-05-17
- MD5的使用2024-10-22
- 《慾望的演化》總結2021-02-07
- 架構演化2018-10-28架構
- MD5的其他使用2018-03-20
- UI架構設計的演化2019-05-11UI架構
- ccf碰撞的小球(100分)2020-09-27
- JAVA中MD5加密(MD5工具類)2019-01-09Java加密
- 雜湊碰撞2024-10-22
- 碰撞檢測2024-06-17
- MD5的簡單用法2019-07-22
- Oracle中的MD5加密2018-10-21Oracle加密
- 微服務架構在阿里的演化2018-08-08微服務架構阿里
- RFID的防碰撞是什麼2024-07-17
- ORA,全球文化與科技的碰撞2022-05-22
- UE4的移動碰撞2019-04-10
- MD5加密2022-06-28加密
- md5解密2021-05-25解密
- 安全-md52020-10-09
- MD5手機號線上解密 MD5解密2024-08-08解密
- 修改檔案的md5碼2024-07-28
- 論軟體體系結構的演化2024-10-03
- 【分散式鎖的演化】什麼是鎖?2020-12-14分散式
- python如何檢測pygame中的碰撞2021-09-11PythonGAM
- 策略模式、策略模式與Spring的碰撞2020-06-30模式Spring
- 公有云和開源的商業碰撞2019-02-16
- md5繞過2024-04-27
- java MD5 加密2021-09-15Java加密
- MD5介紹2018-08-20
- MD5簽名2018-06-14