日経インターネットテクノロジー click click

 NEWS  セキュリティ・ホール, バッファ・オーバーフロー, Linux 

ベル研がバッファ・オーバーフローの“万能薬”,
頻繁に発見されるセキュリティ・ホールに防御策

米ルーセント・テクノロジーズベル研究所は4月20日,「バッファ・オーバーフロー」という頻繁に発見されるセキュリティ・ホールの“万能薬”となるようなソフト「libsafe」をフリー・ソフトとして公開した。このホールの原因の "プログラミング上のミス"の大半をカバーしてくれるソフトである。アプリケーションの種類にかかわらず,実行時にバッファ・オーバーフローを検知して問題の発生を未然に防ぐ。アプリケーションは既存のものをそのまま使うことができ,アプリケーションをlibsafe対応に作り直す必要はない。

バッファ・オーバーフローは悪用されると,ほぼ確実にマシンに侵入されてしまう重大なセキュリティ・ホールである。これがWebサーバーやメール・サーバーなどで頻繁に発見されるため,システム管理者にとっては頭痛の種になっていた。今回,この問題を解決する万能薬が開発されたことで,システム管理者の負担は大きく軽減することになりそうだ。

libsafeはLinux向けに開発したソフトだが,Linux独自の機能は使っておらず,SolarisなどのUNIXやWindows NTへも容易に移植できる。Linuxが動作する米インテルの86系プロセッサの機能も一部利用しているが,ほかのプロセッサも備える一般的な機能だけを使っており,移植は容易である。

C言語の標準ライブラリを入れ替える

libsafeは,多くのアプリケーションが利用している「C言語の標準ライブラリ」を改良したものである。バッファ・オーバーフローの発生原因の多くが,標準ライブラリにある関数を利用するプログラミング上のミスであることに着目した。既存の標準ライブラリをlibsafeに置き換えると,そのミスをついた攻撃をlibsafeが防いでくれる。

プログラミングの際に頻繁にミスが発生するのは,標準ライブラリのうちデータをコピーするstrcpyという関数(サブルーチン)を使う場合である。strcpyは実行する前に,コピーするデータのサイズが,コピー先のメモリー領域にちゃんと収まるかどうかのいわゆる「バウンダリ・チェック」(境界チェック)をアプリケーション側で実行する必要がある。バッファ・オーバーフローは,このバウンダリ・チェックを怠ったときに発生する。これに対してlibsafeに含まれるstrcpyは,関数の中でバウンダリ・チェックを実行する。プログラム側でバウンダリ・チェックを忘れていても,バッファ・オーバーフローは発生しなくなる。C言語の標準ライブラリには,ほかにもバウンダリ・チェックをアプリケーション側に任せている関数があり,libsafeでは,これらをすべてバウンダリ・チェック付きの関数に置き換える。

Linux上の標準ライブラリは,DLL(ダイナミック・リンク・ライブラリ)形式であり,Webなどのサーバー・アプリケーションが実行時に呼び出す。このため,ライブラリをlibsafeに置き換えれば,既存のアプリケーションのバッファ・オーバーフローにも対応できる。libsafeは,米レッド・ハット米ターボリナックスがLinuxディストリビューションに標準搭載する計画である。

libsafeを適用すると,バウンダリ・チェックをする分,アプリケーションの動作は遅くなるが,実際のテストでは,速度低下は無視できる範囲だったという。バッファ・オーバーフローの問題を持つ,いくつかのアプリケーションに適用してみて,実際に問題が解決できたことも確認した。(K.A.)