除了雙因素:如何使用U2F來改善應(yīng)用安全
譯文【51CTO.com快譯】您還記得過去在用雙因素身份驗證之前,只使用一個用戶名和密碼就能被認為是安全的好時光嗎?事實上,其實從來都不是那樣的。在少年時的朱利安·阿桑奇(Julian Assange)闖入五角大樓之前,甚至在互聯(lián)網(wǎng)廣為傳播到世界各地之前,人們就在使用暴力密碼攻擊去攻破了一個個系統(tǒng)。美劇《黑客軍團》里的Mr. Robot就運用社交工程破解了其視為目標的大多數(shù)人的賬戶。
使用2FA(雙因素身份認證)曾被視為是對此的補救方法,但其方法已被發(fā)現(xiàn)有著黑客可利用的漏洞,而應(yīng)對此挑戰(zhàn)的辦法則比較昂貴的。幸運的是,還有一個雙因素身份認證的替代方案:通用第二要素認證,或稱U2F,它正是應(yīng)用程序開發(fā)人員所需一個的開源方案。
雙因素身份認證的問題
在轉(zhuǎn)為使用雙因素身份認證之前,通過檢查各種單因素身份認證的基線挑戰(zhàn)來做好準備是很重要的。根據(jù)對主要服務(wù)提供商,如Adobe、Twitter、Linkedin和雅虎的攻擊上升趨勢所顯示,僅用密碼和安全問題的方式會將用戶暴露于黑客面前。
由于用戶不斷重復(fù)使用某個秘密這一事實,密碼本身成了一個最大問題。黑客們深諳這一點,所以一旦他們破解并竊取了一個帳戶的身份驗證憑證,他們則會嘗試著以此潛入受害者的其他服務(wù)。如果用戶選擇使用了弱的密碼機制,則黑客完全可以使用到Kali Linux的Crunch工具或是其它現(xiàn)成的密碼破解工具。
既然單因素身份認證是不安全的,那么2FA(雙因素身份認證)一定可靠嗎?實際上,2FA的實施也有其自身局限性。例如,當(dāng)您的雙因素身份認證依賴于通過短信方式發(fā)送的一個驗證碼的話,騙子則可以通過利用社會工程學(xué)騙取用戶的電話以獲取之。而如果通過使用智能手機來作為第二種認證因素的話,也會有其它的風(fēng)險。例如我們需要保護應(yīng)用程序在邏輯上遠離各種惡意軟件。
實施雙因素身份認證的另一個挑戰(zhàn)在于價格方面。像谷歌或Facebook這樣擁有數(shù)十億用戶的公司是無法實施昂貴且復(fù)雜的解決方案的。例如為它們所服務(wù)的每個用戶提供一個唯一的令牌或智能卡,這都將是一筆非常昂貴的開銷。那么,如何才能有效且劃算的實施2FA呢?我們可以考慮“通用第二要素認證”,或稱U2F。
U2F是如何工作的
由谷歌和Yubico所共同創(chuàng)建的U2F(通用第二要素認證)開啟了認證的新標準。它允許用戶安全且即時地使用一個設(shè)備去訪問多個在線服務(wù),而不需要安裝特殊的設(shè)備驅(qū)動程序或客戶端軟件。通過使用U2F,您可以使用一個令牌來認證許多個服務(wù)。
U2F要求用戶使用一個支持U2F標準的鑰匙令牌(如USB類型)設(shè)備和瀏覽器。而鑰匙設(shè)備的功能是作為一個安全令牌,讓用戶登錄到多個支持U2F的在線服務(wù)上,那些服務(wù)包括了定制的應(yīng)用程序。目前Chrome和Firefox都已支持U2F。
U2F標準協(xié)議的初探
Yubico定義U2F為:“一個具有挑戰(zhàn)-響應(yīng)協(xié)議的擴展,它提供網(wǎng)絡(luò)釣魚和MitM(中間人攻擊)保護,特定應(yīng)用程序的密鑰,設(shè)備克隆檢測和設(shè)備認證功能。”該協(xié)議的控制旨在對已知的和新的攻擊予以防護。它使用的是非對稱加密,也稱公鑰加密算法,其中私鑰駐留在Yubikey設(shè)備之中。客戶端上的瀏覽器內(nèi)也開啟了對挑戰(zhàn)、處理和應(yīng)用程序ID之類的適當(dāng)控制(如下圖所示)。
如何在您的網(wǎng)站上實現(xiàn)U2F
想讓您的網(wǎng)站訪問者以U2F的方式進行雙因素身份認證相對來說是比較容易的,另外Yubico也提供了開發(fā)人員指南。您有三種選擇,其中最簡單的路徑是使用Yubico的U2F的驗證服務(wù)器(u2fval)。它通過一個簡單的基于JSON的REST API提供了U2F的注冊和認證,所以您不需要對應(yīng)用程序的代碼做太多的修改。此外,它還能對例如Wordpress這樣流行的內(nèi)容管理系統(tǒng)平臺,以插件的形式提供“開箱即用”式的支持。所有的代碼都是開源的,并且能在Github上獲取到。
如何用u2fval來進行U2F的實施
如前所述,采用帶有U2F的雙因素身份認證的最簡單方法是使用Yubico的U2F驗證服務(wù)器(u2fval)。如果您正在Linux或Mac OS系統(tǒng)上做開發(fā),其安裝是很容易的。您只需使用如下這個pip命令:
sudo pip install u2fval
您還可以使用其它的Python或Github安裝命令。
簡單的配置是需要的,但是服務(wù)器并不需要一個數(shù)據(jù)庫。您還必須配置每一個客戶端,以及它所進行的身份認證方式。不幸的是,這已經(jīng)超出了u2fval的范疇,所以您需要獨立地實現(xiàn)它。
U2F的潛在安全問題
既然U2F式的雙因素身份認證協(xié)議依賴于瀏覽器上客戶端級別的驗證,那么潛在的攻擊就可能來自駐留于瀏覽器本身的安全漏洞。所以U2F的安全性取決于谷歌、Mozilla等其它公司在其瀏覽器上應(yīng)用該協(xié)議的良好程度。
此外,如果您使用的是U2F驗證服務(wù)器,那么請記住,REST API的調(diào)用需要進行服務(wù)器級別的強驗證控制。如果API的驗證不能被安全地開發(fā)和驗證,您可以會受到服務(wù)器端的攻擊。同時,由于U2F依賴于一個數(shù)據(jù)庫,因此所有通過路徑/etc/yubico/u2fval/u2fval.conf這一配置文件的訪問都應(yīng)該受到限制。而且,因為在Apache服務(wù)器上部署u2val服務(wù)器時,有一個選項是使用mod_wsgi,那么在Apache中監(jiān)控將來可能出現(xiàn)的漏洞,對于防護未來出現(xiàn)的攻擊來說是至關(guān)重要的。
鑒于身份驗證的控制完全掌握在開發(fā)人員的手中,我建議大家應(yīng)該保持謹慎的態(tài)度。要知道,一個對于U2F的劣質(zhì)應(yīng)用實施將會導(dǎo)致客戶端身份認證上的各種安全錯誤。
U2F的未來
U2F式的雙因素身份認證協(xié)議是建立在強安全的理念之上的。它在通過諸如Gmail、Github和Facebook等服務(wù)傳播雙因素身份認證的方面有著非常有希望的未來。當(dāng)然組織要想采用之,則必須首先有一個適當(dāng)?shù)陌踩浖_發(fā)生命周期。
它的成功實施取決于您是如何編程與集成其它所需組件的。這包括您驗證客戶的方式,和對數(shù)據(jù)庫的訪問設(shè)置。運用安全的DevOps的方法,并遵循OWASP指南可以幫助您創(chuàng)建出各種牢固的應(yīng)用程序,并能防御未來出現(xiàn)的各種驗證方面的攻擊。
原文標題:Beyond two-factor: How to use U2F to improve app security,作者:Johanna Curiel
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】