hacktricks/src/crypto-and-stego/electronic-code-book-ecb.md

5.5 KiB
Raw Blame History

{{#include ../banners/hacktricks-training.md}}

ECB

(ECB) 電子コードブック - 対称暗号化方式で、平文の各ブロックを 暗号文のブロックに置き換えます。これは最も単純な暗号化方式です。主なアイデアは、平文をNビットのブロックに分割(入力データのブロックサイズ、暗号化アルゴリズムに依存)し、次にその平文の各ブロックを唯一のキーを使用して暗号化(復号化)することです。

ECBを使用することには複数のセキュリティ上の影響があります

  • 暗号化されたメッセージからブロックを削除できる
  • 暗号化されたメッセージからブロックを移動できる

脆弱性の検出

アプリケーションに何度もログインすると、常に同じクッキーを取得することを想像してください。これは、アプリケーションのクッキーが**<username>|<password>であるためです。
次に、同じ長いパスワード
ほぼ同じ** ユーザー名を持つ新しいユーザーを2人生成します。
両方のユーザーの情報が同じである8Bのブロックが 等しいことがわかります。次に、これはECBが使用されているためかもしれないと想像します。

次の例のように。これらの2つのデコードされたクッキーが何度もブロック**\x23U\xE45K\xCB\x21\xC8**を持っていることに注目してください。

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

これは、それらのクッキーのユーザー名とパスワードに「a」という文字が何度も含まれていたためです(例えば)。異なるブロックは、少なくとも1つの異なる文字(区切り文字「|」やユーザー名の必要な違いなど)を含むブロックです。

今、攻撃者はフォーマットが<username><delimiter><password>または<password><delimiter><username>のどちらであるかを発見する必要があります。そのために、似たような長いユーザー名とパスワードを持ついくつかのユーザー名を生成するだけで、フォーマットと区切り文字の長さを見つけることができます:

ユーザー名の長さ: パスワードの長さ: ユーザー名+パスワードの長さ: クッキーの長さ(デコード後):
2 2 4 8
3 3 6 8
3 4 7 8
4 4 8 16
7 7 14 16

脆弱性の悪用

完全なブロックの削除

クッキーのフォーマット(<username>|<password>)を知っている場合、ユーザー名adminを偽装するために、aaaaaaaaadminという新しいユーザーを作成し、クッキーを取得してデコードします:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

以前に作成したパターン \x23U\xE45K\xCB\x21\xC8 を見ることができます。このパターンは、a のみを含むユーザー名で作成されました。
次に、最初の8Bのブロックを削除すると、ユーザー名 admin の有効なクッキーが得られます:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

ブロックの移動

多くのデータベースでは、WHERE username='admin';を検索するのと、WHERE username='admin ';を検索するのは同じです。 (余分なスペースに注意)

したがって、ユーザーadminを偽装する別の方法は次のとおりです。

  • ユーザー名を生成します: len(<username>) + len(<delimiter) % len(block)。ブロックサイズが8Bの場合、username というユーザー名を生成できます。デリミタ|を使用すると、チャンク<username><delimiter>は2つの8Bのブロックを生成します。
  • 次に、偽装したいユーザー名とスペースを含む正確な数のブロックを埋めるパスワードを生成します: admin

このユーザーのクッキーは3つのブロックで構成されます: 最初の2つはユーザー名 + デリミタのブロックで、3つ目はユーザー名を偽装しているパスワードです: username |admin

次に、最初のブロックを最後のブロックに置き換えるだけで、ユーザーadminを偽装します: admin |username

参考文献

{{#include ../banners/hacktricks-training.md}}