システムをネットワークに繋ぐ前に少し準備と計画を行うだけで,システムと その中のデータを守るのに役立つでしょう.
/etc/fstab
で nosuid
オプション
を使いましょう.また,ユーザのホームパーティションや /var
で
は nodev
や noexec
を使おうと考えるかもしれません.
これらのオプションはプログラムの実行や,キャラクタデバイス・ブロックデ
バイスの作成を禁止します.これらはいずれにせよ必要無いはずです./etc/exports
でで
きる限り厳しいアクセス制限を行ってください.これはワイルドカードを使わ
ないこと,root での書き込みアクセスを許可しないこと,できる限り読み取
り専用でエクスポートするということです.umask
をできる限り厳しく設定してください.
umask の設定 をご覧ください.unlimited
を認めるのではなく,ファイルシステムに
制限値を設定しましょう.リソース制限を行う PAM モジュールと
/etc/pam.d/limits.conf
を使って,ユーザ別に制御することができ
ます.例えば,グループ users
の制限は以下のようになります:
@users hard core 0
@users hard nproc 50
@users hard rss 5000
この設定は,コアファイルの作成を禁止し,プロセスの数を 50 に制限し,メ モリの使用量をユーザ 1 人あたり 5MB に制限するものです.
/var/log/wtmp
, /var/run/utmp
ファイルには,システム
の全てのユーザのログイン記録が記録されています.このファイルは絶対いじ
られないようにしなくてはなりません.というのも,このファイルを使ってユー
ザ(あるいは侵入者である可能性がある人)がいつ,どこからシステムに入った
のかを知ることができるからです.このファイルのパーミッションは 644 に
すべきです.この設定は通常のシステム操作に影響を与えません.
/etc/passwd
や
/etc/shadow
の削除を含む攻撃の手段となってきました).
immutable ビットの情報については,オンラインマニュアルの
chattr(1)
を参照してください.
システム上の SUID/SGID されたプログラムを全て見つけ,それらがどうなっ ているかを監視します.侵入者の可能性を示すこれらのファイルの変化に注意 してください.システム上の SUID/SGID されたプログラムを全て見つけるに は以下のコマンドを使います:
root# find / -type f \( -perm -04000 -o -perm -02000 \)
Debian ディストリビューションは,SUID されたファイルが存在するかどうか
を調べるジョブを毎晩実行します.そして,これを昨晩の実行結果と比較しま
す.このログは /var/log/suid*
で参照できます.
怪しいプログラムは chmod
を使って SUID や SGID のパーミッショ
ンを取り除くことができます.どうしても必要だと思った時にはパーミッショ
ンを戻すこともできます.
root# find / -perm -2 ! -type l -ls
それから,どうしてこれらのファイルが書き込み可能になったのかを確かめて
ください.普通に操作している場合でも,/dev
のいくつかのファイル
やシンボリックリンク等を含めて,世界中から書き込めるファイルがいくつか
あります.したがって,! -type l
を用いて,先の find
コマンドの結果からこれらを取り除いてください.
所有者のいないファイルも侵入者がシステムにアクセスした可能性を示します. 所有者がいないファイルや,どのグループにも属していないファイルは,以下 のコマンドで見つけることができます:
root# find / -nouser -o -nogroup -print
.rhosts
ファイルを見つけることも,システム管理者の日常業務の
一部です.というのも,これらのファイルをシステムに置くことを許可するべ
きではないからです.ネットワーク全体にアクセスする可能性を得るためには,
クラッカーは安全でないアカウントが 1 つだけあれば良いということを忘れ
ないでください.システム上の全ての .rhosts
ファイルは以下のコ
マンドで見つけることができます:
root# find /home -name .rhosts -print
最後になりますが,システムファイルのパーミッションの変更は,しようとし ていることを必ず理解してからにしてください.何かを動かすための楽な方法 だからといって,ファイルのパーミッションを変えてはいけません.パーミッ ションを変える前には,ファイルのパーミッションがそうなっている理由を必 ず理解してください.
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 ユー
ザしかいないためです.
システムファイルが,システム管理を行うべきでないユーザやグループの権限 によって変更できないようにしておくのは重要なことです.
UNIX は ファイルとディレクトリのアクセス制御を 3 つの特性(所有者,グルー プ,全員)に分離しています.必ず 1 人だけの所有者,メンバー数が任意であ るグループ,それ以外の全員です.
以下で UNIX のパーミッションを簡単に説明します:
所有権(ownership) - あるノードやその親ノードのパーミッション設定をどのユー ザ,グループが行うことができるのかを示します
パーミッション(permissions) - ファイルに対して行うことができるアクセスの種類を決め るビット列.組合せが同じでも,ディレクトリのパーミッションはファイルの パーミッションとは意味が異なることがあります.
読み出し(read):
書き込み(write):
実行(execute):
ディレクトリに適用する場合,「sticky ビット」の意味はファイルに適用す
る場合と異なります.sticky ビットがディレクトリに設定されている場合に
削除できるファイルは,そのディレクトリへの書き込み権限があったとしても,
自分が所有しているファイルか明示的に書き込み許可が与えられているファイ
ルだけです.このビットは /tmp
のようなディレクトリのために用
意されたものです.このようなディレクトリには,世界中から書き込みできま
すが,どのユーザにも自由にファイルを消すことを認めることは望ましくあり
ません.ディレクトリを詳細表示すると,sticky ビットは t
で表
されます.
これはファイルへの SUID パーミッションを示します.ユーザ ID 設定アクセス モードが所有者のパーミッションで設定されており,かつそのファイルが実行可 能であれば,これを実行したプロセスは,プロセスを起動したユーザではなく ファイルを所有しているユーザに基づいてシステムのリソースにアクセスでき ます.これは各種 'buffer overflow' 攻撃の原因となります.
グループのパーミッションで設定されていれば,このビットはファイルの「グ ループ ID 設定」状態を制御します.これは SUID と同じように動作しますが, ユーザではなくグループが影響を受ける点が異なります.このビットに効果を 持たせるためには,やはりファイルは実行可能でなければいけません.
(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 されたシェルスクリプトはセキュリティに重大な危険を及ぼすので,カー ネルはこれを無視します.そのシェルスクリプトがどれだけ安全だと思ってい ても,これはクラッカーに root のシェルを奪われてしまう可能性を持ってい ます.
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
を使う場合にはクラッカーの動きや,自分自身が行ったこ
とに注意していなくてはなりません.
Tripwire
は
http://www.tripwiresecurity.comにあります.無料です.マニュア
ルとサポートは有料で入手することができます.
「トロイの木馬(Trojan Horse)」はホメーロスのイーリアスに書かれている有 名な計略に由来する名前です.基本的な考え方は,便利そうなプログラムやバ イナリを用意しておき,これを他人にダウンロードさせて root ユーザとして 実行させるというものです.これによって,相手が気づかないうちにシステム を悪用することができます.手に入れたバイナリが仕事をしている(とても役 立っているかもしれません)と思っている間に,このバイナリが同時にセキュ リティも破ってしまうのです.
したがって,マシンにプログラムをインストールする時には注意が必要です. RedHat は MD5 チェックサムと PGP 署名を施した RPM ファイルを提供し,ユー ザが本物のパッケージを入手しているのかどうかをチェックできるようにして います.他のディストリビューションにも同様の仕組みがあります. 素性が知れず,ソースも提供されていないバイナリを root 権限で実行して はいけません! 誰もが調査できるようなソースコードを公開する攻撃者はほ とんどいません.
手間はかかるかもしれませんが,プログラムのソースコードはその正式の公開 サイトから入手するべきです.プログラムを root 権限で実行するならば,あ なたかあなたが信頼している人がソースコードを見て,検査すべきです.
現在用いられているセキュリティ機能のうち最も重要なものの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 を参照してください.
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 にあります.
ユーザは各種セキュリティと暗号化プロトコルの違いや,これらの使い方につ いてよく質問してきます.このドキュメントは暗号化についてのものではない のですが,各プロトコルの内容を簡単に説明し,情報のありかを紹介しておく のも悪くないと思います.
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 になりました. 他の形式の暗号と同様に輸出が制限されているため,デフォルトではカーネル と共に配布されていません.
ssh
(Secure Shell) と stelnet
ssh
と stelnet
はリモートのシステムにログインして暗
号化された接続を行うためのプログラムです.
ssh
は rlogin
, 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 を見てください.
最近のバージョンの 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
このソフトウェアの基本的な目的は,インターネットのような安全でないパケッ トネットワークを通る安全な(トラフィック解析,偽メッセージ混入を含む盗 聴に対して)サブネットワーク間接続を提供することです.
CIPE はデータをネットワークレベルで暗号化します.つまり,ネットワーク 上のホスト間を転送されるパケットが暗号化されます.暗号化エンジンはパケッ トを送受信するドライバの近くに配置されます.
CIPE は,接続ごとにソケットレベルでデータを暗号化する SSH とは異なりま す.異なるホスト上で実行されているプログラム間の論理的な接続が暗号化さ れます.
CIPE は仮想プライベートネットワーク(Virtual Private Network)を構築する ために,トンネリングで使うことができます.低レベルの暗号化には,アプリ ケーションソフトウェアを変更しなくても,VPN に接続している 2 つのネッ トワーク間で透過的に動作させることができるという利点があります.
CIPE のドキュメントからの要約です:
IPSEC 標準は,暗号化された VPN を構築するため(他にもありますが)に使う ことができるプロトコル群を定義しています.しかし,IPSEC はオプションが たくさんある比較的重くて複雑なプロトコル群で,プロトコル群の完全な実装 はまだほとんど使われておらず,一部の問題(鍵管理など)はまだ完全には解決 されていません.CIPE は比較的簡単なアプローチを取っており, CIPE においてパラメータ化できることの多く(実際に使う暗号化アルゴリズム の選択など)は,インストール時に選択したものに固定されます.これは柔軟 さを制限しますが,実装が簡単に(したがって,効率的でデバッグもしやすく) なります.
詳しい情報は http://www.inka.de/~bigred/devel/cipe.html にあります.
他の暗号化と同様の輸出制限のため,CIPE はカーネルと一緒には配布されて ません.
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 ほど使われているわけでもあ りません.
シャドウパスワードは,暗号化されたパスワード情報を一般ユーザから隠す手
法です.暗号化されたパスワードは普通,誰でも読める
/etc/passwd
に格納されています.したがって,誰でもパスワード
推測プログラムを実行してパスワードを見つけようと試みることができます.
一方シャドウパスワードでは,この情報は特権ユーザしか読めない
/etc/shadow
ファイルに格納されます.シャドウパスワードを利用
するためには,パスワード情報へアクセスする必要があるユーティリティを全
てシャドウパスワード対応に再コンパイルする必要があります.(先述の)PAM
を使っていれば,シャドウモジュールを使用するだけでよく,実行ファイルを
再コンパイルする必要はありません.必要ならば Shadow-Password HOWTO
を参照して詳しい情報を調べてください.このドキュメントは
http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html
にあります.このドキュメントは現在は多少古くなっていますし,PAM をサポー
トしているディストリビューションではたぶん不要でしょう.
推測しにくいパスワードを 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 で入手できます.
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 は必ずしもファイルシステム全体で使う必要はありません.これもディ レクトリツリーで使用することができます.
グラフィックディスプレイを安全にしておき,攻撃者が入力したパスワードを 奪ったり,画面で見ているドキュメントや情報を読んだり,セキュリティホー ルを突いて 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
を使うことです.
SVGAlib を使うプログラムはビデオ関係のハードウェアを操作するため,普通 は root に setuid されます.これは非常に危険です.プログラムがクラッシュ した場合,普通はコンソールを元に戻すためマシンを再起動しなくてはならな くなってしまいます.このようなプログラムについては,確実に信頼できるこ と,あるいは少なくとも少しは信用できることを確かめてください.できれば, そもそも使わないのが良いでしょう.
Linux GGI プロジェクトは Linux のビデオインタフェースの問題について,1
つの解を提案しようとする試みです.GGI では Linux のカーネル内に少しビ
デオ関係のコードを入れ,それからビデオへアクセスします.つまり GGI を
使えばいつでもコンソールを正常な状態に戻すことができます.また,
secure attention key を使うことができ,コンソールでトロイの木馬が入っ
た login
プログラムを使われるのを防げます.
http://synergy.caltech.edu/~ggi/