「バッファオーバーフロー攻撃の実際とその対策」
日本サン・ユーザ・グループ
佐藤 通敏氏
return
B7セッションでは日本サン・ユーザ・グループ(NSUG)幹事の佐藤通敏氏が、バッファオーバーフローについて原理とその対策、デモを交えて語ってくれた。 主たる内容は以下の通りである。
・バッファオーバーフローの説明
・バッファオーバーフローの発生原因
・対策(プログラマ側)
・対策(ユーザ側)
・CPUアーキテクチャについて
・デモ

 バッファオーバーフローはその名の通り入りきらない程のデータをバッファに詰め込み溢れさせることにより、ソフトウェアを暴走させたりソフトウェア実行者の権限で任意のコマンドを動作させるという攻撃手法のことである。発生原因は単純ながら、シンプルさと容量の節約と処理速度の高速性を優先させるというプログラム言語の仕様により、見逃しがちなセキュリティホールと言えよう。これに対し氏は「プログラマーが危険な命令を認識しておらず、また動作検証が甘いから発生する」と厳しく言及、さらに開発者側の対策についての解説に移った。

 「開発者が気をつける点は、データ入力を行う命令を使用する時にバッファ領域を明示し余ったデータは切り捨てること、Stringの最後の文字に'\n'を必ず入れて区切ること、そして何より動作検証時には必ず予定より大きなデータの入力を行って想定どおりの動作をしているか確認することだ」と氏は強調する。ソフトウェア開発者はデバッグの労力の多さにめげず肝に命じて実装・処理確認してくれるとありがたい。

 次にユーザ側でもできる対策についても語ってくれた。具体的には"Libsafe"と"StackGuard"というツールを使うことによりバッファオーバーフローを防ぐという。Libsafeは一般にバッファオーバーフローが起こりやすいと言われている機能を実装しているライブラリを、起こりにくいよう実装しなおし、それでも発生した場合には警告やログ記録を行うツールである。またStackGuardはスタック上のデータとローカル変数の間にデータを挿入し、サブルーチンからリターンする前にデータ内容が変更されているかどうかを確認し、その攻撃を検出するツールである。ユーザはこれらを使用することにより、処理速度は多少落ちるもののセキュリティ強度を増すことができる。

 さらにCPUアーキテクチャについて一通り概説した後、デモが行われた。プログラムにはアセンブリ言語も挿入されているため、その処理内容を理解することは残念ながらできなかったが、実行するとroot権限で動いていたプログラムを攻撃しrootしか見ることのできないパスワードファイルの閲覧に成功していた。これはすなわちroot権限を乗っ取ったことの証であり、同時にたかだか数行の極小プログラムでこれだけの事ができるという事実を嫌でも認識せざるを得なかった。

 サーバ管理におけるセキュリティに関するドキュメントを読んでいるとよく「プログラムの実行者をroot以外にするべし」と書かれているが、目の前でデモを見せていただいて、自分で被害を受ける前にその意味を実感できたのは大きな収穫だった。プログラム開発者はもちろんユーザもこの脅威を認識し、システムの見直しをしてセキュリティ強度UPを図れる事を望む。

株式会社ネットマークス
ネットワークセキュリティ事業部
セキュリティ技術室
中村 直己


bottom_bar