新規作成 | 検索 | tnetio | 一覧 | 更新履歴 | RSS SourceForge.jp

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

差分表示


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

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

 

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

 

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

 

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

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

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

 

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

 

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

 

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

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

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

 

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

 

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

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

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

 

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

 


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

 

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

 

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

* CVS pserver の適切な利用

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

- CVS pserver を使わずに、やっぱり ssh 経由で使用するように指導する。
- ssh が使えない環境の場合、stone 等で暗号化経路を作り、ポート番号を指定して使う。
- CVS を使い終われば、cvs logout する習慣をつける様に指導する。
- CVS クライアントが、自動ログアウト機能を持っているなら、その機能を利用する様に指導する。
- (UNIX 上で CVS クライアントを使っている場合)UNIX システムからログアウトする時、~/.cvspass を削除する様なスクリプト等を作成する。
- ローカルに保存される符号化パスワード記録ファイルは、探しにくい所に置く。(例:フロッピー(A:\)等)
- CVS pserver を稼動させるホストでは、原則 CVS 以外のサービスを行わない。

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

* 疑問点

- (tty 上で動く)cvs クライアントはやむを得ないとしても、なぜ、WinCVS も、ローカルにファイルを保存する仕様なのだろうか?。WinCVS 側は、パスワード情報を On-Memory に持っておけば、パスワード有効期間は、WinCVS 起動中だけのはずであるだろうに...。