Cipher Block Chaining CBC-MAC
CBC
もしcookieがユーザー名だけである場合(またはcookieの最初の部分がユーザー名である場合)で、ユーザー名を**"admin"に偽装したい場合、ユーザー名"bdmin"を作成し、cookieの最初のバイトをブルートフォース**することができます。
CBC-MAC
Cipher block chaining message authentication code(CBC-MAC)は、暗号学で使用される方法です。メッセージをブロックごとに暗号化し、各ブロックの暗号化が前のブロックにリンクされるように機能します。このプロセスにより、元のメッセージの1ビットでも変更すると、暗号化されたデータの最後のブロックに予測不可能な変更が生じます。この変更を行うか逆にするには、暗号化キーが必要であり、セキュリティが確保されます。
メッセージmのCBC-MACを計算するには、mをゼロ初期化ベクトルでCBCモードで暗号化し、最後のブロックを保持します。次の図は、秘密鍵kとブロック暗号Eを使用して、メッセージをブロックでCBC-MACを計算する過程を示しています。
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fb%2Fbf%2FCBC-MAC_structure_%28en%29.svg%2F570px-CBC-MAC_structure_%28en%29.svg.png&width=768&dpr=4&quality=100&sign=1a12ef19&sv=1)
脆弱性
通常、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
これは、暗号化の鍵を知らなくても計算可能です。
8バイトのブロックで名前Administratorを暗号化していると想像してください:
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を取得します。
cookieをs32に設定すると、ユーザーAdministratorの有効なcookieになります。
IVの制御攻撃
使用されるIVを制御できる場合、攻撃は非常に簡単になります。 cookieが単に暗号化されたユーザー名である場合、ユーザー**"administrator"を作成し、そのcookieを取得できます。 そして、IVを制御できる場合、IVの最初のバイトを変更してIV[0] XOR "A" == IV'[0] XOR "a"とし、ユーザーAdministratorのcookieを再生成できます。このcookieは、初期のIVでadministratorユーザーを偽装**するために有効です。
参考文献
詳細はhttps://en.wikipedia.org/wiki/CBC-MACを参照してください。
Last updated