COPS (Computer Oracle and Password System) の概要

Daniel Farmer (translated by Takayuki Kawamoto)

Last modified:
Last modified as a translation into Japanese:
Translated from: http://www.fish2.com/cops/overview.html with a permission by the original author (2011-10-24).
Copyright© by Daniel Farmer, all rights reserved.

ようこそ! このページでは COPS (Computer Oracle and Password System) を手短に紹介します。COPS は幾つかのセキュリティ・ツールを集めたものであり、とりわけコンピュータ・セキュリティという無視されがちな分野で UNIX を扱うシステム管理者、プログラマ、サーバオペレータ、それからコンサルタントのために設計されています。

このパッケージは、三つの主要な部分に分けられます。第一は実際に使う一組のプログラムであり、これによってシステム管理者は自動的に、またときには手動で(もしくは、自分で書いたシェルスクリプトやプログラムと共に)セキュリティチェックを試みます。第二はドキュメントであり、そこには COPS を設定したり操作する詳しい方法がありますし、プログラムが与える全ての結果をどのように解釈すればいいかが書かれています。そして最後に、COPS は言ってみれば進化していく動物のようなものです。COPS は将来のリリースで提供するかもしれない拡張可能な機能のリストをもっていて、いまのところは容量や他の制約によって一緒に公開できなかった他の UNIX セキュリティ・プログラムへのポインタも含んでいます。

冒頭に戻る

もう少し具体的に言うと

COPS は約1ダースの(実際にはもうちょっと多いのですが、「1ダース」なら聞こえがいいので)プログラムを集めたものであり、それぞれのプログラムは UNIX セキュリティの異なる課題に取り組みます。ここで、現在の COPS がチェックするものを挙げてみると、

これら全てのプログラムは、潜在的な問題をユーザに警告するだけです。--- COPS は、発見した潜在的な問題を修正したり悪用したりしません! 見つけた問題(の、少なくとも一部)を改善しようとするシェルコマンドを含むような COPS の実行ファイルを作っておくという選択も可能ですが、そのようなことは慎重に検討して、可能な限り編集し、最後に必ずマニュアルで実行するようにしなければなりません。なぜなら、システムファイルについて修正が必要な多くの問題は、恐らく root で対応する必要があるからです。COPS が問題を見つけると、それらをメールで通知したり、あるいは(ユーザが選べる)ファイルに書き込んだりします。COPS は、発見した潜在的な難点を修正はしないので、特権を持ったアカウント(つまり、root であれ何であれ)によって COPS を実行する必要はありません。root によって実行し最大限の結果を得ておく必要があるのは、SUID の検査くらいのものです。もちろん特権をもたないアカウントでもチェックできますが、root でチェックするとシステム内の全ての SUID ファイルを見つけられます。加えて、もし主要なバイナリファイルが任意に読み取り可能でないなら、実行可能なファイルについてのみ、CRC チェックプログラム("crc.chk")を特権があるアカウントで走らせる必要があります*2。それから他にも注意しておきたいのは、COPS は或るホストをリモートから検査することはできないということです。全てのテストやチェックは、テストしたいホストのシェルで実行される必要があります。

*2この文は、原文には左括弧がなかった。意味合いとしては、特権アカウントで動かすべき他のマイナーな理由という付け足していどの内容なので、文全体を括弧に入れても大意は失われないと判断し、左括弧を文の頭に置くような訳し方をした(つまり文全体を但し書き扱いとした)。

追記 (2011-10-24) 著者のダニエルから翻訳の承諾と、この部分についてのコメントをいただいた。上記で推定したように文全体が但し書きのような意図で書き足されたようだ。なお、そのまま他の注意点として並べても大意は失われないと考えたのか、原文を後で改めて読んでみると、括弧そのものを削除したようである。

当初、COPS を構成する個々のプログラムは主に Bourne シェル(と awk, sed, grep などを使って)で書かれました。それは(願わくは)最大限のポータビリティを期してのことです。そして少しばかりのコードについては、スピードという目的のために C で書きました(特に Kuang エキスパートシステムの多くの部分と、ユーザのホームディレクトリに対する走査を実装するためにです)が、このシステム全体は、たいていの BSD や System V マシンで僅かな調整をすれば動くはずです。更に Perl バージョンも、シェルと C のバージョンに比べればポータブルではないと思いますが、幾つかの利点があるので含めてあります。

冒頭に戻る

COPS はこういうものじゃない

COPS は、主にありふれた間違いをチェックする手段を提供します。でも、それは常識あるいはユーザやオペレータや管理者の警戒心の代わりに使えるという意味ではありません! これは補助、つまりあくまでも最初の防御壁にすぎないと考え、セキュリティ侵害に対する鉄壁の防御と考えないでください。経験を積んだ攻撃者なら、COPS が提供しうるどんな防御策も簡単に迂回するでしょう。とは言え、COPS はユーザを(彼ら自身の?)無知や不注意、そして時折いる反抗的なユーザから守り、システムの助けになり得ます

改めて言うと、COPS は発見したエラーをその場で直すツールではありません。それには幾つかの理由があり、まず大切な事は、コンピュータのセキュリティには落とし穴が多いということです*3。一方のサイトで大きなセキュリティ侵害と見做されることも、他のサイトでは公開という標準的なポリシーになっているかもしれません。加えて、発見した全ての問題を修正するには、恐らく特権をもつユーザでなくてはならないでしょう。私は SUID ビットをもつシェルスクリプトというものが抱える無数の問題に深入りするつもりはありません。もっと十分に言えば、(問題を修正するようなプログラムとするために)シェルに SUID ビットをもたせることは、まさしく攻撃者に特権を与え得るので、良い考えではありません。

*3"slippery" は「滑りやすい」ということだが、この言葉(もちろん原語の方)を使う隠語もある。ニュアンスとして「その手のこと」を連想させようとしているのかどうかは不明だが、ここでは主旨を表現しておいた。

冒頭に戻る

要約

COPS はセキュリティを強化する助けになるツールを意図しており、そのシステムにあるセキュリティ上の弱点を敵が発見する武器になるようなことは望んでいません。それだけでなく、このようなツールに誰でもアクセスさせることですら危険であるかどうかについては、議論があるでしょう。しかし、これを使うシステム全体の利益は、あらゆる否定的な効果を上回るものと期待したいところです。私にとって、これは法律を執行することと同じ種類の問題に思えます。つまり、どうやって或る住居に侵入するかを公にすることは誰かが泥棒に入る動機付けを少しは与えるかもしれませんが、どうやって自分たちの家を守るかについて多くの人が気をつけるようになるという、社会全体の意識付けが上がることによって、実際には不法侵入は減ると思うのです。悪者のクラッカーは、システムの防御をどうやって壊すかを既に知っており、そのためのツールさえ持っていることを私はよく知っています。いまや、彼らに対抗すべきです。

COPS はセキュリティ上の懸案に応える最終手段ではありません。あなたは、COPS が明示的であれなかれ何も保証しないものだと理解している限り、そして COPS を使っているときに生じる問題が私や他の作者の誤りによるものではないと分かっている限り、これを使っていけるでしょう。できるなら、私はあなたの問題が解決されるように手助けするつもりはあります。もし他のプログラムも COPS に加えたいとか、いまあるプログラムよりも良い実装があるという提案をくれるなら、ぜひ聞かせてください。

では、がんばってください。1990年代に我々が UNIX の世界へ飛び込んだように、あなたがCOPS を有用だと思ってくれることを期待します。

ダン・ファーマ (dan farmer)
********** *4
1993年5月18日

*4メールアドレスは @death.corp.sun.com のアカウントであるが、著者(作者)のダニエルは、数年前まで Elemental Security 社の創業者兼 CTO だったから、Sun Microsystems 社のメールアドレスを表示しても有用ではない。そもそも Sun という会社自体がなくなったから尚更である。なお 2014 年現在、彼は Vicious Fishes Security Consulting としてセキュリティ・コンサルティング事業をやっている。

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook