OpenSSHの脆弱性対処

2024年7月1日、OpenSSHに深刻な脆弱性が確認されたので、至急対処しましょう。

影響のバージョン
OpenSSH 8.5p1 から 9.7p1

OpenSSHをアップデート

私の環境では、Debian/Redhatサーバを運用しているので、それぞれ最新のOpenSSHに更新(対処されたOpenSSHであることを確認)することで対応することができます。

緩和策

すぐにアップデートを行えない場合は、sshd_config内のLoginGraceTimeを修正しすることで臨時的に対応が可能です。

ただし、サービス拒否(DoS)攻撃の影響を受ける恐れがある点に留意が必要です

ansibleで常に更新を行なうと一気に複数の機器に対応が可能なので、、一時的なssh_configの修正を入れて対応すると楽です。

今回のみのansible

# /etc/sshd_configを修正する

- name: Fix sshd_config
  hosts: all
  gather_facts: false
  become: true

  tasks:
    # `#LoginGraceTime`で始まる行を`LoginGraceTime 0`に変更する
    - name: Fix sshd_config
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: "^#?LoginGraceTime"
        line: "LoginGraceTime 0"

    # systemctl restart sshd.serviceを実行する
    - name: Restart sshd
      ansible.builtin.systemd:
        state: restarted
        daemon_reload: true
        name: ssh

roleで管理している場合は、tasksを分けても良いでしょう。

LoginGrateTimeについて、GPTの回答

sshd_configLoginGraceTime は、SSH サーバーが認証手続きを完了するまでにユーザーに与えられる時間の制限を指定する設定項目です。この時間が経過すると、認証が完了していないセッションは切断されます。

具体的な意味と用途は以下の通りです:

  1. 認証タイムアウトLoginGraceTime は、ユーザーがログインしようとしてから認証が完了するまでの猶予時間を秒単位で設定します。この時間内に認証が成功しないと、SSH サーバーは接続を切断します。
  2. セキュリティ強化:この設定を短くすることで、不正なログイン試行を制限し、ブルートフォース攻撃のリスクを減少させることができます。
  3. デフォルト値LoginGraceTime のデフォルト値は120秒です。これは、ユーザーが通常の認証プロセスを完了するのに十分な時間ですが、必要に応じて変更できます。
  4. 設定例
    LoginGraceTime 60

    これは、ユーザーに60秒の認証時間を与える設定です。

  5. 無効化:この時間を無制限にする設定は推奨されませんが、0 に設定すると無制限になります(ただし、これはセキュリティ上のリスクがあります)。

設定ファイルに LoginGraceTime を指定することで、SSH サーバーの認証プロセスに対する時間制限を管理し、サーバーのセキュリティを向上させることができます。

LoginGraceTime 0 では、すべての MaxStartups 接続が使用されるため、sshd がサービス拒否の危険にさらされますが、リモート コード実行のリスクは回避されるとの事です。