バッファオーバーフローとは? 攻撃の手法や対策について解説

バッファオーバーフローはサイバー攻撃の一種で、攻撃を受けると情報漏洩やシステムの停止、Webサイトの改ざんなどが起こり、企業の経営に甚大な被害を及ぼすおそれがあります。
バッファオーバーフローを防ぐには、どのような対策をすればよいのでしょうか。
本記事では、バッファオーバーフローを防ぐために知っておきたい基礎知識から、具体的な攻撃の手法、有効な対策まで、総合的に解説します。
バッファオーバーフローとは、バッファの許容量を超えるデータを送るサイバー攻撃のこと
バッファオーバーフローとは、コンピューターのメモリ領域内にあるバッファと呼ばれる場所に許容量を超えるデータを送りつけ、誤作動を引き起こすサイバー攻撃の手法です。バッファの許容量を超えた際に不具合が起きる脆弱性そのものを指すこともあります。
バッファとは、データの入出力の際に一時的にデータを蓄えておく記憶領域のこと
バッファとは、コンピューターがデータの入出力を行う際に、一時的にデータを蓄えておく記憶領域のことです。複数の機器がデータの処理を行う場合に備えて一時的にデータを保存しておくことで、必要に応じて保存されたデータを先に読み出し、処理や転送の速度のズレをなくせます。
例えば、パソコンとプリンターで行われる印刷用データのやりとりで、バッファが使われています。コンピューターがデータを転送する速度は、プリンターが転送されたデータを処理する速度よりも速いため、一方的にデータを転送し続けると印刷が追い付きません。プリンターでの処理を待っているあいだ、パソコンはプリンターとの通信を接続し続けることになります。
それを避けるためにバッファが活用されており、プリンターが内部のバッファに受信したデータを保存した後に、順次読み出して印刷することで、パソコンはバッファにデータを送信するだけでプリンターとの通信から解放されます。また、動画のストリーミング再生などをスムーズにするために使われているのもバッファです。
バッファには、下記の3つの領域があります。
スタック領域
スタック領域とは、文字や数値を入れられる領域である変数の一種で、プログラムの一部分だけで利用するローカル変数などを管理する、プログラムの実行に不可欠な領域です。プログラムが動作する際、一時的にデータを確保し、確保した順とは逆に開放します。保存が必要な期間だけ領域が開放されるため、割り当てられる量には上限があります。管理は容易ですが、柔軟性がありません。
ヒープ領域
ヒープ領域とは、プログラム実行や計算に必要なメモリを自由に確保・開放できるソフトウェアの領域です。割り当てられるデータの量や、開放の順番は決まっていません。可変性があり、サイズが決まっていないデータにも柔軟に対応できる反面、管理は困難です。
静的領域
静的領域とは、プログラムの中で初期値を持ち、プログラム開始から終了まで保持される静的変数を配置するための領域です。プログラム終了まで継続的に保持する必要があるデータを記憶します。
バッファオーバーフロー攻撃の種類
バッファオーバーフロー攻撃には、複数の種類があります。バッファオーバーフロー攻撃の種類は、バッファのうちどの領域を攻撃するかによって大きく3つに分けられます。
スタック領域型
スタック領域型とは、関数を処理した後のプログラム実行に必要な情報が保存されているスタック領域に、膨大なデータを送りつけ、データをあふれさせる攻撃の手法です。
許容量を超えても情報をスタック(積み重ね)状に格納し続けるスタック領域の脆弱性をつき、関数を処理した後のプログラム実行の起点を示すリターンアドレス(戻りアドレス)を書き換えます。これにより、誤作動が引き起こされたり、不正な操作が実行されたりします。
リターンアドレスとは、関数の処理が終了した後、次にプログラムを実行する場所を示す位置情報のことです。攻撃者によって送りつけられたデータが許容量を超えると、あふれたデータがリターンアドレスの領域を侵して上書きするため、位置情報がわからなくなる不具合を起こすことが可能になります。
ヒープ領域型
ヒープ領域型とは、プログラムを実行したり計算したりする際、必要に応じてメモリの確保・開放をするヒープ領域を標的とした攻撃です。ヒープ領域のデータが許容量を超えることによって、実行中のプログラムが停止したり、メモリが破壊されたりする被害につながります。
静的領域型
静的領域型とは、複数の関数に使われる変数を記憶する、静的領域を攻撃する手法です。オーバーフローを引き起こして、次に実行するコードの場所を書いたジャンプアドレスを書き換えることで、マルウェアなど悪意あるコードの実行を可能にします。
バッファオーバーフロー攻撃とDos攻撃との違い
バッファオーバーフロー攻撃と似たサイバー攻撃の手法に、DoS攻撃が挙げられます。バッファオーバーフローとDos攻撃は、どちらもコンピューターやサーバーに許容量以上のデータを送りつける攻撃であるという点は共通していますが、攻撃方法と攻撃の目的が異なります。
バッファオーバーフローの攻撃方法は、サーバー内部のメモリの脆弱性を突いて攻撃して、不正なコードを実行させることです。管理者権限を奪って情報を改ざんしたり、破壊したりすることを目的としています。
一方、DoS攻撃方法は、メモリの脆弱性を狙ってバッファに膨大なアクセスを仕掛けるわけではなく、サーバーに大量のデータを送りつけます。サーバーに過剰な負荷をかけることで、サービスを停止させることが主な目的です。DoS攻撃を受けると、サーバーがダウンしてWebサイトが表示されなくなったり、Web上で展開しているサービスが利用不能になったりして、大きな損害が発生する可能性もあります。
バッファオーバーフロー攻撃で想定される被害
バッファオーバーフロー攻撃を受けた場合の被害は、大きく下記の2つに分けられます。自社での被害だけでなく、社外への被害につながる場合もあります。
管理者権限が奪われる
バッファオーバーフローによって不正なコードが実行されると、サーバーの管理者権限が攻撃者の手に渡る可能性があります。その結果、管理者権限の乗っ取りによりWebサイトの改ざんが行われた事例もありました。また、リターンアドレスやジャンプアドレスなどが書き換えられ、個人情報や機密情報が盗まれたり、インターネット上に流出したりすることも考えられます。
自社のみが知るはずの情報が流出することで顧客や社会からの信頼性が失われ、場合によっては、個人情報が流出した被害者から損害賠償を請求される事態にも発展しかねません。
サイバー攻撃の踏み台にされる
バッファオーバーフローによってパソコンにマルウェアが仕掛けられ、DoS攻撃など、サイバー攻撃の踏み台として悪用されることもあります。
攻撃者は、マルウェアを仕掛けたパソコンを起点として、新たなDoS攻撃や標的型攻撃を他のパソコンなどに仕掛けていきます。バッファオーバーフローによって被害に遭ったサーバーがサイバー攻撃の踏み台にされた場合、全容が解明するまでの間は被害者から攻撃者と疑われ、社会的な信用を失墜するリスクがあることにも注意が必要です。
バッファオーバーフロー攻撃の被害事例
バッファオーバーフロー攻撃は、これまでに様々な被害を引き起こしています。下記のように、公的機関や大手有名企業もターゲットになっています。
官公庁のWebサイトが改ざんされた事例
2000年1月末から2月上旬には、官公庁のWebサイトを攻撃対象として不正アクセスが相次ぎ、日本の中央官庁や関連する省庁のWebサイトで、管理者権限の乗っ取りによるサイト改ざんなどの被害が発生しました。
警視庁の調査によれば、被害にあった15件のうち6件がバッファオーバーフローによる攻撃だったことがわかっています。攻撃を受けたWebサーバーのパッチ適用が不十分で、古いバージョンのままだったことが主な要因でした。
この攻撃では、遠隔操作ができる悪質なコードを含めた大量のデータが送られ、管理者権限が奪われたと考えられています。当時はネットのセキュリティが現在に比べて重視されていなかった時代で、この攻撃がネットに潜むリスクを広く知らしめたといえます。
大手SNSサービスがサービス停止に追い込まれた事例
バッファオーバーフロー攻撃によって、サービス停止に追い込まれる被害が出たケースもあります。精度の高いセキュリティ対策が十分になされていたはずの大手SNSサービスが、バッファオーバーフロー攻撃を含む複合的なDos攻撃に遭い、一時的にサービスが停止しました。広告収入の減少などで、多額の損害が出たと考えられています。世界中で利用されているサービスが停止したことで、バッファオーバーフロー対策の重要性が周知されました。
バッファオーバーフロー攻撃への利用者側の対策
バッファオーバーフロー攻撃はソフトウェアなどの脆弱性を突いた攻撃であるため、開発者が対策を施すことは可能ですが、利用者がバッファオーバーフローを引き起こす可能性のあるプログラムを検知して対応するのは容易ではありません。そのため、利用者側の対策は、バッファオーバーフローが起きても被害を最小限に抑えるための防御対策が中心です。できることは限られますが、下記の3点は実行しておくとよいでしょう。
OSやソフトウェアをアップデートする
バッファオーバーフローは脆弱性を突く攻撃であるため、OSやソフトウェアを常にアップデートして最新の状態に保てば脆弱性を解消できます。速やかにアップデートを実施すれば、攻撃を受けるリスクを軽減できます。
ウイルス対策ソフトなどのセキュリティソフトを導入する
ウイルス対策ソフトなどのセキュリティソフトを導入するのも、バッファオーバーフロー攻撃への有効な対策です。
OSやソフトウェアのアップデートだけでは、脆弱性を解消する修正プログラムが配布されるまでのあいだに行われる攻撃は避けることができません。そのため、不審な接続先からのアクセスなどを検知できるよう、ネットワーク監視機能などがあるセキュリティソフトを導入することをお勧めします。
また、ウイルス対策ソフトを導入して悪意あるプログラムを検知できる体制を整えれば、バッファオーバーフロー攻撃を介したマルウェアの被害を防ぐことができます。
EDRを導入する
バッファオーバーフロー攻撃への対策として、EDR(Endpoint Detection and Response)を導入するのも有効です。EDRは、組織内のネットワークに接続されているエンドポイントからログデータを収集して解析し、不審な挙動やサイバー攻撃などが起きた後に速やかに状況を通知するツールです。マルウェアを検知して駆除・隔離するソフトウェアと共にEDRを導入することで、攻撃による被害を最小限に抑えられます。
- 併せて読みたい
バッファオーバーフロー攻撃への開発者側の対策
バッファオーバーフローは、プログラムを開発する際に生じる脆弱性を突いた攻撃です。そのため、自社サイトを社内で開発している場合や、事業としてプログラムを開発、販売している場合は、下記の3点に留意して開発すればバッファーバーフローが起こらないよう対策することができます。
直接メモリを操作できる言語を使用しない
バッファオーバーフローは、直接的にメモリを操作できるC言語やC++、アセンブリ言語といったプログラミング言語を使用しているプログラムで発生するため、これらの言語の使用を避けることでバッファオーバーフローは防止できます。これらの言語は、データへのアクセスや上書きからメモリを保護する機能がないため、バッファオーバーフロー攻撃を受けやすいのです。
中でもC言語、C++はプログラム製作者にバッファの管理が任せられる言語であり、特有の脆弱性によってバッファオーバーフローを引き起こしやすいといった特徴があります。そのため、直接的なメモリの操作ができないJavaなどの言語の使用をお勧めします。
脆弱性のあるライブラリーを使わない
一般に公開されているライブラリーを使用する場合、古いライブラリーの中にバッファオーバーフローの脆弱性が残っているリスクに注意しなければなりません。ライブラリーは、使用頻度が高いコードや機能を再利用しやすいようにまとめたファイルで、自分でコードを書く手間が省けるメリットがありますが、古いライブラリー内には脆弱性のあるコードが残っていることもあります。
現在のWebアプリケーションの多くはPHPやPerl、Javaといったメモリの操作ができない言語を使用していますが、既存のライブラリーを使う場合には脆弱性の修正が行われた安全なライブラリーであることを確認するようにしてください。
脆弱性は、目視によるチェックのほか、ソースコード検査ツールなどを活用することで発見できます。
入力データのサイズをチェックする処理を実装する
バッファオーバーフローは、入力データのサイズをチェックする処理を実装することで防止できます。バッファオーバーフローは、バッファの許容量を超えるデータが送り込まれることによって発生するため、許容量を超えないようデータの長さをチェックして、書き込み上限を設ける処理を組み込めばリスクを低減できます。
また、サイズ指定のない関数の使用を禁止することも、防止策の1つです。
適切な対策を行い、バッファオーバーフローによる被害を防ごうし
バッファオーバーフローは、メモリ内のバッファと呼ばれる部分に大量のデータを送り込み、動作不良やサービスの停止、管理者権限の乗っ取りによる情報漏洩やデータ改ざんを引き起こすおそれのある攻撃です。不正なメールの送信元になったり、DoS攻撃の踏み台にされたりすることで、企業としての信頼性が失墜する可能性もあります。
万が一バッファオーバーフローが起きた際に備え、できる限りの対策を講じておきましょう。企業経営の根幹を揺るがしかねない情報漏洩リスクに対しては、情報漏洩対策に効果的なツールを導入するのも有効です。
インターコムが提供する「MaLion」シリーズは、組織の情報漏洩対策とIT資産管理、労務管理を一元的に担うツールです。システム上でWindowsの更新プログラムやセキュリティパッチの適用状況を確認したり、管理者からセキュリティパッチや更新プログラムを一斉に送信したりすることもできるため、全社的な脆弱性対策に効果を発揮します。また、機密情報や個人情報が含まれるファイルなどへのアクセスを監視し、セキュリティポリシーに反する操作を制限することも可能です。
自社や取引先に甚大な被害を及ぼす可能性があるバッファオーバーフロー攻撃によるリスクをできる限り低減したい場合は、ぜひインターコムの「MaLion」シリーズの導入をご検討ください。