【レポート】

生まれ変わったNICTのセキュリティ研究

4 Cで書かれたプログラムのBuffer Overflowを検出するツール

    佐藤晃洋  [2004/06/10]

    最後は三菱総合研究所の中村豪一氏らのグループによる「高セキュリティソフトウェアの開発手法に関する研究開発」をご紹介したい。この研究ではC言語で書かれたプログラムを主なターゲットに、セキュリティホールの原因の中でも大きな割合を占めるBuffer Overflowを防ぐためのプログラムを書く際のガイドラインの策定、並びに静的にソースコードを解析することでBuffer Overflowを検出するソフトウェアの開発という2つの作業が行われた。

    C言語を主な対象とした理由

    中でも注目はBuffer Overflowを解析するソフトウェア。今回対象となるのはgccでコンパイル可能なCのソースコードで、プリプロセッサで処理された後のソースコードをまずコマンドラインで解析プログラムに入力し、その後でGUIの解析結果ビューワを起動し結果を読み込むと、自動的にBuffer Overflowが起こる可能性がある場所とその発生条件を表示してくれるというものだ。

    Buffer Overflowを防ぐためのガイドラインの目次

    Buffer Overflowを検出するアルゴリズムの概要

    既存の静的な解析プログラムの多くはパターンマッチングによりBuffer Overflowを検出することからどうしても検出漏れが起きやすかったが、今回のソフトは「パターンマッチングではない汎用アルゴリズムを採用した」一方で「全体的に巨大なアルゴリズムになってしまった」(中村氏)という。また自動的にプログラムを修正することも「技術的には不可能ではないが、実際にどこを修正するかはプログラマ個々人の趣味の部分も大きいので、今回は自動修正までは行わないことにした」とのこと。

    今回の静的な検出プログラムは多少安全サイドに立った検出を行うため、警告が出るものの実際にはBuffer Overflowは起きない場所が多数出現する可能性があるが、これについては「確かに動的検出では誤検出は起きないが、一方で検出漏れが発生する可能性は高くなる」「今回の手法に動的検出などを組み合わせて誤検出を減らそうとした場合でも、検出漏れが出るようになる可能性は高い」と同氏は語り、セキュリティホールをなくすという目的から考えると検出漏れが出ないことの方が重要だとの認識から「今回のような静的な検出だけで十分ではないか」との見解を示した。

    ツールの出力例その1

    出力例その2

    なお今後の課題としては、大規模なプログラムへ実際に今回開発したソフトを利用して検証を行うことや、Perlなどのスクリプト言語におけるBuffer Overflowの検出、それ以外のプログラムミスによる脆弱性の静的検出などといった点を挙げていた。今回の開発成果は近日中に同社のホームページで公開される予定とのことなので、実際に試してみたい方は要チェックだ。

    動的検出と静的解析の比較

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン