Aircrack-ngを使う前に、無線LANとその安全性についての整理。
---
このコンテンツと関係のあるコンテンツはこちら。
Aircrack-ng のページ
Aircrack-ng newbie guide のページ
---
Aircrack-ngやその他、無線LANに関係するツールを使う際、3〜4文字のアルファベットや聞き慣れない言葉がしばしば出てきて、ちょっと混乱します。
そこで、わりとしっかり整理。
よく出てくるアルファベット3〜4文字のキーワードのほとんどは認証や暗号にまつわる用語が多いので、必然的にその周辺についてのまとめとなります。
もちろん全部知らなくても、ツールは使えますが、知っているとエラーメッセージの意味がわかりトラブルシュートがうまくゆくかもしれません。
無線LANによる通信には2つの方式があります。
・アドホックモード
アクセスポイントを介さずに無線LAN機器同士が通信を行います。
・インフラストラクチャモード
アクセスポイントと無線LAN機器が通信を行います。アクセスポイント
内部でのブリッジにより、実質的に無線LAN機器同士が通信している
ように見えます。
1台のアクセスポイントとその電波到達範囲に存在するコンピュータで構成されたネットワークをBSS(Basic Service Set)と呼びます。
BSSにはそれらを区別するための48bitのIDがつけられ、BSSIDと呼ばれます。BSSIDは通常アクセスポイントのMACアドレスが利用されます。
BSSに所属するアクセスポイントとコンピュータは同じSSID(Service Set ID)と呼ばれるIDが設定される必要があります。
SSIDは最大32文字までの任意の英数字を設定できます。
またBSS同士が接続されたネットワークとBSSを構成するコンピュータの集合をESS(Extended Service Set)と呼びます。
ESS内で設定されたSSIDはESSIDと呼ばれます。
無線LANでローミングを実現する場合、ESS内で同じESSIDを設定する必要があります。
以降では簡単のために、インフラストラクチャモードで考え、1台を無線LANアクセスポイント、もう1台を無線LAN機能付きのコンピュータとしておきましょう。
アクセスポイントとコンピュータが無線通信を行うには、おおざっぱに
・アクセスポイントから送信されたビーコン情報を元に利用できるチャネル、ESSIDの情報がコンピュータで保持される。
または、コンピュータからESSIDをブロードキャストし、チャネル情報を得る。
・アクセスポイントとコンピュータが互いに認証を行う。
・アクセスポイントとコンピュータが互いにアソシエーションを行う。
・暗号化したデータを伝送する。
このような手順が必要です。
ここで無線LANで登場する主な暗号化方式のおさらいです。
3文字言葉のオンパレードです。
WEP(Wired Equivalent Privacy)
WEPでは暗号化アルゴリズムにストリーム暗号のRC4を用います。
ストリーム暗号では暗号化・復号化の際に秘密鍵や初期化ベクトル(IV)をシードとしてキーストリームと呼ばれる任意長の疑似乱数系列を生成します。
キーストリームZと平文Pの排他的論理和(XOR)で暗号文Cが得られます。(Z XOR P = C)
復号化には暗号文CとキーストリームZの排他的論理和をとることにより、平文Pが得られます。(C XOR Z = P)
疑似乱数発生アルゴリズムは2段階に分かれ、KSA(Key Scheduling Algorithm)と呼ばれる、疑似乱数発生器の内部状態を初期化するアルゴリズムと、PRGA(Pseudo-Random Generation Algorithm)と呼ばれる、内部状態からキーストリームを生成するアルゴリズムです。
RC4ではKSA、PRGAともに内部状態の要素を定められた手法で十分に攪拌するアルゴリズムです。
KSAに秘密鍵とIVを入力することにより初期化された内部状態を初期状態と呼びます。
初期状態をPRGAに入力することでキーストリームを出力します。
暗号アルゴリズムとしてRC4を用いるWEPですが、暗号としてのRC4とは異なります。
WEPではパケットごとに、WEPキーと呼ばれる5文字(40bit)または13文字(104bit)の文字列と24bitの初期化ベクトル(IV)を結合し、合計64bitまたは128bitのセッション鍵をKSAに入力し内部状態を初期化、PRGAにより256byte分のキーストリームを生成します。
[IV 24bit]+[WEPキー:秘密鍵 40/104bit]=[セッション鍵 64/128bit]
[セッション鍵 64/128bit]→【KSA】→【PRGA】→[キーストリーム]
ストリーム暗号に対する攻撃手法は、総当たり攻撃に加え、次の4つが存在します。
・識別攻撃
・出力予想攻撃
・内部状態復元攻撃
・鍵復元攻撃
総当たり攻撃、いわゆるブルートフォースアタックにおいて n bit のセッション鍵を用いた場合の計算量は2^nですが、その計算量よりも少ない計算量での解読法が発見された場合、その暗号は「安全でない」といえます。
ストリーム暗号の安全性は平文の一部を推測可能という条件の下で評価されます。
平文の一部Pが得られているとき、スニッフした暗号文の一部Pを利用することにより、
P XOR C = P XOR (Z XOR P) = P XOR (P XOR Z) = φ XOR Z = Z
と、キーストリームの一部Zを得ることが可能です。
P XOR C = Z
Z XOR P = C
C XOR Z = P
これらから、P、C、Zのうち二つが得られれば残りの一つが得られることが判ります。
重要な点は、キーストリームの品質がストリーム暗号の安全性を左右すると言うことです。
たとえば、キーストリームの一部から他のキーストリームが得られれば、上記排他論理和の通り、対応する平文が得られますし、キーストリームの一部から秘密鍵や初期状態を得られるのであればキーストリーム全てが解けるため、暗号文は解読されてしまいます。
4つの攻撃手法の中で脅威になるものは、キーストリームの一部から初期状態を復元し、そこからキーストリーム全体を解く「内部状態復元攻撃」と、キーストリームの一部から秘密鍵を解く「鍵復元攻撃」です。
ここで、実際のWEPフレームを見てみますと、初期化ベクトル(IV)が平文で格納されていることがわかります。
したがって、64bitまたは128bitのWEP鍵のうち24bitはパケットごとに変わりますが平文なので容易に取得できることと、残り40bitまたは104bitのWEPキーは通常固定されていることになります。
RC4では同じIVからは同じ鍵が作られますから、同じキーストリームが生成されます。
IVは24bit、つまり16777216通りあることになりますが、一定の条件を満たすIVはキーストリームとIV、WEP鍵との間に強い相関があることが示されています。
いわゆるWeakIVと呼ばれるものですが、このIVを利用してキーストリームを作成した場合、キーストリームの先頭にWEP鍵の情報が漏れ、鍵の全数検索に比べ少ない計算量で鍵を算出することが可能で、鍵復元攻撃の一種でFMS攻撃と呼ばれ、多くのクラッキングツールに組み込まれています。
さらにこの相関について、理想的な暗号である場合の相関との偏差を利用し、効率的に鍵を推定する方法が生み出され、PTW攻撃と呼ばれています。
この偏差を評価するための式を攻撃方程式または攻撃関数 A と呼び、A[i] は K[i] の推定値を意味します。
PTW攻撃では、内部状態とキーストリームの相関について、理想的な暗号である場合と相関がある場合での偏差を利用するため、実際に使われたキーストリームが必要となります。
実際にスニッフできるのはキーストリームと平文との排他的論理和(Z XOR P = C)しか得られないので、それでは困ることになるわけですが、特定のパケットについては一部のデータフレームが知られており、つまり平文Pが判ることになるため、P XOR C = Z からキーストリームを特定することが可能です。
ここで言う特定のパケットとは、たとえば、ARPパケットがそれに該当します。
ARPパケットのLLC/SNAPヘッダは、 AA-AA-03-00-00-00-08-06 で固定されており、さらにその後の8バイトもリクエスト時は、00-01-08-00-06-04-00-01で固定、レスポンス時は00-01-08-00-06-04-00-02で固定という具合に、固定されています。
これを用いることにより、キーストリームの頭16byte分が得られます。
またそれに対応する初期化ベクトルは平文で入手できます。
セッション鍵Kを24bitの初期化ベクトルIVと104bitの秘密鍵Rkとするとき、K[]、IV[]、Rk[]を8bitの変数として、
セッション鍵 K = { K[0], K[1], … ,K[15] }
初期化ベクトル IV = { IV[0], IV[1], IV[2] }
秘密鍵 Rk = { Rk[0], Rk[1], … ,Rk[12] }
{K[0], K[1], K[2], K[3], … ,K[15] } = { IV[0], IV[1], IV[2], Rk[0], … , Rk[12] }
と表せます。
一方、RC4では、時刻 t におけるKSAの内部状態 S(t) は2つのポインタ i, j と K[x] (x = 0,1, … ,15) の関係式で与えられており、S(3) は IV[0], IV[1], IV[2] を用いて計算できます。
ARPパケットからキーストリーム Z = { Z[0], Z[1], …, Z[15] } が得られ、PTW攻撃関数 A[i] の定義から、S(3)と得られたキーストリームZより、A[0], A[1], …, A[12] が計算できます。
得られたARPパケットと初期化ベクトルの対に全てに対して、この計算を実施します。
それにより、A[0], A[1], …, A[12] のそれぞれに対して発生し得た0〜255までの数値についての頻度をカウントします。
各A[i]はK[i]の推定値でしたので、頻度が最も高かった数値をK[i]の候補として、セッション鍵を得ます。
およそ4万パケット程度を得ることにより、104bitの秘密鍵を得ることが可能です。
さらに発展したTeAM-OK攻撃では、暗号化された通常のIPパケットを得るだけで104bitの秘密鍵が得られるようです。
これら、WEPの脆弱性の原因は暗号化アルゴリズムのRC4ではなく、その使い方に問題があったということになります。
そして、鍵は変化しないため一度解読すれば、だれでもアクセスポイントに接続できます。
以上の事柄がおおむねわかっていれば、WEPを対象としてAitcrack-ngを利用する上で、用語ややっていることの意味がわからなくて困ることはないかと思われます。
WEPの脆弱性を克服した規格が、WPA(Wi-Fi Protected Access)、あるいは、WPA2(Wi-Fi Protected Access2)です。
WPA、WPA2については、また別の機会に。
[参考]