9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

バッファオーバーフローについて調べてみた

Posted at

そもそもバッファとは

バッファの元々の意味は「緩衝」です。バッファオーバーフローのバッファとは「バッファメモリ」のことを指し、一時的にデータを保管しておく領域のことです。

プログラムがもつ領域は実行命令が格納されているコード領域、プログラムの戻り先などプログラム実行のための一時的な情報が格納されているスタック領域、計算や操作のためのデータを格納するヒープ領域の3つにわかれます。このうち、スタックとヒープを合わせた領域バッファと言います。

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

CやC++などで作成されたプログラムにおいて、バッファの許容量を超えてデータが入力されることでメモリ領域が溢れてしまうバグのことです。
バッファオーバーフローによる攻撃を受けると、実行中のプログラムが強制停止させられたり、悪意のあるコードが実行されDoS攻撃の踏み台にされたり、管理者権限が乗っ取られたりといった被害を受ける可能性があります。

■ Dos攻撃との違い
大量にデータを送りつける攻撃として、DoS攻撃があります。
それぞれの違いを簡単にいうと、「バッファオーバーフロー」はコンピューターの内部への攻撃に利用され「DoS」は外部から過剰に負荷を与える攻撃です。

「バッファオーバーフロー」は前述の通りソフトウェアの脆弱性を突く攻撃のことで、コンピューターが確保しているメモリ領域を越えたデータが送られ、このデータに悪意のあるコードが含まれることにより、プログラムの誤動作などを起こす攻撃です。
それに対して「DoS」は、外部のサーバなどに負荷をかけるために大量のデータを送る攻撃手法です。

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

  • 2000年中央省庁のホームページ改ざん
    科学技術庁のホームページの改ざんやデーターの削除などに始まり、合計で24省庁のホームページが改ざんされました。これは、バッファーオーバーフローによる管理権限の乗っ取りが原因となって発生したみたいです。
  • 2015年1月にFacebookのサービス停止

対策

■ 開発者側の対策:

  • バッファオーバーフローを発生させる可能性のある関数の使用は気をつける(C言語のscanf関数など)
  • バッファのサイズをチェックする関数を使用する(C言語のstrncpyなど)
  • ソースコード記述時には常にデータの長さを意識する
  • 対策されたランタイムライブラリを使用する
  • 目視およびソースコード検索ツールによる脆弱性のチェック
  • 領域あふれの問題を検出するデバッグを念入りに行う

などの対策が必要なようです。

現在のWebアプリケーションのほとんどは、PHPやJavaなどの直接メモリを操作できない言語が使われており、バッファオーバーフローの脆弱性の影響を受ける可能性は低いと言われています。

■ 利用者側の対策:

  • OSやアプリケーションは常にアップデートして最新の状態に保つ
  • 修正パッチは速やかに適用する
  • ネットワーク監視機能などを備えたセキュリティソフトの導入

などが有効なようです!

さいごに

普段CやC++をさわることはないのですが、メモリ領域を直接操作する際には気をつけなきゃと思いました!

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?