本章では、コンピュータセキュリティにおける基本的な考え方を説明しています。また、現実的に発生しうる脅威のほか、脅威からコンピュータを保護するための緩和策なども説明しています。このほか、さらに詳しい情報を得るための他の章やガイド、 Web サイトに対する参照も示しています。
Linux の主な特長のうちの 1 つとして、 1 台のコンピュータ内で複数のユーザを同時に扱うことができ (マルチユーザ対応) 、かつ同時に複数の処理を行うことができる (マルチタスク対応) ことがあげられます。また、ユーザにとってはローカルに保存されているデータも、ネットワーク内に保存されているデータも、作業を行うにあたっては違いが無いという点もあります。
このようにマルチユーザ対応の仕組みであることから、それぞれのユーザが保存する情報は別々に管理されなければならず、かつセキュリティとプライバシーの両方を保証しなければならないことになります。それと同等に重要な項目として、ハードディスクなどのデータメディアを紛失してしまったりした場合や、損傷を受けてしまったような場合でも、できる限りデータを保護し、正当な利用者からは読み込め、それ以外の利用者からは読み込めないような仕組みも必要となります。
本章では、主に機密保持とプライバシーに主眼を置いて説明しています。ところが、このようなセキュリティの考え方は日を追うごとに進化するものであるばかりか、場合によっては現実的ではなくなってしまうこともあります。また、バックアップの存在も重要となります。バックアップを採取せずに進めてしまうと、データが改ざんされた場合やハードウエア障害などで壊れてしまった場合、その状態からのデータの復元は難しくなります。
セキュリティを維持するにあたっては、 多層防御 の考え方を取り入れておくことをお勧めします。それぞれの脅威に対する緩和策は、お使いのシステムやデータを完璧に保護するものではなく、多数の階層でそれぞれ保護を実施することで、攻撃をより困難にする、という考え方です。このような多層防御の考え方では、下記のような仕組みを使用します:
パスワードのハッシュ化 (例: PBKDF2, bcrypt, scrypt) とソルト化
データの暗号化 (AES など)
ログ記録、監視、侵入検知
ファイアウオール
アンチウイルススキャナ
緊急時の対応手順の策定と文書化
バックアップ
物理セキュリティ
監査、セキュリティスキャン、侵入テスト
openSUSE Leap では、上述のリストの要件に適合する様々なソフトウエアを提供しています。下記の章では、システムを保護するための出発点となる情報を提供しています。
Linux システムでは、ハッシュ化されたパスワードのみが保存されています。ハッシュ化とは一方向関数とも呼ばれ、元のデータに戻すのは非常に難しいデジタル指紋を生成する関数を意味します。
ハッシュ化されたパスワードは、一般ユーザでは読み込めない /etc/shadow
というファイル内に保存されます。これは、非常に高性能なコンピュータを使用すれば元のデータを探り当てることができてしまうため、一般ユーザにはアクセスできないようにしておく必要があるためです。
また、 National Institute of Standards and Technology ( NIST ) ではパスワードに対するガイドラインを発行しています。詳しくは https://pages.nist.gov/800-63-3/sp800-63b.html#sec5 (OpenID Foundation Japan による日本語訳: https://openid-foundation-japan.github.io/800-63-3/sp800-63b.ja.html) をお読みください。
パスワードポリシーの設定方法について、詳しくは 17.3項 「 をお読みください。 Linux における認証方法についての詳細は、 」パートI「認証」 をお読みください。
システム内に不正に侵入されて破壊されてしまったような場合、バックアップを利用して以前の状態に戻すことができます。それ以外にも、バグや障害などでシステムが壊れてしまった場合にも、以前の状態と比較する目的でバックアップを使用することができます。本番環境のシステムの場合は、災害対策の目的で複数のオフサイトバックアップを用意しておくのが重要です。これはたとえば、テープなどの記録媒体にストレージのコピーを採取しておいて保管しておいたりなどの方法が考えられます。
また、法律上の理由により、企業や組織ではバックアップに多数の情報を記録しておき、それを長期に保管しなければならない場合もあります。お使いの環境内に古い文書の保管ルールが存在する場合は、そのポリシー内に Linux バックアップに関する考慮を加える必要があるかもしれません。
このほか、サーバの物理的なセキュリティも重要な要素ですし、バックアップを採取する場合には、暗号化を行う必要もあります。これらはいずれも個別に配慮して実施すべき内容になります。バックアップメディアを輸送中などに紛失してしまった場合、何も暗号化を行っていないと、データに不正アクセスされる危険性があります。もちろんバックアップシステムそのものへの不正侵入対策も必要です。いずれの場合にしても、バックアップを暗号化しておくことは、ある程度の機密保護になります。もちろん緊急事態の際には、正当な管理者が暗号を解読できなければならないことに注意する必要はあります。また、暗号鍵そのものも盗まれる可能性がありますから、暗号鍵そのものの置き換えも考慮しておく必要があります。
システムに対して不正侵入が発生した場合や、それが疑われる場合は、何よりもバックアップの整合性が確保されているかどうかを確認しておくことが重要です。システムへの不正侵入が長期間にわたって判明しなかったような場合、バックアップそれ自身も不正に書き換えられている可能性があり、不正な設定ファイルやプログラムが混入している可能性があるためです。いずれの場合にしても、十分な期間のバックアップを保持しておくことで、不用意な変更が発生していないかどうかを確認することができるようになります。
既知のセキュリティ違反が見つからなかった場合であっても、バックアップ内の設定ファイルの差分を定期的に確認しておくことで、設定ミスを含め様々なセキュリティ問題を検出できることになります。このようなアプローチは、ファイルや環境が頻繁に変更されるようなものでない限り、最適な方法です。
コンピュータに対して物理的にアクセスができてしまうと、ファームウエアや起動処理に改ざんを加えることで、認可されたユーザがコンピュータを起動したタイミングで、不正アクセスができるようになってしまいます。もちろん全てのコンピュータを檻の中に閉じこめておくことはできませんが、コンピュータを保護する際に最初に考慮すべきことは、何よりもコンピュータをサーバルーム内などに施錠しておくことです。
また、古い環境を廃棄する際にも注意を払わなければなりませんし、ブートローダの安全性を高める手法やリムーバブルメディアの制限なども物理的なセキュリティ向上に役立ちます。物理的な機密保持について、詳しくは 第9章 「物理的なセキュリティ」 をお読みください。
このほか、下記のような点についても考慮する必要があります:
リムーバブルデバイスから起動できないようにシステムを設定すること。
UEFI パスワード, Secure Boot, GRUB2 パスワードをそれぞれ設定して、起動処理の安全性を高めること。
Linux システムはブートローダと呼ばれるシステムを利用して起動しますが、ブートローダには Linux カーネルに対してオプションを指定する機能が用意されています。そのため、ブートローダに対してもパスワードを設定して、起動時に不正なパラメータを指定されたりしないようにする必要があります。これはシステムのセキュリティを保護する際の重要な設定で、ブートローダはカーネルに対して影響を及ぼすことができることから、 root
の権限で動作するカーネルと同様に保護されなければならないためです。
ブートローダへのパスワード設定について、詳しくは 12.2.6項 「起動パスワードの設定」 をお読みください。
ハードディスクの暗号化を実施すること。詳しくは 第12章 「パーティションやファイルの暗号化」 をお読みください。
cryptctl
コマンドを利用して接続されているストレージの暗号化を行うこと。詳しくは 第13章 「cryptctl を利用したアプリケーション向けのストレージ暗号化」 をお読みください。
AIDE を利用して、システムの設定変更を検知できるようにすること。詳しくは 第20章 「AIDE を利用した侵入検知」 をお読みください。
Linux では 全てのものをファイルとして扱う アプローチのもと作られている仕組みであるため、ほとんどの資源に対してアクセスを制御することのできるファイルアクセス権の設定は、セキュリティでは重要な要素となります。ファイルへのアクセス権は通常のファイルやディレクトリに対する設定だけでなく、ハードウエアデバイスに対するアクセスも設定することができます。既定では、ほとんどのハードウエアデバイスへのアクセスは root
にのみ許可されていますが、シリアルポートなど一部のハードウエアに対しては、一般ユーザからアクセスできるものもあります。
一般的には、行うべき作業に対する最小限の権限のみを利用すべきです。たとえば電子メールの読み書きの作業程度であれば、 root
の権限は不要です。もしも電子メールプログラム内にバグが存在し、プログラムを実行しているのと同じ権限で不正なスクリプトを実行されてしまうようなものがあった場合、 root
で電子メールを読み書きしていると、 root
でプログラムが実行されてしまうことになるためです。一般ユーザで実行していれば、システムに対する被害は最小限に抑えられます。
詳しくは 19.1項 「従来型のファイルアクセス権」 と 19.2項 「ACL の利点」 をお読みください。
AppArmor と SELinux は、アプリケーションとユーザの両方に対して制限を課すことができる仕組みです。詳しくは パートIV「AppArmor による権限の制限」 および パートV「SELinux」 をお読みください。
インストールされているオペレーティングシステム以外から、ハードディスクに対してアクセスできる可能性がある場合、たとえばライブ CD/DVD などを使用するシステムや、ハードウエアの取り外しができるシステムの場合は、データの暗号化を行うとよいでしょう。 openSUSE Leap では、データが含まれているディスクに対しても、オペレーティングシステムが含まれているディスクに対しても、暗号化を行うことができます。詳しくは 第12章 「パーティションやファイルの暗号化」 をお読みください。
ネットワークサービスの機密保護は重要です。 OSI モデル で規定されている各レイヤに対して、できる限りの保護を実施しておくことをお勧めします。
全ての通信には認証を求め、最新の技術を利用してトランスポート層もしくはアプリケーション層で暗号化しておくことをお勧めします。また、必要に応じて Virtual Private Network (VPN; 仮想プライベートネットワーク) を構築して、物理ネットワークに対する追加保護を実施してもかまいません。
openSUSE Leap には、ネットワークを保護するための様々な仕組みが用意されています:
X509 形式の証明書を作成するには、 openssl
を使用します。X509 形式の証明書は数多くのサービスで使用され、暗号化と証明の両方の目的で使われます。必要であれば、独自の 証明機関 ( CA ) を設立して、ネットワーク内の証明インフラを構築することもできます。詳しくは man openssl
をお読みください。
少なくともネットワーク通信の一部はインターネット側に公開されます。そのため、ファイアウオールで意図しないポートを閉じたり、不要なサービスをアンインストールもしくは無効化したりするなどして、攻撃の足がかりとなりうる箇所を減らすことも行います。こちらについて詳しくは、 第23章 「マスカレードとファイアウオール」 をお読みください。
OpenVPN を使用することで、信頼のできない物理ネットワークを介して安全な通信手段を構築することもできます。詳しくは 第24章 「VPN サーバの設定」 をお読みください。
ネットワークサービスに対しては、強固な認証を設定してください。詳しくは パートI「認証」 をお読みください。
ソフトウエアの脆弱性は、認可されていないアクセス手段を取得したり、システムの動作を不安定にさせたりすることのできる、悪用可能なソフトウエアの問題を意味します。脆弱性は特に、 HTTP サーバなどのリモートサービスに影響があるような場合、特に重要となります。コンピュータシステムは複雑なものであるため、常に脆弱性が存在しうるものであると考える必要があります。
このような脆弱性が既知のものになると、ソフトウエアの開発者がソフトウエアを修正して、穴を塞がなければならなくなります。その結果公開される更新は、システム管理者が影響のあるシステムに対して、素早く安全に適用しなければなりません。
脆弱性はアメリカ政府が管理している National Vulnerability Database (NVD; 国家脆弱性情報データベース) や JPCERT/CC と情報処理推進機構 (IPA) が管理している Japan Vulnerability Notes (JVN) で情報公開されます。これらの団体が提供する情報を購読することで、新しく発見された脆弱性に関する詳細を知ることができます。ただし、場合によってはソフトウエアの更新が脆弱性情報の公開に間に合わないこともあります。また、脆弱性には Common Vulnerabilities and Exposures ( CVE ) 番号や Common Vulnerability Scoring System ( CVSS ) スコアが割り当てられます。 CVSS のスコアは脆弱性の緊急度を表す値です。
SUSE では、セキュリティ勧告のフィードを提供しています。詳しくは https://www.suse.com/ja-jp/support/update/ をご覧ください。また、 CVE 番号によるセキュリティ更新の一覧も提供しています。こちらについては https://www.suse.com/support/security/ をご覧ください。
一般的には、管理者は自分自身が管理するシステムに対して、脆弱性への備えを行っておくべきです。これには、システムに属する全てのコンピュータをできる限り強固にしておくことも含まれます。また、致命的な脆弱性が見つかった場合、即時に更新をインストールするために、必要な手順をあらかじめ策定しておくこともお勧めしています。
発生しうる攻撃からの被害を最小限に抑えるため、ファイルのアクセス権は厳格に設定しておくことをお勧めします。詳しくは 19.1項 「従来型のファイルアクセス権」 をお読みください。
その他の便利なリンク:
http://lists.opensuse.org/opensuse-security-announce/: openSUSE セキュリティ告知のメーリングリスト (英語)
https://nvd.nist.gov/: 国家脆弱性情報データベース (英語)
https://cve.mitre.org/: MITRE's CVE データベース (英語)
https://jvn.jp/: Japan Vulnerability Notes (日本国内向けの脆弱性情報)
https://www.first.org/cvss/: CVSS のスコアシステムについての情報
マルウエア とはコンピュータの正常な動作を妨げたり、データを盗み出したりすることを目的にしたソフトウエアのことを意味します。これにはウイルスのほか、ワームやランサムウエア、ルートキットなどが含まれます。マルウエアによっては、ソフトウエアの脆弱性を利用するものもあります。ただしこれらのマルウエアは、不明な提供元から公開されたソフトウエアをユーザが実行してしまうことによって組み込まれてしまうことがほとんどです。 openSUSE Leap ではダウンロードリポジトリを通じて、様々なプログラム (パッケージ) を公開しています。 SUSE が提供する全てのパッケージには電子署名が付与されていますので、 openSUSE Leap のパッケージマネージャでインストールを行う際、その署名を確認することによって、不正なソフトウエアが混入しないようにしています。
たとえば rpm
--checksig RPM_ファイル
のように実行すると、チェックサムとパッケージの署名をチェックすることができます。また、 openSUSE Leap のメディアには証明書 (署名鍵) が付属していますし、世界中の鍵サーバにも登録が行われています。
このほか、 ClamAV アンチウイルスソフトウエアを使用することで、お使いのシステム内にマルウエアが存在しているかどうかを調べることもできます。 ClamAV はメールサーバや HTTP プロキシなど、いくつかのサービスに組み込むこともできます。これにより、ユーザにマルウエアが届くよりも前に、マルウエアを防ぐことができます。
また、ユーザに与える権限をできる限り少なくすることによっても、不用意なコード実行のリスクを減らすことができます。
下記のヒントは、これまでの章で説明したことの概要となっています:
最新のセキュリティ問題に対して、常に情報を得ておきましょう。また、セキュリティ通知で推奨される更新パッケージについては、できる限り素早くインストールしておきましょう。
できる限り root
権限の使用は避けましょう。また、ファイルのアクセス権限もできるだけ厳格に設定しましょう。
ネットワーク上で通信を行う際は、必ず暗号化を行いましょう。
間違いなく必要となるネットワークサービス以外は、無効化しておきましょう。
定期的なセキュリティ監査を受けましょう。たとえば開いているネットワークポートの調査などを行いましょう。
AIDE
(Advanced Intrusion Detection Environment) を利用して、お使いのシステムの完全性を監視しましょう。
サーとパーティ製のソフトウエアをインストールする場合は、特に注意して作業を行いましょう。
全てのバックアップは定期的に採取しましょう。
logwatch などでログファイルは定常的に監視しましょう。
明示的に通さなければならないものを除いて、それ以外のポートはファイアウオールで閉じておきましょう。
セキュリティの仕組みは多階層で実施し、 1 つが突破されても別の仕組みで防げるようにしましょう。
できる限り暗号化を使用しましょう。たとえばモバイルコンピュータであれば、ハードディスクの暗号化を行いましょう。
何らかのセキュリティ問題を発見したら、まずはソフトウエア更新が提供されていないかどうかをご確認ください。その問題に対して何も更新が提供されていない場合は、 <security@suse.de> 宛に電子メールにてご連絡をお願いいたします。その際には、問題の詳細な説明と、対象となるパッケージのバージョン情報も添付してください。また、電子メールは GPG で暗号化しておくことをお勧めします。
SUSE 社の GPG 鍵の最新版は、 https://www.suse.com/support/security/contact/ で公開しています。