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