Electronic Code Book (ECB)
ECB
(ECB) Electronic Code Book - 対称暗号化スキームで、クリアテキストの各ブロックを暗号文のブロックで置き換える。これは最も単純な暗号化スキームであり、主なアイデアはクリアテキストをNビットのブロック(入力データのブロックサイズ、暗号化アルゴリズムに依存)に分割し、その後、唯一の鍵を使用して各クリアテキストブロックを暗号化(復号化)することです。
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fe%2Fe6%2FECB_decryption.svg%2F601px-ECB_decryption.svg.png&width=768&dpr=4&quality=100&sign=29c9bd26&sv=1)
ECBを使用すると、複数のセキュリティ上の影響があります:
暗号化されたメッセージからブロックを削除できる
暗号化されたメッセージからブロックを移動できる
脆弱性の検出
アプリケーションに複数回ログインし、常に同じクッキーを取得すると想像してください。これは、アプリケーションのクッキーが**<username>|<password>
であるためです。
次に、同じ長いパスワードを持つ新しいユーザーを2人生成し、ほぼ同じユーザー名を持つようにします。
両方のユーザーの情報が同じ8バイトのブロックであることがわかります。その後、これがECBが使用されている**ためかもしれないと考えます。
次の例のように、これらの2つのデコードされたクッキーには、何度もブロック**\x23U\xE45K\xCB\x21\xC8
**が含まれていることに注意してください。
これは、クッキーのユーザー名とパスワードには、複数回文字 "a" が含まれていたためです。異なるブロックは、少なくとも1つの異なる文字(おそらく区切り記号 "|" またはユーザー名の必要な違い)を含んでいました。
さて、攻撃者は、フォーマットが <ユーザー名><区切り記号><パスワード>
または <パスワード><区切り記号><ユーザー名>
であるか、区切り記号の長さを見つけるまで、類似して長いユーザー名とパスワードを持つ複数のユーザー名を生成するだけです:
ユーザー名の長さ: | パスワードの長さ: | ユーザー名+パスワードの長さ: | デコード後のクッキーの長さ: |
---|---|---|---|
2 | 2 | 4 | 8 |
3 | 3 | 6 | 8 |
3 | 4 | 7 | 8 |
4 | 4 | 8 | 16 |
7 | 7 | 14 | 16 |
脆弱性の悪用
ブロック全体の削除
クッキーのフォーマットを知っている場合(<ユーザー名>|<パスワード>
)、ユーザー名 admin
をなりすますために aaaaaaaaadmin
という新しいユーザーを作成し、クッキーを取得してデコードします:
私たちは、以前に a
のみを含むユーザー名で作成されたパターン \x23U\xE45K\xCB\x21\xC8
を見ることができます。
次に、最初の8Bのブロックを削除すると、ユーザー名 admin
用の有効なクッキーが得られます:
ブロックの移動
多くのデータベースでは、WHERE username='admin';
を検索するのとWHERE username='admin ';
を検索するのは同じです(余分なスペースに注意)。
したがって、ユーザーadmin
をなりすます別の方法は次のとおりです:
len(<username>) + len(<delimiter) % len(block)
となるユーザー名を生成します。ブロックサイズが8B
の場合、username
というユーザー名を生成できます。デリミターが|
の場合、チャンク<username><delimiter>
は8Bのブロック2つを生成します。次に、なりすましたいユーザー名とスペースを含むブロックの正確な数を埋めるパスワードを生成します。例:
admin
このユーザーのクッキーは3つのブロックで構成されます:最初の2つはユーザー名+デリミターのブロックで、3番目は(ユーザー名を偽装している)パスワードのブロックです:username |admin
その後、最初のブロックを最後のブロックで置き換えるだけで、ユーザーadmin
をなりすませることができます:admin |username
参考文献
Last updated