次のページ 前のページ 目次へ

5. ファイルとファイルシステムのセキュリティ

システムをネットワークに繋ぐ前に少し準備と計画を行うだけで,システムと その中のデータを守るのに役立つでしょう.

5.1 umask の設定

umask コマンドを使って,システムのデフォルトのファイル生成モー ドを決めることができます.umask 値は設定したいファイルモードの 8 進数 での補数になります.パーミッションに関する指定を何も行わずにファイルを 生成すると,パーミッションを与えるべきでない何者かに対して読み書きのパー ミッションを意図せずに与えてしまうかもしれません.通常は umask 値の設定は 022, 027, 077 で す.077 は最も厳しい設定です.通常は umask 値は /etc/profile で設定され,システムの全ユーザに適用されます.ファ イル生成マスクは,777 から希望の値を引き算することによって計算すること ができます.言い換えると,umask 値が 777 であれば,新しく生成されるファ イルは誰に対しても読み書きと実行のパーミッションを持ちません.マスクが 666 ならば,新しく生成されるファイルのモードは 111 となります.例えば, 以下のような行を設定することができます:

                # Set the user's default umask
                umask 033
root ユーザの umask 値は必ず 077 にしてください.こうしておく と,chmod を使って明示的に変えない限り,他のユーザの読み書き と実行は無効になります.この場合,新しく生成されるディレクトリはパーミッ ション 744 を持ちます.この値は 777 から 033 を引いて得られたものです. umask 値 033 を用いて新しく生成されるファイルはパーミッション 644 を持 ちます.

RedHat を使っており,RedHat のユーザ ID, グループ ID の作成方法(User Private Groups)に従う場合,umask には 002 だけ設定 していれば十分です.その理由は,デフォルトの設定で 1 グループに 1 ユー ザしかいないためです.

5.2 ファイルのパーミッション

システムファイルが,システム管理を行うべきでないユーザやグループの権限 によって変更できないようにしておくのは重要なことです.

UNIX は ファイルとディレクトリのアクセス制御を 3 つの特性(所有者,グルー プ,全員)に分離しています.必ず 1 人だけの所有者,メンバー数が任意であ るグループ,それ以外の全員です.

以下で UNIX のパーミッションを簡単に説明します:

所有権(ownership) - あるノードやその親ノードのパーミッション設定をどのユー ザ,グループが行うことができるのかを示します

パーミッション(permissions) - ファイルに対して行うことができるアクセスの種類を決め るビット列.組合せが同じでも,ディレクトリのパーミッションはファイルの パーミッションとは意味が異なることがあります.

読み出し(read):

書き込み(write):

実行(execute):

テキスト保存属性: (ディレクトリ用)

ディレクトリに適用する場合,「sticky ビット」の意味はファイルに適用す る場合と異なります.sticky ビットがディレクトリに設定されている場合に 削除できるファイルは,そのディレクトリへの書き込み権限があったとしても, 自分が所有しているファイルか明示的に書き込み許可が与えられているファイ ルだけです.このビットは /tmp のようなディレクトリのために用 意されたものです.このようなディレクトリには,世界中から書き込みできま すが,どのユーザにも自由にファイルを消すことを認めることは望ましくあり ません.ディレクトリを詳細表示すると,sticky ビットは t で表 されます.

SUID 属性: (ファイル用)

これはファイルへの SUID パーミッションを示します.ユーザ ID 設定アクセス モードが所有者のパーミッションで設定されており,かつそのファイルが実行可 能であれば,これを実行したプロセスは,プロセスを起動したユーザではなく ファイルを所有しているユーザに基づいてシステムのリソースにアクセスでき ます.これは各種 'buffer overflow' 攻撃の原因となります.

SGID 属性: (ファイル用)

グループのパーミッションで設定されていれば,このビットはファイルの「グ ループ ID 設定」状態を制御します.これは SUID と同じように動作しますが, ユーザではなくグループが影響を受ける点が異なります.このビットに効果を 持たせるためには,やはりファイルは実行可能でなければいけません.

SGID 属性: (ディレクトリ用)

(chmod g+s directory を行って)ディレクトリに SGID ビッ トを設定した場合,このディレクトリに作られたファイルはディレクトリのグ ループに設定されたグループを持ちます.

あなた - ファイルの所有者

グループ - あなたが所属するグループ

全員 - 所有者でもグループのメンバでもない,システム上の全員

ファイルの例:

        -rw-r--r--  1 kevin  users         114 Aug 28  1997 .zlogin
        1番目のビット - ディレクトリか?        (no)
         2番目のビット - 所有者が読み出せるか?  (yes, ユーザ kevin が可能)
          3番目のビット - 所有者が書き込めるか?  (yes, ユーザ kevin が可能)
           4番目のビット - 所有者が実行できるか?  (no)
            5番目のビット - グループは読み出せるか (yes, users グループが可能)
             6番目のビット - グループは書き込めるか? (no)
              7番目のビット - グループは実行できるか? (no)
               8番目のビット - 誰でも読み出せるか?     (yes, 誰でも可能)
                9番目のビット - 誰でも書き込めるか?     (no)
                 10番目のビット- 誰でも実行できるか?     (no)

以下の行は,アクセス権の説明に必要な最小限のパーミッションを集めた例で す.実際には,ここに示した以上のパーミッションを与えることが必要かも しれませんが,これらのファイルに関する最小限のパーミッションが意味 するところは次のようなものです:


-r--------  所有者に読み込みアクセスを許可します
--w-------  所有者にファイルの修正と削除を許可します
            (そのファイルが入っているディレクトリの書き込みパーミッショ
             ンを持つユーザは,ファイルの上書きや削除を行うことができます)
---x------  このプログラムの実行を許可します.シェルスクリプトの場合は
            これだけでは足りず,さらに読み込みパーミッションが必要です.
---s------  「実効ユーザ ID = 所有者」として実行を行います
-------s--  「実効グループ ID = グループ」として実行を行います
-rw------T  「最終更新時刻」を更新しません.通常はスワップファイルだけ
            に使います.
---t------  無意味です(以前 sticky ビットだったものです).
ディレクトリの例:

        drwxr-xr-x  3 kevin  users         512 Sep 19 13:47 .public_html/
        1番目のビット - ディレクトリか?        (yes, たくさんのファイルがある)
         2番目のビット - 所有者は読み出せるか?  (yes, ユーザ kevin が可能)
          3番目のビット - 所有者は書き込めるか?  (yes, ユーザ kevin が可能)
           4番目のビット - 所有者は実行できるか?  (yes, ユーザ kevin が可能)
            5番目のビット - グループは読み出せるか?(yes, users グループが可能)
             6番目のビット - グループは書き込めるか?(no)
              7番目のビット - グループは実行できるか?(yes, users グループが可能)
               8番目のビット - 誰でも読み出しできるか?(yes, 誰でも可能)
                9番目のビット - 誰でも書き込めるか?    (no)
                 10番目のビット- 誰でも実行できるか?    (yes, 誰でも可能)

以下の行は,アクセス権の説明に必要な最小限のパーミッションを集めた例で す.示したもの以外にも多くのパーミッションが必要だと思うかもしれません が,これはこれらのファイルに対する最小限のパーミッションで記述できるは ずです:


dr--------  内容は表示できますが,ファイルの属性は読み出せません
d--x------  ディレクトリに入れ,実行時に絶対パスの一部として使うことが
            できます.
dr-x------  所有者がファイル属性を読み出すことができます
d-wx------  カレントディレクトリでなくても,ファイルの生成/削除が行え
            ます
d------x-t  書き込み許可があっても他人はファイルを消すことを禁止します.
            /tmp で使われます.
d---s--s--  無意味です.

システム設定ファイル(普通は /etc にあります)は通常,モードが 640(-rw-r-----)で,root が所有者です.サイトにおけるセキュリティ の要求にしたがって,これを調整することができます.システムファイルがグ ループや誰からでも書き込めるようにしていてはいけません.一部のファイル (/etc/shadow 等)は root にしか読めない状態でなければなりませ んし,少なくとも /etc 内にあるディレクトリはその他のユーザが アクセスできてはいけません.

SUID されたシェルスクリプト

SUID されたシェルスクリプトはセキュリティに重大な危険を及ぼすので,カー ネルはこれを無視します.そのシェルスクリプトがどれだけ安全だと思ってい ても,これはクラッカーに root のシェルを奪われてしまう可能性を持ってい ます.

5.3 Tripwire による,システムが無傷であるかどうかのチェック Tripwire

ローカルからの(そしてネットワークからの)システムに対する攻撃を発見する 別の良い方法は, Tripwire のような,システムがいじられていな いかどうかをチェックするプログラムを実行することです. Tripwire は重要なバイナリや設定ファイル全てのチェックサムを取 り,参照値として正しいことが分かっている以前の値のデータベースと比較し ます.したがって,これらのファイルの変更は全て知ることができます.

Tripwire はフロッピーディスクにインストールし,このフロッピー を物理的に書き込み禁止にするとよいでしょう.こうしておけば,侵入者も Tripwire そのものやデータベースを改竄することは不可能です. Tripwire を設定したら,これを通常のセキュリティ管理作業の一部 として実行し,何か変更がなされていないかチェックするとよいでしょう.

毎晩 フロッピーディスク上の Tripwire を実行し,朝にその結果を メールで送るように crontab を設定することもできます.設定は以 下のようになります.

                # set mailto
                MAILTO=kevin
                # run Tripwire
                15 05 * * * root /usr/local/adm/tcheck/tripwire 
実行結果は午前 5 時 15 分にメールで送られます.

Tripwire は,他の方法で気づくよりも前に侵入者を発見する天の配 剤になり得ます.一般的なシステムでは多くのファイルが変更されますから, Tripwire を使う場合にはクラッカーの動きや,自分自身が行ったこ とに注意していなくてはなりません.

Tripwirehttp://www.tripwiresecurity.comにあります.無料です.マニュア ルとサポートは有料で入手することができます.

5.4 トロイの木馬

「トロイの木馬(Trojan Horse)」はホメーロスのイーリアスに書かれている有 名な計略に由来する名前です.基本的な考え方は,便利そうなプログラムやバ イナリを用意しておき,これを他人にダウンロードさせて root ユーザとして 実行させるというものです.これによって,相手が気づかないうちにシステム を悪用することができます.手に入れたバイナリが仕事をしている(とても役 立っているかもしれません)と思っている間に,このバイナリが同時にセキュ リティも破ってしまうのです.

したがって,マシンにプログラムをインストールする時には注意が必要です. RedHat は MD5 チェックサムと PGP 署名を施した RPM ファイルを提供し,ユー ザが本物のパッケージを入手しているのかどうかをチェックできるようにして います.他のディストリビューションにも同様の仕組みがあります. 素性が知れず,ソースも提供されていないバイナリを root 権限で実行して はいけません! 誰もが調査できるようなソースコードを公開する攻撃者はほ とんどいません.

手間はかかるかもしれませんが,プログラムのソースコードはその正式の公開 サイトから入手するべきです.プログラムを root 権限で実行するならば,あ なたかあなたが信頼している人がソースコードを見て,検査すべきです.

5.5 パスワードのセキュリティと暗号化

現在用いられているセキュリティ機能のうち最も重要なものの1つがパスワー ドです.あなたとあなたのマシンのユーザの両方がパスワードを安全で推測し にくいものにしておくことが重要です.最近の Linux ディストリビューショ ンのほとんどには,簡単に推測できるパスワードは設定できないようになって いる passwd プログラムが入っています.passwd プログ ラムが最新のもので,このような機能を持っているかどうか確かめておきましょ う.

暗号化についての突っ込んだ議論は本書の範囲を越えてしまいますが,入門程 度ならば良いでしょう.暗号化は大変便利ですし,たぶん今日では必須とさえ 言えるでしょう.非常に多くの種類のデータ暗号化の方法がありますが,それ ぞれが特徴を持っています.

ほとんどの UNIX(Linux も例外ではありません)は,DES (Data Encryption Standard)と呼ばれる片方向の暗号化アルゴリズムを主に使っ てパスワードを暗号化しています.暗号化されたパスワードは(普通) /etc/passwd か(少し一般的でないですが)/etc/shadow に 保存されます.ユーザがログインしようとすると,入力したパスワードは再び 暗号化され,パスワードを格納しているファイルの該当項目と比較されます. これらが一致すればパスワードは同じはずなので,ログインが許可されます. DES は双方向の暗号化アルゴリズム(正しいキーを与えれば,暗号化も復号化 もできる)なのですが,ほとんどの UNIX が使っているのは DES の一種で片方 向のアルゴリズムです.つまり,/etc/passwd(または /etc/shadow) の内容からパスワードを得るために暗号を解読するこ とは不可能なはずです.

パスワードが十分ランダムでない場合,"Crack" や "John the Ripper" ( crack 章を参照)のような力任せの攻撃でもパスワードを推測で きます.PAM モジュール(後述)を利用すれば,別の暗号化ルーチン(MD5 など) を使用できます.Crack にも良い使い方があります.パスワードデータベース に対して定期的に Crack を実行し,安全でないパスワードを見つけるのです. そして問題のあるユーザと話をして,パスワードを変えるように指導します.

良いパスワードの決め方に関する情報については http://consult.cern.ch/writeup/security/security_3.html を参照してください.

5.6 PGP 及び公開鍵暗号

PGP 等に使われている公開鍵暗号は,ある鍵を暗号化に使い,別の鍵を復号化 に使う暗号です.従来の暗号は,暗号化と復号化に同じ鍵を使っていました. この鍵は通信の両側が知っていなければならず,何らかの安全な方法で相手に 送らなければなりませんでした.

暗号に使った鍵を安全に転送する必要性を無くすため,公開鍵暗号では 2 つの別々の鍵(公開鍵と秘密鍵)を用います.各自が持っている公開鍵は誰で も使うことができ,暗号化はこれを使って行います.一方,各自は自分の秘密 鍵を持っており,正しい公開鍵を使って暗号化されたメッセージはこれを使っ て復号化します.

公開鍵を使う暗号にも秘密鍵を使う暗号にも利点はあります.これらの違いに ついては,このセクションの最後に示す the RSA Cryptography FAQ に説明があります.

PGP (Pretty Good Privacy) は Linux でちゃんとサポートされています.バー ジョン 2.62 と 5.0 の動作が確認されています.PGP への入門や使い方につ いては,PGP FAQ を見ると良いでしょう. http://www.pgp.com/service/export/faq/55faq.cgi

必ず,あなたの国で利用できるバージョンを使ってください.これはアメリカ 合衆国政府による輸出制限のためであり,強力な暗号を電子的に国外へ転送す ることが禁止されているからです.

現在は輸出の管理は EAR(Export Administration Regulations)が行っていま す.もはや ITAR(訳注: International Traffic in Arms Regulations の略称) では管理されていません.

Linux での PGP の設定に関するステップバイステップのガイドも http://mercury.chem.pitt.edu/~angel/LinuxFocus/English/November1997/article7.html にあります.これは PGP の国際バージョン用に書かれたものですが,アメリ カ合衆国バージョンにも簡単に適用できます.最新バージョンの Linux の一 部ではパッチが必要になることがあります.このパッチは ftp://metalab.unc.edu/pub/Linux/apps/crypto で入手できます.

PGP をオープンソースでフリーに実装し直そうとしているプロジェクトがあり ます.GnuPG は PGP に置き換えることができる,既に完成しているフ リーなプログラムです.GnuPG は IDEA も RSA も使っていないので,制限無 しに使用することができます.GnuPG は RFC2440 (OpenPGP) にほぼ準拠して います.詳しくは GNU Privacy Guard の WWW ページ( http://www.gpg.org/)をご覧ください.

訳注(略語の意味):

暗号に関する詳しい情報は RSA cryptography FAQ に書かれています.これは http://www.rsa.com/rsalabs/newfaq/ から入手できます.このドキュ メントには "Diffie-Hellman 法", "公開鍵暗号", "電子認証" といった用語 に関する情報が載っています.

訳注: 日本語訳は http://www.rsa-japan.co.jp/faq/index.html にあります.

5.7 SSL, S-HTTP, HTTPS, S/MIME

ユーザは各種セキュリティと暗号化プロトコルの違いや,これらの使い方につ いてよく質問してきます.このドキュメントは暗号化についてのものではない のですが,各プロトコルの内容を簡単に説明し,情報のありかを紹介しておく のも悪くないと思います.

5.8 Linux における IPSEC の実装

CIPE や他の形式のデータ暗号化とともに,Linux 用の IPSEC の実装も複数個 あります.IPSEC は IETF が作った規格で,暗号化された安全な通信経路を IP ネットワークレベルで作り,また認証,完全性,アクセス制御,機密性も 提供します.IPSEC の情報とインターネットドラフトは http://www.ietf.org/html.charters/ipsec-charter.html にありま す.鍵管理を含めて他のプロトコルへのリンク,IPSEC のメーリングリストや アーカイブも見つけることができます.

University of Arizona で開発された x-kernel Linux という実装は, オブジェクトベースのフレームワークを使って x-kernel と呼ばれるネットワー クプロトコルを実装しています.これは http://www.cs.arizona.edu/xkernel/hpcc-blue/linux.html にあり ます.大雑把に言うと,x-kernel はカーネルレベルでのメッセージパッシン グの手法であり,これにより実装が容易になっています.

これとは別のフリーに利用できる IPSEC の実装は Linux FreeS/WAN IPSEC で す.その WWW ページを引用すると

「これらのサービスを用いると,信頼できないネットワーク上に安全なトンネ ルを構築することができます.信頼できないネットワークを通るデータは全て, IPSEC ゲートウェイマシンにより暗号化され,その反対の端のゲートウェイに よって復号化されます.これにより仮想プライベートネットワーク(Virtual Private Network, VPN)ができます.これは,安全でないインターネットで接 続された異なる複数のサイトを含んでいても,実質的にプライベートなネット ワークです」
とのことです.

これは http://www.xs4all.nl/~freeswan/ で入手することができます.この ドキュメントの執筆中にちょうどバージョン 1.0 になりました. 他の形式の暗号と同様に輸出が制限されているため,デフォルトではカーネル と共に配布されていません.

5.9 ssh (Secure Shell) と stelnet

sshstelnet はリモートのシステムにログインして暗 号化された接続を行うためのプログラムです.

sshrlogin, rsh, rcp の安全な代 用品として使われるプログラム群です.ssh は 2 つのホスト間の通 信とユーザ認証を公開鍵暗号を使って暗号化します.ssh を使うと 安全にリモートホストにログインしたり,データをホスト間でコピーしたりす ることができ,割り込み攻撃(セッションのハイジャック)や DNS 詐称を防ぐ ことができます.ssh は接続上でデータ圧縮も行い,ホスト間での 安全な X11 の通信も行います.ssh のホームページは http://www.cs.hut.fi/ssh/ にあります.

ssh を Windows PC から Linux の ssh サーバに対して使 うこともできます.Windows 用のクライアントの実装はいくつかあります.そ の 1 つは http://guardian.htu.tuwien.ac.at/therapy/ssh/ ですし, DataFellows による商用の実装も http://www.datafellows.com にあります."psst..." と呼ばれる,ssh をオープンソースで実装し直そうと するプロジェクトもあります.詳しくは http://www.net.lut.ac.uk/psst/ をご覧ください.

SSLeay は Netscape の Secure Sockets Layer プロトコルのフリーの実装で す.これには Secure telnet, Apache 用のモジュール,いくつかのデータ ベース等のアプリケーションがいくつか含まれており,DES, IDEA, Blowfish 等のアルゴリズムもいくつか含まれています.

このライブラリを使って,telnet 接続上のデータを暗号化する telnet の安 全な代替プログラムが作られました.SSH と異なり,stelnet は Netscape が開発した SSL (Secure Sockets Layer) プロトコルを使います.Secure telnet と Secure FTP は SSLeay FAQ からたどって見つけることができます. この FAQ は http://www.psy.uq.oz.au/~ftp/Crypto/ にあります.

訳注: 日本語訳が http://www.infoscience.co.jp/technical/crypto/ssleay_jp.html にあります.

SRP は別の安全な telnet/ftp の実装です.その WWW ページを引用すると

「SRP プロジェクトは世界中でフリーに利用できる安全なインターネットソフ トウェアを開発しています.完全に安全な telnet と ftp の配布を始めとし て,我々は弱いネットワーク認証を,セキュリティのためにユーザインタフェー スを犠牲にしない強力なものに置き換えたいと考えています.セキュリティが オプションなんてとんでもない! セキュリティはデフォルトでなければなりま せん」
とのことです.

詳しい情報については http://srp.stanford.edu/srp を見てください.

5.10 PAM - 交換可能な認証モジュール

最近のバージョンの RedHat Linux ディストリビューションでは, "PAM" と 呼ばれる統一された認証方法が使われています.PAM を使うと,システムを動作 させたままで認証の方法や要件を変更することとローカルの認証方法をカプセ ル化することが可能になります.バイナリは一切再コンパイルする必要があり ません.PAM の設定は本書の範囲を越えますが,必ず PAM のウェブサイトを 見て,詳しい情報を見ておいてください. http://www.kernel.org/pub/linux/libs/pam/index.html

PAM で可能になることをほんの少しだけ列挙します.

システムのインストールと設定を行う数時間の間に,実際に攻撃を受ける前に 多くの攻撃を予防しておくことができます.例えば PAM を使うと,ホームディ レクトリの .rhosts ファイルの使用をシステム全体で無効にするこ とができます.設定は /etc/pam.d/rlogin に以下のような行を追加 します:

                #
                # Disable rsh/rlogin/rexec for users
                #
                login auth required pam_rhosts_auth.so no_rhosts

5.11 暗号による IP のカプセル化 (Cryptographic IP Encapsulation, CIPE)

このソフトウェアの基本的な目的は,インターネットのような安全でないパケッ トネットワークを通る安全な(トラフィック解析,偽メッセージ混入を含む盗 聴に対して)サブネットワーク間接続を提供することです.

CIPE はデータをネットワークレベルで暗号化します.つまり,ネットワーク 上のホスト間を転送されるパケットが暗号化されます.暗号化エンジンはパケッ トを送受信するドライバの近くに配置されます.

CIPE は,接続ごとにソケットレベルでデータを暗号化する SSH とは異なりま す.異なるホスト上で実行されているプログラム間の論理的な接続が暗号化さ れます.

CIPE は仮想プライベートネットワーク(Virtual Private Network)を構築する ために,トンネリングで使うことができます.低レベルの暗号化には,アプリ ケーションソフトウェアを変更しなくても,VPN に接続している 2 つのネッ トワーク間で透過的に動作させることができるという利点があります.

CIPE のドキュメントからの要約です:

IPSEC 標準は,暗号化された VPN を構築するため(他にもありますが)に使う ことができるプロトコル群を定義しています.しかし,IPSEC はオプションが たくさんある比較的重くて複雑なプロトコル群で,プロトコル群の完全な実装 はまだほとんど使われておらず,一部の問題(鍵管理など)はまだ完全には解決 されていません.CIPE は比較的簡単なアプローチを取っており, CIPE においてパラメータ化できることの多く(実際に使う暗号化アルゴリズム の選択など)は,インストール時に選択したものに固定されます.これは柔軟 さを制限しますが,実装が簡単に(したがって,効率的でデバッグもしやすく) なります.

詳しい情報は http://www.inka.de/~bigred/devel/cipe.html にあります.

他の暗号化と同様の輸出制限のため,CIPE はカーネルと一緒には配布されて ません.

5.12 Kerberos

Kerberos は MIT の Athena Project で開発された認証システムです.ユーザ がログインした時,Kerberos は(パスワードを用いて)ユーザを認証し,ネッ トワーク上に分散している他のサーバやホストに対してユーザの身分を証明す るための方法を提供します.

それから,この認証情報は rlogin のようなプログラムが使い,ユー ザがパスワード無しで他のホストにログインすることを許可するために使います (.rhosts ファイルの代わり).この認証方法をメールシステムで使っ て,メールが正しい宛先に配達されたことの保証や,送信者が自分が名乗って いる通りのユーザであることの保証が行えます.

Kerberos およびこれに付属しているプログラムは,ユーザが自分を他のユー ザであるとシステムに思わせる「詐称」を実質的にできなくします.残念なが ら Kerberos のインストールはシステムに深く立ち入ったものになり,基本的 なプログラムをたくさん修正したり入れ換えたりすることが必要になります.

Kerberos に関する詳しい情報は the kerberos FAQ にあり,コードは http://nii.isi.edu/info/kerberos/ にあります.

[参考: Stein, Jennifer G., Clifford Neuman, and Jeffrey L. Schiller. "Kerberos: An Authentication Service for Open Network Systems." USENIX Conference Proceedings, Dallas, Texas, Winter 1998.]

Kerberos はホストのセキュリティ向上のための最初のステップではありませ ん.Kerberos は非常に複雑ですし,例えば SSH ほど使われているわけでもあ りません.

5.13 シャドウパスワード

シャドウパスワードは,暗号化されたパスワード情報を一般ユーザから隠す手 法です.暗号化されたパスワードは普通,誰でも読める /etc/passwd に格納されています.したがって,誰でもパスワード 推測プログラムを実行してパスワードを見つけようと試みることができます. 一方シャドウパスワードでは,この情報は特権ユーザしか読めない /etc/shadow ファイルに格納されます.シャドウパスワードを利用 するためには,パスワード情報へアクセスする必要があるユーティリティを全 てシャドウパスワード対応に再コンパイルする必要があります.(先述の)PAM を使っていれば,シャドウモジュールを使用するだけでよく,実行ファイルを 再コンパイルする必要はありません.必要ならば Shadow-Password HOWTO を参照して詳しい情報を調べてください.このドキュメントは http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html にあります.このドキュメントは現在は多少古くなっていますし,PAM をサポー トしているディストリビューションではたぶん不要でしょう.

5.14 "Crack" および "John the Ripper"

推測しにくいパスワードを passwd プログラムで強制することがで きない場合には,パスワードをクラッキングするプログラムを実行し,ユーザ のパスワードが安全かどうか確認するとよいでしょう.

パスワードクラックのプログラムは,単純な考えに基づいて動作します.つま り,辞書に載っている単語とこれらの単語の変化形を順に試すのです.それ ぞれを暗号化し,暗号化されたパスワード文字列と比べます.これらが一致す れば,パスワードがわかります.

このようなプログラムはたくさんありますが,その中でも "Crack" と "John the Ripper"( http://www.false.com/security/john/index.html)の 2 つが有名です. これらは CPU パワーを大量に消費しますが,予めこれを実行しておくことで, 攻撃者がこれらのツールを使って侵入することができるかどうか知ることがで き,脆弱なパスワードを使っているユーザに注意することができます.攻撃者 はパスワードファイル(UNIX では /etc/passwd)を入手するために, まず他のセキュリティホールを突かなければなりませんが,それは読者の皆さ んがが考えているよりもありふれているものであることは知っておいてください.

セキュリティの強さは最も弱いホストの強さになってしまいます.ですから, ネットワーク上に Windows マシンがある場合には,L0phtCrack を調べるべき だということは言っておく価値があるでしょう.これは Crack の Windows 用 の実装です.これは http://www.l0pht.com で入手できます.

5.15 CFS (暗号化ファイルシステム)と TCF(透過的暗号化ファイルシステム)

CFS はディレクトリツリー全体を暗号化する手法で,このツリーに暗号化され たファイルを置くことができます.これはローカルマシン上で NFS サーバを 動作させます.RPM は http://www.replay.com/redhat/ で入手可能であり,動作に関する情 報は ftp://ftp.research.att.com/dist/mab/ で得られます.

TCFS は CFS を改良したもので,ファイルシステムとの統合をより進めたもの です.したがって,ユーザは透過的に暗号化ファイルシステムを利用すること ができます.詳しい情報は http://edu-gw.dia.unisa.it/tcfs/ で得られます.

TCFS は必ずしもファイルシステム全体で使う必要はありません.これもディ レクトリツリーで使用することができます.

5.16 X11, SVGA, ディスプレイに関するセキュリティ

X11

グラフィックディスプレイを安全にしておき,攻撃者が入力したパスワードを 奪ったり,画面で見ているドキュメントや情報を読んだり,セキュリティホー ルを突いて root 権限を奪ったりできないようにしておくことは重要です. X アプリケーションをネットワーク越しにリモートで動作させることも,リモー トのシステムとのやりとりを全部盗聴されてしまう危険を伴うことがあります.

X にはアクセス制御機構がいくつもあります.その中で最も簡単なものはホス トに基づくものです.xhost コマンドを用いるとディスプレイへの アクセスが許可されるホストを指定できます.しかし,この機構は非常に危険 です.マシンにアクセスできる人は,xhost + を実行し,容易に侵 入することができます.もし,信頼できないホストからのアクセスを許可しな ければならない場合には,そのホストにログインしているユーザは誰でもディ スプレイに不正アクセスすることができます.

ログインのために xdm(X ディスプレイマネージャ)を使っている場 合,ずっと良いアクセス方法である MIT-MAGIC-COOKIE-1 を使いましょう. この機構は 128ビット長の「クッキー」を生成して,ユーザのホームディレク トリの .Xauthority ファイルに格納します.リモートのマシンにディ スプレイへのアクセスを許可するには,xauth コマンドと .Xauthority ファイル内の情報を使って,その接続だけを許可する ようにします.Remote-X-Apps mini-howto をご覧ください.これは http://metalab.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html で入手できます.

X の接続を安全に行うために ssh (前述の ssh の項を 参照のこと)を使うこともできます.ssh にはユーザが透過的に扱う ことができる点およびネットワーク上に暗号化されていないデータが流れない 点という 2 つの利点があります.

X のセキュリティについての詳しい情報については,オンラインマニュアルの Xsecurity を参照してください.安全な策としては,コンソールに ログインするときには xdm を使い,リモートのサイトで X のプロ グラムを実行するときには ssh を使うことです.

SVGA

SVGAlib を使うプログラムはビデオ関係のハードウェアを操作するため,普通 は root に setuid されます.これは非常に危険です.プログラムがクラッシュ した場合,普通はコンソールを元に戻すためマシンを再起動しなくてはならな くなってしまいます.このようなプログラムについては,確実に信頼できるこ と,あるいは少なくとも少しは信用できることを確かめてください.できれば, そもそも使わないのが良いでしょう.

GGI (Generic Graphics Interface project)

Linux GGI プロジェクトは Linux のビデオインタフェースの問題について,1 つの解を提案しようとする試みです.GGI では Linux のカーネル内に少しビ デオ関係のコードを入れ,それからビデオへアクセスします.つまり GGI を 使えばいつでもコンソールを正常な状態に戻すことができます.また, secure attention key を使うことができ,コンソールでトロイの木馬が入っ た login プログラムを使われるのを防げます. http://synergy.caltech.edu/~ggi/


次のページ 前のページ 目次へ