Nov 1, 2007

Initialization Vector(IV, 初始向量)

在許多無線區網中,WEP鍵值(key)被描述成一個字或位元串,用來給整個網路做認證用。

目前WEP使用2種編碼大小,分別是64與128位元,其中包含了24位元的初始向量(IV,Initialization Vector)與實際的秘密鍵值(40與104位元)。大家耳熟能詳的40位元編碼模式,其實相當於64位元編碼。這標準中完全沒有考慮到鍵值的管理問題;唯一的要求是,無線網卡與基地台必須使用同樣的演算法則。通常區網的每一個使用者都會使用同樣的加密鍵值;然而,區網使用者會使用不同的IV,以避免封包總是使用同樣WEP鍵值所「隨機」產生的RC4內容。

在封包送出之前,會經過一個「忠誠檢查(IC,Integrity Check)」,產生一個驗證碼,其作用是避免資料在傳輸過程中,遭到駭客竄改。RC4接下來會從秘密鍵值與IV處,產生一個keystream,再用這個keystream對資料與IC做互斥運算(XOR,Exclusive-Or)。首先IV會以一般文字方式傳送出去,然後才是加密後的資料。只要將IV、已知的鍵值、以及RC4的keystream再做一次互斥運算,我們就可以將資料還原。

40或64位元編碼可以填入4組鍵值;然而我們只使用了第一組。

WEP編碼的弱點在於IV實作的基礎過於薄弱。例如說,如果駭客將兩個使用同樣IV的封包記錄起來,再施以互斥運算,就可以得到IV的值,然後算出RC4的值,最後得到整組資料。

如果我們使用的初始向量為24位元,那我們就可以在繁忙的網路點上(例如以11Mbps的頻寬,不斷傳送1500位元組的封包),以不到5小時的光景算出結果。以這樣的例子來說,總資料量為24GB。因此,要在幾小時的時間內,記錄所有傳輸的封包,並以筆記型電腦算出其結果,是絕對可行的事情。

由於這標準並沒有規定IV所產生的相關事宜,所以並不是每家廠商都用到IV的24個位元,並在短時間內就重複用到相同的IV,好讓整個程序快一點。所以駭客所要記錄的封包就更少了。以Lucent(朗訊)的無線網卡來說,每次啟動時它就會將IV的初始值設為0,然後再往上遞增。駭客只要記錄無線網路上幾個使用者的資料內容,馬上就可以找到使用同樣IV的封包。

Fluhrer、Martin、Shamir三人也發現,設計不良的IV有可能會洩漏鍵值的內容(信心水準為5%),所以說只要記錄400~600萬個封包(頂多8.5 GB的資料量),就有可能以IV來算出所有的WEP鍵值。

更進一步探討,如果WEP鍵值的組合不是從16進位表,而是從ASCII表而來,那麼因為可用的字元數變少,組合也會變少。那麼駭客猜中的機率就會大增,只要一兩百萬個封包,就可以決定WEP的值。

網路上可找到的入侵工具

Adam Stubblefield在其論文中詳盡的描述了整個過程,卻僅限於理論;但現在網路上四處可見這些免費的入侵工具程式。與Stubblefield所提的類似,所有程式支援的幾乎清一色是Prism-2晶片。使用這晶片的包括了Compaq(康柏)WL100、友訊(D-Link)DWL-650、Linksys WPC11、以及SMC 2632W等,都是市面上常見的產品。會選用這晶片的原因是因為其Linux驅動程式(WLAN-NG)不需要登入網路,即可監聽封包。這程式會先搜尋設計不良、有漏洞的IV,然後記錄500~1,000萬不等的封包,最後在剎那間將WEP鍵算出來。

駭客可以採取主動式攻擊

由於以上所說的被動式攻擊(單純的紀錄封包)十分可靠、有效,所以主動式攻擊反而失去了其重要性。不過毫無疑問的,駭客也可以主動的侵入網路,竊取資料。我們假設駭客知道了原始資料及加密後的資料,收訊方會將這些資訊視為正確無誤。接下來駭客就可以在不需要知道鍵值的情形下,將資料偷天換日,而收訊方仍然會將這些資料當成正確的結果。同樣的,我們還是使用了互斥運算。

可能駭客會動手腳的不是資料,而是收訊方的IP位址。幾乎所有的無線網路都會連上網際網路,駭客就可以抽換IP位址,將資料送往外界;在經過無線基地台時,這些資料就會被解碼,然後以純文字方式轉送到駭客指定的地方去。
Post a Comment