コンピュータウイルスやワーム、不正侵入手口などについて調べていくと、バッファオーバフローという脆弱性が目立つと感じるはずだ。実際に、SIOS( https://vdb.sios.biz/ )で「buffer overflow」をキーワード検索すると、1,000件以上ヒットすることからも、バッファオーバフローは大問題であることがわかる。今のところ「脆弱性の約25%はバッファオーバフローに起因する問題である」と考えて良いだろう。 今回のコラムでは、バッファオーバフロー問題について考えていく。 バッファオーバフローとは、プログラマが用意した領域に、その領域の大きさを越えたデータが入力されて起こる。この状態になると、メモリにロードされたプログラムの一部が壊れることになるが、C/C++言語の仕様では、バッファの境界値チェックは行わないので、こういう事は起きやすい。 全てバグ(プログラマのコーディングミス)である。●仮想メモリ空間 最初に、プロセスがどのようにメモリを使用するかについて確認しておく。 プロセスが使用するメモリは、テキスト領域、データ領域、BSS領域、ヒープ領域、スタック領域と分類できる。C言語では各領域を次のように使用する(Linuxの例で説明するが、他のOSでも同じような構成)。・テキスト領域 プログラムの実行コードが格納される。読み取り専用。複数のプロセスで共有される。・データ領域 宣言時に値をセットしたスタティック変数やグローバル変数が格納される。・BSS領域 宣言時に値をセットしていないスタティック変数やグローバル変数が格納される。横河電機株式会社 SIOS調査員B(詳しくはScan本誌をご覧ください)http://shop.vagabond.co.jp/m-ssw01.shtml