前に述べたように、これは学習の問題ではありません。
問題は、あるエクスプロイトが別のエクスプロイトと「似ていない」ことです。彼らは、境界チェックの欠落など、個々の異なる (!) ライブラリの個々の個別のバグを悪用します。ファイルのプロパティではなく、それを使用するライブラリのプロパティです。10 のライブラリのうち 9 つは気にしません。プログラミングエラーのために誤動作します。
そのようなファイルを検出するためにできる最善の方法は、思いつく限り最も洗練されたと同時に最も堅牢なフォーマット検証ツールを作成し、仕様に 1000% 適合しない画像を拒否することです。実際に有効な画像を処理する際にライブラリにエラーがないことを前提としています。
エクスプロイトが実際にどのように機能するかを調査することから始めることを強くお勧めします。何を「学習」しようとしているのかを理解することは、それらを一般的に検出する何らかの方法につながる可能性があります(または、一般的な検出が不可能な理由を理解する...)。
これらのエクスプロイトの1 つまたは 2つがどのように機能するかについてのアイデアの簡単な例を次に示します。
BMP のような非常に単純なファイル形式があるとします。count x color
圧縮では、単純なランレングス エンコーディングがサポートされているため、同一のピクセルを (ペア)として効率的に格納できます。写真ではうまく機能しませんが、線画にはかなりコンパクトです。次の画像データを検討してください。
Width: 4
Height: 4
Colors: 1 = red, 2 = blue, 3 = green, 4 = black
Pixel data: 2x1 (red), 4x2 (blue), 2x3, 5x1, 1x0, 4x1
ファイル内にいくつのエラーを見つけましたか? 一部の信頼できるライブラリ コードが失敗する可能性がありますが、最新のライブラリ (この種の攻撃について知っており、転送やハード ディスクのエラーによってファイルが破損している可能性があることを知って作成されている) は、それをスキップして、部分的なエラーを生成することさえあるはずです。画像。攻撃ではなく、画像を生成したプログラムのプログラミング エラーだったのかもしれません...
まったく、すべての範囲外の使用が攻撃である必要はありません. CDを考えてみてください。仕様で意図されているよりも多くのデータを CD に書き込むために、誰もが「オーバーバーン」を使用したことがあります。はい、 CD を焼き過ぎたために一部のドライブがクラッシュする可能性があります。しかし、650 MB を超えるすべての CD が攻撃であるとは考えません。CD とは何かというイエロー ブックの仕様に違反しているからです。