web-dev-qa-db-ja.com

メモリバッファで発生する可能性のある脅威

敵がバッファの容量を特定できた場合、起こりうる結果は何でしょうか?

1
Michael

攻撃者は、すべてのバッファの容量をすでに知っています。これは通常の基本的な仮定です。ソフトウェアのバッファは、ソフトウェア自体によって定義されます。ソフトウェア自体は、ソースコード、実行可能ファイル、バックアップコピー、および設計者の頭の中に存在します。同じソフトウェアが攻撃者によって購入され、リバースエンジニアリングされた可能性があります。または、ソフトウェアは単にオープンソースである可能性があります。部外者がその秘密のソフトウェアを学ぶにはあまりにも多くの方法があるので、ソフトウェアは決して秘密であると見なすことはできません。

サーバー上で、接続されたクライアントからユーザー名とパスワードを期待するソフ​​トウェアを実行するとします。ソフトウェアは、その情報を処理する前に、受信したデータをメモリ内のバッファに保存します。バッファがそれぞれ200文字を受け取るのに適していると仮定します。攻撃者もそれを知っています(上記を参照)。ここまでは順調ですね。

問題は、攻撃者がバッファのサイズを知っているということではありません。問題は、攻撃者が前述のバッファに収まるよりも多くのデータを提供し、ソフトウェアが誤ってデータをバッファにプッシュしようとした場合です。 Thisはバッファオーバーフローです。愚かで騙されやすいソフトウェアが無意味なことをしようとするように誘導され、データがマシンRAM内の他のデータ要素に溢れます。

一部のプログラミング言語、実際にはCのような先史時代の言語を除くほとんどの言語は、配列アクセスを体系的にチェックし、開発者が必要なチェックを含めなかった場合でも、バッファオーバーフローの試みを検出します。これは問題を解決しません(ソフトウェアがまだ意味のないことをしたいという問題です)が、少なくともそれは損傷を含んでいます(問題のあるプロセスは迅速に殺されます、そしてそれはそれの範囲です)。

2
Thomas Pornin