バッファオーバーフロー

読み:バッファオーバーフロー
外語:buffer overflow
品詞:さ変名詞

バッファ溢れること、またそれにより生ずる不具合。セキュリティホールの一つ。

バッファの大きさは一定であるが、それを超えた大きさのデータを書き込んでしまうと、該当のバッファではない別の領域に書き込むことになり、無関係の領域のデータを破壊することになる。これがバッファオーバーフローである。

例えば、Cにおける入力関数のgets()ではバッファの大きさを指定できず、そのためバッファより大きなデータを受け取ってしまったり、strcpy関数で複写元の文字列が予想外に長くなり複写先のバッファサイズが不足してしまったり等が主たる原因である。

一向に減らない

人間がプログラムを書く以上、これはどうしても避けられない問題でもある。

strcpy、strcat、sprintf、この3関数の使用を禁止するだけでもバッファオーバーフロー防止に絶大な効果があると期待されるが、それを強く主張すると、なぜかDJB教と呼ばれる。

BSDでは、特にセキュリティ命のOpenBSDから代替としてstrlcpy、strlcat、snprintfという関数が用意されているが、gcc開発側はこれを拒否している。このためstrlcpy、strlcatはglibcには今もって追加されていない。

対策

Microsoft Windowsはじめ、オペレーティングシステム(OS)が複雑になるにつれOS自体がバッファオーバーフローを数多く抱えることになり、ここからバッファオーバーフローがあることを前提としたセキュリティ議論が本格化することとなった。

このような状況下でどのようにしてセキュリティがらみのバッファオーバフローを防止するかについて、AMD、次いでIntelは、NXビットというマイクロプロセッサ側からのアプローチによる解決法を提供した。