この記事は Google Cloud Translation APIを使用した自動翻訳です。
いくつかの文書は原文を読むのに良いかもしれません。
バッファ オーバーフローは、プログラムが意図したよりも多くのデータをバッファに格納するソフトウェアの脆弱性の一種です。これが発生すると、プログラムがクラッシュしたり、不安定になったり、悪意のあるコードが実行される可能性さえあります。
バッファは、データを一時的に格納するために使用されるメモリ領域です。データがバッファに書き込まれると、プログラムがそれで終了するまでメモリに格納されます。保持するように設計されているよりも多くのデータがバッファーに書き込まれると、バッファーに格納されているデータがメモリの他の部分を上書きし、クラッシュやその他の予期しない動作につながる可能性があります。
バッファ オーバーフローはどのプログラミング言語でも発生する可能性がありますが、C および C++ では特に一般的です。これは、C および C++ には境界チェックが組み込まれていないためです。つまり、プログラマーがバッファー オーバーフローを明示的にチェックしないと、プログラムは簡単に脆弱になる可能性があります。
バッファ オーバーフローは、システムへのアクセスを取得するために、悪意のあるアクターによって悪用される可能性があります。これは、悪意のあるコードをバッファに書き込むことで実行できます。これは、プログラムによって実行される可能性があります。これにより、攻撃者は機密情報にアクセスしたり、任意のコードを実行したり、システムを制御したりすることができます。
バッファ オーバーフローの概念は、少なくとも 1970 年代に登場し、Bob Morris の論文で初めて説明されました。 1988 年に、ハッカーが finger デーモンのバッファ オーバーフローを悪用してシステムにアクセスしたときに、バッファ オーバーフロー エクスプロイトの最初の既知のインスタンスが発生しました。
それ以来、バッファ オーバーフローはセキュリティ上の大きな懸念事項となっています。 1990 年代には、悪名高い Morris ワームを含む、注目を集めるバッファ オーバーフローの脆弱性が多数発見されました。近年、Microsoft Office、Adobe Reader、Linux カーネルなど、多くの一般的なプログラムでバッファ オーバーフローが発見されています。
バッファ オーバーフローには、次の特徴があります。
バッファ オーバーフローの一般的な例は、コマンド ラインからユーザー入力を読み取るプログラムです。バッファが保持するように設計されているよりも多くのデータをユーザーが入力すると、プログラムがクラッシュしたり、悪意のあるコードが実行されたりする可能性があります。
バッファ オーバーフローの主な利点は、システムへのアクセスに使用できることです。ただし、これは主な欠点でもあります。機密情報にアクセスしたり、システムを制御したりするために、悪意のあるアクターがバッファ オーバーフローを悪用する可能性があるためです。
バッファ オーバーフローは、セキュリティ コミュニティで論争の的となっています。一方では、システムへのアクセスを取得するために、悪意のある攻撃者がバッファ オーバーフローを悪用する可能性があります。一方、バッファ オーバーフローは、ファジングやリバース エンジニアリングなどの正当な目的に使用される可能性があります。
バッファ オーバーフローは、スタック オーバーフロー、ヒープ オーバーフロー、フォーマット文字列の脆弱性など、他の種類のソフトウェアの脆弱性に関連しています。これらは、組み込みの境界チェックがない C や C++ などのプログラミング言語にも関連しています。
バッファ オーバーフローは、何十年もの間、セキュリティの脆弱性の主要な原因でした。その結果、スタック カナリア、アドレス空間レイアウトのランダム化 (ASLR)、データ実行防止 (DEP) など、バッファー オーバーフローを検出して防止するための多くの手法が開発されてきました。
バッファ オーバーフローは、検出と防止が難しい場合があります。その結果、それらは今日でも主要なセキュリティ上の懸念事項となっています。バッファー オーバーフローのリスクを軽減するには、境界チェックの使用や安全でない関数の回避など、安全なプログラミング手法を使用することが重要です。