SSH接続の仕組み

SSH接続の仕組みについてオンラインマニュアル等参照し、まとめました。

※目次をクリックすると目次の下部にコンテンツが表示されます。

SSH接続のイベントシーケンスの概要
①暗号化ハンドシェイク
クライアントは正しいサーバーと通信していることを確認できる。
 
②暗号化
クライアントとリモートホスト間の接続のトランスポート層は、対称暗号方式を使用して暗号化される。
 
③クライアントの認証
クライアントはサーバーに対して自己認証する。
 
④クライアントーサーバー間でチャンネルを使って通信
リモートクライアントは、暗号化された接続でリモートホストと対話する。

トランスポート層で基本情報を交換
①鍵交換、サーバーの承認
・鍵交換の間、サーバーは一意のホスト鍵を用いて、クライアントに対して自己識別を行う。
 クライアントがこの特定のサーバーと過去に通信したことがなければ、サーバーのホスト鍵はクライアントには未知であり、接続は成立しない。
 OpenSSHはこの問題に対処するためにサーバーのホスト鍵を承認する。
 それ以降の接続では、サーバーのホスト鍵はクライアント上に保存されているバージョンと照合され、クライアントが本当に目的のサーバーと通信していることを確信できる。
 今後このホスト鍵が一致しなくなった場合には、ユーザーは接続前にクライアントの保存してあるバージョンを削除する必要がある。
 
②公開鍵暗号化アルゴリズムが決定
 
③対称暗号化アルゴリズムが決定
 
④メッセージ認証アルゴリズムが決定
 
⑤ハッシュアルゴリズムが決定
・初回の鍵交換で、交換に使用されるハッシュ値と共有秘密値が作成された後、2つのシステムは新しい鍵とアルゴリズムの計算を直ちに開始して、認証と今後この接続で送信されるデータを保護する。
 
・所定の鍵とアルゴリズムを使用して一定量のデータが送信された後に、もう1回鍵交換が行われてハッシュ値と新しい共有秘密値の別のセットが生成される。
 攻撃者がハッシュ値と共有秘密値を判別できたとしても、その情報が役立つのは限られた時間だけ。

認証
・トランスポート層が2つのシステム間で情報を渡すためのセキュアなトンネルを構築すると、サーバーは秘密鍵でエンコードされた署名の使用やパスワードの入力などサポートされている認証方法をクライアントに伝える。
 次に、クライアントはサポートされている認証方法を使ってサーバーに対して自己認証を試みる
 SSHサーバーとクライアントは、異なるタイプの認証を採用できるように設定可能なため、双方の制御が最適化される。
 サーバーはそのセキュリティモデルに基づき、サポートする暗号化方法を決定することができ、クライアントは利用可能なオプションの中から試行する認証方法の順番を選択できる。

チャンネル
・認証に成功した後は、多重化と呼ばれる手法により複数のチャンネルが開かれる。
 これらの各チャンネルは、異なるターミナルセッションと転送されたX11セッションの通信を処理する。
 
・クライアントとサーバーとも、新しいチャンネルを作成できる。
 その後、各チャンネルに別々の番号が接続の両端に割り当てられる。
 クライアントが新しいチャンネルを開こうとする時には、クライアントは要求と共にチャンネル番号を送信する。
 この情報はサーバーにより保存され、そのチャンネルに通信を移動するために使用される。
 この目的は、異なるタイプのセッションが相互に影響しないように、あるセッションの終了時にそのチャンネルがSSHによる一次接続を停止せずに閉じることができるようにするため。
 
・チャンネルはフロー制御もサポートしているため規則的な方法でデータを送受信することができる。

関連記事の目次
 
ネットワーク、ポート番号
  • iptablesを使ってCentOSのファイアウォール設定
  • nmapでオープンしているポート番号とバージョンを確認
  •  
    yum、rpmパッケージ、サービス
  • CentOSで不要なサービスは起動しないようにする
  • RPMパッケージのインテグリティチェック
  •  
    パーミッション
  • cronで使用するファイルのパーミッション設定
  • CentOSのumaskの設定
  • ユーザーホームディレクトリ内の権限設定をセキュアにする
  • CentOSのパスワードファイルのパーミッション設定
  • findコマンドでファイル書込権限をいっせいにチェック
  • findコマンドでセットユーザ(グループ)IDが不要にセットされていないかチェック
  • findコマンドで所有者、グループが存在しないファイルを抽出
  •  
    ログイン、認証、パスワード、アカウント制御
  • ログイン時などに表示されるシステムバナーを変更するには?
  • CentOSのユーザーアカウントのパスワードポリシーを設定
  • pam_cracklibモジュールでパスワードポリシーを設定
  • pam_unix.soモジュールを使って過去のパスワード再使用を制限する
  • システムコンソールでのrootログインを制限する方法
  • suコマンドによるrootへのスイッチを制限する
  • root権限でのコマンド実行、sudoだと監査ログが取得できる
  • デーモン用アカウントなどに対しシェルを使用を無効にする
  • パスワード認証を失敗時にアカウントをロックアウトする設定
  • rootアカウントのPATH環境変数のセキュリティについて
  •  
    auditdでシステム監査
  • auditdを使ってシステム監査
  • auditdのログ容量の設定
  • auditd監査ルールの設定方法
  • auditdで時間設定変更操作を監査する
  • auditdでユーザー・グループ設定ファイル変更操作を監査する
  • auditdでネットワーク関連の設定変更を監査する
  • auditdでログイン記録のログファイルの変更を監査する
  • auditdでファイル所有者や権限の変更に関するイベントを監査する
  • auditdでsetuid、setgidプログラムの実行を監査する
  • auditdでマウント操作を監査する
  • auditdでファイル削除操作を監査する
  • auditdでsudo設定ファイルに対する操作を監査する
  • auditdでカーネルモジュールのロード、アンロードを監査する
  • マシン再起動後にauditdの設定変更を有効にする設定
  • ausearch、aureportで監査ログのサマリレポートを作成
  •  
    ツール
  • NTPのセキュリティを考慮した設定
  • セキュリティを考慮してX Windowsを設定または削除する方法
  • ファイルの改ざん対策用にTripwireを導入
  • CentOSにホスト型侵入検知ソフトAIDE(Advanced Intrusion Detection Environment)を導入
  •  
    トラブルシューティング
  • アイドルのシェルを自動で強制終了させるには?
  • CentOSでコアダンプを無効にする方法
  • Linuxのbash脆弱性CVE-2014-6271、Shellshockを修整
  • CentOSでバッファーオーバーフロー脆弱性に対する防御機能が有効になっているか確認する

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です