一、前言
從互聯網誕生以來,消息應用就一直伴隨我們左右。然而最近一段時間,由于一些國家開始實施大規模監控策略,有更多的用戶選擇安裝名為“安全即時通信應用”的端到端加密應用。這些應用聲稱可以加密用戶的郵件、保護用戶數據免受第三方危害。
然而,深入分析三款安全消息應用(即Telegram、WhastApp以及Signal)后,我們發現服務商可能無法信守各自的承諾,用戶的機密信息可能存在安全風險。
考慮到用戶之所以下載這些應用,是因為想讓自己的照片和消息完全避免第三方威脅,因此這是一個嚴重的問題。這些應用擁有海量用戶,無法保證這些用戶都經過安全教育,很難都了解啟用某些設置可能會帶來的安全風險。因此,這些應用有義務向用戶闡述安全風險,并且在可能的情況下,盡量默認使用更為安全的設置。這些應用會將安全性交由操作系統來負責,在本文中,我們將給大家展示攻擊者如何通過側信道攻擊操作系統來破壞這些應用的安全性。本文深入分析了這些應用處理用戶數據的背后原理,并沒有深入分析這些企業自身的安全性。
二、安全消息應用
安全消息應用的背后原理在于所有通信數據都經過用戶端點之間加密處理,沒有涉及第三方。這意味著服務提供商在任何時間都不具備讀取用戶數據的能力。
為了實現端到端加密,這些應用要么會開發自己的加密協議,要么采用第三方協議。這些應用通常會使用兩種協議:由Telegram安全消息應用開發的MT協議以及由Open Whisper Systems軟件公司開發的Signal協議。由于MT協議并沒有開源,因此其他應用大多會使用Signal協議或者采用該協議的修改版。其他協議會根據用戶的請求來使用該協議(但默認情況下沒有使用該協議),這不在本文分析范圍中。Facebook Messenger以及Google Allo采用就是這種解決方案,前者具備名為“Secret Conversations”(秘密對話)的一種功能,后者具備名為“Incognito”(隱身)聊天的一種功能。之前研究人員已經分析過公開的源代碼,也對實時通信數據做過黑盒分析。
然而,安全消息應用遠不止加密協議這么簡單。還有其他組件(如UI框架、文件存儲模型、群注冊機制等)可能是潛在的攻擊目標。Electron框架中發現的CVE 2018-1000136漏洞就是一個很好的例子,WhatsApp和Signal都使用這個框架來構建用戶接口。在最糟糕的情況下,攻擊者可以利用這個漏洞遠程執行代碼,或者復制消息。
這些協議的關注重點是在傳輸過程中保持通信的私密性,然而并無法保證數據在處理時或者到達用戶設備時的安全性。這些協議也不會去管理群注冊的安全性,WhatsApp最近發現的漏洞就是典型案例。如果攻擊者入侵了WhatsApp服務器,那么就可以在未經群管理員許可的情況下,將新成員加入群中。這意味著動機充足的攻擊者可能會挑選并竊聽特定的WhatsApp小組,從這個角度來講該應用已無法保證所有通信數據的端到端加密。
圖1. Signal承諾保證用戶消息安全(來源:http://www.signal.org)
除這些應用的技術層面之外,背后的用戶也是不容忽視的一面。
這些應用都聲稱自己關注安全及隱私,某些應用甚至還聲稱自己能“不受黑客攻擊”。這些宣傳語的目的都是讓用戶建立對應用的信任。用戶信任應用會保護自己隱私數據的安全。
由于這些應用都聲稱擁有數百萬活躍用戶,因此很明顯并非所有用戶都經過網絡安全教育。因此,許多用戶不能完全理解這些應用某些配置可能帶來的安全風險及限制。保護用戶的隱私安全并非只需要停留在技術層面,也需要以可接受的方式向用戶提供正確信息,使用戶即便不是安全專家,也能了解決策風險。
圖2. Telegram廣告聲稱其能保障用戶消息安全免受黑客攻擊(來源:http://www.telegram.com)
這些應用還有另一個重要功能,即跨平臺特性。所有應用都支持主流移動設備平臺,也包含桌面版本。正常用戶都會理所當然地認為所有平臺上的安全級別都相同。所有應用的網站上也在暗示應用的安全性、隱私性在所有平臺上都保持一致。
圖3. 網站提示用戶可以在各種平臺上使用應用(來源:http://www.signal.org)
然而安全功能的實現往往因具體平臺而有所區別。有些平臺上風險更多,并且這些風險也需要告知用戶,因為用戶通常會認為每個平臺都能為他們提供相同級別的安全防護。
三、問題描述
這些主流應用的用戶大多沒有經過網絡安全教育,這意味著用戶會盲目信任這些應用能夠保證其信息安全。顯然,這種信任源自于應用對其自身服務的宣傳方式。
2018年5月16日,Talos發表了關于Telegrab的一篇文章,介紹了可以劫持Telegram會話的惡意軟件。原理非常簡單:如果攻擊者可以復制桌面用戶的會話令牌(session token),那么就能劫持會話。除了本地存儲的信息外,攻擊者不需要其他任何信息。無論信息是否經過加密都不重要,只要復制這個信息,攻擊者就能使用該新信息創建一個影子會話(shadow session)。
之后我們想繼續研究這種技術能否適用于其他消息應用,事實證明我們測試的所有應用(Telegram、Signal以及WhatsApp)都受此方法影響。這些應用處理會話的方式有所不同,因此在某種程度上會影響這種攻擊方法的效果。
在下文中,我們會描述我們研究的攻擊場景,其中攻擊者已經復制或者劫持了這些應用的會話。
四、應用分析
Telegram似乎是會話劫持(session hijacking)的最佳目標,攻擊發生時用戶并不會收到任何通知。受害者發送或者接收的消息以及圖像也會原封不動傳輸至攻擊者的會話。
圖4. Telegram桌面環境中存在2個會話
一旦攻擊者使用竊取的會話信息啟動Telegram桌面應用,用戶不會收到關于新會話的任何通知。用戶需要手動確認同時是否存在其他在用會話。用戶需要轉到設置頁面才能發現該信息,這對普通用戶來說并不容易。當該消息在Telegram上顯示時,大多數用戶也很難注意到消息內容。
Signal以競爭條件(race condition)的方式來處理會話劫持。當攻擊者使用已竊取的會話信息啟動應用時,兩方應用都會競爭這一會話。因此,用戶會在桌面應用上看到錯誤消息,但移動設備上看不到錯誤消息。
圖5. 在Mac上創建的會話適用于Windows系統(反之亦然)
然而,當受害者看到這些警告消息時,攻擊者實際上已經可以訪問尚未被刪除的所有聯系人和先前聊天新信息。
為了避免競爭條件,攻擊者只需要簡單刪除會話信息即可。當用戶啟動應用時,會收到重新鏈接應用的一個請求。
這種情況對安全專家來說是一種紅色警報,然而對普通用戶而言,他們可能會認為這只是應用中的一個錯誤。
圖6. 同一臺設備的兩個會話
當用戶創建第二個會話時,只有移動設備能看到該會話,并且默認情況下,兩個會話都使用同一個名稱。
因此,攻擊者可以查看甚至仿冒受害者。攻擊者發送的消息也會傳到受害者的合法設備上,但攻擊者可以在發送消息的同時刪除這些消息,避免被用戶發現。如果攻擊者在仿冒過程中使用了“Disappearing messages”功能,那么受害者更難發現這種攻擊行為。
WhatsApp是唯一實現了通知機制的一款應用。在正常操作下,如果攻擊者使用已竊取的會話信息在桌面上打開第二個會話,那么受害者應該會收到一則警告消息,如下圖所示:
圖7. WhatsApp多登錄通知
當創建第二個會話時,在線的應用會收到這個通知消息。在用戶做出決定之前,第二個會話處于有效并可用狀態。因此,當出現此通知時,攻擊者已經可以訪問受害者的所有聯系人消息及先前消息。攻擊者也可以仿冒受害者,直到受害者對該窗口做出決斷。假設攻擊過程中受害者沒有在設備旁,那么在受害者返回前攻擊者一直都具備訪問權限。如果受害者使用的是移動設備,那么他們并不會收到明顯的警告信息。如果受害者使用的是桌面客戶端,那么每次復用會話時都能看到這則通知。第二個會話不能修改警告。
這種告警機制仍存在缺陷,攻擊者可以通過如下步驟繞過:
圖8. 繞過WhatsApp多登錄通知步驟
攻擊者可以簡化上述步驟,跳過步驟4,在執行步驟5之前靜靜等待。這樣結果一樣,因為雙方都能訪問相同的消息。只有當受害者在移動設備上手動終止會話,攻擊者才會失去訪問權限。
根據我們的協調披露政策,我們已經將漏洞反饋至Facebook,大家可以訪問此處了解所有公告詳情。
不單單是桌面環境存在會話濫用問題,實際環境中已經有攻擊者通過克隆的移動應用濫用這些會話。
圖9. 移動設備上的影子會話
在移動環境中,攻擊者不必擔心會話被入侵,在正常情況下攻擊者很難獲得會話數據。然而這里根本的問題在于,Telegram會根據同一個手機號碼,允許同一臺設備上存在影子會話(shadow session)。
這就存在一種攻擊場景,在會話被終止前,攻擊者可以讀取Telegram中的所有消息以及聯系人。在移動設備上,除非用戶通過選項菜單請求終止會話,否則會話永遠不會被終止。
Android平臺上還有另一種攻擊場景,惡意應用可以在無需用戶交互的情況下創建影子會話。惡意應用只需獲取“讀取短信”和“結束后臺進程”的權限即可,而這些權限請求行為通常不會被當成危險行為,可以輕松通過Google Play的審核。
Telegram注冊過程首先會請求獲取手機號碼,然后通過包含唯一碼的SMS確認手機號碼有效。如果用戶嘗試再次注冊同一個手機號碼,Telegram會通過Telegram頻道(而非SMS)發送一個驗證代碼。
將傳輸渠道從SMS切換成Telegram消息應當能夠避免惡意應用在無需用戶交互的情況下創建影子會話,因為惡意應用無法讀取驗證碼。然而,如果注冊過程無法在一定時間內順利完成,Telegram就會假設用戶無法訪問Telegram應用,會通過SMS發送新的驗證碼。
這種備份機制造成了競爭條件,可以被惡意應用利用,在無需用戶交互的情況下創建影子會話。整個操作過程如下:
圖10. 創建Telegram影子會話
從此時起,惡意應用就可以訪問所有聯系人、不屬于“Secret chats”的以前以及未來消息。
安全即時消息應用可以在消息傳輸過程中保證信息安全性,甚至可以保護這些消息不受應用服務器的影響。然而,在保護應用狀態及用戶消息方面,這些應用有點力不從心,會將信息保護責任交由操作系統來承擔。
Signal協議開發者已經預見到會話劫持可能。會話管理協議(Sesame協議)安全考慮中包含一個子章節,專門針對設備被入侵的情況,其中提到一句話:“如果攻擊者成功獲知設備的秘密數據,比如身份私鑰以及會話狀態,那么安全性將會受到災難性影響”。
鑒于協議開發者已經預見到這種攻擊方式,因此個人用戶或者企業不應當認為這些應用固若金湯。因此,如果企業使用這些應用來傳輸私密或者敏感消息,那么他們應該部署能夠更好保護這些資產的端點技術,這一點非常重要。