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