程元斌
江漢大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 湖北 430056
網(wǎng)絡(luò)釣魚是在線身份竊取的一種。在線身份竊取(Identity Theft)指的是直接通過網(wǎng)絡(luò)環(huán)境竊取代表他人個(gè)人身份的數(shù)據(jù)信息(例如身份證號(hào)碼、信用卡號(hào)碼、賬戶信息和密碼等)的行為。盡管早期的案例主要在美國(guó)發(fā)生,但隨著我國(guó)因特網(wǎng)服務(wù)日漸普遍,近年來(lái),網(wǎng)絡(luò)釣魚成為了在線身份竊取的主流。
關(guān)于網(wǎng)絡(luò)釣魚,百度百科是這樣定義的:“網(wǎng)絡(luò)釣魚攻擊者利用欺騙性的電子郵件和偽造的 Web站點(diǎn)來(lái)進(jìn)行網(wǎng)絡(luò)詐騙活動(dòng),受騙者往往會(huì)泄露自己的私人資料,如信用卡號(hào)、銀行卡賬戶、身份證號(hào)等內(nèi)容。詐騙者通常會(huì)將自己偽裝成網(wǎng)絡(luò)銀行、在線零售商和信用卡公司等可信的品牌,騙取用戶的私人信息”。指出“最典型的網(wǎng)絡(luò)釣魚攻擊”是釣魚者通過電子郵件或其他方式將收信人或?yàn)g覽者“引誘到一個(gè)通過精心設(shè)計(jì)的與目標(biāo)組織的網(wǎng)站非常相似的釣魚網(wǎng)站上,并獲取收信人在此網(wǎng)站上輸入的個(gè)人敏感信息,通常這個(gè)攻擊過程不會(huì)讓受害者警覺”。正因?yàn)槠渚哂泻艽蟮钠垓_性,用戶一旦上當(dāng),往往會(huì)造成很大的損失。據(jù)中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心聯(lián)合國(guó)家互聯(lián)網(wǎng)應(yīng)急中心發(fā)布的《2009年中國(guó)網(wǎng)民網(wǎng)絡(luò)信息安全狀況調(diào)查報(bào)告》報(bào)道,2009年有超過九成網(wǎng)民遇到過網(wǎng)絡(luò)釣魚,在遭遇過網(wǎng)絡(luò)釣魚事件的網(wǎng)民中,4500萬(wàn)網(wǎng)民蒙受了經(jīng)濟(jì)損失,占網(wǎng)民總數(shù)11.9%。網(wǎng)絡(luò)釣魚給網(wǎng)民造成的損失已達(dá)76億元。
要防止網(wǎng)絡(luò)釣魚,最重要的是讓用戶能夠識(shí)別網(wǎng)站的真?zhèn)巍5?,人總有疏忽的時(shí)候,況且,大多數(shù)人都沒有觀察地址欄或狀態(tài)欄的習(xí)慣,甚至沒有詳記網(wǎng)址的習(xí)慣。所以,盡管網(wǎng)絡(luò)釣魚已不是新鮮事,盡管有關(guān)部門一再提醒人們當(dāng)心,然而網(wǎng)絡(luò)釣魚事件依然經(jīng)常發(fā)生,甚至有愈演愈烈的趨勢(shì)。針對(duì)這個(gè)問題,本文提出一種方法,可以讓用戶很自然地觀察到網(wǎng)站的真?zhèn)?,從而可有效防止釣魚網(wǎng)站的欺騙。
當(dāng)用戶訪問一個(gè)網(wǎng)站時(shí),確切地說,是當(dāng)用戶想要確認(rèn)網(wǎng)站的真實(shí)性時(shí),或者網(wǎng)絡(luò)服務(wù)本身需要用戶了解網(wǎng)站的真實(shí)性時(shí),例如當(dāng)網(wǎng)絡(luò)銀行要求用戶輸入用戶口令等關(guān)鍵信息時(shí),由用戶先輸入一個(gè)私數(shù),并且將這個(gè)私數(shù)發(fā)送到服務(wù)器,服務(wù)器接著返回一組與此私數(shù)相關(guān)聯(lián)的防釣碼,用戶看到這組防釣碼,便知網(wǎng)站真假。這里,假定該用戶已經(jīng)用同一個(gè)私數(shù)測(cè)試過(或登錄過)該網(wǎng)站,且測(cè)試時(shí)的情況是真實(shí)的。這樣,當(dāng)用戶使用與以前相同的私數(shù)時(shí),如果網(wǎng)站是真實(shí)的,則看到的防釣碼一定是相同的;如果看到的防釣碼不同,則肯定是釣魚網(wǎng)站無(wú)疑。
這里,所謂“私數(shù)”,即只需要用戶自己記住的數(shù),理想的情況是只有用戶自己知道的數(shù);它可以是一個(gè)真正的數(shù),也可以是一個(gè)字符串,而且通常是一個(gè)字符串。私數(shù)有以下幾個(gè)特性:其一,它不需要存入服務(wù)器數(shù)據(jù)庫(kù)中;其二,用戶即使忘記了也無(wú)大礙,可隨時(shí)另設(shè)一個(gè);其三,它可以用用戶容易記住的數(shù)而不帶來(lái)新的安全問題;其四,一個(gè)用戶可以為自己設(shè)立一個(gè)或幾個(gè)私數(shù)而任意交替使用。
所謂“防釣碼”是一組與私數(shù)相關(guān)聯(lián)的網(wǎng)站標(biāo)識(shí),因?yàn)槭菫榉婪夺烎~網(wǎng)站而設(shè),所以稱之為“防釣碼”。防釣碼的基本特性是即使對(duì)同一個(gè)網(wǎng)站,不同用戶所看到的防釣碼通常也是不同的。這樣,就使得釣魚網(wǎng)站制作者不可能通過自身體驗(yàn)獲取偽造目標(biāo)網(wǎng)站所需的必要信息。一組防釣碼可以由若干個(gè)文字或若干個(gè)圖形或若干個(gè)圖像組成或者由這些元素混合而成。一個(gè)網(wǎng)站的防釣碼的生成完全由該網(wǎng)站自由設(shè)計(jì)的秘密算法生成,私數(shù)相同則防釣碼相同。雖不能(也不需要)保證每個(gè)用戶所看到的同一個(gè)網(wǎng)站的防釣碼都是兩兩不同的,但通過防釣碼算法的精心設(shè)計(jì),至少可以保證由不同私數(shù)產(chǎn)生相同防釣碼的概率是極小的。
需要注意的是,用戶選擇的私數(shù)應(yīng)有一定的長(zhǎng)度且不容易被猜測(cè)到。這是因?yàn)獒烎~網(wǎng)站制作者有可能通過私數(shù)體驗(yàn)法獲取一些釣魚碼,即釣魚網(wǎng)站制作者先猜測(cè)一般用戶可能使用哪些私數(shù),然后逐個(gè)輸入這些私數(shù)登錄目標(biāo)網(wǎng)站以獲取與這些私數(shù)對(duì)應(yīng)的防釣碼,然后在釣魚網(wǎng)站中也讓用戶輸入私數(shù),如果用戶輸入的私數(shù)是釣魚網(wǎng)站制作者所體驗(yàn)過的那些私數(shù)中的,釣魚網(wǎng)站就可以返回與這此私數(shù)對(duì)應(yīng)的防釣碼以欺蒙用戶,這樣十有八九就會(huì)讓用戶中招了。顯然,用戶選擇的私數(shù)越長(zhǎng)越不一般,則落入釣魚網(wǎng)站制作者猜測(cè)陷阱的可能性越小。
之所以要“先輸入一個(gè)私數(shù)”,是因?yàn)槿粲脩舸蜷_的是一個(gè)釣魚網(wǎng)站,如果等到輸入了用戶口令后再輸入私數(shù),則可能釣魚網(wǎng)站已經(jīng)將用戶信息取走了。所以,需要在網(wǎng)頁(yè)上增加一個(gè)“私數(shù)”輸入框,讓用戶先輸入一個(gè)數(shù)或字符串,待用戶確認(rèn)網(wǎng)站的真實(shí)性后才能輸入關(guān)鍵數(shù)據(jù)。
當(dāng)用戶訪問網(wǎng)站W(wǎng)時(shí),W首先返回包括圖1所示部分的網(wǎng)頁(yè)。
圖1中,標(biāo)簽“私數(shù)”、“賬號(hào)”、“口令”右邊是輸入控件,目前只有私數(shù)輸入控件處在可用狀態(tài),并顯示出關(guān)于私數(shù)輸入的簡(jiǎn)要說明;標(biāo)簽“防釣碼”右邊是顯示防釣碼的顯示控件,目前顯示的是關(guān)于防釣碼的簡(jiǎn)要說明;用戶點(diǎn)擊私數(shù)與防釣碼兩行右端的按鈕時(shí),將以彈出窗口的形式顯示私數(shù)或防釣碼及其使用方法的詳細(xì)說明。
圖1 起始頁(yè)面之一部分
然后,在客戶端——一般即為瀏覽器——執(zhí)行圖2所示流程。其中,MD5是一種著名的報(bào)文摘要算法,這里借用它將用戶輸入的私數(shù)變換為一個(gè)長(zhǎng)度為128比特的數(shù)md。這樣,一方面可以防范攻擊者通過竊聽獲取用戶的私數(shù),另一方面也使得生成防釣碼的計(jì)算更為方便。
圖2 防釣流程
服務(wù)器收到md后,即以md為自變量,使用防釣碼生成算法生成防釣碼AP;然后向客戶端返回AP。防釣碼生成算法將在下一節(jié)討論。
客戶端收到AP后,即將防釣碼標(biāo)簽的內(nèi)容更換為AP,同時(shí)將賬號(hào)輸入控件與口令輸入控件的狀態(tài)置為可用。如果用戶斷定網(wǎng)站為真實(shí)的,即可輸入賬號(hào)、口令等,執(zhí)行登錄了。
需要特別注意的是,整個(gè)過程必須自始至終使用Session或其它會(huì)話機(jī)制,以保持整個(gè)過程的整體性、可控性,防止過程嵌入攻擊,即防止釣魚網(wǎng)站可能利用 HTTP的無(wú)狀態(tài)(Stateless)特性進(jìn)行的下述攻擊:給出圖1相同的界面,待用戶輸入私數(shù)后,提交md給目標(biāo)網(wǎng)站服務(wù)器,得到服務(wù)器返回的防釣碼AP顯示出來(lái),即極可能騙過用戶。
防釣碼的生成可以有各種算法,但有一些需要考慮的問題。
先考慮防釣碼的形式。防釣碼的形式,可以有多種,筆者認(rèn)為比較好的是圖像組或漢字組,因?yàn)槠鋽?shù)量大組合多,重復(fù)概率小。圖像是形象的東西,比較容易記;而中國(guó)人記漢字也比較容易。所以,本例取國(guó)標(biāo)GB2312-80中的一級(jí)漢字的子集作為標(biāo)識(shí)源,將所選子集存到數(shù)組 ch[N]中;N應(yīng)在1000以上,這里不妨設(shè)N=3000。
再考慮防釣碼的長(zhǎng)度 L。以標(biāo)識(shí)源有 1000個(gè)元素(N=1000)為例,若釣魚者用私數(shù)體驗(yàn)法獲取的一個(gè)釣魚碼做了一個(gè)固定的假網(wǎng)站標(biāo)識(shí),則當(dāng)L=3時(shí),真網(wǎng)站標(biāo)識(shí)與假網(wǎng)站標(biāo)識(shí)相同的概率不到10003分之一,即10億分之一??梢姡烎~者想用假網(wǎng)站標(biāo)識(shí)進(jìn)行欺騙,成功率是微乎其微的。即使釣魚者用私數(shù)體驗(yàn)法獲取了 1000個(gè)釣魚碼做了一個(gè)假網(wǎng)站,當(dāng)L=3時(shí),真網(wǎng)站標(biāo)識(shí)與假網(wǎng)站標(biāo)識(shí)相同的概率也只有百萬(wàn)分之一。本例中L根據(jù)私數(shù)取3到7之間的一個(gè)數(shù)。不過顯然,用戶只要記牢其中的2到3個(gè)漢字就差不多了。
其三是要分析出私數(shù)與防釣碼之間的生成規(guī)律在計(jì)算上是不可行的,所以算法不應(yīng)過于簡(jiǎn)單。
另外,也應(yīng)考慮計(jì)算速度,算法也不要太復(fù)雜。
圖3是用類C語(yǔ)言描述的一種防釣碼生成算法。其中,輸入為客戶端提交的用戶輸入的私數(shù)的MD5摘要值,算法中假設(shè)漢字?jǐn)?shù)組ch[N]已事先生成。建議用C#實(shí)現(xiàn)。
為方便讀者,下面給出C語(yǔ)言編寫的ch[N]生成函數(shù):
注:起始漢字可以是任一漢字,漢字在漢字?jǐn)?shù)組 ch[N]中的排列也可以是任意的,可以通過編程改變。
圖3 防釣碼生成算法舉例
(1) 隱藏網(wǎng)頁(yè)代碼
隱藏網(wǎng)頁(yè)代碼可以防范釣魚網(wǎng)站制作者通過對(duì)目標(biāo)網(wǎng)站代碼進(jìn)行拷貝、分析、修改、替換,從而防止攻擊者采用文獻(xiàn)[1]所述的直接將釣魚網(wǎng)頁(yè)替換目標(biāo)網(wǎng)站服務(wù)器上的真實(shí)網(wǎng)頁(yè)。盡管從萬(wàn)維網(wǎng)的根本機(jī)制上講,所有不受瀏覽器約束的網(wǎng)頁(yè)代碼都是不可能真正隱藏起來(lái)的,不過,已經(jīng)開發(fā)出來(lái)的網(wǎng)頁(yè)代碼隱藏手段至少可以大大增加攻擊的難度。文獻(xiàn)[5]較好地介紹了目前流行的一種代碼隱藏技術(shù)。
(2) 直接在客戶端生成防釣碼
如果能較好的使用代碼隱藏手段于本方法,不僅能提高本方法的抗攻擊能力,而且有可能直接在客戶端生成防釣碼,這無(wú)疑能進(jìn)一步提高網(wǎng)絡(luò)應(yīng)用程序的效能。
(3) 顯示位置與大小可變的防釣碼
實(shí)際上,防釣碼元素(文字、圖形等)的顯示位置與大小也可以是防釣碼的一個(gè)組成部分。這樣做顯然可進(jìn)一步增加攻擊者的難度,卻不會(huì)增加用戶的記憶難度。
本文所描述的網(wǎng)上釣魚方法只是各種網(wǎng)絡(luò)在線身份竊取方法之一;本文所提出的防范釣魚網(wǎng)站的方法也僅是針對(duì)一般意義上的釣魚網(wǎng)站。在各種網(wǎng)絡(luò)在線身份竊取方法中,一種與釣魚網(wǎng)站效果相仿的網(wǎng)站是特別值得用戶警惕的:攻擊者的這種網(wǎng)站是真實(shí)的,它是利用許多用戶喜歡用同一組賬號(hào)口令注冊(cè)不同的網(wǎng)站的習(xí)慣,利用正常獲取的這些賬號(hào)口令嘗試登錄一些可獲利的網(wǎng)站。所以,當(dāng)注冊(cè)到一些利益相關(guān)重要網(wǎng)站時(shí),一定要使用不同的賬號(hào)與口令。文獻(xiàn)[6]與文獻(xiàn)[7]描述了兩種應(yīng)對(duì)在線身份竊取的一般性方法,可同時(shí)應(yīng)對(duì)各種在線身份竊取攻擊,但尚停留在理論研究階段,需要制定相應(yīng)的網(wǎng)絡(luò)協(xié)議才能實(shí)施。本文所述的方法則只須依靠網(wǎng)站自身的設(shè)計(jì)就可實(shí)現(xiàn)。
[1]陳達(dá).網(wǎng)絡(luò)釣魚的現(xiàn)狀、方式及防范初探[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用.2008.
[2]白潔,李雪,胡曉荷.直面網(wǎng)絡(luò)安全最新威脅:網(wǎng)絡(luò)釣魚[J],信息安全與通信保密.2007.
[3]百度百科.網(wǎng)絡(luò)釣魚.http://baike.baidu.com,/view/77554.htm. 2010.
[4]中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心.國(guó)家互聯(lián)網(wǎng)應(yīng)急中心.2009年中國(guó)網(wǎng)民網(wǎng)絡(luò)信息安全狀況調(diào)查報(bào)告.2010.
[5]李用江,劉丹斌.分部類在構(gòu)建.NET應(yīng)用程序中的應(yīng)用研究[J].湖南科技學(xué)院學(xué)報(bào).2008.
[6]江漢大學(xué),程元斌.具有私密保護(hù)及口令找回功能的身份認(rèn)證方法:中國(guó),ZL 200710053701.1[P]2010. http://www.sipo. gov.cn.
[7]Cheng Yuanbin. An Authentication Protocol Fusing User’s and Server’s Data.DCABES 2010,2010[C].United States,IEEE Computer Society 2010.