サイバー攻撃

バッファオーバーフローとは?攻撃の仕組みや対策をわかりやすく解説

Written by 夏野ゆきか

SEとして自動車業界/旅行業界の開発・保守・運用を経験後、フリーランスライターとして独立。IT系メディアに関するコラムや地域情報、エンタメなどの記事を執筆。

バッファオーバーフローとは?攻撃の仕組みや対策をわかりやすく解説

バッファオーバーフローとは、バッファの許容範囲を超えるデータを送りつけ、バッファを溢れさせることで、意図しない動作を引き起こすサイバー攻撃です。

バッファオーバーフロー攻撃を受けると、

・システム停止に追い込まれる
・管理者権限を奪われる
・サイバー攻撃の踏み台にされる

といった被害が発生する可能性があります。

▼この記事を要約すると

  • バッファオーバーフローとは、バッファ(一時的にデータを保持しておくための記憶領域)に許容量を超えるデータを送信し、溢れさせることで、動作不良や機能停止を引き起こす脆弱性のこと。この脆弱性を悪用した攻撃を「バッファオーバーフロー攻撃」という
  • バッファオーバーフロー攻撃には「スタック領域」「ヒープ領域」「静的領域」を狙った3種類がある
  • バッファオーバーフロー攻撃を受けると「管理者権限の奪取」「サイバー攻撃の踏み台にされる」などの被害リスクがある
  • 利用者側の対策として「OSを常に最新の状態にする」「修正パッチの適用」「アンチウイルス等の導入」が挙げられる
  • 開発者側の対策として、「書き込むデータの長さを調整する」「Javaなど直接メモリを操作できない言語を使う」「安全なライブラリを使用する」「脆弱性診断を行う」などがある

「バッファオーバーフローとはなにか」「攻撃の仕組みや対処法を知りたい」という方は、ぜひご一読ください。

またエムオーテックスでは、バッファオーバーフロー攻撃を含む「Webアプリケーションの脆弱性」を弊社のエキスパートが洗い出し、効率的に対策を行える「Webアプリケーション診断」を提供しています。

そんな弊社の診断士が選定した、注意すべき「Webアプリケーションの脆弱性」とその対策について、1冊のホワイトペーパーへまとめました。ぜひ本記事とあわせてご活用ください。

【TOP5】Webアプリケーション診断でよく見つかる「注意したい脆弱性」とは?

MOTEXの診断員がよく発見する「Webアプリの5つのリスク」について概要・対策を解説します。

資料をダウンロードする

バッファオーバーフローとは


バッファオーバーフローの説明をする前に、まずはバッファについて説明をします。

バッファとは、一時的にデータを保持しておくための記憶領域です。

コンピューターは、ソフトウェアによって処理速度や伝送速度に差異があります。この処理速度の差を補うために、データを一時的にバッファに保持し、処理ができる範囲のデータを取り出して処理を行います。

バッファオーバーフローは、このバッファに許容量を超えるデータが送信され、溢れてしまうことで、動作不良や機能停止を引き起こす脆弱性(セキュリティ上の欠陥)を指します。
この脆弱性を悪用した攻撃を「バッファオーバーフロー攻撃」といいます。

▼バッファオーバーフロー攻撃のイメージ
通常のデータ入力と、バッファオーバーフロー攻撃時のデータ入力の違い
バッファに許容量を超えるコードを送り込まれることで、「リターンアドレス(戻りアドレス)」が上書きされ、不正な操作や不具合が生じます。

※リターンアドレス…関数処理後、次にどこからプログラムを実行すればよいかを示す位置情報のこと

バッファオーバーフローの攻撃を受けると、システムが強制停止させられる管理者権限を奪われるサイバー攻撃の踏み台にされるといった被害にあう可能性があります。

バッファオーバーフロー攻撃の仕組み


バッファオーバーフローのうち、主要である「スタック領域型」の攻撃は、以下の手順で行われます。

  1. 攻撃者がバッファに悪意のあるコード含んだ大量のデータを送信
  2. バッファが溢れたことで、リターンアドレス(戻りアドレス)が悪意あるコードに上書きされる
  3. 悪意のあるコードが実行される

▼バッファオーバーフロー攻撃の流れ
バッファオーバーフロー攻撃を仕掛ける流れ
先述の通りバッファオーバーフロー攻撃とは、バッファに大量のコードを送り込むことで、関数の「リターンアドレス(戻りアドレス)」を書き換え、動作不良や不正な操作をおこなう攻撃手法です。

リターンアドレスとは、デバイスが関数の処理が終了した際、次にどこからプログラムを実行すればよいかを示す位置情報です。攻撃者がバッファの許容量を超えたデータを送信すると、溢れたデータがリターンアドレスの領域を上書きしてしまうため、位置情報がわからず不具合が発生してしまいます。

またこの際、バッファの許容量を超えたデータの中に「悪意あるコード」が仕込まれていた場合、リターンアドレスが上書きされ、悪意あるコードが実行されてしまうのです。

【TOP5】Webアプリケーション診断でよく見つかる「注意したい脆弱性」とは?

MOTEXの診断員がよく発見する「Webアプリの5つのリスク」について概要・対策を解説します。

資料をダウンロードする

バッファオーバーフロー攻撃の種類

バッファオーバーフロー攻撃は、バッファのどの領域をターゲットとするかにより、「スタック領域型」「ヒープ領域型」「静的領域型」の3つに分類することができます。

種類 特徴
スタック領域をねらったもの
(スタック領域型)
  • ローカル変数やリターンアドレスなどプログラムの実行に必要な情報が保存されている領域を標的にした攻撃
  • 許容量を超えたデータを送り付け、リターンアドレスなどを書き換えて、正しい処理実行を妨げたり、悪意あるコードを実行させたりする
ヒープ領域をねらったもの
(ヒープ領域型)
  • プログラムの実行時に必要に応じて、メモリの確保や開放をする領域を標的にした攻撃
  • ヒープ領域に許容量を超えたメモリ領域を確保させ、メモリの破壊や実行しているプログラムの停止を行う
静的領域をねらったもの
(静的領域型)
  • グローバル変数や定数など、複数の関数に用いられる変数を記憶する領域を標的にした攻撃
  • ジャンプアドレス(次に実行するコードの場所が書かれたもの)を書き換え、悪意あるコードを実行させる

スタック領域を狙ったものは、関数の処理が終了した後に、もとのプログラムをどこから実行すればよいかを示すリターンアドレスなどを書き換え、マルウェアなど悪意のあるコードを実行させます。「バッファオーバーフローの攻撃の仕組み」で解説した手法は、このスタック領域型の手口です。

またヒープ領域を狙った攻撃では、ヒープ領域の空き箇所を管理する仕組みを悪用し、許容以上のメモリ領域を確保させ、メモリの破壊や実行しているプログラムを停止に追い込みます。

最後に静的領域型では、次に実行予定のコードの所在が書かれた「ジャンプアドレス」を上書きすることで、悪意のあるコードを実行します。

バッファオーバーフロー攻撃とDoS攻撃の違い


バッファオーバーフローと、よく似た攻撃手法に「DoS攻撃」があります。

DoS攻撃とは、攻撃対象のサーバーやサイトに対して意図的に大量のパケットを送信し、サーバーやネットワークへ膨大な負荷をかけることで、サービスの停止などを引き起こすサイバー攻撃です。

バッファオーバーフロー攻撃とDoS攻撃は、共に過剰なデータ量を送り付けてシステムに不具合を引き起こす攻撃ですが、両者の違いは「攻撃を仕掛ける領域」と「目的」にあります。

バッファオーバーフローは不正なスクリプトの実行を目的に、サーバーの脆弱性を利用し、サーバー内部のメモリに対して攻撃を仕掛けます。

対してDoS攻撃は、公開サーバーに対して外部から過剰な通信を行うことでサービスのシステムダウンを引き起こすという手口です。

また、攻撃者が一台の端末から直接攻撃を仕掛けるDoS攻撃に対し、第三者の端末を乗っ取ることで、複数のPCから大量のパケットを送信する「DDoS攻撃」という手法もあります。

関連ページ

DDoS攻撃とは?目的やDoSとの違い・対策をわかりやすく解説

バッファオーバーフロー攻撃を受けた場合の被害


バッファオーバーフロー攻撃を受けた場合、以下のような被害にあう可能性があります。

  1. 管理者権限を奪取される
  2. サイバー攻撃の踏み台にされる

それぞれのケースについて詳しくみていきましょう。

1.管理者権限が奪取される

バッファオーバーフロー攻撃を受けることにより、リターンアドレスやジャンプアドレスなどが書き換えられ、不正なマルウェアなどを実行される可能性があります。

そうなると管理者権限を奪われ、管理者しかアクセスできないような機密情報が流出してしまったり、アカウント情報が盗まれたりします。

機密情報や顧客情報などが漏洩してしまうと、企業は信頼を失うだけでなく、場合によっては損害賠償責任を負い、金銭的なダメージを受けることもあります。

2.サイバー攻撃の踏み台に利用される

バッファオーバーフロー攻撃を受けることで、サイバー攻撃の踏み台に悪用されてしまう可能性もあります。

バッファオーバーフローによってマルウェアを悪用し、他のWebサイトやサーバーに攻撃を仕掛けます。

特に多い攻撃事例が、先述したDDoS攻撃に悪用されるパターンです。あるいはメールアカウントを乗っ取られ、大量の攻撃メールの送信に利用されることもあります。

【TOP5】Webアプリケーション診断でよく見つかる「注意したい脆弱性」とは?

MOTEXの診断員がよく発見する「Webアプリの5つのリスク」について概要・対策を解説します。

資料をダウンロードする

バッファオーバーフローの被害事例


過去に国内で実際に起きた、バッファオーバーフロー攻撃による被害事例を2つご紹介します。

1.公的機関のWebサイト改ざん

公的機関の管理する複数のWebサイトに、バッファオーバーフロー攻撃が仕掛けられ、管理者権限を奪取され「Webサイトの改ざん」が行われた事件が発生しました。

攻撃者はWebサイトに、遠隔操作が可能となる悪質なコードを含んだ、許容を超える大量のデータを送信。Webサイトの管理者権限を奪取し、改ざんを行いました。

Webサーバーのバージョンが古い状態だったため、その脆弱性を突かれてしまったのが原因です。当時の最新のWebサーバーを導入していれば、事件は未然に防げたと言われています。

2.大手ソフトウェア開発企業が提供する製品に、バッファオーバーフローの脆弱性

大手ソフトウェア開発企業が提供する複数のグループウェア製品に、バッファオーバーフローの脆弱性が発見された事件です。

発見された脆弱性は、特定の画面から送信されるリクエストのパラメータを不正に改ざんすると、メールの送受信時にバッファオーバーフローが起きる可能性があるというものでした。

攻撃者にこの脆弱性を悪用されると運用しているサーバー上で、DoS攻撃などサービス運用妨害の発生や、不正なコードを実行される危険性がありました。

脆弱性発見後、オンライン製品はすぐにプログラムが修正され、パッケージの製品も脆弱性改善のためアップデートが促されました。

バッファオーバーフロー攻撃への対策(利用者側)


バッファオーバーフロー攻撃への対策は、プログラムの「利用者側」と「開発者側」それぞれで、適切な対応を行う必要があります。

まずは、利用者側が行うべき対策をご紹介します。

▼利用者側が行うべき対策

  1. OSを常に最新の状態にしておく
  2. 修正パッチを速やかに適用する
  3. アンチウイルスやEDRの導入

バッファオーバーフローの根本的な対策にはなりませんが、万一攻撃の被害に遭った際、被害を防止する・最小限にとどめるといった意味合いから「OSを最新の状態に保つこと」「アンチウイルスやEDRの導入」といった、基本的な対策が重要です。

またソフトウェアの脆弱性に速やかに対応するため、公開後速やかに修正パッチを適用することも対策として欠かせません。

バッファオーバーフロー攻撃への対策(開発者側)


続いて、開発者側で行うべきバッファオーバーフロー攻撃への対策を紹介します。

バッファオーバーフローの要因は主に「開発側」に起因する脆弱性であるため、開発者・運用者は安全なWebサイト運用を目指す上で、以下に留意しておく必要があります。

  1. Javaなど直接メモリを操作できない言語を使う
  2. 書き込むデータの長さをチェックする
  3. 脆弱性が修正された安全なライブラリを使用する
  4. Webアプリケーションの脆弱性診断を行う

4つの対策についてそれぞれ解説していきます。

1.Javaなど直接メモリを操作できない言語を使う

バッファオーバーフローは、メモリを直接操作できる言語が使用されている場合に発生します。

C言語および C++は、メモリの管理は開発者に任されており、メモリ内のデータの上書きやアクセスに対する保護機能が備わっていません。よってC言語およびC++は、バッファオーバーフロー攻撃の影響を受けやすい言語と言われています。

現在のWebアプリケーションではPHPやJava、Pythonなどが使用されていますが、ライブラリなどプログラミング言語の内部でC言語が利用され、バッファオーバーフローの脆弱性が存在している場合もあります。

よってPHPやJavaを使用していれば必ずしも安全ではないため、以下2~4の対策もあわせて実施を検討しましょう。

2.書き込むデータの長さをチェックする

先述の通り、バッファオーバーフローは、許容を超えたデータが送り込まれることで発生します。

そのため書き込み上限を設ける、あるいはサイズ指定のない関数の使用を禁止することで、被害リスクを軽減することが可能です。

3.脆弱性が修正された安全なライブラリを使用する

ライブラリとは、プログラムにおいてよく利用される機能やコードを切り出し、再利用しやすいようにまとめたものです。既存のライブラリを利用することで、自分でコードを書く必要がなく、効率的に開発を進めることが可能です。

しかし、一般に公開されているライブラリを使用する際、特に古いライブラリにはバッファオーバーフローの脆弱性が存在するケースがあります。

ライブラリ使用時は、脆弱性が修正された安全なライブラリを使用するようにしましょう。

4.Webアプリケーションの脆弱性診断を行う

Webサイト・アプリケーションを定期的に調査し、脆弱性の改善・対策を打つことは、バッファオーバーフローに有効です。

専門家がWebアプリケーションの脆弱性を診断することで、効率的かつ着実に、サイトに潜む脆弱性を抽出することが可能です。

バッファオーバーフロー攻撃対策に有効な「脆弱性診断」なら、LANSCOPEプロフェッショナルサービスにお任せください


Webアプリケーションにおけるバッファオーバーフロー攻撃対策なら、LANSCOPE プロフェッショナルサービスが提供する「Webアプリケーション診断」にお任せください。

国家資格をもつ弊社のエキスパートが、バッファオーバーフローをはじめWebアプリケーションに潜む様々な脆弱性を洗い出し、必要な対策をご提案いたします。PCサイトからモバイルサイト、WebAPIまで多様な媒体にて、脆弱性を明らかにし、優先度をつけて必要な対策をお伝えします。

「Webサイトを安全に運用したい」「自社サイトのインシデントによって、業務停止や信頼損失などを起こしたくない」という開発者様・サイト運営担当者様におすすめです。

関連ページ

LANSCOPE│Webアプリケーション脆弱性診断(脆弱性診断)

また、診断内容を重要項目に絞り、より低価格でWebアプリケーションの脆弱性診断を受けていただける「セキュリティ健康診断パッケージ」も提供しております。

弊社の経験豊富な診断士が、お客様の予算やご要件に合わせて、最適なプランを提案いたします。

関連ページ

低コスト・短期で診断を行う『セキュリティ健康診断パッケージ』の詳細はこちら

まとめ


本記事では、バッファオーバーフロー攻撃について、その概要や攻撃の仕組み・対策などについて紹介しました。

本記事のまとめ

  • バッファオーバーフローとは、バッファ(一時的にデータを保持しておくための記憶領域)に許容量を超えるデータを送信し、溢れさすことで、動作不良や機能停止を引き起こす脆弱性のこと。この脆弱性を悪用した攻撃を「バッファオーバーフロー攻撃」という
  • バッファオーバーフロー攻撃には「スタック領域」「ヒープ領域」「静的領域」を狙った3種類がある
  • バッファオーバーフロー攻撃を受けると「管理者権限の奪取」「サイバー攻撃の踏み台にされる」などの被害リスクがある
  • 利用者側の対策として「OSを常に最新の状態にする」「修正パッチの適用」「アンチウイルス等の導入」が挙げられる
  • 開発者側の対策として、「書き込むデータの長さを調整する」「Javaなど直接メモリを操作できない言語を使う」「安全なライブラリを使用する」「脆弱性診断を行う」などがある

Webアプリケーションの脆弱性を悪用するサイバー攻撃は、引き続き昨今も猛威を振るっています。開発者側・運営者側はもちろん、利用するユーザー側も、自分毎と捉え普段から十分なセキュリティ対策に取り組んでいきましょう。

またエムオーテックスの診断士が選定した、注意すべき「Webアプリケーションの脆弱性」とその対策について、1冊のホワイトペーパーへまとめました。

ぜひ本記事とあわせて、自社のセキュリティ対策へご活用ください。

【TOP5】Webアプリケーション診断でよく見つかる「注意したい脆弱性」とは?

MOTEXの診断員がよく発見する「Webアプリの5つのリスク」について概要・対策を解説します。

資料をダウンロードする