官术网_书友最值得收藏!

4.3 對(duì)驗(yàn)證機(jī)制漏洞進(jìn)行防范

電子通信已經(jīng)成為所有行業(yè)的基本部分,包括醫(yī)療保健、電信、制藥、零售、金融等,幾乎所有這些行業(yè)都在全世界部署了它們自己的特制軟件系統(tǒng)和解決方案,從而把它們的客戶和業(yè)務(wù)伙伴連接在一起。

銀行、保險(xiǎn)、資產(chǎn)管理和股票市場(chǎng)等領(lǐng)域的金融機(jī)構(gòu)必須滿足非常嚴(yán)格的安全需求,必須保護(hù)它們的應(yīng)用程序處理的所有電子數(shù)據(jù)。它們必須設(shè)計(jì)和實(shí)現(xiàn)能夠滿足這些嚴(yán)格的安全需求的軟件解決方案和應(yīng)用程序。換句話說,系統(tǒng)需要確保很高的安全合法性。

正如在FFIEC(Federal Financial Institutions Examination Council)致金融機(jī)構(gòu)的信函(FIL-103-2005,2005年10月12日)“Authentication in an Internet Banking Environment” 中指出的:“在網(wǎng)上銀行環(huán)境中,未經(jīng)授權(quán)的或未正確識(shí)別的用戶可能會(huì)進(jìn)行欺詐、泄露客戶信息、損壞數(shù)據(jù)或造成不可能實(shí)施的合約,從而給金融機(jī)構(gòu)造成經(jīng)濟(jì)損失和名譽(yù)損失。” 這封信函強(qiáng)調(diào)了網(wǎng)絡(luò)驗(yàn)證機(jī)制的重要性:“風(fēng)險(xiǎn)評(píng)估應(yīng)該根據(jù)與網(wǎng)上客戶可用的各種產(chǎn)品和服務(wù)相關(guān)的風(fēng)險(xiǎn)決定有效的驗(yàn)證戰(zhàn)略?!币虼?,必須建立健壯的驗(yàn)證管理過程來實(shí)現(xiàn)驗(yàn)證和授權(quán),這是成功實(shí)現(xiàn)安全的軟件解決方案的關(guān)鍵因素。

4.3.1 設(shè)置安全可靠的證書

要解決身份驗(yàn)證問題,需要有配套的公鑰基本設(shè)施來核實(shí)用戶的真實(shí)身份。這些設(shè)施用來創(chuàng)建、管理、發(fā)布、收回?cái)?shù)字證書。而數(shù)字證書正是你需要為站點(diǎn)使用HTTPS協(xié)議付費(fèi)的事項(xiàng)。但是,什么是數(shù)字證書?數(shù)字證書又是如何保證信息更加安全的呢?

從更高的層次來講,數(shù)字證書是將機(jī)器上的公鑰和身份信息綁在一起的數(shù)字簽名。數(shù)字簽名擔(dān)保某份公鑰屬于某個(gè)特定的組織和機(jī)構(gòu)。

證書將域名(身份信息)和特定公鑰關(guān)聯(lián)起來,這就避免了竊聽者將自己的服務(wù)器偽裝成用戶將要連接的服務(wù)器并進(jìn)行攻擊的行為。

要受到一般瀏覽器的信任,證書本身還應(yīng)當(dāng)受到CA的信任。CA公司對(duì)認(rèn)證會(huì)進(jìn)行人工核查,確定申請(qǐng)主體滿足以下兩個(gè)條件。

一是在公共記錄中存在著這個(gè)人/這家公司。

二是需要簽名的證書上標(biāo)明的域名的確由申請(qǐng)主體實(shí)際控制。

當(dāng)CA查證得出申請(qǐng)人屬實(shí),并且的確擁有這個(gè)域名的結(jié)果時(shí),便會(huì)為證書頒發(fā)簽證,蓋上“已核準(zhǔn)”的戳記,表明網(wǎng)站的公鑰屬于這個(gè)網(wǎng)站,而且可以信任。

你的瀏覽器中會(huì)內(nèi)置一系列受信任的CA列表。如果服務(wù)器返回的是未經(jīng)過受信任CA簽證的證書,瀏覽器會(huì)彈出大大的警告,如圖4-20所示,這就在系統(tǒng)中多了一層安全措施,不然,任何人都可以四處簽售偽造的證書。

圖4-20 瀏覽器發(fā)出證書警告

這樣一來,即使攻擊者將自己的公鑰拿出來生成這份密鑰,聲稱自己的偽造服務(wù)器就是“xxxx.com”,瀏覽器也會(huì)因?yàn)闄z查到“未經(jīng)受信任CA簽名的證書”而彈出提示。

以下是一些關(guān)于證書的其他事項(xiàng)。

(1)增強(qiáng)式認(rèn)證。

在常規(guī)的X.509證書之外,增強(qiáng)式認(rèn)證證書提供了更強(qiáng)力的認(rèn)證。

要授予增強(qiáng)式認(rèn)證證書,CA會(huì)對(duì)域名持有者做更加深入的查驗(yàn)(通常需要提供護(hù)照和水電費(fèi)賬單等信息)。

這種類型的證書,瀏覽器中大鎖圖標(biāo)的顯示位置背景也會(huì)變成綠色。

(2)在同一臺(tái)服務(wù)器上運(yùn)行的多個(gè)網(wǎng)站。

在HTTP協(xié)議連接開始之前進(jìn)行的TLS協(xié)議握手流程,很有可能存在著多個(gè)網(wǎng)站存放在同一個(gè)服務(wù)器,使用相同IP地址的情況。

虛擬主機(jī)的Web路由是由Web服務(wù)器分發(fā),但是TCP握手的過程,是發(fā)生在連接之前。整個(gè)系統(tǒng)的單張證書會(huì)被發(fā)送到服務(wù)器的所有請(qǐng)求之中,這種流程會(huì)在共享主機(jī)的環(huán)境中發(fā)生問題。

如果你正在使用Web主機(jī)上提供的服務(wù),他們會(huì)在你使用HTTPS協(xié)議之前要求使用獨(dú)立的IP地址,不然主體提供商就需要每次在服務(wù)器上有新站點(diǎn)時(shí),取得新證書(并且向CA重新申請(qǐng)認(rèn)證)。

4.3.2 對(duì)密碼重置和忘記密碼功能進(jìn)行控制

執(zhí)行安全的驗(yàn)證機(jī)制,不僅僅要同時(shí)滿足幾個(gè)關(guān)鍵安全目標(biāo),許多時(shí)候也需要犧牲其他目標(biāo),如易用性、成本、功能。

1.防止濫用密碼修改的基本要求

(1)加一個(gè)簡(jiǎn)單圖片驗(yàn)證碼,基本確保是人在操作,而不是機(jī)器。

(2)只能從已經(jīng)通過驗(yàn)證的會(huì)話中訪問該功能。

(3)不要以任何方式直接提供用戶名,也不要使用隱藏表單字段或者Cookies提供用戶名。

(4)為了防止攻擊者通過會(huì)話劫持漏洞、跨站點(diǎn)腳本,或者是忘記關(guān)閉的頁面獲得未授權(quán)訪問,應(yīng)該要求用戶重新輸入現(xiàn)有密碼。

(5)為了防止輸入錯(cuò)誤,新密碼要輸入兩次,順便校驗(yàn)兩次密碼是否一致。

(6)如果是重要的系統(tǒng),多次使用失敗的使用密碼修改功能,很有可能被攻擊。

2.防止濫用“密碼找回”的基本要求

密碼找回可能是現(xiàn)在最容易出現(xiàn)漏洞的地方。

(1)加一個(gè)簡(jiǎn)單圖片驗(yàn)證碼,基本確保是人在操作,而不是機(jī)器。

(2)當(dāng)用戶遺忘密碼時(shí),需要重要的系統(tǒng),最好是通過非常規(guī)的方式完成密碼找回,如給呼叫中心打電話,通過發(fā)送傳統(tǒng)郵件提供最新的驗(yàn)證信息,或者自動(dòng)凍結(jié)一段時(shí)間。

(3)短信、郵件等方式都有可能造成漏洞,但是這個(gè)是現(xiàn)代互聯(lián)網(wǎng)經(jīng)濟(jì)的基石。如果手機(jī)丟失了,要及時(shí)綁定新手機(jī)。

(4)不要使用任何的密碼“暗示”,攻擊者可以利用明顯的暗示發(fā)動(dòng)攻擊。

(5)不要以任何方式直接提供用戶名,也不要使用隱藏表單字段或者Cookies提供用戶名。

(6)找回密碼的問題最好有足夠的隨機(jī)性,確保攻擊者無法輕易猜測(cè)出來。

(7)最終,用戶通過重重考驗(yàn),完成了密碼找回,一般是給用戶發(fā)送一封重新激活URL的電子郵件。即使到了這一步,也不要透露用戶以前的密碼等信息。如果是生成一個(gè)新密碼通過短信發(fā)給用戶,也要確保這組新密碼足夠隨機(jī),避免讓攻擊者猜測(cè)到。

4.3.3 對(duì)密碼設(shè)置強(qiáng)度進(jìn)行控制

關(guān)于如何設(shè)置高強(qiáng)度密碼,可從以下幾個(gè)方面著手。

(1)從內(nèi)容上看,應(yīng)該是自己能夠記得但他人難以聯(lián)想到的信息。用同學(xué)或者同事的個(gè)人信息會(huì)比用自己的安全;同時(shí),可選擇較為隱私的紀(jì)念日或者詞匯進(jìn)行組合。

(2)形式上,應(yīng)該至少包括以下字符類別中的三組:大寫字母、小寫字母、數(shù)字、非數(shù)字符號(hào)(如&_等)。同時(shí),可以進(jìn)行一些簡(jiǎn)單的記憶變化,如i變成!、字母o變成數(shù)字0、11變成2ge1(兩個(gè)一)。

(3)為了便于記憶,密碼應(yīng)該盡量是有意義的內(nèi)容,但需插入其他字符或者諧音,如“just for you”可以設(shè)置為“juST4_U”。同時(shí)可以在長(zhǎng)度上進(jìn)行拉伸,如“shezhimima”可以變成“s_he_zhi_mimA”(相隔一定間隙插入符號(hào),并且將特定位置的字母大寫),又如“mypassword”可以變成“M。Y。P。A。S。S。W。O。R。D-1”?;蛘呖墒褂脭?shù)學(xué)運(yùn)算符號(hào)來設(shè)置密碼,如“5*5+5=30? Yes! ”。

(4)此外可以對(duì)自己的密碼進(jìn)行安全級(jí)別區(qū)分,銀行、郵箱的密碼級(jí)別最高,社交網(wǎng)站等相對(duì)較低,論壇登錄等則更低。不同級(jí)別的密碼千萬不要設(shè)置成一樣。對(duì)于級(jí)別高的密碼不僅僅要設(shè)置得相對(duì)復(fù)雜,更要注意定時(shí)修改。

普通網(wǎng)民面臨的互聯(lián)網(wǎng)安全風(fēng)險(xiǎn)越來越嚴(yán)重,在目前大多數(shù)場(chǎng)景還是只能依靠小小的密碼保護(hù)我們的情況下,這根唯一的稻草,需要我們用心對(duì)待。

jquery實(shí)現(xiàn)密碼強(qiáng)度的智能判斷特效是一款非常實(shí)用的jquery特效,基本上每個(gè)有會(huì)員模塊的網(wǎng)站都可用上,可以提示會(huì)員注冊(cè)時(shí)輸入的密碼強(qiáng)度,其主要用到了keyup事件。

jquery核心代碼如下:

function checkPassword(pwdinput) {
        var maths, smalls, bigs, corps, cat, num;
        var str = $(pwdinput).val()
        var len = str.length;
        var cat = /.{16}/g
        if (len == 0) return 1;
        if (len > 16) { $(pwdinput).val(str.match(cat)[0]); }
        cat = /.*[\u4e00-\u9fa5]+.*$/
        if (cat.test(str)) {
            return -1;
        }
        cat = /\d/;
        var maths = cat.test(str);
        cat = /[a-z]/;
        var smalls = cat.test(str);
        cat = /[A-Z]/;
        var bigs = cat.test(str);
        var corps = corpses(pwdinput);
        var num = maths + smalls + bigs + corps;
        if (len < 6) { return 1; }
        if (len >= 6 && len <= 8) {
            if (num == 1) return 1;
            if (num == 2 || num == 3) return 2;
            if (num == 4) return 3;
        }
        if (len > 8 && len <= 11) {
            if (num == 1) return 2;
            if (num == 2) return 3;
            if (num == 3) return 4;
            if (num == 4) return 5;
        }
        if (len > 11) {
            if (num == 1) return 3;
            if (num == 2) return 4;
            if (num > 2) return 5;
        }
    }
    function corpses(pwdinput) {
        var cat = /./g
        var str = $(pwdinput).val();
        var sz = str.match(cat)
        for (var i = 0; i < sz.length; i++) {
            cat = /\d/;
            maths_01 = cat.test(sz[i]);
            cat = /[a-z]/;
            smalls_01 = cat.test(sz[i]);
            cat = /[A-Z]/;
            bigs_01 = cat.test(sz[i]);
            if (! maths_01 && ! smalls_01 && ! bigs_01) { return true; }
        }
        return false;
    }

效果如圖4-21所示。

圖4-21 jquery實(shí)現(xiàn)密碼強(qiáng)度的智能判斷特效

4.3.4 采用多重安全機(jī)制實(shí)現(xiàn)多因素驗(yàn)證

盡管多因素身份驗(yàn)證和多層身份驗(yàn)證是有優(yōu)勢(shì)的,但是大多數(shù)解決方案使用相同的底層網(wǎng)絡(luò)安全機(jī)制實(shí)現(xiàn)它們,這會(huì)造成問題,在安全需求嚴(yán)格的環(huán)境中尤其如此。例如,大多數(shù)基于Web的銀行系統(tǒng)使用SSL/TLS或HTTPS協(xié)議(Secure HyperText Transfer Protocol)作為底層網(wǎng)絡(luò)安全機(jī)制實(shí)現(xiàn)基本的兩因素身份驗(yàn)證。

為了成功地登錄這種系統(tǒng),最終用戶通常需要以下驗(yàn)證因素。

(1)提交正確的密碼(所需的身份驗(yàn)證信息是用戶應(yīng)該知道的某種信息)。這是第一個(gè)身份驗(yàn)證因素。

(2)提交用戶的ATM卡號(hào)的最后四位(所需的身份驗(yàn)證信息是用戶擁有的某種東西)。這是兩因素身份驗(yàn)證的第二個(gè)因素,系統(tǒng)假設(shè)只有用戶能夠看到自己的ATM卡。

在這些情況下,兩因素身份驗(yàn)證能夠提高系統(tǒng)的安全性。要想入侵系統(tǒng),黑客不但必須猜出用戶的密碼,還必須獲得ATM卡的號(hào)碼。這聽起來安全多了。但是要注意一點(diǎn):對(duì)于兩因素身份驗(yàn)證的兩個(gè)因素,系統(tǒng)使用相同的底層安全機(jī)制(SSL/TLS/HTTPS)實(shí)現(xiàn)網(wǎng)絡(luò)身份驗(yàn)證。這會(huì)帶來幾個(gè)問題:如果黑客攻破了底層安全機(jī)制本身,會(huì)怎么樣?如果黑客在安全機(jī)制中發(fā)現(xiàn)了一個(gè)漏洞,讓他可以破解身份驗(yàn)證,而不需要了解用戶的身份驗(yàn)證信息,會(huì)怎么樣?如果有人利用安全機(jī)制的某些未知的限制破解了它,會(huì)怎么樣?因?yàn)閮梢蛩厣矸蒡?yàn)證的兩個(gè)因素使用相同的底層安全機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)身份驗(yàn)證,雙重身份驗(yàn)證的優(yōu)勢(shì)完全被抵消了。這會(huì)帶來風(fēng)險(xiǎn),對(duì)于需要非常安全的解決方案的系統(tǒng),這可能是很嚴(yán)重的問題。

為了解決這個(gè)問題,這里推薦一種方法。實(shí)現(xiàn)多因素身份驗(yàn)證的系統(tǒng)應(yīng)該對(duì)不同的因素使用不同的底層安全機(jī)制,這會(huì)顯著降低風(fēng)險(xiǎn)。例如,如果兩因素身份驗(yàn)證的第一個(gè)因素使用Kerberos作為底層網(wǎng)絡(luò)安全機(jī)制,第二個(gè)因素使用LIPKEY(一種使用SPKM的Low Infrastructure Public Key Mechanism, RFC 2847)或NTLM(NT LAN Manager,一種Microsoft身份驗(yàn)證協(xié)議)作為底層網(wǎng)絡(luò)安全機(jī)制,那么黑客必須破解兩種完全不同的安全機(jī)制,這加大了入侵的難度,降低了風(fēng)險(xiǎn)。這種方法通過降低風(fēng)險(xiǎn)增強(qiáng)了系統(tǒng)的總體安全性。對(duì)于實(shí)現(xiàn)多層身份驗(yàn)證的系統(tǒng),也是如此。

可以使用GSS-API實(shí)現(xiàn)多因素身份驗(yàn)證,從而實(shí)現(xiàn)使用多種安全機(jī)制的多因素身份驗(yàn)證。這種技術(shù)組合可以降低使用相同底層安全機(jī)制實(shí)現(xiàn)多因素身份驗(yàn)證解決方案的風(fēng)險(xiǎn)。通過使用GSS-API,系統(tǒng)可以對(duì)多因素身份驗(yàn)證的不同因素使用不同的底層安全機(jī)制。只需在GSS-API握手過程中指定適當(dāng)?shù)呐c機(jī)制相關(guān)的對(duì)象標(biāo)識(shí)符(OID),就可以顯式地聲明應(yīng)用程序?qū)τ谏矸蒡?yàn)證使用的底層安全機(jī)制。例如,在實(shí)現(xiàn)兩因素身份驗(yàn)證的系統(tǒng)中,對(duì)于第一個(gè)身份驗(yàn)證因素,開發(fā)人員可以向GSS-API傳遞一個(gè)特定的安全機(jī)制OID(如Kerberos);身份驗(yàn)證成功之后,再用另一個(gè)安全機(jī)制OID(如LIPKEY)發(fā)起用于第二個(gè)身份驗(yàn)證因素的GSS-API身份驗(yàn)證握手。因?yàn)镵erberos機(jī)制(基于純粹的對(duì)稱密鑰技術(shù))和LIPKEY機(jī)制(基于對(duì)稱和非對(duì)稱密鑰技術(shù))很不一樣,黑客很難同時(shí)破解這兩種機(jī)制。因此,這種系統(tǒng)降低了使用單一安全機(jī)制實(shí)現(xiàn)兩因素身份驗(yàn)證的風(fēng)險(xiǎn)。

圖4-22說明了如何使用GSS-API框架為兩因素身份驗(yàn)證顯式地指定兩種不同的安全機(jī)制,從而為UNIX系統(tǒng)提供更安全的身份驗(yàn)證。要想入侵這樣的系統(tǒng),黑客必須破解兩種完全不同的安全機(jī)制而不是一種,因此提高了安全性。

圖4-22 GSS-API框架為兩因素身份驗(yàn)證顯式地指定兩種不同的安全機(jī)制

主站蜘蛛池模板: 和政县| 汕头市| 广平县| 遂平县| 靖州| 西丰县| 稷山县| 大田县| 城口县| 塘沽区| 旅游| 贡觉县| 贞丰县| 新乡县| 阿克| 荣昌县| 武宁县| 广州市| 清苑县| 亚东县| 青阳县| 贵阳市| 木里| 赤峰市| 宁德市| 金昌市| 永仁县| 福泉市| 铜山县| 巢湖市| 盐亭县| 佛教| 漳平市| 横山县| 龙南县| 临夏市| 林西县| 汝南县| 油尖旺区| 关岭| 和硕县|