Cipher Block Chaining CBC-MAC
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
もしクッキーがユーザー名だけ(またはクッキーの最初の部分がユーザー名)で、ユーザー名「admin」を偽装したい場合、ユーザー名「bdmin」を作成し、クッキーの最初のバイトをブルートフォースすることができます。
暗号ブロック連鎖メッセージ認証コード(CBC-MAC)は、暗号学で使用される方法です。これは、メッセージをブロックごとに暗号化し、各ブロックの暗号化が前のブロックにリンクされることで機能します。このプロセスはブロックの連鎖を作成し、元のメッセージのビットを1つ変更するだけで、暗号化されたデータの最後のブロックに予測不可能な変化をもたらします。このような変更を行うためには、暗号化キーが必要であり、これによりセキュリティが確保されます。
メッセージmのCBC-MACを計算するには、ゼロ初期化ベクトルでCBCモードでmを暗号化し、最後のブロックを保持します。以下の図は、秘密鍵kとブロック暗号Eを使用して、ブロックからなるメッセージのCBC-MACの計算を示しています!https://wikimedia.org/api/rest_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5
CBC-MACでは通常使用されるIVは0です。
これは問題です。なぜなら、2つの既知のメッセージ(m1
とm2
)が独立して2つの署名(s1
とs2
)を生成するからです。したがって:
E(m1 XOR 0) = s1
E(m2 XOR 0) = s2
次に、m1とm2を連結したメッセージ(m3)は2つの署名(s31とs32)を生成します:
E(m1 XOR 0) = s31 = s1
E(m2 XOR s1) = s32
これは暗号化のキーを知らなくても計算可能です。
あなたがAdministratorという名前を8バイトのブロックで暗号化していると想像してください:
Administ
rator\00\00\00
ユーザー名「Administ」(m1)を作成し、署名(s1)を取得できます。
次に、rator\00\00\00 XOR s1
の結果を持つユーザー名を作成できます。これにより、E(m2 XOR s1 XOR 0)
がs32を生成します。
今、s32をAdministratorというフルネームの署名として使用できます。
ユーザー名「Administ」(m1)の署名を取得し、それがs1です。
ユーザー名「rator\x00\x00\x00 XOR s1 XOR 0」の署名はs32です。**
クッキーをs32に設定すると、ユーザー「Administrator」の有効なクッキーになります。
使用されるIVを制御できる場合、攻撃は非常に簡単になる可能性があります。 クッキーが単に暗号化されたユーザー名である場合、ユーザー「administrator」を偽装するために、ユーザー「Administrator」を作成し、そのクッキーを取得できます。 今、IVを制御できる場合、IVの最初のバイトを変更することができ、IV[0] XOR "A" == IV'[0] XOR "a"となり、ユーザー「Administrator」のクッキーを再生成できます。このクッキーは、初期IVを使用してユーザー「administrator」を偽装するのに有効です。
詳細情報はhttps://en.wikipedia.org/wiki/CBC-MACを参照してください。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)