新規作成 | 編集(管理者用) | 差分 | 検索 | tnetio | 一覧 | 更新履歴 | RSS SourceForge.jp

99CVSpserver - CVS pserver 利用における考察(最終更新:2003/5/22)。

ここでは、私が CVS のソース(cvs-1.11.5)を解析してみた範疇での考察を述べます。

 

誤解の無いように、予め書かせて頂くと、ここで述べている事の本質は、CVS を 批判する事ではなく、CVS を使う場合のリスクをきちんと認識すると言う点です。

 

CVSは、オープンソースコミュニティにとっては、現時点では最も必要とされる ソフトウェアの一つであると思いますし、それをオープンソースで公開されている 事に関しては、本当に頭が下がります。

 

しかし、CVS を使う限りは、やはり使用する側がリスクを背負うものですので、 リスクを背負う側とって、参考になればと思い、私が CVS について解析した事を ここで書いています。

CVS pserver 認証では、パスワード文字列は「平文」で流れません。しかし、「暗号化」でもありません。

よく、Web ページで、「CVS pserver 認証は、パスワードは平文で流れる」と 言う文言を読みます。

 

しかし、CVS の pserver 部分のソースを解析した範疇では、パスワードは 「符号化」されて送られています。従って、sniffer の様な、パケットモニタで パケットキャプチャした*だけ*では、パスワードは「符号化」された状態です ので、その文字列で CVS ログインする事は出来ないはずです。この点だけを見る と、少なくとも telnet でのリモートログイン時のパスワード状態よりはマシの はずです。

 

しかし、注意しなければならない点は、ネットワークに流れるパスワード文字列は、 「暗号化」ではなく、「符号(hash)化」されていると言う事、要するに 「その(符号化)文字から元のパスワード文字列に変換可能」 という点です。

 

「その(符号化)文字から元のパスワード文字列に変換」作業は、ソースの解析が 多少でも出来るプログラマなら、CVS のソースから解析して解読ツールを作るの は、そんなに難しくないでしょう。私が tnetcvs を作った様に。

CVS pserver 経由の場合、ローカル側に符号化パスワードが残ります。

さらに重要な点は、CVS pserver 経由での認証時、 「CVS クライアントは、明示的に cvs logout を行わない限り、ローカル側に符号化されたパスワードを残す(~/.cvspass)」 と言う点です。これは、WinCVS? でも同じ挙動です。

 

これは、歴史的な事情を推測すると、理解できなくも無い仕様ですが、しかし、 便利な反面、かなりセキュリティ強度を下げる仕様と考えざるを得ません。

 

例えば、CVSROOT/config に、SystemAuth?=yes と設定すると、 CVS pserver 経由で、/etc/passwd(/etc/shadow)認証、要するに通常のシステムログインと同レベルでの認証が行えます(検証はしていませんが可能であると考えています)。 仮にその様に設定し、運用している場合、 「ローカル側に、符号化されたシステムログインパスワードが残る*可能性*がある」 という点です。

(*可能性*と書いたのは、これは私がソースを解析したのみの考えであり、実際の検証を行っていない(行える環境に無い))からです。

(私が管理している CVS が動作しているホストは、ユーザ認証は全て LDAP を通じて行うので、PAM 経由か、直接 LDAP をしゃべる事でしか、パスワード検証が出来ないからです)

 

先にも述べた様に、CVS パスワードの「符号化」は、辞書によるクラックツールを使わなくても、簡単に元に戻せます。

 

CVS を、純粋に UNIX ないし WindowsNT?(NTFS)系、要するにファイル単位でのアクセス権制御が行え、それが適切に守られていれば、ローカルに符号化パスワードが残っても、まだ大丈夫かもしれません。

 

しかし、WinCVS? を使用し、OS に Windows98/Me の様な、ファイル単位でのアクセス制御が効かないOSで使用している場合、そのローカルに残された符号化パスワード情報から、最悪の場合、システムログインパスワードが抽出出来る可能性があります。

 

当初私は、CVS pserver を PAM 認証対応させるために、tnetcvs を作ろうと思い立ちましたが、このような経緯から、PAM 認証対応を断念しました。

CVS pserver の適切な利用

CVS pserver を適切に利用するには、サーバ側の設定のみならず、クライアント側においても、

と言った対応が必要だと考えます。

疑問点