処理能力を超えたコンピューターに不正なデータを送りつけて、誤動作を起こさせるバッファーオーバーフロー攻撃。

対策方法がわからずに不安に思っている方のために、このページではその概要から対策方法まで幅広く解説しておりますので、ぜひ最後までご覧ください。

バッファオーバーフロー攻撃とは?

バッファーオーバーフロー攻撃を簡単に説明すると以下のようなものです。

  • 攻撃対象のコンピュータに許容量以上のデータを送りつけ、誤作動を起こさせる
  • 脆弱性を悪用して誤作動したコンピューターの乗っ取りなどを行う
  • 乗っ取ったコンピューターを踏み台にして別のコンピューターを攻撃する

このように、コンピューターが許容できる以上の情報量で正常に動かなくなっている間に乗っ取りなどの悪さを行う非常に悪質なものです。
大まかな流れなどを図にすると下記のようなイメージです。
バッファーオーバーフロー攻撃

バッファオーバーフローはOSやアプリケーションプログラムの入力データ処理に関するバグを利用して、情報を不正に操作する攻撃を指しています。

OSやアプリケーションが本来想定している値よりもずっと大きな値を変数部分に入力することで、処理しきれなくなった情報を溢れさせ(オーバーフロー)、本来想定していない他の領域を上書きしてしまうことから、このように呼ばれるようになりました。

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

バッファオーバーフローにはいくつかのバリエーションがあり、それぞれ攻撃方法が異なります。以下に代表例を示しますので、興味がある方は目を通して見て下さい。

スタック領域型 データ領域とリターンアドレスが記載されている部分に対してオーバーフローを起こし、リターンアドレスを攻撃者が書き換えてしまう。
ヒープ領域型 未使用領域の管理に双方向リストが用いられていることを悪用し、関数のリターンアドレス、例外ハンドラアドレス等を書き換えてしまう。
その他の攻撃型 ファイルのオーナー権限で動作するUNIX環境下で、rootのSUID属性をもつコマンドを悪用し、管理者権限を奪取。

バッファオーバーフローの原因とは?

非常に脅威となるバッファーオーバーフロー攻撃。危険性についてはお分かりいただけたと思いますが、この攻撃はどういった仕組みで行われるのでしょうか。

コンピューターがプログラムを実行する場合、3つのメモリ領域を確保する必要があります。

①コード領域 実際にプログラムが格納される
②スタック領域 ローカル変数やメソッドの情報を格納
③ヒープ領域 計算や操作のためのデータ格納

そしてスタック領域とヒープ領域を合わせてバッファと言うのですが、バッファーオーバーフロー攻撃では、あらかじめ確保してあるバッファのサイズを超えたデータを入れることで、プログラムの誤作動を起こさせます。

オーバーフローが起きてしまう根本的な原因は、OSやアプリケーションの脆弱性(メモリ領域に本来想定している情報量以上の値が入力された結果、リターンアドレスなどの致命的な部分を上書きしてしまう)にあります。

バッファオーバーフロー攻撃の影響

バッファオーバーフローによりメモリ領域が攻撃を受けてしまうと、攻撃者の手により様々な悪影響が生じます。とくに代表的な被害の影響は以下の2つです。

他のサイバー攻撃の踏台にされる

侵入した攻撃者がオーバーフローにより入り込んだマルウェアを悪用することで、他のWEBサイトやサーバに対するサイバー攻撃の加害者に仕立て上げられてしまいます。

管理者権限の乗っ取り

管理者権限で動作しているプログラムにマルウェアをリンクさせ、管理者権限を奪取されてしまいます。記憶領域にあるパスワードやカード情報が流出したり、仮想通貨採掘プログラムなどにより被害が生じます。

バッファオーバーフロー攻撃の事例

ここで、これまでバッファーオーバーフロー攻撃によってどういった被害が起きているのか見ておきましょう。実際の被害事例には以下のようなものがあります。

ケース1 中央省庁のホームページ改ざん

2000年と少し以前の事例になりますが、世間的に話題になった事例です。科学技術庁のホームページの改ざんやデーターの削除などに始まり、合計で24もの省庁のホームページが改ざんされた。これは、バッファーオーバーフローによる管理権限の乗っ取りが原因となって発生したものです。

ケース2 Facebookのサービス停止

こちらは2015年1月に発生した事例で、facebookのサービスが複数の攻撃を受け、過負荷な状態に陥り、サービス停止になったものです。この例では、バッファーオーバーフローを引き起こすための手法としてDoS攻撃が行われたもので、世界のいくつかの地域から一斉に攻撃が行われたことがわかっています。

攻撃されないための対策

バッファオーバーフローによる攻撃を防ぐには、いくつかの対策が必要です。開発側とユーザー側では打てる手が違ってくるので、それぞれ分割して記載します。

ユーザー側が行うべき対策

正直、ユーザー側が打つことができる対策は多くありません。脆弱性を露呈しないように、セキュリティを向上させることが重要です。

  1. セキュリティソフトを最新にする
    不正なマルウェアの動作だけでなく、ネットワークの監視等も含めた総合セキュリティソフトをオススメします。
  2. 修正パッチの導入
    使用しているアプリケーションの脆弱性を修正するためには、パッチの導入が欠かせません。

バッファーオーバーフロー攻撃に限らず、サイバー攻撃の多くはプログラムの脆弱性を悪用する傾向があります。

セキュリティ対策ソフトはこういった脆弱性を突く攻撃を検知し防ぐことが出来ますし、何よりプログラムアップデートによって脆弱性を解消することで攻撃自体を有効でなくすことが出来ます。したがって、これらの対応が非常に大切なものとなります。

開発側が行うべき対策

  1. コード記述時の対策
    オーバーフローを未然に防ぐように配慮して、ソースコードを記述することが重要です。データ領域と記述するコードの量は常に意識することをオススメします。また、対策されたランタイムライブラリの導入も1つの手です。
  2. コードの静的検査
    オーバーフローが起きないかを重視して検査し、悪用されそうな脆弱性の有無をチェックしましょう。目視が難しい場合はソースコード検査ツールを利用を推奨します。
  3. あふれを検出するデバッグ
    オーバーフローを防止するためには欠かせない工程です。オーバーフローの検出を得意とするデバッガもあります。

DoS攻撃との違い

大量にデータを送りつける攻撃として、DoS攻撃との違いがよくわからない方も多いかと思いますので、その違いを説明いたします。

その違いを簡単に言うと、前述の通り「バッファオーバーフロー」は、コンピューターの脆弱性を突く攻撃のことで、コンピューターが確保しているメモリ領域を越えたデータが送られ、このデータに悪意のあるコードが含まれることにより、プログラムの誤動作などを起こす攻撃です。

それに対して「DoS」は、外部のサーバなどに負荷をかけるために大量のデータを送る攻撃手法です。

簡単にいうと、「バッファオーバーフロー」はコンピューターの内部への攻撃に利用され、「DoS」は外部から過剰に負荷を与える攻撃です。

DoS攻撃
DoS攻撃(Denial of Service attack)とは、サイバーの攻撃の1つであり、攻撃目標であるサイトやサーバに対して大量のデータを送り付けることで行われる攻撃のことで、大きく分けて2つあります。

  • 攻撃対象に意図的に過負荷になるような大量のリクエストや大きなファイルを送りつけ、サービスの妨害を行うもの
  • 攻撃対象の脆弱性を突いて悪用するもの

詳細は下記ページも参考にしてください。
参考DoS攻撃・DDoS攻撃とは?攻撃の目的や種類、事例、対策方法を解説

まとめ

バッファオーバーフローによる攻撃を受けると、甚大な被害が生じます。また、場合によっては自身が所有するパソコンやサーバが踏台にされることもあるので、突然犯罪者に仕立て上げられてしまう可能性もあります。

高度な技術が必要なサイバー攻撃ですが、"いつ自分が受けるかもしれない"と考え、セキュリティ体制を万全にしておきたいところです。

【無料メール講座】6日間で「未知のマルウェア」&「ヒューマンエラー」対策が分かる最新セキュリティトレンド講座


社内のセキュリティ対策でお悩みではありませんか?
この講座を受けていただくと、6日間のメールで下記のことがわかるようになります。

  • 必要最低限の「セキュリティ対策」を正しく理解する方法とは?
  • 経営者目線のセキュリティ対策とは?
  • 経営者が陥りやすいセキュリティ対策の3つの思い込みとは?
  • セキュリティ対策を進める上で知っておくべき3つのポイント
  • セキュリティ対策の大きな課題「未知のマルウェア」&「ヒューマンエラー」の解決方法

この情報をぜひ貴社のセキュリティ対策にお役立てください。