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