Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
collisions — ハッシュ衝突とその悪用 | Kitploit
ツール/GitHubGitHub/decalage2/collisions
エクスプロイトハッシュ分析暗号化バイナリ解析学習と教育
GitHubdecalage2/collisions

collisions

ハッシュ衝突とその悪用

リポジトリを見る
91294年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

TL;DR この2つの画像のMD5コリジョンは、今や(*) 簡単かつ瞬時に実現できます。

MD5のWikipediaページ ⟷ <a href=http://gunshowcomic.com/648>

火遊びはするな。MD5を当てにするな。

(*) 任意のファイルペアのコリジョンは何年も前から可能でしたが、毎回数時間かかり、近道もありませんでした。 このページでは、ファイル形式固有のトリックと事前計算されたコリジョンプレフィックスを利用して、コリジョンを瞬時に行えるようにします。 git clone を実行。スクリプトを実行。完了。

ハッシュコリジョンと悪用

著者: Ange Albertini と Marc Stevens。

  • はじめに
  • 現状
  • 攻撃
    • 同一プレフィックス
      • FastColl (MD5)
      • UniColl (MD5)
      • Shattered (SHA1)
    • 選択プレフィックスコリジョン
      • HashClash (MD5)
      • Shambles (SHA1)
    • 攻撃のまとめ
  • 悪用
    • 標準的な戦略
      • JPG
        • カスタムスキャン
      • PNG
        • 非互換性
      • GIF
      • GZIP
      • Portable Executable
      • MP4 とその他
        • JPEG2000
      • PDF
        • PDF内のJPG
      • ZIP
        • ZIPベースのフォーマット
    • あまり一般的でない戦略
      • MultiColls: 複数コリジョンの連鎖
      • 有効性
      • PolyColls: 異なるファイルタイプのコリジョン
        • PE - JPG
        • PDF - PE
        • PDF - PNG
      • PileUps (マルチコリジョン)
        • PE - PNG - MP4 - PDF
    • ユースケース
      • すべて衝突させよう!
      • 不利なファイル
    • 失敗例
      • ELF
      • Mach-O
      • Java Class
      • TAR
    • 悪用のまとめ
    • テストファイル
  • 参考文献
  • クレジット
  • 結論

はじめに

このドキュメントの目的は、既存の攻撃を広範に探求し、その過程でMD5がいかに脆弱であるかを示すことです(JPG、PNG、PDF、MP4、PEなどのあらゆる形式で即時のコリジョンが可能)。 また、一般的なファイル形式を詳細に調査し、 現在または将来の攻撃によってそれらがどのように悪用されうるかを明らかにします。

実際、同じファイル形式のトリックは複数のハッシュに適用できます。 (同じJPGのトリックは、MD5、 malicious SHA-1 および SHA1 に使用されました。) コリジョンが同じバイトパターンに従う限り利用可能です。

このドキュメントは新しい攻撃(最新のものは2012年に文書化されました)についてではなく、 既存の攻撃の新しい悪用形態についてです。

現状

既知の攻撃の現状(2018年12月時点):

  • 別のファイルのハッシュや指定されたハッシュに一致するファイルを取得する: 不可能

    • MD2ではさらに実用的ではありません。
    • より単純なハッシュでは機能します(*)
  • 同じMD5を持つ2つの異なるファイルを取得する: 即時

    • 例: 1 ⟷ 2
  • 任意の2つのファイルを同じMD5にする: 数時間 (72 hours.core)

    • 例: 1 ⟷ 2
  • 特定のファイル形式(PNG、JPG、PEなど)の任意の2つのファイルを同じMD5にする: 即時

    • 以下を参照
  • 同じSHA1を持つ2つの異なるファイルを取得する: 6500 years.core

    • 異なる画像を表示するための同じSHA-1を持つ2つの異なるPDFを取得する: 即時(プレフィックスは事前に計算済み)

(*) crypt を使った例 - Sven に感謝!```

import crypt crypt.crypt("5dUD&66", "br") 'brokenOz4KxMc' crypt.crypt("O!>',%$", "br") 'brokenOz4KxMc'

# 攻撃

MD5とSHA1は64バイトのブロックで動作します。

2つのコンテンツAとBが同じハッシュを持つ場合、両方に同じコンテンツCを追加してもハッシュは同じままです。``` text
hash(A) = hash(B) -> hash(A + C) = hash(B + C)

コリジョンは、ブロック境界に計算済みの衝突ブロック群を挿入することで機能します。 これは、ファイル内のそれまでの内容に依存します。 これらの衝突ブロックは、いくつかの小さな差異を伴って非常にランダムに見えます。 (差異は各攻撃に固有のパターンに従います) そして、それらは小さな差異を導入し、最終的に これらのブロックの後にハッシュを同じ値にします。

これらの差異は、特定の性質を持つ有効なファイルを作り出すために悪用されます。

ファイル形式もトップダウンで動作し、そのほとんどはバイトレベルのチャンクで動作します。

一部の「コメント」チャンクは、ファイルチャンクをブロック境界に揃えるために挿入できます。 特定の構造を衝突ブロックの差異に揃えるため、 衝突ブロックの残りのランダム性をファイルパーサーから隠すため、 そして、パーサーから本来有効なコンテンツを隠す(別のコンテンツが見えるようにする)ためです。

これらの「コメント」チャンクは、公式には実際のコメントではないことがよくあります。 それらは単に、パーサーに無視されるデータコンテナとして使用されます。 (たとえば、小文字で始まるIDを持つPNGチャンクは補助的であり、必須ではありません。)

ほとんどの場合、衝突ブロックの差異は、コメントチャンクの長さを変更するために使用されます。 このチャンクは通常、このチャンクのデータの直前に宣言されます。 このチャンクの短いバージョンと長いバージョンの間のギャップに、 別のコメントチャンクが宣言され、一方のファイルのコンテンツ A を飛び越えます。 このファイルのコンテンツ A の後に、別のファイルのコンテンツ B を単に追加します。

ファイル形式は通常、パーサーをその時点で停止させる終端記号を定義するため、 A は解析を終了させ、追加されたコンテンツ B は無視されます。

したがって、通常は少なくとも2つのコメントが必要です。多くの場合3つです:

  1. 位置合わせ
  2. 衝突ブロックの隠蔽
  3. 一方のファイルコンテンツの隠蔽(再利用可能なコリジョンのため)

ファイル形式のこれらの共通の特性により、それが可能になります。これらは通常、弱点とは見なされませんが、検出または正規化によって排除できます:

  • ダミーチャンク - コメントとして使用
  • 複数のコメント
  • 巨大なコメント(長さ:MP4では64b、PNGでは32b -> 自明なコリジョン。JPGでは16b、GIFでは8b -> GIFには汎用コリジョンなし、JPGでは限定的)
  • コメントに任意のデータを格納する(ASCIIやUTF8を強制できる)
  • 終端記号の後に任意のものを格納する(通常は悪意のある目的にのみ使用される)- 同じオフセットで終わる2つのコメントを使用することで回避できる。
  • 整合性チェックがない。PNGのCRC32は通常無視される。 ただし、衝突ブロックは異なる長さのチャンクを宣言するため、すべて正しくあり得る - つまり、チャンクのデータが異なる方法で始まる場合でも、 チャンクの長さは異なる
  • フラットな構造:ASN.1 は、囲まれたすべてのサブ構造の長さを含む親構造を定義します。 これにより、これらの構築は防がれます:長さを悪用する必要がありますが、親の長さも悪用する必要があります。
  • ヘッダーの前にコメントを置く - これにより、汎用的な再利用可能コリジョンが可能になる。

同一プレフィックス

  1. 任意のプレフィックスを定義する - その内容と長さは重要ではない。
  2. プレフィックスは次の64バイトブロックまでパディングされる。
  3. プレフィックスに応じて衝突ブロックが計算され、追加される。 両側は非常にランダムである。差異は攻撃によって事前に決定される。
  4. この(これらの)ブロックの後、ファイルの差異にかかわらずハッシュ値は同じになる。
  5. 任意の同一サフィックスを追加できる。
プレフィックス=プレフィックス
衝突 A≠衝突 B
サフィックス=サフィックス

両方のファイルはほぼ同一です(それらのコンテンツはわずか数ビットの差異しかありません)

悪用:

2つのコンテンツをバンドルし、次にどちらかを行います:

  • データエクスプロイト:差異をチェックし、一方または他方を表示するコードを実行する(差異は事前にわかっているため、通常は自明です)。
  • 構造エクスプロイト:ファイル構造(通常はコメントの長さ)を悪用して、一方のコンテンツを隠すか、もう一方を表示する(ファイル形式とそのパーサーに依存します)。

この構造を持つ2つのファイル:

プレフィックス=プレフィックス
衝突 A≠衝突 B
A=A
B=B

これにより、AまたはBのどちらかが表示されます。

FastColl (MD5)

2009年の最終版。

  • 時間:数秒の計算
  • スペース:2ブロック
  • 差異:前後の制御はできない。 FastColl 差分マスク:
    .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
    .. .. .. X. .. .. .. .. .. .. .. .. .. .. .. ..
    .. .. .. .. .. .. .. .. .. .. .. .. .. X. .X ..
    .. .. .. .. .. .. .. .. .. .. .. X. .. .. .. ..
    
  • 悪用:困難

差異はブロックの開始/終了点の近くにはないため、近くのバイトを制御できないので、悪用するのは非常に困難です。 潜在的な解決策は、周囲のバイトをブルートフォースすることです - cf PoCGTFO 14:10。

例:

空のプレフィックスを使用する場合:``` MD5: fe6c446ee3a831ee010f33ac9c1b602c SHA256: c5dd2ef7c74cd2e80a0fd16f1dd6955c626b59def888be734219d48da6b9dbdd

ツールをダウンロード