公開されているプログラムのソース・コードが,悪意を持って作成されたツール(いわゆるトロイの木馬)を含むものに改ざんされる事例が相次いでいる。例えば,2002年10月8日にはメール・サーバー・ソフトsendmail 8.12.6のソース・コードを改ざんしたものが一時的に配布されてしまった。改ざんされたソース・コードによる被害に遭わないためにはどうすればよいのだろうか。今回のコラムではsendmailを例に改めて考えてみたい。

信頼できるサイトからダウンロード――では不十分

 米CERT/CCおよび sendmail.org は10月8日,トロイの木馬が仕込まれたsendmail 8.12.6のソース・コード・アーカイブが,FTPサイトftp.sendmail.orgから一時的にダウンロード可能であったことを明らかにした(関連記事)。信頼できるサイトに置かれたソース・コードにトロイの木馬が仕込まれたのはこれが初めてではない。

 2002年7月末には改ざんされたOpenSSHのソース・コードがFTPサイトftp.openssh.com およびftp.openbsd.orgに置かれていた。1999年1月にはセキュリティ・ツールTCP Wrappersのソース・コードにもトロイの木馬が仕込まれた

 プログラムをダウンロードする際の注意点としてまず挙げられるのが,信頼できるサイトからダウンロードするということである。しかしながら,上述の事例はいずれも信頼できるサイトに改ざんされたプログラムが置かれていた。信頼できるサイトからダウンロードしても,危険な場合がありうるのだ。

 それでは,「信頼できるサイトからダウンロードする」以外にどのような対策が考えられるだろうか。

root権限でビルドしない

 先日のsendmailの場合には,「root権限でソース・ファイルをビルドしない」ことが影響を緩和する方法の一つとして考えられる。改ざんされたsendmailをビルドすると,中に含まれたトロイの木馬プログラムがビルドおよびインストールされ,sendmailをビルドしたマシンで動作する。そして,外部の特定サイトとTCP ポート6667番を介して接続を確立する。確立後は,その特定サイトからsendmailをビルドしているマシン上で任意のコマンドなどを実行できてしまうのだが,このときの実行権限はビルドしているユーザーの権限となる。

 つまり,rootでトロイの木馬入りソース・コードをビルドすると,攻撃者にroot権限を取られることになる。これを避けるには,root権限以外でビルドすることが重要になる。これについてはCERT/CCのアドバイザリにも記されている。ただし,アドバイザリにはsendmailのソース・アーカイブをインストールする手順のうち,どの部分をどのユーザー権限で実行すべきかまでは示していない。そこで,sendmailのインストール手順をちょっと整理してみよう。sendmailは以下の手順でインストールすることになる。

 (1)メール・キュー管理用グループを作成する
 (2)ソース・コードのアーカイブを展開する
 (3)適切なコンパイル・オプションを設定する
 (4)メールの配送定義用マクロを作成し,sendmailの設定ファイルへ反映する
 (5)sendmailの実行バイナリをビルドする
 (6)sendmailの実行バイナリをインストールする
 (7)sendmailの設定ファイルをインストールする
 (8)補助ユーティリティの実行バイナリをビルドする
 (9)補助ユーティリティの実行バイナリをインストールする

 以上の中でroot権限が必要な作業は(1)(6)(7)(9)であり,それ以外は一般ユーザー権限で実施できる。今回sendmailに仕込まれたトロイの木馬は(5)を実施したユーザー権限で動作するため,(5)を一般ユーザー権限で実施していれば,その影響を緩和できただろう。今回の件に限らず,作業ミスなどの可能性を考えると「必要以上に高い権限で作業を行わない」ことは,UNIXのように権限の違いによってアクセス可能な資源に差がある環境で作業を行う場合の鉄則の一つといえるだろう。

バイナリを利用する

 しかし,root権限でビルドしないことは影響を緩和しうる対策になることはあっても,万能薬にはなりえない。ソース・コードを改ざんできれば,どのようなタイミングでトロイの木馬を実行されるのかを任意に決められるからだ。

 例えば,上記の(7)の段階でトロイの木馬プログラムがインストールおよび動作するようにソース・コードを改ざんすることも可能だ。この場合には,いくらビルド時の権限に気を使っても,root権限で動作されてしまう。低い権限でビルド作業することは望ましい作業方法ではあるが,改ざんされたソース・コードに含まれる脅威を回避することは難しい。

 sendmailのようにベンダーからバイナリが提供されるプログラムについては,あえてソースからビルドせずに,OSごとに用意されているバイナリを利用するという方法も考えられる。しかし,新しいソースが公開されてから,そのバイナリが提供されるまでには時間がかかることが多く,迅速にアップデートしたい管理者には向かない。また,ベンダーから提供されるバイナリでは無効にされているオプションを有効にしたい場合などには,ソースからビルドしなければならない。

ファイルを検証する

 ありきたりではあるが,結局のところソース・コードを検証してから利用することが現状では最も推奨される対策だろう。タイムスタンプやファイル・サイズで確認するだけでは不十分である。sendmailやOpenSSHといったメジャーなプログラムには,そのPGP署名やMD5チェックサムが用意されているので,それらを使って検証しよう。もちろん上述のように,信頼できるサイトから入手することや,必要以上の権限で作業しないことも重要である。

 さらに理想を言えば,実際に運用する環境とは別に試験用の環境を準備し,そこでビルドおよびインストールして,そのプログラムが正常に動作することを確認した上で実環境にインストールすることが推奨される。その際には単に動作を確認するだけではなく,netstatやlsofを用いて,トロイの木馬(バックドア)プログラムなどが含まれていないかどうかも確認する必要がある。

 「そこまでやる必要があるのか」と思われる読者もいるだろうが,重要なマシンに新しいプログラムをインストールする際には,万が一に備えて検証することは決して無駄なことではない。信頼できるサイトに置かれたプログラムの改ざんが続いている現状で万全を期するためには,そのぐらいの慎重さが望ましい。


坂井順行(SAKAI Yoriyuki)
株式会社ラック システムインテグレーション事業本部
sakai@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。