1

raw ソケットから 802.11 パーサーに取り組んでいます。パーサーの目的は、さらに処理するために保持するパケットの量を決定することです。レイヤー 2 のみが保存され、レイヤー 3 以降はすべて削除されます。セキュリティ部分まではすべて順調です。WEP には 4 バイトの「ヘッダー」があり、TKIP と CCMP には 8 バイトのヘッダーがあります。フレームに WEP または TKIP/CCMP ヘッダーがあるかどうかを判断するアルゴリズムを探していますが、Google では見つかりません。WEP が使用されているかどうか、または TKIP または CCMP が使用されているかどうかを判断する必要があるだけです。明らかに、セキュリティ「ヘッダー」の最初の 4 バイトを使用してそうする必要があります。

私が見つけることができた唯一のことは、Impacket の dot11.py にあると判断することです: .

macSz = n # current determination of mac frame size
if flags['protected']:
    # pf flag is set
    sec = frame[macSz:macSz+4] # get first 4 bytes of msdu
    bs = struct.unpack("=4B",sec)
    # wep test case returns bs = (231, 1, 0, 0)
    # ccmp test case returns bs = (2, 0, 79, 222)

    if bs[3] & 0x20:
        # using TKIP/CCMP
        macSz += 8
    else:
        # using WEP
        macSz += 4

このステートメントを確認するための文献が見つかりません。上記のコードは、私の側で間違っているか、ほとんどの場合、すべてが WEP であると見なされるため機能しません。私が見つけたのは、WEP ヘッダーのバイト 4 の 5 番目のビットがパッド ビットである必要があることです。TKIP では予約済みであり、CCMP では PN2 の一部です。

私の質問は、私がこれを間違ってコーディングしたのか (私は考えていません)、それとも WEP を判断する正しい方法ではないのか、そして後者の場合、動作するアルゴリズムを誰かが知っているのかということです。私は暗号学の専門家ではありません。

scapy を使用すると言う前に、これは最終処理中のオプションである可能性がありますが、オーバーヘッドを消費しすぎてパケットをドロップするため、現時点ではオプションではありません。さらに処理するために渡す暗号化されていないセキュリティ ヘッダーを含む、レイヤー 2 でのパケットのサイズを特定したいだけです。

編集 1: このリンクhttp://www.xirrus.com/cdn/pdf/wifi-demystified/documents_posters_encryption_plotterによると、4 番目のバイトのビット 5 (ゼロ インデックス) に 1 ビットの拡張 IV が存在し、両方の CCMP がおよび TKIP の場合、このビットが設定されます。ただし、上記のコードを機能させることはまだできません。TKIP を識別しているように見えますが、それでも CCMP を WEP として分類しているため、私のバイト順序には何かがあるはずです。引き続き調べてみます

編集 2: バイト順だったようです。テストする 16 進数をコピーして、wireshark でキャプチャしたパケットを使用していました。生のソケットを使用すると動作します

4

0 に答える 0