一、前言
通過實現(xiàn)所有用戶間的E2E加密,Whatsapp已經(jīng)改變了它的形象,從一個令人震驚的安全的通信應用程序到被許多人尊重的應用程序的轉變。
二、Whatsapp簡介
Whatsapp帳號基于手機號碼。這意味著手機號碼就是你的用戶名,它也被用來認證。盡管從隱私的角度看這不是完美的,讓用戶不必再記住另一個密碼,他們可能會被重復使用,甚至更糟,通過釣魚攻擊泄漏。
登陸過程的簡略描述:
當每次用戶啟動應用后用戶不得不輸入他們的手機號。一個驗證令牌通過SMS或者電話發(fā)送到這個號碼。在驗證碼輸入到這個應用后,認證令牌保存在設備中,用戶成功登錄。
當用戶在新設備登錄時,需要重復上述過程,并且老設備的授權被取消。Whatsapp不會在他們的服務器上保存老的消息,因此之前的消息不能轉移到新的設備上。
當然這個過程是更加復雜的但是這種簡化在本文中是適合的。
這種便利伴隨著被網(wǎng)絡黑客攻擊的代價,能夠訪問電話號碼。用戶信任移動供應商也是需要的,因為他們對該號碼有完全訪問權限并且能接管帳號。
三、攻擊者的角度
從低級的攻擊者的角度來看,它很難被繞過。有兩個問題:
1. 以一些方式訪問受害者的手機號碼。正如上面所述,這個能夠通過網(wǎng)絡攻擊或者移動服務供應商實現(xiàn)。盡管能訪問到手機號碼,但是不能獲得任何老的消息或者聊天歷史記錄,而且受害者會立即意識到一些事發(fā)生了,因為他們的手機會注銷賬戶。
2. 進入操作系統(tǒng),訪問磁盤分區(qū)等。盡管這能實現(xiàn),但是代價非常大。
四、新角色的加入
在2015年,Whatsapp啟用了Whatsapp網(wǎng)絡服務,能在電腦上面收發(fā)消息的網(wǎng)站。為了使用它,瀏覽器與與手機對等并且手機保持命令。下面是這個過程的簡述:
通過用手機應用掃描網(wǎng)頁上的二維碼來授權登錄。然后用戶可以在瀏覽器中使用Whatsapp,只需要手機是打開的并且能被計算機訪問。
這個給攻擊者提供了一個方便的腳手架。欺騙用戶掃描二維碼,將得到將來和過去通信的全部訪問權限。
五、一個正式的攻擊
它非常簡單:攻擊者只需要欺騙用戶掃描惡意的二維碼來授權攻擊者的瀏覽器。這個將給他們對于受害者賬戶的完全訪問權限。一個簡單的在線抽獎可以作為誘惑,受害者需要掃描二維碼進入。
攻擊過程描述:
為了更加復雜,Whatsapp不會在他們的注冊頁面展示靜態(tài)的二維碼,會幾秒鐘生成一個新的二維碼。這個阻止了攻擊者簡單的復制并發(fā)布到另一個網(wǎng)站上。
在我的演示中我繞過這個障礙,通過使用腳本持續(xù)抓取二維碼,并使用websocket連接發(fā)送給“受害者”。
缺陷:
用戶能看到他們授權的瀏覽器設備列表
如果過另一個瀏覽器登入了受害者會收到一個警告
這是個社工攻擊:受害者必須參與給予權限
但是,對于粗心的人來說這還是個有效的手段。
六、演示
我開發(fā)的工具使用selenium獲取QR代碼并使用express.js + socket.io在單獨的頁面上顯示它們。如果受害者使用他們的手機掃描這個二維碼,則document.cookie和selenium瀏覽器的本地存儲將被轉儲到攻擊者計算機上的文件中。然后可以使用獲取的數(shù)據(jù)使用任何瀏覽器登錄受害者的帳戶。(代碼)
七、修復手段
沒有修復手段避免這種攻擊,除了改進認證過程。我認為當他們開發(fā)網(wǎng)絡客戶端時就已經(jīng)意識到了這種可能性,但是他們不認為這是個大問題。