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