バッファにデータを書き込むプログラムがそのバッファの容量をオーバーロードすると、バッファオーバーフローが発生します。12オンスの牛乳を8オンスのグラスに注ぐようなものです。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
バッファオーバーフローは、ソフトウェアがバッファにデータを書き込むとバッファの容量がオーバーフローし、隣接するメモリ位置が上書きされるときに発生する異常です。つまり、十分なスペースのないコンテナに渡される情報が多すぎて、その情報が隣接するコンテナのデータを置き換えてしまうことです。
バッファオーバーフローは、コンピューターのメモリを変更してプログラムの実行を妨害または制御することを目的とした攻撃者によって悪用される可能性があります。
バッファ(データバッファ)は、ある場所から別の場所に移動している間にデータを一時的に保存するために使用される物理的なメモリストレージの領域です。これらのバッファは通常、RAMメモリに存在します。コンピューターは頻繁にバッファを使用してパフォーマンスを向上させます。最新のハードドライブのほとんどは、バッファリングを利用してデータに効率的にアクセスし、多くのオンラインサービスもバッファを使用しています。たとえば、バッファは、中断を防止するためにオンライン動画ストリーミングで頻繁に使用されます。動画がストリーミングされると、動画プレーヤーはおそらく動画の20%を一度にダウンロードしてバッファに保存し、そのバッファからストリーミングします。こうすることで、接続速度のわずかな低下やサービスの迅速な中断は、動画ストリームのパフォーマンスに影響しません。
バッファは、特定の量のデータを含むように設計されています。バッファを使用するプログラムに、大量のデータがバッファに送信されたときにデータを破棄する組み込み命令がない限り、プログラムはバッファに隣接するメモリ内のデータを上書きします。
バッファオーバーフローは、攻撃者がソフトウェアを破壊するために悪用される可能性があります。十分に理解されているにもかかわらず、バッファオーバーフロー攻撃は依然としてサイバーセキュリティチームを苦しめる大きなセキュリティ問題です。2014年、「ハートブリード」として知られる脅威は、SSLソフトウェアのバッファオーバーフローの脆弱性のために、何億人ものユーザーを攻撃にさらしました。
攻撃者は慎重に作成された入力をプログラムに意図的に送り込み、プログラムが十分に大きくないバッファーにその入力を保存しようとし、バッファスペースに接続されたメモリの一部を上書きします。プログラムのメモリレイアウトが適切に定義されている場合、攻撃者は実行可能コードを含むことがわかっている領域を意図的に上書きできます。その後、攻撃者はこのコードを独自の実行可能コードに置き換え、プログラムの動作方法を大幅に変更できます。
たとえば、メモリ内の上書きされた部分にポインタ(メモリ内の別の場所を指すオブジェクト)が含まれる場合、攻撃者のコードはそのコードをエクスプロイトペイロードを指す別のポインタに置き換えることができます。これにより、プログラム全体の制御を攻撃者のコードに移すことができます。
特定のコーディング言語は、他のコーディング言語よりもバッファオーバーフローの影響を受けやすくなっています。 CとC++は、メモリ内のデータへのアクセスや上書きに対する保護が組み込まれていないため、脆弱性の高い2つの一般的な言語です。 Windows、Mac OSX、およびLinuxにはすべて、これらの言語の一方または両方で記述されたコードが含まれています。
Java、PERL、C#などの最新の言語には、バッファオーバーフローの可能性を減らすのに役立つ組み込み機能がありますが、それを完全に防止することはできません。
幸いなことに、最新のオペレーティングシステムには、バッファオーバーフロー攻撃の軽減に役立つランタイム保護があります。悪用のリスクを軽減するのに役立つ次の2つの一般的な保護について調べてみましょう:
ソフトウェア開発者は、組み込みの保護機能を備えた言語で記述したり、コードで特別なセキュリティ手順を使用したりすることにより、バッファオーバーフローの脆弱性に対する予防措置を取ることもできます。
予防措置にも関わらず、開発者は新しいバッファオーバーフローの脆弱性を発見し続けており、悪用の成功によって気付く場合もあります。新しい脆弱性が発見された場合、エンジニアは影響を受けるソフトウェアにパッチを適用し、ソフトウェアのユーザーがパッチにアクセスできるようにする必要があります。
さまざまな戦略を採用し、さまざまなコードを標的とするさまざまなバッファオーバーフロー攻撃があります。以下は最も有名なもののいくつかです。
*コンピューターは、スタックとヒープとして知られる2つの異なるメモリ割り当てモデルに依存しています。どちらもコンピューターのRAMにあります。スタックはきちんと整理されており、データを後入れ先出しモデルで保持します。一番最近にスタックに配置されたデータが最初に出てきます。これは、弾薬弾倉に挿入された最後の弾丸が最初に発射されるようなものです。ヒープは、余分なメモリの無秩序なプールであり、データは特定の順序でヒープに出入りしません。スタックからメモリにアクセスする方がヒープからアクセスするよりもはるかに高速であるため、通常、ヒープはより大きなデータまたはプログラマが明示的に管理したいデータ用に予約されています。
利用開始
Webアプリケーションセキュリティについて
一般的な脅威
VPNリソース
セキュリティ用語集