Linux の基礎知識

【Linuxの基礎知識】過去事例から学ぶ!システムセキュリティの基本

Linux基礎知識(全17記事)

├─【Linuxの基礎知識】Linuxとは?基本概要と仕組みをわかりやすく解説!
├─【Linuxの基礎知識】インストールからログインまでの完全マニュアル
├─【Linuxの基礎知識】カーネルの役割と起動プロセスをわかりやすく解説!
├─【Linuxの基礎知識】ファイルシステムを極める!ディレクトリ構造とその関連性を解説
├─【Linuxの基礎知識】ディレクトリとファイル操作を完全マスター!初心者向けガイド
├─【Linuxの基礎知識】初心者向け!Linux管理に役立つ基本コマンド完全ガイド
├─【Linuxの基礎知識】ユーザー管理を極める!アクセス権との連携で強固なシステム構築
├─【Linuxの基礎知識】リンクとiノードについて理解を深めよう!
├─【Linuxの基礎知識】LVMとは? LVMを理解しよう!
├─【Linuxの基礎知識】過去事例から学ぶ!システムセキュリティの基本
├─【Linuxの基礎知識】ディスク管理の完全ガイド!初心者から実践までを徹底解説
├─【Linuxの基礎知識】ネットワーク設定とトラブルシューティングを徹底解説!
├─【Linuxの基礎知識】リソース監視ツールの使い方を徹底解説!
├─【Linuxの基礎知識】パッケージ管理の応用テクニックをマスター!
├─仮想化とコンテナの基本を学ぶ!
├─バックアップとリストアのベストプラクティス
└─RAIDとディスク管理を徹底解説!

たった一つのセキュリティ対策を怠ったことで、企業の社会的信用が崩れ去る──。2017年のEquifaxのインシデントや2013年のYahoo!の情報流出事件など、私たちは過去の大規模なセキュリティ事故から多くを学ぶことができます。これらの事例は、セキュリティの基本を軽視することが、企業や個人に多大な損害をもたらすことを痛感させるものです。

「脆弱性スキャンを怠らなければ…」「多要素認証を導入していれば…」これらの対策が実施されていたなら、多くの被害が未然に防げた可能性が高いのです。本記事では、過去の重大インシデントを振り返り、システムセキュリティの基本について学びます。これらの対策を実践することで、未来のリスクを未然に防ぎ、より安全なシステム運用を実現しましょう。

過去事例に学ぶLinuxのシステムセキュリティ

Linuxシステムを安全に運用するためには、基本的なセキュリティ知識を理解することが重要です。このセクションでは、過去実際に発生した被害総額の大きかった事例から、Linuxのシステムセキュリティ活用について詳しく解説します。

過去に起きたセキュリティインシデント事例

下記の表は被害額の多かった順にセキュリティインシデント過去事例をリスト化しています。 

被害企業(年)事例被害推奨対策
Yahoo!
(2013年)
世界最大級のアカウント情報流出事件。
攻撃者がシステムに侵入し、30億件のアカウント情報を盗み出した。
30億件のアカウント情報が流出。多要素認証(MFA)の導入
Equifax
(2017年)
脆弱性を突かれたデータベースにより、クレジット情報を含む1.47億件の個人情報が流出。1.47億件の個人情報が流出。定期的な脆弱性スキャンとパッチ管理
Marriott
(2018年)
子会社のスターホテルズのシステム侵入により、長期間にわたって顧客情報が不正取得された。5億件の顧客情報が流出。ネットワークセグメンテーション
Adobe
(2013年)
不十分な暗号化方式が原因で、1億5千万件のユーザー情報が不正アクセスにより漏洩。1億5千万件のユーザー情報が流出。パスワードの適切な暗号化

多要素認証(MFA)の導入

多要素認証(MFA)は、システムやアプリケーションへのログイン時に、複数の認証要素を組み合わせてユーザーの本人確認を行うセキュリティ手法です。通常、以下の3種類の要素から2つ以上を利用します:「知識」(パスワードやPINなどユーザーが知っているもの)、「所持」(スマートフォンやトークンなどユーザーが持っているもの)、「生体情報」(指紋や顔認証などユーザーの特性に基づくもの)。MFAを導入することで、不正アクセスやなりすましのリスクを大幅に低減でき、特にリモートワークやクラウドサービスの利用が広がる現代において、重要性が増しています。

  • なぜ重要か?
    パスワードだけに依存する認証は、辞書攻撃やブルートフォース攻撃に非常に弱いです。
    多要素認証(MFA)は、追加の認証要素を組み合わせることで、攻撃者がアクセスするのを困難にします。
  • 防げたインシデント
    Yahoo!では、30億件のアカウント情報が流出しました。多要素認証を導入していれば、不正アクセスの大部分を防げた可能性があります。

多要素認証(MFA)の基本

多要素認証(MFA)は、複数の認証要素を組み合わせることで、システムやデータへの不正アクセスを防ぐセキュリティ手法です。MFAでは、以下の3つの要素のうち少なくとも2つを利用して認証を行います:

多要素認証(MFA)の3つの要素

知識要素(ユーザーが知っているもの):パスワードやPINコードなど。
所持要素(ユーザーが持っているもの):スマートフォン、セキュリティトークンなど。
生体認証要素(ユーザー自身):指紋、顔認証、声紋など。

MFAの仕組みは、単一の要素に依存する従来の認証方式(例:パスワードのみ)に比べて、セキュリティの強度が大幅に向上しています。仮に攻撃者が1つの認証要素を取得したとしても、他の要素を突破することが困難であるため、不正アクセスのリスクを大幅に軽減できます。

特に、クラウドサービスやリモートアクセスが普及する現代においては、MFAは欠かせないセキュリティ対策となっています。これにより、企業や個人は外部からの攻撃に対して強固な防御体制を築くことが可能です。

MFAは導入が比較的容易でありながら、高いセキュリティ効果を発揮するため、多くの企業や組織で標準的な認証手段として採用されています。

多要素認証(MFA)の目的

多要素認証(MFA)の目的は、システムやデータへの不正アクセスを防ぎ、セキュリティを強化することです。パスワードが漏洩しても、追加の認証要素(例: ワンタイムパスワード)を要求することで、攻撃者がシステムに侵入するリスクを効果的に軽減できます。

2013年のYahoo!インシデントでは、30億件以上のアカウント情報が流出しましたが、MFAが導入されていれば被害を防げた可能性が高いと考えられています。リモートアクセスやクラウドサービスが普及する現代において、MFAは欠かせないセキュリティ対策です。

多要素認証(MFA)の目的

  • システムやデータへの不正アクセスを防ぎ、セキュリティを大幅に強化する。
  • パスワード漏洩時でも、単一の認証情報に依存せず、攻撃者の侵入を阻止できる仕組みを提供する。
  • ユーザー認証時に複数の要素(例: パスワードとワンタイムパスワード)を要求し、不正利用のリスクを軽減する。
  • 2013年に発生したYahoo!の30億件以上のアカウント情報流出事件のような大規模なインシデントを防ぐ可能性が高い。
  • リモートアクセスやクラウドサービスにおける外部攻撃を効果的に防御し、セキュリティを向上させる。

多要素認証(MFA)のメリット

多要素認証(MFA)の最大のメリットは、システムやアカウントの安全性を飛躍的に向上させる点にあります。従来のパスワード認証のみの仕組みでは、パスワードが漏洩した場合に攻撃者が簡単に不正アクセスを行うリスクがありました。しかし、MFAを導入することで、単一のパスワード情報だけでは認証を完了できなくなり、不正アクセスを効果的に防ぐことが可能です。

また、MFAは特にリモートアクセスやクラウドサービスでその効果を発揮します。これらの環境では、外部からのアクセスが前提となるため、通常のパスワード認証だけではセキュリティリスクが高まります。しかし、MFAを活用することで、ワンタイムパスワード(OTP)や生体認証などの追加の認証ステップが加わり、セキュリティのレベルが大幅に向上します。

さらに、MFAを導入することは、コンプライアンス要件の遵守にも寄与します。多くの企業や組織では、セキュリティ基準としてMFAが必須とされています。これにより、ビジネスの信頼性が高まり、顧客や取引先からの信頼も獲得できます。

MFAは、単なるセキュリティ対策以上の価値を提供します。導入することで、日々進化するサイバー攻撃に対応しつつ、安全で信頼性の高い環境を構築することが可能です。

多要素認証のメリット

  • パスワードが漏洩しても、不正アクセスを防ぐことができます。
  • リモートアクセスやクラウドサービスでの安全性を大幅に向上します。

これにより、1つの要素が漏洩しても、不正アクセスを防ぐことができます。

銀行アプリでログインする際、パスワードに加えてスマホに届くコードを入力するのもMFAの一種です。

多要素認証(MFA)の具体的な設定手順

PAMは、Linuxシステムで認証プロセスを管理するためのフレームワークです。以下は、Google Authenticatorを使用した多要素認証(MFA)の導入手順です。

多要素認証(MFA)導入の手順

  1. Google Authenticatorをインストール
  2. Google Authenticatorを設定
  3. PAM設定ファイルを編集
  4. SSH設定ファイルを更新
  5. システム全体へMFAを適用
  6. 動作確認

また、多要素認証(MFA)の導入には、以下のソフトウェアと設定環境が必要です。

必要なソフトウェアと環境

  • Google Authenticator:
    ワンタイムパスワード(OTP)を生成するアプリケーション。
  • pam_google_authenticator:
    Google AuthenticatorをPAM(Pluggable Authentication Modules)環境で使用するためのモジュール。
  • Linux環境のPAM設定:
    MFAを有効化するために、PAM設定ファイルを編集します。

名前に「google」とありますが、このPAMモジュールはGoogle Authenticator専用ではありません。TOTPを実装するための汎用的なモジュールとして設計されています。Google Authenticatorが普及したことで、この名前が使用されていますが、他の認証アプリでも動作します。つまりMicroSoft Authenticatorでも共通ということです。

1. Google Authenticatorをインストール

Google AuthenticatorのPAMモジュールをインストールします。

sudo dnf install google-authenticator

2. Google Authenticatorを設定

各ユーザーに対して次のコマンドを実行(対象ユーザーへスイッチ)し、Google Authenticatorを設定します:

google-authenticator

  • QRコードの表示:
    実行後、QRコードが表示されます。スマホのGoogle Authenticatorアプリでスキャンしてください。
  • プロンプトへの回答:
    • 「Do you want authentication tokens to be time-based (y/n)」に対してyを入力。
    • システムからの推奨オプションに従って設定を進めます。

3. PAM設定ファイルを編集

PAMを使ってMFAを有効化するために、以下の手順で設定を行います。

  1. PAM設定ファイルを編集します:

    sudo vi /etc/pam.d/sshd

  2. ファイルの先頭に次の行を追加します:

    auth required pam_google_authenticator.so

4. SSH設定ファイルを更新

MFAを有効化するために、SSHの設定を更新します。

  1. SSH設定ファイルを編集します:

    sudo vi /etc/ssh/sshd_config

  2. 以下の行を確認または変更します:

    ChallengeResponseAuthentication yes

  3. 保存してSSHサービスを再起動します:

    sudo systemctl restart sshd

5.システム全体へMFAを適用

ローカルログインや他の認証プロセスにもMFAを適用するには、以下を設定します。

sudo vi /etc/pam.d/system-auth

以下の行をファイルの適切な位置に追加します:

auth required pam_google_authenticator.so

6.動作確認

  • ローカルログインおよびSSHログインを実際に試し、MFAが有効になっていることを確認します。
  • ログイン時にGoogle Authenticatorで生成されたワンタイムパスワードの入力を求められれば設定は成功です。

ベストプラクティス

  • バックアップとリカバリ: シークレットキーを安全な場所に保存し、デバイス紛失時に備えます。
  • アクセス制限と監視: 不正アクセスの兆候を監視するため、ログの確認や監視ツールを活用します。
  • QRコードと秘密鍵の保管:
    スマホを紛失した場合に備え、QRコードや秘密鍵を安全に保管してください。
  • SSH接続のテスト:
    設定後、別の端末からSSH接続をテストして正常に動作することを確認してください。

ネットワークセグメンテーション

ネットワークセグメンテーションは、ネットワークを複数のセグメントに分割し、それぞれに異なるアクセス制御を適用することで、セキュリティを強化する手法です。このアプローチにより、攻撃者がネットワーク内に侵入した場合でも、他のセグメントへの横移動(ラテラルムーブメント)を制限できます。また、機密情報や重要なシステムを分離することで、不正アクセスやデータ漏洩のリスクを低減できます。さらに、セグメントごとの監視や管理を行いやすくなり、異常検知や迅速な対応が可能になる点もセキュリティ向上に役立ちます。

  • なぜ重要か?
    ネットワークセグメンテーションは、システム全体を分離してアクセス制限を強化する方法です。
    これにより、攻撃者が侵入しても重要なリソースへのアクセスを防ぐことができます。
  • 防げたインシデント
    Marriottでは、予約システム全体にアクセスされ、5億件の顧客情報が流出しました。

ネットワークセグメンテーションの基本

ファイアウォールは、ネットワークトラフィックを監視し、不正な通信を遮断することで、システムを攻撃から守る重要なセキュリティツールです。ファイアウォールを適切に構成することで、外部からの不要なアクセスを防ぎ、内部ネットワークの安全性を確保することができます。

Linuxでは主にiptablesとfirewalldの2つのツールが利用されます。iptablesは手動で細かいルールを設定できる強力なツールであり、高度なカスタマイズが可能です。一方、firewalldはiptablesの上位に位置するツールで、ゾーンベースの管理を提供し、より簡単に設定や管理が行えるように設計されています。たとえば、firewalldでは、外部からのHTTPアクセスを許可しながら、SSHやその他のサービスへのアクセスを制限するといった設定をゾーンごとに簡単に管理できます。

このように、ファイアウォールを適切に構成することで、不正アクセスのリスクを大幅に低減し、ネットワークの安全性を向上させることが可能です。特に、必要なサービスだけを許可し、不要なポートを閉じることは基本的なセキュリティ対策として重要です。

不正な通信を遮断する2つのツール

  • iptables:
    Linuxの古典的なファイアウォールツールで、ネットワークトラフィックをルールベースで制御します。
    コマンドラインから直接ルールを設定し、柔軟なカスタマイズが可能です。
  • firewalld:
    iptablesの後継ツールで、ゾーンベースの管理を採用しています。
    初心者にも扱いやすく、リアルタイムでの設定変更が簡単に行えます。

iptablesとfirewalldの比較

項目iptablesfirewalld
動作の仕組みルールを直接記述して制御するゾーンベースでトラフィックを管理
設定の柔軟性ルールがシンプルで細かい制御が可能ゾーンにより設定が簡単で初心者向け
難易度設定が詳細であるためやや難しい設定が直感的で簡単
適用シナリオ高度なカスタマイズや詳細なポリシー制御に適している基本的なファイアウォール設定に最適

iptablesとfirewalldの具体的な設定例

iptablesでポート80を許可:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j DROP

firewalldでポート80を許可:

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

ネットワークセグメンテーションの目的

ネットワークセグメンテーションの目的は、ネットワークを複数のセグメントに分割することで、セキュリティを強化し、攻撃の影響を最小限に抑えることです。この手法により、攻撃者がネットワークの一部に侵入した場合でも、他のセグメントへの移動を防ぎ、被害を限定できます。

さらに、セグメントごとに異なるセキュリティポリシーを適用することで、機密データや重要な内部リソースへのアクセスを制限できます。これにより、不要な通信や不正なアクセスのリスクを効果的に管理し、ネットワーク全体の安全性を高めることが可能です。

ネットワークセグメンテーションの目的

  • 攻撃者がネットワークの一部に侵入しても、他のセグメントへの拡大を防ぐ。
  • ネットワーク全体を複数のセグメントに分割し、被害の範囲を限定する。
  • 機密データへのアクセスを制限し、内部リソースを保護する。
  • セグメントごとに異なるセキュリティポリシーを適用し、不正な通信を効果的に管理する。

ネットワークセグメンテーションのメリット

多要素認証(MFA)の最大のメリットは、システムやデータの安全性を大幅に向上させる点です。従来のパスワード認証のみのシステムでは、パスワードが漏洩した場合に攻撃者が簡単に不正アクセスを行うリスクがありました。しかし、MFAを導入することで、パスワード漏洩だけでは認証を突破できない仕組みを構築できます。これにより、不正アクセスを効果的に防ぐことが可能です。

また、MFAはリモートアクセスやクラウドサービス環境で特に効果を発揮します。これらの環境では外部からのアクセスが前提となるため、通常の認証方法だけではセキュリティリスクが高まりますが、MFAを活用することで、追加の認証要素(例: ワンタイムパスワードや生体認証)により、セキュリティを強化できます。

さらに、MFAを導入することで、コンプライアンスの遵守や業務の信頼性向上にも寄与します。多くの業界では、セキュリティ基準の一環としてMFAが推奨されており、その導入は顧客や取引先の信頼を高めることにも繋がります。

MFAは、導入が比較的簡単でありながら、現代の複雑化するセキュリティ課題に対して効果的な防御策となる、欠かせないセキュリティ手法です。

ネットワークセグメンテーションのメリット

  • パスワード漏洩のリスクを軽減
    パスワードが盗まれても、不正アクセスを防ぐ追加の認証要素があるため、システムの安全性が向上します。
  • リモートアクセスやクラウドサービスの安全性向上
    外部からのアクセスが多い環境でも、MFAを利用することで、セキュリティを強化できます。
  • コンプライアンスの遵守
    多くの業界基準で推奨されており、導入することで規制要件を満たしやすくなります。
  • 顧客や取引先の信頼向上
    セキュリティを強化することで、ビジネスの信頼性が高まります。
  • 現代のセキュリティ課題に対応
    導入が比較的簡単でありながら、高い防御力を提供する実用的な対策です。

ネットワークセグメンテーションの具体的な実装手順

ネットワークセグメンテーションを実装することで、ネットワーク全体のセキュリティを強化し、攻撃の影響を最小限に抑えることができます。

ネットワークセグメンテーションの具体的な実装には、以下の4種類の要素が必要になります。それぞれの要素を適切に導入することで、セキュリティを大幅に向上させ、攻撃のリスクを最小限に抑えることができます。

ネットセグメンテーション設定に必要な4要素

  1. ネットワークをセグメント化し、役割ごとに分割する
  2. ファイアウォールでセグメント間の通信を制限する
  3. 不要なポートとサービスを無効化する
  4. セグメント間通信を暗号化する

これらの手順を実行することで、ネットワークセグメンテーションを効果的に構築し、内部リソースを保護する強力なセキュリティ環境を作ることが可能です。

1.ネットワークをセグメント化し、役割ごとに分割する

ネットワークをセグメント化することで、異なる役割を持つシステムやデバイス間のトラフィックを分離し、不必要な通信を制限できます。これにより、ネットワーク内での攻撃の拡散を防ぎ、重要なリソースを保護することが可能です。

セグメント化を実現する一般的な手法として、VLAN(仮想LAN)の設定があります。VLANを使用することで、物理的なネットワーク構造を変更することなく、論理的にネットワークを分割できます。たとえば、以下のようにネットワークを分けることが考えられます:

ネットワーク分割のポイント

  1. 社内ネットワーク: 社員が日常業務で使用するデバイスを接続。
  2. ゲストネットワーク: 訪問者が使用するWi-Fiアクセス。
  3. DMZ(非武装地帯): 外部公開用のサーバーやサービスを配置。

セグメント化の実施により、各ネットワークが独立して管理されるため、1つのセグメントで発生した問題が他のセグメントに影響を与えることを防ぎます。また、セグメント間の通信を制御することで、セキュリティポリシーを柔軟に適用することができます。

VLAN設定は、スイッチやルーターの管理ツールを使用して行います。たとえば、CiscoやJuniperなどの機器では、各ポートを特定のVLANに割り当てる設定を行うことで、セグメント化が実現できます。これにより、ネットワーク全体を効率的に保護できる構造が構築されます。

2.ファイアウォールでセグメント間の通信を制限する

ネットワークセグメンテーションを実現する際、セグメント間の通信を制限することはセキュリティを高める上で重要です。ファイアウォールを使用して、各セグメント間のトラフィックを監視・制御することで、不正アクセスや不要な通信を防ぐことができます。

まず、ファイアウォールを利用して必要最低限の通信のみを許可します。たとえば、特定のプロトコルやポートに基づいてルールを設定し、それ以外の通信をブロックする構成が一般的です。以下は、Linux環境におけるfirewalldを使用した具体的な操作例です:

例: HTTP通信のみを許可

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload

例: 特定のIPアドレスのみ許可

sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.10' accept"
sudo firewall-cmd --reload

これにより、特定のセグメントからのみ通信を許可するルールを簡単に作成できます。

さらに、ファイアウォールで通信を制御する際は、次のベストプラクティスを考慮してください:

ベストプラクティス

  1. 最小特権の原則を適用:
    必要な通信のみ許可し、不要なポートやサービスを閉じる。
  2. ログを有効化:
    ファイアウォールのログ機能を有効にして、不審なトラフィックを記録・監視する。
  3. ゾーンごとの制御:
    内部ネットワーク、外部ネットワーク、DMZなど、ゾーンごとに異なるルールを適用。

ファイアウォールの設定を適切に行うことで、セグメント間の通信を安全に制御し、ネットワーク全体のセキュリティを向上させることが可能です。

3.不要なポートとサービスを無効化する

ネットワークセグメンテーションを効果的に実施するためには、不要なポートやサービスを無効化し、攻撃の窓口を最小限に抑えることが重要です。これにより、外部からの不正アクセスを防ぎ、内部ネットワークの安全性を確保できます。

まず、現在稼働しているサービスや開いているポートを確認します。Linuxでは、以下のコマンドを使用してポートの状態を確認できます: sudo ss -tuln

このコマンドは、TCPおよびUDPでリッスンしているポートのリストを表示します。

不要なサービスを無効化する場合は、systemctlコマンドを使用します。以下は具体的な操作例です:

サービスの停止

特定のサービスを一時的に停止するには、以下のコマンドを使用します:

sudo systemctl stop [サービス名]

サービスの無効化

特定のサービスを一時的に無効化するには、以下のコマンドを使用します:

sudo systemctl disable [サービス名]

例: SSHサービスの停止

SSHを不要な環境で無効化する例を以下に示します:

sudo systemctl stop sshd
sudo systemctl disable sshd

さらに、不要なポートを閉じる場合はファイアウォールを活用します。たとえば、以下のコマンドで特定のポートを閉じることが可能です:

sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload

このように、必要な通信だけを許可し、不要なポートやサービスを無効化することで、セキュリティリスクを大幅に軽減できます。定期的に稼働中のサービスやポートを確認し、継続的に最適化を行うことが推奨されます。

4.セグメント間通信を暗号化する

ネットワークセグメンテーションを実施する際、セグメント間通信の暗号化は重要な要素です。セグメント間の通信が暗号化されていない場合、攻撃者によってデータが盗聴されるリスクが高まります。TLS(Transport Layer Security)やSSL(Secure Sockets Layer)などの暗号化プロトコルを利用することで、通信内容を保護し、安全なネットワーク環境を構築できます。

自己署名証明書の生成:

OpenSSLを使用して自己署名証明書を生成します:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.key -out mycert.crt

mycert.keyは秘密鍵、mycert.crtは生成された証明書です。この証明書は内部ネットワークやテスト環境で使用することを推奨します。

暗号化の適用:

例えば、HTTPSを有効にする場合、Webサーバーの設定ファイルを編集します(以下はNginxの例です):

server {
listen 443 ssl;
ssl_certificate /path/to/mycert.crt;
ssl_certificate_key /path/to/mycert.key;
}

暗号化通信の重要性:

  • データの保護: 盗聴されても通信内容が解読できないため、機密性が保たれます。
  • 改ざん防止: 通信データの完全性を確保し、改ざんを防ぎます。
  • 信頼性の向上: 暗号化通信はセキュリティ基準を満たし、内部ネットワークの安全性を向上させます。

暗号化通信を適切に設定することで、セグメント間のセキュリティを強化し、ネットワーク全体を安全に保つことが可能です。

OpenSSLでの通信暗号化

OpenSSLコマンドで証明書を作成するだけでは、通信暗号化がすべて完了するわけではありません。通信暗号化を実現するには、証明書の取得方法やその後の設定を適切に行う必要があります。

1. 証明書の取得方法の選択

通信を暗号化するための証明書には、以下の2つの取得方法があります:

2種類の証明書

  1. 自己署名証明書(ローカルで作成)の場合
    1. 特徴
      自社内やローカル環境で使用する証明書。
    2. 利点
      コストがかからず、テスト環境や内部システムに適している。
    3. 欠点
      信頼された認証局(CA)から発行されたものではないため、ブラウザやクライアントで信頼されない。
  2. 商用認証局(CA)による証明書の場合
    1. 特徴
      ベリサイン(現在はDigiCertに統合)、Let's Encrypt、GlobalSignなどの認証局に依頼して発行される。
    2. 利点
      ブラウザやクライアントで「信頼済み」として扱われ、公開システムや顧客向けサービスに適している。
    3. 欠点
      コストがかかり、発行の手続きが必要。

2. 証明書作成後の設定

証明書を作成しただけでは通信の暗号化は完了しません。以下の設定が必要です:

  1. サーバーへの証明書インストール:
    作成した証明書(mycert.crt)と秘密鍵(mycert.key)をWebサーバー(例: ApacheやNginx)にインストールする必要があります。

    server { listen 443 ssl; ssl_certificate /path/to/mycert.crt; ssl_certificate_key /path/to/mycert.key; }

  2. プロトコルの有効化:
    HTTPSを有効にするために、サーバー設定でTLSプロトコルを使用します。
  3. 証明書チェーンの確認:
    商用CAから発行された証明書の場合、中間証明書を設定し、信頼チェーンを構築します。

3. 通信暗号化以外の考慮事項

  • 鍵の保護:
    秘密鍵(mycert.key)は厳重に保護する必要があります。侵害されると通信が傍受されるリスクがあります。
  • 証明書の更新:
    証明書には有効期限があるため、定期的に更新する必要があります。
  • セキュリティポリシーの遵守:
    SSL/TLSの設定で弱い暗号化アルゴリズムを無効化(例: SSL 2.0、3.0)。

パスワードの適切な暗号化

パスワードの適切な暗号化は、システムセキュリティの基本です。暗号化されていないパスワードは、漏洩した場合に攻撃者に簡単に悪用されるリスクがあります。安全性を確保するには、最新の暗号化アルゴリズム(例: bcrypt、Argon2)を使用し、パスワードをハッシュ化して保存することが重要です。これにより、万が一データが流出してもパスワードが解読されにくくなり、システム全体のセキュリティを強化できます。

  • なぜ重要か?
    パスワードが適切に暗号化されていない場合、攻撃者に簡単に解読される可能性があります。
    安全な暗号化アルゴリズムを使用することで、漏洩時にもデータの悪用を防止できます。
  • 防げたインシデント
    Adobeでは、1億5千万件のユーザー情報が流出し、暗号化されたパスワードも解読されました。
    強力な暗号化アルゴリズムを採用していれば、被害を軽減できた可能性があります。

パスワード暗号化の基本

パスワード暗号化は、セキュリティの根幹をなす重要な技術です。暗号化されたパスワードは一方向性のハッシュ関数を用いて変換され、データベース内に保存されます。この変換により、元のパスワードが直接保存されることなく、攻撃者がデータベースに侵入しても復元することが極めて困難になります。

Linux環境では、パスワード暗号化にはSHA-512がデフォルトで使用されます。このアルゴリズムは強力な暗号化を提供し、ブルートフォース攻撃やレインボーテーブル攻撃への耐性を持っています。さらに、bcryptやArgon2といった新しいハッシュアルゴリズムは、計算コストを調整可能であり、セキュリティ要件に応じた柔軟な暗号化が可能です。

暗号化されたパスワードは、/etc/shadowファイルに保存され、ここにはユーザーごとのパスワードハッシュが記録されています。ハッシュ値には、暗号化アルゴリズムを特定するためのプレフィックス(例: $6$はSHA-512を示す)と、ランダムに生成されたソルト値が含まれています。これにより、同じパスワードを使用していても異なるハッシュが生成されるため、セキュリティがさらに強化されます。

パスワード暗号化の基本は、「復元不可能であること」と「攻撃に対して耐性があること」です。これを理解し、適切なアルゴリズムを選択することで、システム全体の安全性を向上させることができます。

また、Linuxシステムでは、パスワードは/etc/shadowファイルにハッシュ化された形式で保存されます。このハッシュ化により、パスワードの元データが復元不可能な形で記録されます。

ハッシュ化の目的

  • 漏洩時の影響軽減
    データベースが侵害されても、ハッシュ化されたパスワードは解読が困難。
  • 復元不可能性
    一方向性のため、元のパスワードに戻すことが不可能。
  • 検証時の比較のみ
    入力されたパスワードをハッシュ化して比較する仕組み。

パスワード暗号化の目的

パスワード暗号化の目的は、システムやデータベースのセキュリティを向上させ、パスワード漏洩時のリスクを最小限に抑えることです。暗号化されたパスワードは、一方向性のハッシュ関数によって変換されるため、元のパスワードが直接保存されることはありません。この仕組みにより、仮にデータベースが攻撃者に侵害されても、パスワードを直接読み取ることができなくなります。

特に、Linuxシステムでは、暗号化されたパスワードは/etc/shadowファイルに保存され、SHA-512のような強力なハッシュアルゴリズムが使用されます。これにより、同じパスワードでも異なるハッシュ値が生成され、レインボーテーブル攻撃への耐性が高まります。

また、パスワード暗号化は、ユーザー認証の安全性を確保するだけでなく、規制やコンプライアンスへの準拠を支援します。多くの業界基準では、パスワードの平文保存を禁止しており、暗号化が必須とされています。

最終的に、パスワード暗号化はシステム全体のセキュリティを強化し、ユーザーの信頼を保つための基盤となる重要な対策です。

暗号化の目的

  •  システムやデータベースのセキュリティを向上させ、不正アクセスを防止する。
  • パスワード漏洩時のリスクを最小限に抑える。
  • パスワードをハッシュ化することで、元のパスワードが直接保存されることを防ぐ。
  • レインボーテーブル攻撃やブルートフォース攻撃への耐性を高める。
  • ユーザー認証の安全性を確保し、信頼性の高いシステムを提供する。
  • 規制やコンプライアンスに準拠し、セキュリティ基準を満たす。

パスワード暗号化のメリット

パスワード暗号化の最大のメリットは、システムのセキュリティを大幅に向上させる点です。暗号化されたパスワードは、一方向性のハッシュ関数を用いて変換されるため、データベースに保存されている情報が攻撃者に読み取られるリスクを軽減します。以下に、具体的なメリットを挙げます。

パスワード暗号化のメリット

  1. パスワード漏洩時のリスク軽減
    暗号化により、パスワードが平文で保存されないため、攻撃者がデータベースに侵入しても実際のパスワードを利用できなくなります。
  2. レインボーテーブル攻撃やブルートフォース攻撃への耐性
    ソルト(ランダムデータ)を追加したハッシュ化により、同じパスワードでも異なるハッシュ値が生成されるため、攻撃を大幅に困難にします。
  3. 規制やコンプライアンスの遵守
    多くの業界基準では、パスワードの暗号化を義務付けています。暗号化を実施することで、セキュリティ基準を満たし、コンプライアンスを確保することができます。
  4. ユーザー信頼の向上
    パスワードが安全に管理されていることをユーザーに示すことで、信頼性の高いシステムとしての評価を得ることができます。
  5. セキュリティ管理の効率化
    ハッシュ化されたパスワードは、一方向性のため復元が不可能です。このため、管理者が直接パスワードにアクセスできず、内部からのリスクも軽減されます。

 パスワード暗号化は、システム全体のセキュリティを高めるための基本的な手法でありながら、非常に効果的な対策です。強力な暗号化アルゴリズムを使用することで、現代の高度な攻撃手法にも耐えられるセキュリティ環境を構築することが可能です。

ブルートフォース攻撃とは、攻撃者が可能な限りすべての組み合わせを試してパスワードを特定しようとする攻撃手法です。たとえば、パスワードが「1234」であれば、攻撃者は「0000」から「9999」までのすべての組み合わせを試行します。この方法は単純ですが、パスワードの長さや複雑さによって成功までの時間が大幅に増加するため、強力なパスワードが有効な防御手段となります。

一方、レインボーテーブル攻撃は、あらかじめ計算されたパスワードとそのハッシュ値のリスト(レインボーテーブル)を使用して、ハッシュ化されたパスワードを特定する手法です。この攻撃は、ハッシュアルゴリズムの逆算ではなく、対応するデータを照合することで実行されます。そのため、ソルトを使用してハッシュ値を一意にすることで、この攻撃を防ぐことが可能です。

Linux環境での具体的なパスワード暗号化設定手順

Linux環境におけるパスワード暗号化は、強力なハッシュアルゴリズムを使用することで、セキュリティを向上させる基本的な手法です。

パスワード暗号化手順

  1. 現在の暗号化アルゴリズムの確認
  2. 強力な暗号化アルゴリズムの選択
  3. PAM(Pluggable Authentication Modules)の設定
  4. /etc/pam.d/system-authファイルへの設定方法(補足)
  5. パスワードの変更と確認

RHEL系のLinuxシステムでは、パスワードの暗号化を適切に設定することで、システム全体のセキュリティを向上させることができます。以下に、手順を順を追って説明します。

1.現在の暗号化アルゴリズムの確認

  1. 現在使用されている暗号化アルゴリズムを確認するには、/etc/login.defsファイルを編集します。以下のコマンドを実行してください:

    sudo vi /etc/login.defs

  2. ファイル内にある以下を行を確認します:

    ENCRYPT_METHOD SHA512

ここでSHA512が指定されていれば、デフォルトで強力なSHA-512アルゴリズムが使用されています。指定されていない場合は、編集して設定を反映してください。

2.強力な暗号化アルゴリズムの選択

 より安全な暗号化を実現するために、bcryptやArgon2を使用することが推奨されます。これらのアルゴリズムは計算コストを調整可能で、ブルートフォース攻撃に対する高い耐性を提供します。まず、必要なライブラリをインストールします。

 sudo dnf install libargon2

現代のパスワード攻撃に対応するためには、bcryptやArgon2のような強力なハッシュアルゴリズムの使用が推奨されます。これらは、セキュリティコミュニティから高く評価されているアルゴリズムです。

bcryptとArgon2のアルゴリズム

  • bcrypt:
    • ソルトの自動生成
      bcryptはランダムなソルトを自動的に付与し、同じパスワードでも異なるハッシュ値を生成します。
    • 計算コストの調整
      コストファクターを設定して、ハッシュ化の計算時間を調整可能です。これにより、ブルートフォース攻撃への耐性が向上します。
    • 安全なハッシュ構造
      bcryptはBlowfish暗号に基づいて設計され、高いセキュリティを提供します。
  • Argon2
    • 軟なリソース要件
      計算時間やメモリ使用量を調整でき、特に専用ハードウェア(ASIC)による攻撃に強い設計です。
    • バリアント
      Argon2i(メモリ重視)、Argon2d(GPU耐性)、Argon2id(両者の特性を併せ持つ)という選択肢があります。
    • セキュリティ認証
      2015年のPassword Hashing Competitionで優勝し、現代のハッシュアルゴリズムとして標準化されています。

 3.PAM(Pluggable Authentication Modules)の設定

PAMの設定ファイルを編集することで、パスワード暗号化アルゴリズムを変更できます。

  1. PAM設定ファイルを編集します:

    sudo vi /etc/pam.d/system-auth

    以下のようにbcryptまたはArgon2を指定します:

    password sufficient pam_unix.so sha512 shadow bcrypt

  2. bcryptまたはArgon2を利用する場合、必要なパッケージをインストールします:

    sudo dnf install libargon2

bcryptとArgon2が注目される理由

  1. 現代の攻撃への耐性
    ブルートフォース攻撃やレインボーテーブル攻撃への耐性が高い。
  2. 調整可能な計算コスト:
    bcryptやArgon2は計算リソースを多く消費するように設計でき、攻撃を現実的に困難にします。
  3. セキュリティの実績
    bcryptは長年にわたる使用実績があり、Argon2は最新のセキュリティ標準を満たします。

4./etc/pam.d/system-authファイルへの設定方法(補足)

password sufficient pam_unix.so sha512 shadow bcrypt の指定位置は、/etc/pam.d/system-auth ファイルの passwordセクション に配置する必要があります。以下に具体的な設定例を示します。

推奨される配置場所

既存のpam_unix.so行を編集するか、passwordセクションに新しい行を追加します。これにより、bcryptが有効化されます。
新しい行を追加: passwordセクションにpam_unix.soの行がない場合、新たに行を追加します。

具体的な例

# その他の設定...

# Password management
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow bcrypt
password required pam_deny.so

説明
  • requisite pam_pwquality.so:
    パスワードの品質をチェックするモジュールです。
  • sufficient pam_unix.so sha512 shadow bcrypt:
    bcryptを利用するよう指定します。この行でbcryptが有効化されます。
  • required pam_deny.so:
    すべての認証が失敗した場合にアクセスを拒否します。

必ず設定を編集する前に、現在のファイルをバックアップしてください: sudo cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak 設定変更後は、システムの動作を確認します。特に、既存のユーザー認証が影響を受ける可能性があるため、テスト環境での動作確認を推奨します。

 5.パスワードの変更と確認

 設定後、新しいパスワードを登録すると、変更が適用されます。以下のコマンドでパスワードを変更します:

 sudo passwd [ユーザー名]

 その後、/etc/shadowファイルを確認し、ハッシュ値が更新されていることを確認します。

ベストプラクティスの適用

  • 各パスワードには必ずランダムなソルトを追加する。
  • 古いアルゴリズム(例: MD5やDES)は使用せず、強力なアルゴリズムを選択する。
  • 定期的にハッシュアルゴリズムの設定を確認し、必要に応じて更新する。

定期的な脆弱性スキャンとパッチ管理

定期的な脆弱性スキャンとパッチ管理は、システムやネットワークのセキュリティを維持するための重要なプロセスです。脆弱性スキャンは、システム内に存在する既知のセキュリティホールや設定ミスを検出するためのツールや手法を用いた調査で、不正アクセスや攻撃の可能性を事前に特定します。一方、パッチ管理は、検出された脆弱性を修正するためのソフトウェアアップデート(パッチ)の適用を計画的かつ迅速に行うプロセスです。この2つを組み合わせることで、システムの安全性を向上させ、サイバー攻撃のリスクを最小限に抑えることが可能になります。

  • なぜ重要か?
    脆弱性が放置されると攻撃者に悪用されるリスクが高まります。
    スキャンとパッチ管理を定期的に行い、システムを最新の状態に保つことがセキュリティの基本です。

  • 防げたインシデント
    Equifaxでは、未パッチのApache Struts脆弱性を悪用されて1.47億件の個人情報が流出しました。

定期的な脆弱性スキャンとパッチ管理の基本

定期的な脆弱性スキャンとパッチ管理は、システムやネットワークを安全に保つための基本的なセキュリティ対策です。脆弱性スキャンは、システム内のセキュリティホールや設定の不備を特定するプロセスであり、攻撃者が利用する可能性のある弱点を明らかにします。一方で、パッチ管理は、これらの脆弱性を修正し、システムを最新の状態に保つためのプロセスです。

RHEL系のLinuxでは、脆弱性スキャンツールとしてOpenSCAPやNessusがよく利用されます。これらのツールは、システムの構成をスキャンし、既知の脆弱性やコンプライアンスの違反を報告します。また、パッチ管理には、dnfコマンドを使用して、パッケージの更新を行う方法が一般的です。

脆弱性スキャンとパッチ管理を組み合わせることで、セキュリティリスクを事前に把握し、迅速に対応する仕組みを構築できます。これにより、攻撃の成功率を大幅に低減させることが可能です。

定期的な脆弱性スキャンとパッチ管理の目的

定期的な脆弱性スキャンとパッチ管理の目的は、システムの安全性を保ち、セキュリティリスクを最小限に抑えることです。脆弱性スキャンは、システム内のセキュリティホールを特定し、攻撃者が悪用する可能性を防ぎます。一方、パッチ管理は、既知の脆弱性を修正して、未修正のリスクを減少させます。

また、これらのプロセスは、セキュリティ基準や規制要件を満たし、システムの信頼性を向上させるためにも重要です。定期的な実施により、攻撃のリスクを軽減し、システムの安定性を確保できます。

ポイント

  • システムの安全性を保ち、セキュリティリスクを最小限に抑える。
  • セキュリティホールを特定し、攻撃者による悪用を未然に防ぐ。
  • 既知の脆弱性を修正し、未修正のリスクを減少させる。
  • セキュリティ基準や規制要件を満たすための対策を実施する。
  • 攻撃のリスクを軽減し、システムの信頼性と安定性を向上させる。

定期的な脆弱性スキャンとパッチ管理のメリット

定期的な脆弱性スキャンとパッチ管理を実施することには、多くのメリットがあります。これらのプロセスは、システムの安全性を維持するための基本的なセキュリティ対策であり、潜在的なリスクを未然に防ぐ手段です。

定期的な脆弱性スキャンとパッチ管理のメリット

  1. セキュリティリスクの軽減
    定期的に脆弱性をスキャンし、システムに適用可能なパッチを適時に導入することで、攻撃者が悪用するリスクを低減できます。新たに発見された脆弱性に迅速に対応することで、サイバー攻撃からシステムを保護できます。
  2. システムの安定性向上
    パッチ管理は、脆弱性の修正だけでなく、バグ修正やパフォーマンス改善も含まれます。これにより、システムがより安定して動作し、予期しないエラーを回避できます。
  3. コンプライアンスの遵守
    多くの業界規制やセキュリティ基準では、脆弱性管理とパッチ管理の実施が義務付けられています。これを定期的に行うことで、監査や規制要件を満たし、罰則を回避することができます。
  4. 攻撃への迅速な対応
    定期的なスキャンは、未知の脆弱性や構成エラーを早期に発見する手段となります。これにより、攻撃の兆候を迅速に検知し、適切な対応を取ることが可能になります。
  5. 顧客や取引先からの信頼の向上
    セキュリティが強化され、トラブルが少ないシステムを維持することで、顧客や取引先に対して信頼性の高いサービスを提供できます。

定期的な脆弱性スキャンとパッチ管理を実施することで、セキュリティリスクを最小限に抑え、システムの安定性と信頼性を向上させることができます。

定期的な脆弱性スキャンとパッチ管理設定手順

RHEL系Linuxシステムでは、定期的な脆弱性スキャンとパッチ管理を適切に設定することで、セキュリティリスクを効果的に軽減できます。以下に手順を示します。

定期的な脆弱性スキャンとパッチ管理設定手順

  • システムの脆弱性スキャンの実施
  • 利用可能なアップデートの確認
  • セキュリティパッチの適用
  • アップデートの自動化
  • レポートの確認

1. システムの脆弱性スキャンの実施

脆弱性スキャンには、oscap(OpenSCAP)やLynisなどのツールを使用します。以下はoscapを使用したスキャン手順です:

sudo dnf install scap-security-guide
sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_standard /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml

このコマンドにより、システムのセキュリティ評価が実施され、脆弱性や推奨される設定変更がレポートされます。

2. 利用可能なアップデートの確認

次に、システムに適用可能なパッケージのアップデートを確認します。以下のコマンドを実行してください:

sudo dnf check-update

このコマンドは、利用可能なアップデートを一覧表示します。

3. セキュリティパッチの適用

特定のセキュリティアップデートのみを適用するには、以下のコマンドを使用します:

sudo dnf updateinfo security sudo dnf update --security

これにより、重要なセキュリティパッチがシステムに適用されます。

4. アップデートの自動化

アップデートを自動化するには、dnf-automaticパッケージをインストールし、設定を行います:

sudo dnf install dnf-automatic sudo vi /etc/dnf/automatic.conf

設定ファイルで自動更新を有効にした後、以下のコマンドでサービスを有効化します:

sudo systemctl enable --now dnf-automatic.timer

5. レポートの確認

アップデート状況や脆弱性スキャンの結果を定期的に確認することも重要です。以下のコマンドを使用して、更新履歴を確認します:

sudo dnf history

これらの手順を実施することで、RHEL系システムの脆弱性スキャンとパッチ管理を効率的に設定し、セキュリティを強化することが可能です。

 oscap(OpenSCAP)のポリシーについて(補足)

RHEL系Linuxシステムでは、セキュリティ評価のために必要なポリシーはベンダー(例: Red Hat)が公式に提供してくれます。このポリシーは、scap-security-guideパッケージに含まれており、初期設定やセキュリティ基準の適用に必要なコンテンツが揃っています。

さらに、ポリシーのアップデートもベンダーが管理しており、新たに発見された脆弱性や業界基準の改訂に応じて定期的に更新されます。このアップデートは、システム全体のパッケージ更新と同じように行われ、以下のコマンドで簡単に適用できます:

sudo dnf update scap-security-guide

ユーザー側で独自にポリシーを作成する場合を除き、ベンダー提供のポリシーを利用することで、最新のセキュリティ基準に簡単に準拠できます。また、これによりポリシー管理の負担が軽減され、システム管理者は安心して運用に集中できる環境を構築することが可能です。


この記事を読んだら、次は 「【Linuxの基礎知識】ディスク管理の完全ガイド!初心者から実践までを徹底解説」 を読むのがおすすめです!

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?)├─【IT入門】ITとは?仕組みや活用方法をわかりやすく解説├─【IT入門】インターネットとは?仕組み・使い方を ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか?無料で使えるだけでなく、高い柔軟性 ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

Shellスクリプト基礎知識(全13記事+2) ├─【Shellの基礎知識】Shellスクリプト入門|初心者が押さえる基本├─【Shellの基礎知識】変数と特殊変数の使い方|初心者向け解説├─【She ...

-Linux の基礎知識