Kate Li (Taiwan)的部落格

首頁

whatsapp緩衝區溢出漏洞:在作用域下

作者 shomer 時間 2020-03-27
all

首先,請注意:

在該漏洞和補丁的報告中,Facebook披露,該漏洞是一個遠程程式碼執行(RCE)漏洞,影響iOS和Android版本的WhatsApp用戶端。沒有提到目標平臺,所有版本都提供了補丁:(Android與iOS更新)

由於該漏洞的科技細節沒有公開報導,為了與事實相符,這篇博文將具有教育性質。我將有選擇地關注發佈的補丁的幾個理論方面。

人身保護令——補丁分析

由於這兩個平臺上都修補了此漏洞,並且由於iOS應用程序分析和反向部落格帖子很少,囙此我選擇在此部落格中針對iOS版本的應用程序。我希望你能從這個過程中受益,這將是一個教育和充分利用你的時間。

我將瀏覽一下WhatsApp用戶端的iOS版本。如果您希望繼續,請確保版本2.19.50(未修補)和2.19.51(修補)。檢查這兩個版本(IDA和BinDiff或Ghidra),會在看起來是包處理函數的地方產生一些變化,其中兩個函數占主導地位(0x100c236b4和0x100c25b78)。我將逐一介紹這些功能。

首先,我們將檢查位於0x0100C236B4(此處命名為processBrustPackets)的函數。這個函數似乎負責處理作為WhatsApp VoIP堆棧一部分的STUN和其他數据包突發。以下是修補版本中删除的主要功能部件:

在第716行,有一個關於packetSize和a size的大小檢查,兩者都由調用者控制。

如果packetSize大於0x7A120,將導致整數下溢,並忽略以下塊:

這會導致兩個由呼叫者控制的對memcpy的調用(突出顯示)。

此執行塊已在更新的修補版本中删除:

下麵是修補函數的BinDiff調用圖表示:

人身保護令-第二部分

下一個引起我們注意的補丁函數是0x0100C25B78,名為handle_incoming_traffic。以下是已修補的功能部分:

在第60行,對提供的調用方參數調用memcpy,不檢查大小,這可能導致緩衝區溢出漏洞。

在修補版本中,將引入大小檢查以確保大小=0x5c8:

此尺寸檢查也添加在我們前面介紹的第一個函數中(注釋如下):

為了結束第二部分,我們瞭解到,通過在這兩個函數中引入大小檢查,已經修補了另一個潜在的記憶體溢出漏洞。

有趣的是,這兩個補丁函數在WhatsApp應用程序內部的通信處理中都起著關鍵作用,如調用方圖所示:

用斧頭戳熊(程式碼)

為了驗證在語音呼叫期間調用此功能,請使用Xcode連接到越獄設備上運行的易受攻擊的WhatsApp應用程序:

在函數地址(映射庫和函數位置)上設定中斷點,或使用Jonatan Levin的Jtool2為xCode創建中斷點命令:

這樣地:

現在,啟動對帳戶的語音呼叫,並且,正如我們假設的那樣,我們到達了中斷點:

現在,讓我們從動態分析的其他部分後退一步,瞭解到目前為止我們學到了什麼。

一條紅鯡魚-不要妄下結論

在不急於下結論的情况下,我們能够驗證以下幾個方面:

有可能實際襲擊沒有發生。出於某種原因,這一漏洞可能被揭發了,僅僅是為了製造一場雁行追逐並吸引目光。這將解釋為什麼沒有有效載荷被披露,也沒有分析結果被公開。

再次重申,如果攻擊發生並且是真實的,同時考慮到以上所有要點,可以安全地推測為WhatsApp用戶端應用程序創建了一個複雜的負載,在沒有用戶互動的情况下觸發,從而在WhatsApp內產生遠程代碼執行功能。

人們可能會留戀WhatsApp中的RCE如何使攻擊者受益。當然,WhatsApp可以訪問麥克風、照相機、位置和照片,這使得它成為隱私方面非常豐富的目標。然而,訪問所有這些內容將需要很多技巧,包括繞過新設備上的PAC、堆棧檢查和引入iOS的其他緩解措施。此外,攻擊者需要在重新啟動時實現持久性。這樣的努力可能會非常嘈雜,耗盡電池,异常重啓,來自未知號碼的語音呼叫。

如果某個實體完成了所有的工作,包括反轉、旋轉和修補、構建有效負載、調試和測試,直到得到遠程程式碼執行的結果,那麼它們就必須建立讀/寫/執行原語、使用資訊洩漏和運行時計算,才能成功地完成它們的旅程。

他們可能不會冒全部風險,只是為了讓目標披露;囙此,我們只能想像,對於完美的攻擊,WhatsApp的其他方面可能是目標。

有沒有什麼快速有效的方法來實現堅持不懈?某些路徑將使用應用程序邏輯中的命令執行功能,該路徑將盡可能保持沉默,但會給對手帶來優勢,在重新啟動後仍能生存,並提供對目標WhatsApp帳戶活動的遠程監控?

WhatsApp網絡——對手的戰利品

WhatsApp有一個流行的網絡用戶端功能,叫做“WhatsApp web”。它允許用戶使用一個簡單的瀏覽器從世界任何地方連接到WhatsApp帳戶,發送和接收消息,創建新組,查看舊消息等等,就好像他們是在用自己的設備工作一樣。

掃描完質詢後,瀏覽器將通過身份驗證:

從現在起,遠程瀏覽器用戶端可以在設備上讀取每一條消息、發送消息並充當它們連接到應用程序的角色:

然而,在iOS上,WhatsApp用戶端的可見性較低(直到現在)。如果遠程web會話處於活動狀態,或者有人劫持了WhatsApp會話,則不會在iOS上提示您發送任何通知。如果您希望查看您的帳戶中是否有任何人,則需要轉到“設定”:

WhatsApp網站:

然後,將顯示連接的瀏覽器清單:

iOS上沒有提供IP或其他識別字;只有瀏覽器用戶代理。

囙此,如果您的帳戶被遠程劫持,在iOS上您不會收到任何通知。

如果你在WhatsApp中有RCE漏洞,聽起來是一個完美的目標。

足够的演講-演示時間

-[WASettingsViewController qrCodeScannerViewController:didfinitishwithcode:]

這可以通過Xcode上的一行程式碼進行類比:

下麵的視頻演示了WhatsApp應用程序中具有遠程程式碼執行功能(此處類比為簡單的調試會話)的攻擊者如何使用它來執行用戶端應用程序中的任何程式碼。在這種情況下,劫持用戶端WhatsApp會話,而無需任何通知:

結論