第1章 セキュリティと機密保持

目次

1.1. ローカルセキュリティとネットワークセキュリティ
1.2. いくつかのセキュリティ関連のヒント
1.3. セキュリティ問題の報告先

Linux や UNIX システムにある特長の 1 つに、同時に複数のユーザに対する処理を 実行できる (マルチユーザ環境) というものがあります。また、単一のコンピュータで、 これらのユーザは複数のタスクを実行できる (マルチタスク) という特長もあります。 さらに現状のオペレーティングシステムには、ネットワークを透過的に扱う仕組みが 備わっていて、ユーザは自分自身が使用しているデータやアプリケーションが、 ローカルにあるのかネットワーク上にあるのか、気にする必要がなくなっています。

マルチユーザの機能では、異なるユーザのデータを別々に保管しなければならない ことを意味しているほか、セキュリティやプライバシーも保障されなければなりません。 データに対するセキュリティは重要な問題で、コンピュータがネットワークに繋がる よりも前の段階から、議論が行なわれてきた問題です。もちろん現状であっても、 データが失われた場合や障害が発生したような場合 (主にハードディスク) に、 データを保持し続けられるということが最も重要ではありますが。

本章では機密保持に関する問題を中心に説明を行ない、ユーザのプライバシーを守る ための方法を説明しています。ただし、広範囲にあたるセキュリティの考え方は、 定期的に更新しなければならないものであるほか、実際に作業可能な範囲で、現場に 即したやり方でなければならないことに注意してください。このマニュアルでは、 ハードディスクに障害が発生した場合だけでなく、不正アクセスや不正なデータ破壊 が発生した場合などの対応方法について、作業を効率よく進めるための説明を 行なっています。

1.1. ローカルセキュリティとネットワークセキュリティ

データにアクセスする方法としては、下記のようなものがあります:

  • 情報を必要としているユーザ同士で情報を交換したり、コンピュータに アクセスしたりする方法

  • コンピュータのコンソールを利用した直接的な方法

  • シリアルポートを介した方法

  • ネットワークリンクを介した方法

いずれの場合でも、ユーザは必要な資源やデータにアクセスするにあたって、認証が 行なわれるべきです。 Web サーバは一般にこのようなデータに対する認証を実施 しませんが、 Web サーバは公開の場所であるため、機密を保持しなければならない データはそもそも配置されるべきではありません。

上述の一覧において最初の方法は、最も多く人間が介在する方法です (たとえば 銀行員とのやりとりで、口座の所有者であることを示すのに必要であったりする 場合など) 。このときは署名 (押印) や暗証番号、もしくはパスワードなどの 入力が求められ、本人確認が行なわれます。このような状況では、それらの個人 情報を引き出して、本人に偽装できるようにする攻撃方法が考えられます。 このような攻撃が発生した場合、一般にはさらなる個人情報を引き出すよう誘導 されることが考えられます。これを ソーシャルハッキング と呼びます。このような攻撃を防ぐには、利用者に対して注意を喚起し、個人情報 を迂闊に開示しないように教育する必要があります。コンピュータシステムに 進入する前に、攻撃者はこのような行為を、受け付け係や企業のサービス担当者の ほか、場合によっては家族に対して実施する場合があります。多くの場合、この ようなソーシャルハッキングは、ずっと時間が経過してから気づくことがあります。

データに不正アクセスを行ないたいと考えている攻撃者は、お使いのハードウエアに 対して直接アクセスする従来の方法でデータを盗むことも考えます。そのため、 そのようなマシンは取り外されたり入れ替えられたり、部品単位で交換されたり しないよう、物理的な盗難防止策を施すべきです。これはバックアップ媒体や ネットワークケーブル、電源コードなどにも当てはまります。さらにはよく知られた キー入力で通常とは異なる処理を行なわせることができることから、起動処理に ついても保護を行なう必要があります。まずは BIOS とブートローダに対して パスワードを設定し、保護を行なってください。

シリアルポートに接続されているシリアル端末は、今なお様々な場所で使用されて います。ネットワークインターフェイスとは異なり、ホスト間の通信にネットワーク プロトコルが使用されておらず、シンプルなケーブルや赤外線通信で、相互に 単純なデータ (多くは文字) がやりとりされています。このようなシステムでは ケーブル自身が最大の弱点で、たとえば古いプリンタが接続されているような 環境があるとすると、その中を流れるデータは簡単に記録することができてしまい ます。これはプリンタだけでなく、その他のデバイスであっても同様です。

ローカルファイルの読み込みは、ネットワーク上離れた場所にあるサーバに 対して接続する場合と比べて、追加のアクセスルールを必要とします。これが ローカルセキュリティとネットワークセキュリティの違いで、これらは明確に 区別して扱う必要があります。

1.1.1. ローカルセキュリティ

ローカルセキュリティは、まずコンピュータを配置する物理的な環境を考える ことから始まります。コンピュータは必要なセキュリティ要件を満たす場所に 配置されるべきで、お互いにユーザが切り離されていて、パーミッションや 識別子が他のユーザときちんと区別できていることを目的とします。これは 一般論ではありますが、特に root というシステム管理権限を持つユーザの場合は、特に明確な区別が必要です。 root はその他のユーザに 成り代わることができるばかりか、パスワードを尋ねられたりすることなく ローカルに保存されている全てのファイルを読み込むことができます。

1.1.1.1. パスワード

Linux システムではパスワードはそのままの形では保管されておらず、入力した パスワードが保存したデータと単純に比較できるようなものでもありません。 もしも単純に比較できるような仕組みであったとすると、そのファイルさえ 読み込めてしまえば、簡単にそれらのユーザを偽装することができてしまう ためです。 Linux システムではその代わりに、パスワードが暗号化された形で 保管されていて、パスワードが入力されるたびにその暗号化を行ない、保管 されている暗号データと、入力して暗号化したデータを比較することで パスワードを確認しています。これは暗号化されたパスワードを元の文字列に 戻すことができない場合に有効な仕組みです。

このような仕組みは特殊なアルゴリズムを利用して実現するもので、 一方向にしか動作しない仕組みから、 トラップドア アルゴリズム とも呼ばれています。暗号化した文字列を取得した 攻撃者が現われても、単純に同じアルゴリズムを適用するだけでは元の文字列 には戻すことができません。その代わりに暗号化されたパスワードと一致する まで、ありうるパスワードを端から試してみる、という作業が必要になります。 パスワードが 8 文字程度の長さであれば、それを端から試してみるという作業 が途方もないものになることは、想像に難くないでしょう。

1970 年代の時点で、この方法は 1 つのパスワードを暗号化するのに数秒程度 しか必要としないのに、逆に暗号を解読するには極端に長い時間がかかるという 点で、他の方法よりも機密を保持できることが示されてきました。現在と比較 すると、 PC の性能は数十万倍から数百万倍にまで高まってしまったことから、 安全のため暗号化されたパスワード (/etc/shadow) も 通常のユーザには読み込めないようになっています。もちろんのことながら、 パスワードが簡単に推測できるものであってはなりません。万が一何らかの エラーでパスワードファイルを読み取られてしまった場合、よくあるパスワード ではすぐに破られてしまうためです。そのため、パスワードを設定する際には 何らかの 変換 を施すとよいでしょう。たとえば tantalize という単語をパスワードに使用したい場合は、 a を似通った文字である @ に、 e を似通った数字である 3 置き換え、 t@nt@1lz3 のようにします。

単語内の特定の文字を似たような文字や数字に置き換える (tantalizet@nt@1lz3 に) だけでは不十分です。パスワードを解析する プログラムは辞書を利用していて、置き換えるようなパターンにも対応している ためです。さらによい方法としては、汎用的な意味を持たない単語を利用し、自分 自身にしか意味のない文字を作る方法があります。たとえば本のタイトルのうち、 単語の最初の文字だけをとる方法があります。 Umberto Eco 氏による The Name of the Rose という本であれば、単語の最初の文字を 取っていって TNotRbUE9 のようなパスワードにします。 逆に、 beerbuddy とか jasmine76 のように、 少し調べればわかってしまうような文字列は、簡単に推測されてしまいます。

1.1.1.2. 起動処理

まずはお使いのシステムを設定して、フロッピィディスクドライブや CD/DVD ドライブから起動できないように設定しておき、さらに BIOS に対して パスワードロックを設定して、ハードディスクだけを利用して起動できる ように設定してください。また、通常の Linux システムは、ブートローダを 利用して起動し、起動するカーネルに対してパラメータを設定できるように なっています。このようなパラメータ入力が不正に行なわれることのない ようにするため、ブートローダに対してパスワード保護を設定してください (詳しくは 第9章 ブートローダ GRUB (↑リファレンス) をお読みください) 。これは カーネル自身が root で動作 するだけでなく、システム起動時のスクリプトも root で動作することから、 セキュリティを保護するにあたっては必須の設定です。

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

一般的なルールとして、作業は最低限必要な権限だけを利用して行なうべき ものです。たとえばメールを読んだり書いたりするのに、 root の権限が必要となることは あり得ないでしょう。もしもメールプログラムにバグがあった場合は、攻撃者は このバグを利用し、最大限の権限で不正なプログラムを起動できてしまうため です。上記のようなルールに従っていれば、被害をできるだけ小さくすることが できます。

openSUSE に含まれている全ファイルに対するパーミッションは、注意して 設定されています。追加のソフトウエアやその他のファイルをインストールする 場合は、特にパーミッションビットを設定する際、管理を行なう方が注意をして 設定を行なってください。経験者やセキュリティを意識するシステム管理者で あれば、 ls コマンドに -l オプションを 設定し、長い形式でのファイル一覧を表示することで、誤ったファイルの パーミッションをチェックすることができます。ファイルの属性を誤って設定 してしまうと、そのファイルが不用意に変更されたり削除されたりする場合が あるほか、これらのファイルを root で実行することができてしまう場合があります。また、それが設定ファイルで あるとすれば、 root の 権限で読み込んでしまう場合もあります。これにより、攻撃を受ける 可能性が格段に高まってしまいます。このような攻撃は、プログラム (卵) は 異なるユーザ (鳥) が実行する (暖めて孵化させる) ことから、 カッコウの卵 (cuckoo eggs) と呼ばれます。これは、他の鳥に 自分の卵を暖めて孵化させる (托卵) という、カッコウの習性から来た言葉です。

openSUSE® システムでは、 /etc ディレクトリ内に permissions, permissions.easy, permissions.secure, permissions.paranoid という 4 種類のファイルが用意されています。これらのファイルは特殊な パーミッションを設定するために用意されていて、それぞれ全てのユーザに 書き込みを許すディレクトリやファイル、 setUID ビット (これが設定された プログラムは、起動したユーザの ID ではなく、パーミッションに設定された ユーザの ID (多くの場合は root) で実行されるものです) のファイルなどを定義しています。 このファイルに加え、 /etc/permissions.local ファイル ではそのシステム独自の設定を追加することができます。

openSUSE の設定プログラムで使用されるファイルを選択し、パーミッション を設定するには、 YaST から セキュリティとユーザ 内に ある ローカルセキュリティ を利用して行ないます。詳しくは /etc/permissions ファイルに書かれているコメントか、 もしくは chmod のマニュアルページ (man chmod) をお読みください。

1.1.1.4. バッファオーバーフローと書式文字列のバグ

ユーザ側で自由に変更のできるデータをプログラムが処理するにあたって、 特別な配慮をしなければなりません。ただし、配慮を行なうのは一般の利用者 ではなく、アプリケーションのプログラマです。プログラマは自分が作成して いるプログラムが正しくデータを解釈し、小さすぎることのないメモリ領域内に 書き込んでいることを確認しなければなりません。またプログラマは、 インターフェイスとして決めた方法で、一貫したデータ処理を実施する必要も あります。

もしもバッファ内にデータを書き込むにあたって、メモリバッファが十分な サイズでなかった場合、 バッファオーバーフロー という 状況が発生します。これは、利用可能なバッファサイズの領域よりもデータ (ユーザが提供したデータ) のサイズのほうが大きいことによって発生する もので、結果としてデータはバッファ領域の終端を超えて書き込まれてしまい、 特定の状況下では、単にデータを処理するだけでなく、ユーザ側から提供された データがプログラムの動作に影響を与える結果になってしまいます。この種類の バグは、特にプログラムが特別な権限 (1.1.1.3項 「ファイルのパーミッション」 を参照) で動作している場合に特に深刻な問題になります。

書式文字列のバグ は上記と少し異なる方法で行なわれる ものですが、ユーザの入力がプログラムを混乱させるという点は同じです。多くの 場合、これらのプログラミング上のエラーは、特別な権限 (setuid, setgid) で 実行している場合に問題となるものであるため、それらのプログラムから特別な 権限を取り除くことで、データやシステムに対する保護を行なうことができます。 もちろんのことですが、最良の方法は最低限の権限だけを利用して実行すると いうことに違いはありません (詳しくは 1.1.1.3項 「ファイルのパーミッション」 を お読みください) 。

バッファオーバーフローや書式文字列のバグは、いずれもユーザデータの処理に 関連したバグですが、ローカルから実行するタイプの攻撃だけを受けるというもの ではありません。この種類のバグとして報告されているものの多くは、ネットワーク の接続を介して攻撃を受けています。そのため、バッファオーバーフローや書式 文字列のバグは、ローカルセキュリティとネットワークセキュリティの両方に 分類されることになります。

1.1.1.5. ウイルス

一般的に言われていることとは異なり、 Linux 上で動作するウイルスも存在 します。ですが、ウイルスとして知られているものは、その作者が 特定の技術や考え方が想定通りに動作することを示す、 コンセプト証明 の形で公開されているものです。 今までに 本当の意味での ウイルスが発見された ことはありません。

ウイルスは、生存し続けることのできる媒体無しでは生き残ることができ ません。この場合、媒体とはシステム内にあるプログラムや、重要と位置づけ られているストレージ領域 (たとえばマスターブートレコード) で、 ウイルスのプログラムコードから書き込めるものである必要があります。 Linux ではマルチユーザの機能があるため、特定のファイルに対して書き込み を制限するような設定 (これは特にシステムファイルに対しては重要です) を行なうことができます。このことから、通常の作業を root の権限で実行してしまう と、システムをウイルスに感染させてしまう可能性が大きくなることになり ます。逆に、上述のとおりできる限り低い権限で実行するというルールを 守っていれば、ウイルスに感染する可能性を低くすることができます。

また上記とは別に、詳しく知らないようなインターネットサイトから、 ソフトウエアをダウンロードして実行してしまうようなことも避けるべきです。 openSUSE の RPM パッケージには電子署名の技術が用いられていて、 それらを構築するにあたって特別に注意して署名が付与される仕組みに なっています。ウイルスは、管理者やユーザが必要なセキュリティへの注意を 怠ったことを示す印であり、高度に安全性を高めたシステムでさえも脅かす 可能性があります。

なお、ウイルスとワームはそれぞれ異なるものであることに注意してください。 ワームはネットワーク世界にのみ存在するもので、それを広げるのに媒体を 必要とすることはありません。

1.1.2. ネットワークセキュリティ

ネットワークに対するセキュリティは、外部のネットワークからの攻撃を 防ぐのに重要です。ユーザ名とパスワードを入力する典型的なログイン認証 処理は、ローカル側のセキュリティ問題ですが、ネットワークを介して ログインするような場合では、 2 種類のセキュリティ要件、つまり実際の 認証が始まるまでのネットワークセキュリティの部分と、認証処理以降の ローカルセキュリティの 2 つを考慮する必要があります。

1.1.2.1. X Window System と X 認証

冒頭でも記述しているとおり、ネットワークを透過的に扱うのが UNIX システムの 特徴のうちの 1 つです。 UNIX オペレーティングシステム向けのウインドウ システムである X Window System (以下 X) では、これをうまく利用しています。 X ではリモートのホストからでも問題なくログインできるほか、ネットワークを 介してグラフィカルなプログラムを起動し、表示内容を転送することも できます。

X のクライアントがリモートの X サーバに対して何らかのデータを表示する必要 がある場合、サーバ側は不正なアクセスが行なわれることの無いよう、ディスプレイ 資源を管理する必要があります。もっと明確に言うと、クライアントプログラムに 対して、必要なアクセス許可を設定しなければなりません。 X のシステムでは 2 つの方法でのアクセス許可が用意されていて、それぞれホストベースのアクセス 制御と、 Cookie ベースのアクセス制御と呼ばれます。ホストベースのアクセス 制御はクライアントの IP アドレスで制御を行なうもので、 xhost というプログラム を利用して制御することができます。 xhost は X サーバが動作するマシンに対し、 そのデータベースに信頼するクライアントの IP アドレスを登録します。ただし、 IP アドレスによる認証では安全とは言えません。たとえばクライアント側で複数の ユーザが利用していた場合では、全員に対して X サーバへのアクセスを許すことに なってしまいます。これでは IP アドレスが盗まれた場合と同じ危険が発生する ことになってしまいます。このような欠点から、この認証方法についてここでは 詳しく説明しません。詳しく知りたい場合は、 man xhost で表示されるマニュアル ページをお読みください。

Cookie ベースのアクセス制御では、 X サーバと信頼されているユーザのみが 知る文字列が用意され、それがある種の ID カードとして機能します。 Cookie はログイン時にユーザのホームディレクトリ内にある .Xauthority ファイルに保管され、 X サーバを使用してウインドウを表示したい X クライアント に対して提供されます。 .Xauthority ファイルは xauth というツールを利用して操作することができます。 誤って .Xauthority ファイルの名前を変更したり削除 したりしてしまった場合は、新しいウインドウや X クライアントを開くことが できなくなります。

また、 SSH (Secure SHell) では X サーバとのネットワーク通信を暗号化し、 その暗号化通信をユーザ側で気にすることなく、透過的に利用できるように なります。この機能は X 転送 (forwarding) と呼ばれていて、これは SSH のサーバ (X クライアント) 側で X サーバを擬似し、 DISPLAY 環境変数を 介してリモートのホスト (X サーバ) に転送することによって実現しています。 SSH について詳しくは 第13章 SSH: 機密を保護する通信 をお読みください。

[Warning]

安全なホストにログインしていると判断できない場合は、 X 転送機能を利用 してはなりません。 X 転送が有効化されている場合、そのホストに悪意のある ユーザが存在していると、 SSH 接続を介してお使いのマシンにある X サーバに アクセスし、様々な攻撃 (キーボード入力を盗み見たりするなど) を行なう 可能性があります。

1.1.2.2. バッファオーバーフローと書式文字列のバグ

1.1.1.4項 「バッファオーバーフローと書式文字列のバグ」 でも示して いるとおり、バッファオーバーフローと書式文字列のバグは、ローカル セキュリティとネットワークセキュリティの両方に分類されます。ローカル 側での問題と同じように、ネットワークプログラムでのバッファオーバーフロー 攻撃は、 root の権限を奪取する 目的で行なわれます。対象のプログラムが root で動作していない場合でも、 これらのバグを利用して特権を持たないアカウントへのアクセス手段を獲得し、 さらなる脆弱性を利用してシステムへの侵入を試みる場合があります。

ネットワーク側から攻撃可能なバッファオーバーフローと書式文字列のバグは、 リモートからの攻撃としては一般的にもっとも頻繁に発生しうるものです。 新しく見つかったセキュリティホールを攻撃するプログラムは、セキュリティ 関連のメーリングリストによく投稿されます。これらはコードの詳細を知る ことなく脆弱性を利用できる仕組みではありますが、オペレーティングシステム の作成者に対して問題の修正を強制できることから、機密を高めるのに何年もの 間役立ってきた仕組みです。フリーソフトウエアでは誰もがソースコードに アクセスできる (openSUSE でも利用可能なすべてのソースコードを公開 しています) ため、誰もが脆弱性を発見することができ、誰もがそのバグを 修正することができるようになっています。

1.1.2.3. サービス拒否攻撃

サービス拒否攻撃 (Denial of Service; DoS) の目的は、特定のサーバ プログラムやサーバ全体を利用できなくすることにあります。これは様々な 方法で実現できてしまうもので、たとえばサーバに過大な負荷をかけたり、 巨大なデータパケットを送りつけて本来の処理を妨害したり、リモートから バッファオーバーフローの攻撃を仕掛けたりして実現することができます。 つまり、 DoS 攻撃はサービスを提供できない状態にする目的で行なわれます。 ただし、いったん特定のサービスが利用できない状態になると、 中間者攻撃 (盗聴、 TCP コネクションの奪取や偽装) を受けやすい状態になってしまうほか、 DNS ポイズニングの標的にもなって しまいます。

1.1.2.4. 中間者攻撃: 盗聴, 乗っ取り, 偽装

一般的に、攻撃者自身が通信の仲介役となることで行なわれるリモートからの 攻撃を 中間者攻撃 (man-in-the-middle attack) と 呼びます。一般的には、中間者攻撃が行なわれても被害者はその被害に気づく ことはありません。また、中間者攻撃には似たような攻撃方法が多数存在して いて、たとえば攻撃者が接続要求を奪取し、本来の接続先を擬似するような マシンにその要求を転送したとすると、その被害者は異なるホストと通信を 行なうことになってしまいます。

中間者攻撃としてもっともシンプルなやり方は、 盗聴 (攻撃者は 単純に ネットワークを流れる通信を聞き取るだけ で何もしない) による方法です。もっと複雑な方法で中間者攻撃を行なうと すると、既に確立された通信を奪取する (ハイジャックする) という方法も あります。これを行なうには、まず攻撃者は接続されている TCP コネクションに 対して、そのシーケンス番号を予測するためにパケットの解析を行ないます。 ただ、最終的に目的となるホストに対する接続を奪取したとしても、被害者 側では接続がエラーになり強制終了してしまうため、 TCP ではそれにすぐに 気づくようになっています。ただし、その他のプロトコルではハイジャック 攻撃に対して対策を施していないもの (接続を開始したときに簡易な認証手順 しか踏まないもの) があるのも事実で、このようなプロトコルを利用している 場合には攻撃が成立してしまいます。

偽装 とは特定のパケットを修正し、一般に IP アドレス の情報を偽造してパケットを送りつける攻撃です。このような攻撃では主に、 偽のパケットを送りつけるようなことを行ないます (Linux マシンではこのような 攻撃を行なうのに、スーパーユーザ (root) の権限が必要です) 。

中間者攻撃の多くは、 DoS と組み合わせて用いられます。攻撃者が特定のホスト に対して、たとえ短時間であっても、サービスを突然に落としたいと考えた場合、 ホストは DoS によって、一時的に攻撃に対して抵抗することができなくなって しまう性質から、能動的な攻撃 (中間者攻撃) がやりやすくなるためです。

1.1.2.5. DNS ポイズニング

DNS ポイズニングとは、攻撃者が DNS サーバのキャッシュを間違った値にする 攻撃で、偽造された DNS の応答パケットを送信してそれを信用させることで、 特定のサーバに対する通信を奪取しようとするものです。多くのサーバでは、 他のホストとの信頼関係を IP アドレスやホスト名を基準にして構築して います。攻撃者はあらかじめ、このようなホスト同士の信頼関係について熟知 していて、特定のホストに完全になりすますホストを用意しておく必要が あります。通常、攻撃者はサーバから受信したパケットを解析し、必要な情報を 取得します。また、攻撃者は同時にネームサーバに対して DoS 攻撃を行なう 必要がある場合もあります。このような攻撃を防ぐには、接続を暗号化して おき、接続するホスト間で認証情報を交換するように設計してください。

1.1.2.6. ワーム

ワームはウイルスとしばしば混同されますが、これらには明確な違いがあります。 ウイルスとは異なり、ワームはプログラムを生存させるため、特定のホストに 感染するような必要はありません。その代わり、ネットワーク構造内にできる だけ素早く広がるように特化しています。 Ramen や Lion, Adore のように過去 に存在していたワームでは、 bind8 や lprNG のようなサーバプログラム内の 既知のセキュリティホールを利用して広がっていました。ワームを防ぐ方法は 比較的簡単なもので、セキュリティホールが見つかってからワームが広がる までにある程度の時間があれば、対象のプログラムの更新版が作成されている はずです。そのため、管理者がシステムに対して更新版をインストールすれば、 解決することが可能です。

1.2. いくつかのセキュリティ関連のヒント

セキュリティの問題を十分に処理するため、いくつかの要件を監視しておく ことが重要です。基本的なセキュリティ要件を満たすため、下記の一覧に 示されたルールをご確認ください:

  • セキュリティアナウンスで推奨されている更新パッケージを、 できる限り素早く取得してインストールすること。

  • 最新のセキュリティ問題について常に最新情報を取得しておくこと (いずれも英語による情報提供であることに注意してください):

  • 興味のあるセキュリティ関連の問題について、セキュリティ用のメーリング リスト opensuse-security@opensuse.org で議論を行なうこと。

  • それぞれの作業に対して、最低限の権限で実施するルールに従うこと。特に 日々の作業を root では実施 しないこと。これにより、誤操作による カッコウの卵 (cuckoo eggs) やウイルスなどから身を守ることができます。

  • 可能な限り、リモートのマシンで作業を行なうにあたっては通信の暗号化を 行なうこと。 telnet, ftp, rsh, rlogin などのコマンドを 利用する作業は、 ssh (Secure SHell) を利用して 代替できます。

  • IP アドレスだけをベースにした認証を避けること。

  • 最も重要なネットワーク関連のパッケージ (bind, postfix, ssh など) について、 最新の状態を維持し、これらのプログラムに対する新バージョンのアナウンスを 受けるため、関連するメーリングリストを購読すること。これはローカル セキュリティに関連するソフトウエアでも同様です。

  • /etc/permissions ファイルを修正し、ファイルに設定 されるパーミッションをセキュリティ用に最適化することで、システムの セキュリティを高めること。 setuid ビットをプログラムから取り除く場合は、 それに依存していた作業ができなくなることに注意してください。それでも setuid ビットを取り除くことで、潜在的なセキュリティリスクを抑えることに つながります。同様に誰にでも書き込むことのできるディレクトリやファイル についても注意してください。

  • お使いのサーバが正しく動作するのに絶対に必要なものを除き、すべての ネットワークサービスを停止すること。これによりお使いのシステムをより安全 にすることができます。開かれているポート (ソケットが LISTEN (受付) 状態に なっているもの) を調べるには、 netstat というコマンドを 使用します。このコマンドにオプションを付けて、 netstat  -ap または netstat -anp として実行してください。 -p オプションは、ポートを占有 しているプロセス名を表示するためのオプションです。

    netstat の結果は、同じことをホストの外側から行なうこと のできるポートスキャンの結果と比較してください。ポートスキャンは nmap というソフトウエアを利用することで行なうことが できます。これはお使いのマシンで開いているポートを調査することができる だけでなく、そのポートの裏側にどのようなサービスが存在しているのかを 調べることもできます。しかしながら、ポートスキャンは攻撃的な行為でも あることから、そのマシンを管理している責任者に対して明示的な許可を受けた 場合以外は、使用してはなりません。最後に、 TCP ポートだけでなく UDP の ポートを調べることも重要であることに注意してください (それぞれ -sS-sU のオプションで調べること ができます) 。

  • お使いのシステムでファイルの一貫性を信頼できる方法で監視する場合は、 openSUSE に用意されている AIDE (Advanced Intrusion Detection Environment) というプログラムを利用すること。 AIDE で作成したデータベースを暗号化しておき、データベースの改ざん を防止しておけば安全を保つことができます。また、データベースはお使いの マシンとは別の場所で保管し、ネットワーク接続などのない外部メディアに 置いておくことをお勧めします。

  • サードパーティ製のソフトウエアをインストールする場合は、特に注意して 取り扱うこと。これは悪意を持った攻撃者が、セキュリティソフトウエアの tar アーカイブなどにトロイの木馬となるソフトウエアを混入させたりする場合も 考えられるためです。その事例では素早く検出することができましたが、 バイナリパッケージをインストールする場合は、ダウンロード元のサイトに ついて一切の疑念がないことを確認してください。

    SUSE が提供する RPM パッケージには、 gpg での署名が付けられています。 SUSE で署名に使用する鍵は下記のとおりです:

    ID:9C800ACA 2000-10-19 SUSE Package Signing Key <build@suse.de>
         Key fingerprint = 79C1 79B2 E1C8 20C1 890F 9994 A84E DAE8 9C80 0ACA

    rpm --checksig package.rpm コマンド を使用すると、インストールされていないパッケージに対してチェックサムと署名の 確認を行なうことができます。また、上記の鍵は CD の 1 枚目に含まれているほか、 世界中の鍵サーバにも登録されています。

  • 定期的にユーザとシステムのファイルのバックアップを確認すること。バックアップ が正しく書き戻して動作することを確認していない場合、そのバックアップは意味を 為さない場合があります。

  • ログファイルを確認すること。可能であれば小さなスクリプトを作成して、怪しい 項目を検索するようにすること。具体的にどのように作成して検索するのかは、 どの項目を怪しいと判断するのか、という経験に基づくものであるため、お使いの 環境次第ではあります。

  • tcp_wrapper を利用して、お使いのマシンで動作している それぞれのサービスに対し、アクセス制限を施すこと。これにより、どの IP アドレスからサービスに接続できるのかを制御することができます。 tcp_wrapper について、詳しくは tcpd と hosts_access のマニュアルページ (man 8 tcpd, man hosts_access) をお読みください。

  • SuSEfirewall を利用して、 tcpd (tcp_wrapper) が提供するセキュリティをさらに拡張すること。

  • セキュリティの要素に冗長性を持たせること。メッセージが何も表示されないよりは、 二度表示されたほうがまだ適切であるためです。

  • ディスクへのサスペンドを使用している場合は、 configure-suspend-encryption.sh スクリプトを利用して、 サスペンド時のイメージを暗号化するよう設定すること。このプログラムは暗号 鍵を作成してそれを /etc/suspend.key にコピーするほか、 サスペンド時のイメージを暗号化するよう /etc/suspend.conf を修正します。

1.3. セキュリティ問題の報告先

セキュリティ関連の問題が発見された場合は、まず更新パッケージが存在しない かどうかを確認してから、電子メールにて security@suse.de 宛に 英語で 連絡を取ってください。なお、このときには 問題の説明と、対象のパッケージのバージョン番号を明記してください。 SUSE ではできる限り素早く応答するようにしております。また、 pgp による暗号化を 施してメールを送信することをお勧めします。 SUSE の暗号鍵は下記のとおり です:

ID:3D25D3D9 1999-03-06 SUSE Security Team <security@suse.de>
Key fingerprint = 73 5F 2E 99 DF DB 94 C4 8F 5A A3 AE AF 22 F2 D5

この鍵は http://www.suse.com/support/security/contact.html からもダウンロード可能です。


openSUSE セキュリティガイド 13.1