AirMac管理者パスワードの難読化に脆弱性

篠田さんがAirMac Extremeにて検証した結果が投稿されています。
昨日awacsさん(でよろしい?)がコメントされていたように、32byteを埋める数値が0x00であるため、難読化keyが丸見えになってしまうということであります。
2つの文字列がXORされたものを復元する方法は至って簡単で、もう一度XORを採ればいいわけです。
昨日のように流れを追ってみましょう。

 管理者の通信
     12345678:隠された難読化キー
 XOR)password:管理者が入力したパスワード
 ──────
     AS@GBYE\ :通信経路情に流れる難読化された文字列

ここで得られた「AS@GBYE\」を取得して、「a」一文字だけのパスワードを用いて接続します。すると、たりない7文字を0x00*1で埋め、隠されたkeyとXORして難読化処理が行われ、AirMacに管理者権限のアクセス請求を行います。

アタッカーの通信
     12345678:隠された難読化キー
 XOR)a       :パスワード欄に「aを一文?世影?
 ──────
     P2345678:通信経路情に流れる難読化?文字列

一文字目を除いてキーが割り出されました。一文字目は1bitで計算することで割り出すことができます。「a」をを2進数で記述すると…「01100001」で、Pの2進数表記は「01010000」です。この計算を行ってみます。

     01100001:aの2進数表記
 XOR)01010000:Pの2進数表記
 ──────
     00110001:判らなかった一文字目を示す2進数表記

「00110001」が現れました。これは0011|0001と4bitずつ分割して、16進数で記述すると、「31」です。これをキャラクタに割り当てると「1」が出てきます。というわけで、キーワードは「12345678」であることが判ります。ここで、先ほど取得した「AS@GBYE\」を復号してみましょう。極めて簡単な処理です。

何らかのツールでパスワードのあぶり出し
     12345678:あぶり出されたkey
 XOR)AS@GBYE\:盗聴によって取得したキー
 ──────
     password:管理者パスワードの難読化が解ける

パスワードの難読化が解けました。このパスワードを用いて管理作業を行うことが可能になります。

 アタッカーの通信
     12345678:隠された難読化キー
 XOR)password:難読化を解いたパスワード
 ──────
     AS@GBYE\:管理者と同じ文字列

とまぁ…これ、難読化処理としてはダメダメですね。
というわけで、このプロセスの第一段階である「盗聴」ができない条件下で管理作業を行う必要がある、ということになります。
Harden-mac MLでvm_converterさんが書いているような方法が楽でいいんじゃないかと私も思います。

計算修正

検証用に作ったプログラムで、XORをとる前のkeyを8bitキャラクターではなく、数値でやっていた(爆のを修正しました。
間違って…ないよなぁ。もう。

*1:NULL文字