記事カテゴリ
MENU

セキュリティ

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

このエントリーをはてなブックマークに追加

プログラム実行時にデータを一時的に格納するメモリ領域内の場所(バッファ)を溢れさせることにより、実行中のアプリケーションを強制停止させたり、悪意のあるコードが実行されてしまう「バッファオーバーフロー」攻撃。今回はバッファオーバーフロー攻撃の詳細について解説します。

この記事で紹介している
サービスはこちら

クラウドWAF
セキュリティオペレーションサービス多層防御の機能をセットで提供し、24時間365日の有人監視でWebサイトの改ざん・情報漏えいを守る

目次

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

「バッファオーバーフロー」は、悪意のあるユーザーがサーバー・パソコンに処理能力を超える大量のデータや悪意のあるコードを送り、メモリ領域内のバッファの許容量を超えて溢れてしまう(オーバーフロー)脆弱性、またはその脆弱性を悪用した攻撃のことを指します。バッファオーバーフローによる攻撃を受けると、実行中のプログラムが強制停止させられたり、悪意のあるコードが実行されDoS攻撃の踏み台にされたり、管理者権限が乗っ取られたりといった被害を受ける可能性があります。

バッファオーバーフロー

DoS攻撃との違いは?

「DoS攻撃」は、Webサイトやサーバーに許容量を超えたリクエストやデータを送り付け、アクセス集中によりWebサイトを繋がりにくい状態にしたり、サーバーをダウンさせたりする攻撃です。
どちらにも「許容量を超えた」というキーワードが入っていますが、バッファオーバーフローはサーバーの脆弱性を突き、大量のデータに含んだ悪意のあるコードの実行を狙うのに対し、DoS攻撃は外部から過剰に負荷をかけサービス停止を狙うという違いがあります。

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

バッファオーバーフロー攻撃は、バッファのうちどこを標的にするかにより「スタックを標的とした攻撃」、「ヒープを標的とした攻撃」、「静的領域を標的とした攻撃」などに分類されます。次に簡単に紹介します。

スタックを標的とした攻撃

「スタック」は「積み重ねる」の意味で、関数の実行時にローカル変数やリターンアドレスなどを下から上に積んで記憶するメモリ領域を指します。スタックを標的とした攻撃では、主にリターンアドレスを書き換えることで、マルウェアなど意図しないコードの実行を狙います。

ヒープを標的とした攻撃

「ヒープ」は「かたまり」「山」などの意味で、関数の実行時に必要に応じて確保し、不要になったら開放するメモリ領域を指します。ヒープを標的とした攻撃では、ヒープ領域に許容量を超えた領域を確保することで、実行中のアプリケーションの強制停止、ヒープメモリの破壊などを狙います。

静的領域を標的とした攻撃

「静的領域」は、複数の関数において共通で使用される変数(グローバル変数)や定数などが保存されるメモリ領域を指します。静的領域を標的とした攻撃では、主に次に実行するコードの場所が書かれた「ジャンプアドレス」を書き換えることで、マルウェアなど意図しないコードの実行を狙います。

バッファオーバーフローの原因

バッファオーバーフローは、「バッファに許容量を超えた大きさのデータが書き込まれてしまう」ことで発生します。プログラムにおいてそもそも許容量を超えたデータを入力された場合のことを想定していない、許容量を超えているかどうかを確認する仕組みがない、など主に開発時の不備による脆弱性が原因となります。
もっとも、バッファオーバーフローに関する脆弱性は1970年代には既に周知されており、1980年代には実際にバッファオーバーフロー攻撃が登場しています。不用意なプログラミングから意図せずにバッファオーバーフローの脆弱性が生じてしまう場合もあります。

バッファオーバーフロー攻撃への対策

バッファオーバーフロー攻撃の対策は、プログラムの開発者側と利用者側で異なりますので、それぞれ見ていきましょう。
開発者側の対策としては、バッファオーバーフローを発生させる可能性のある関数の使用は気をつける(例えば、C言語のscanf関数)、ソースコード記述時には常にデータの長さを意識することや、対策されたランタイムライブラリを使用する、目視およびソースコード検索ツールによる脆弱性のチェック、領域あふれの問題を検出するデバッグを念入りに行うなどの対策が必要です。
現在のWebアプリケーションのほとんどは、PHPやJavaなどの直接メモリを操作できない言語が使われており、バッファオーバーフローの脆弱性の影響を受ける可能性は低いと言われています。
一方、利用者側の対策としては、バッファオーバーフローに対応するためOSやアプリケーションは常にアップデートして最新の状態に保ち、修正パッチは速やかに適用することが大切です。また、ネットワーク監視機能などを備えたセキュリティソフトも導入しておけばさらに安心です。

NTTPCのクラウドWAFセキュリティオペレーションサービスを導入し、多層防御でセキュリティを強化

「クラウドWAFセキュリティオペレーションサービス」は、さまざまな脅威にさらされるウェブサイトのセキュリティ運用を簡単に手間なく実現するサービスです。コーポレートサイトやECサイト運営のネットワーク、サーバーを外部攻撃からお守りします。
バッファオーバーフロー攻撃など、OSの脆弱性を狙った攻撃はIDS/IPSで検知・遮断。さらにSQLインジェクション、クロスサイトスクリプティングなどの攻撃はWAFで防御します。現在ご利用のクラウド型のWAFに疑問を感じている企業の方や、自社でのWAF運用に課題をお持ちの方などにお勧めです。

クラウドWAFセキュリティオペレーションサービス

クラウドWAF
セキュリティオペレーションサービス多層防御の機能をセットで提供し、24時間365日の有人監視でWebサイトの改ざん・情報漏えいを守る

バッファオーバーフロー攻撃による被害事例

バッファオーバーフロー攻撃により、どのような被害が発生したのでしょうか。いくつか具体例を見てみましょう。

官公庁のWebサイト改ざん

2000年1月、バッファオーバーフロー攻撃により管理権限が乗っ取られ、科学技術庁のWebサイトが改ざんされました。その後も総務省、運輸省などのWebサイトが次々に改ざんされ、一連の事件は「中央官庁Webページ集中改ざん事件」と呼ばれました。原因はWebサーバーへのパッチの適用をおろそかにするなど、ずさんなサーバー管理にあったと言えます。

脆弱性を利用した不正アクセス

2004年5月、BSDやLinuxなどのOSで使用されているバージョン管理システムCVS(Concurrent Versions System)にバッファオーバーフローを引き起こす脆弱性が発見され、国内外で多くのサーバーが被害を受けました。国内でも日本で最古のMozillaユーザーコミュニティ「もじら組」、日本語全文検索システムを提供しているサイトなどが不正アクセスを受け、サービスを停止するなどの対応を余儀なくされました。

Facebookのサービス停止

2015年1月、FacebookがDoS攻撃を通じたバッファオーバーフロー攻撃を受け、30分以上サービスを停止する事態となりました。DoS攻撃はアメリカや中国などの国から行われていたそうで、Facebook側は広告配信収入などで巨額の損害を受けたと言われています。後にハッカー集団「Lizard Squad」が犯行声明を出しました。

まとめ

今回は、故意にバッファをあふれさせることで実行中のアプリケーションを強制停止させたり、悪意のあるコードを実行したり、コンピュータを乗っ取ったりする「バッファオーバーフロー」について解説しました。
バッファオーバーフロー攻撃には「スタックを標的とした攻撃」、「ヒープを標的とした攻撃」、「静的領域を標的とした攻撃」があり、開発者がバッファオーバーフローを起こしにくいプログラムを志すこと、利用者側が常にOSやアプリケーションをアップデートし最新の状態に保つことである程度被害を防止できることがお分かりになったでしょうか。
とは言え、やはりサイバー攻撃から自社を守る最後の砦はウィルス対策ソフトウェアやWAFなどの導入です。個人情報などを扱っていて情報漏えいを心配されている方や、サイト改ざんによる信用失墜を心配されている方は、この機会にセキュリティ製品の導入を検討してみてはいかがでしょうか。

※ICT Digital Columnに記載された情報は、リリース時点のものです。
商品・サービスの内容、お問い合わせ先などの情報は予告なしに変更されることがありますので、あらかじめご了承ください。

この記事で紹介している
サービスはこちら

クラウドWAF
セキュリティオペレーションサービス多層防御の機能をセットで提供し、24時間365日の有人監視でWebサイトの改ざん・情報漏えいを守る

関連するおすすめ記事