■バッファオーバーフローを発生させないためには

 では、どのようにすればバッファオーバーフローが発生しないプログラムを作成することができるのでしょうか。C言語でプログラムを作成する際に注意することとしては以下のような点が挙げられます。

  • バッファにデータを保存する際にデータサイズがバッファサイズを超えていないことを常に確認する
  • 標準関数の中でstrcpyやstrcatといったバッファのサイズをチェックしないでコピーを行う関数は使用しない

 これだけのことに注意するだけでほとんどのバッファオーバーフローの脆弱性は防ぐことができます。C言語の標準関数の中で危険とされている関数を使用したい場合は、strcpyであれば、strncpyを、strcatであればstrncatというように、バッファのサイズをチェックしてサイズ以上のコピーを行わない関数を使用するべきです。

 それでもバッファオーバーフローによるセキュリティホールが数多く見つかるのは、プログラマが間違った形式のデータが入力されることはないだろうという思い込みや、プログラムの実行速度を早くするため余計な処理を省く過程でチェック処理を省略してしまうというようなことが考えられます。

 個人で利用するために作成したプログラムならそれでも構わないかもしれませんが、広く公開し誰が使用するかは分からないプログラムの場合、プログラマの想定していない使い方をされる可能性が十分あります。そのため、想定していないデータが入力されることは確実に存在します。

 このように、バッファオーバーフローを発生させないプログラムを作成するためには、プログラマが入力データの形式を信用しないことが重要です。また、プログラムをテストする際に、セキュリティホールとして利用できるかどうかという観点でテストを行うことも重要になってきます。

Index
5分で絶対に分かるバッファオーバーフロー
  バッファオーバーフロー攻撃の仕組みを知ろう
  そもそもバッファって?
  なんでバッファがオーバーフローするの?
  バッファオーバーフローがセキュリティホールになるワケ
  本当に悪意のあるコードが実行できるの?
バッファオーバーフローを発生させないためには

Profile
石山 智祥(いしやま としあき)
株式会社フォティーンフォティ技術研究所


研究開発部 αUnit(先端技術・特殊技術研究グループ)所属のシニアソフトウエアエンジニア。セキュリティプロダクトの開発、およびさまざまなセキュリティコア技術に関する研究に従事。

マルウェア分析のスペシャリストとして、マルウェアのリバースエンジニアリング手法やダイナミックコード分析手法の研究に従事。また、脆弱性分析やPtoPシステムセキュリティに関する調査・研究にも従事。

関連記事
Webサーバへの攻撃を見抜く
多様化するWebアプリケーションへの攻撃
侵入攻撃の手法と対策
セキュリティホールはなぜできる?
緊急リポート Code Redワームの正体とその対策
WAFはどのように脆弱性を防御するのか

5分で絶対に分かるシリーズ

TechTargetジャパン

Security&Trust フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH