OpenSSH 9.8 リリース準備中 / Call for testing: OpenSSH 9.8

OpenSSH 9.8 がリリース準備中です.

Call for testing: openssh-9.8

重要と思える変更点は次です.

  • 署名アルゴリズム DSA のサポートがコンパイル時にデフォルトで無効になります
  • これまでの sshd バイナリが リスナーのバイナリ sshd とセッションごとのバイナリ sshd-session に分離されます
    • 一部のログメッセージに変更があります
  • (fail2ban のようなサードパーティのソフトウェアを利用せずに) sshd に認証までの段階で攻撃が疑われるクライアントアドレスからの接続をブロックする機能が追加されます
    • 認証失敗, 認証未完了, sshd のクラッシュ など
    • デフォルトで有効になります

アップグレードには慎重な対応が求められる場合があるでしょう

Call for testing: openssh-9.8 - https://lists.mindrot.org/pipermail/openssh-unix-dev/2024-June/041381.html

Future deprecation notice
=========================

将来非推奨となる機能の告知

OpenSSH plans to remove support for the DSA signature algorithm in
early 2025. This release disables DSA by default at compile time.

OpenSSH は 2025年前半に DSA 署名アルゴリズムに対するサポートを除く
ことを計画している.
このリリースでコンパイル時にデフォルトでは DSA を無効にする.

DSA, as specified in the SSHv2 protocol, is inherently weak - being
limited to a 160 bit private key and use of the SHA1 digest. Its
estimated security level is only 80 bits symmetric equivalent.

SSHv2 プロトコルで指定された DSA は 本質的に弱い - 秘密鍵が 160 bit
に制限されていて SHA1 ハッシュを用いている. 見積もられるセキュリティレベル
は共通鍵暗号の 80 bit しかない.

OpenSSH has disabled DSA keys by default since 2015 but has retained
run-time optional support for them. DSA was the only mandatory-to-
implement algorithm in the SSHv2 RFCs, mostly because alternative
algorithms were encumbered by patents when the SSHv2 protocol was
specified.

OpenSSH は 2015 年以降 DSA 鍵をデフォルトで無効にしているが, 
ランタイムでの(任意の)サポートは維持している. DSA は,
SSHv2 プロトコルが仕様化された際に代替のアルゴリズムが特許で阻まれていた
ため, SSHv2 RFC[3] 中で実装が必須の唯一のアルゴリズムだ.

This has not been the case for decades at this point and better
algorithms are well supported by all actively-maintained SSH
implementations. We do not consider the costs of maintaining DSA in
OpenSSH to be justified and hope that removing it from OpenSSH can
accelerate its wider deprecation in supporting cryptography
libraries.

現時点では何十年もこのような(特許による障害がある)場合は起こっておらず, 
すべての活発に維持されている SSH の実装でよりよいアルゴリズムが
十分にサポートされている. 我々は OpenSSH で DSA を維持するコストが
正当化されるとは考えておらず, OpenSSH から DSA を除くことが
(DSAを) サポートしている暗号ライブラリでのより広い DSA の非推奨への加速
を期待している.

This release, and its deactivation of DSA by default at compile-time,
marks the second step in our timeline to finally deprecate DSA. The
final step of removing DSA support entirely is planned for the first
OpenSSH release of 2025.

このリリースと コンパイル時のデフォルトでの DSA の非活性化により
最終的に DSA を無効にする我々のタイムラインでの 2 番目のステップを記録する.
DSA のサポートを完全に除去する最後のステップは
2025 年の 最初の OpenSSH のリリースで予定している.

Potentially-incompatible changes
--------------------------------

潜在的に非互換な変更

 * all: as mentioned above, the DSA signature algorithm is now
   disabled at compile time.

   all: 前述したように 今後 DSA 署名アルゴリズムはコンパイル時に
   無効となる

 * sshd(8): the server will now block client addresses that
   repeatedly fail authentication, repeatedly connect without ever
   completing authentication or that crash the server. See the
   discussion of PerSourcePenalties below for more information.
   Operators of servers that accept connections from many users, or
   servers that accept connections from addresses behind NAT or
   proxies may need to consider these settings.

   sshd(8): 今後サーバーは認証の失敗の繰り返したり, 認証を完了しない
   接続を繰り返したり, サーバーをクラッシュさせるクライアントのアドレスを
   ブロックする. 後述の PerSourcePenalties の議論にさらなる情報があるので
   参照. 多くのユーザーからの接続を受けつけたるサーバーや NAT やプロキシの背後
   のアドレスからの接続を受け付けるサーバーの運用者はこれらの設定を
   考察する必要があるかもしれない.

 * sshd(8): the server has been split into a listener binary, sshd(8),
   and a per-session binary "sshd-session". This allows for a much
   smaller listener binary, as it no longer needs to support the SSH
   protocol. As part of this work, support for disabling privilege
   separation (which previously required code changes to disable) and
   disabling re-execution of sshd(8) has been removed. Further
   separation of sshd-session into additional, minimal binaries is
   planned for the future.

   sshd(8): サーバーはリスナーのバイナリ sshd(8) と セッションごとのバイナリ
   "sshd-session" に分割される. これによりリスナーバイナリのサイズが
   とても小さくできる. SSH プロトコルをサポートする必要がなくなるからだ.
   この作業の一部として, 特権分離の無効化 (以前は無効にするのに
   コードの変更が必要だった) と sshd(8) の再実行の無効化のサポートが
   削除される. sshd-session をさらに最小(機能)単位のバイナリ群に分離していくことが
   将来計画されている.

 * sshd(8): several log messages have changed. In particular, some
   log messages will be tagged with as originating from a process
   named "sshd-session" rather than "sshd".

   sshd(8): いくつかのログメッセージが変更される. 特に いくつかのログ
   メッセージが "sshd" ではなく "sshd-session" という名前のプロセスから
   発生したものとしてタグ付けられる.

 * ssh-keyscan(1): this tool previously emitted comment lines
   containing the hostname and SSH protocol banner to standard error.
   This release now emits them to standard output, but adds a new
   "-q" flag to silence them altogether.

   ssh-keyscan(1): このツールは以前ホスト名ほ含むコメント行と
   SSH プロトコルバナーを標準エラーに出力していた. このリリースでは
   それらを標準出力に出力するようになり, 新しい "-q" フラグを追加して
   それらを完全に沈黙させられる.

 * sshd(8): (portable OpenSSH only) sshd will no longer use argv[0]
   as the PAM service name. A new "PAMServiceName" sshd_config(5)
   directive allows selecting the service name at runtime. This
   defaults to "sshd". bz2101

   sshd(8): (移植版 OpenSSH のみ) sshd は今後 PAM のサービス名として
   argv[0] を利用しない. 新しい "PAMServiceName" sshd_config(5)
   設定項目で, 実行時にサービス名を選択できるようになる. このデフォルトは
   "sshd" だ. bz2101

Changes since OpenSSH 9.7
=========================

OpenSSH 9.7 からの変更点

This release contains mostly bugfixes.

このリリースは主としてバグ修正を含んでいる.

New features
------------

新機能

 * sshd(8): add the ability to penalise client addresses that, for
   various reasons, do not successfully complete authentication.
   sshd(8) will now identify situations where the session did not
   authenticate as expected. These conditions include when the client
   repeatedly attempted authentication unsucessfully (possibly
   indicating an attack against one or more accounts, e.g. password
   guessing), or when client behaviour caused sshd to crash (possibly
   indicating attempts to exploit sshd).

   sshd(8): いろいろな理由で認証を成功で完了しないクライアントのアドレスを
   罰する機能を追加する. sshd(8) は期待通りに認証しないセッションの状況を
   特定するようになる. この状況には, クライアントは繰り返し不成功となる
   認証を繰り返し試行した場合 (パスワードの推測など, 1つ以上のアカウントに
   対しての攻撃を示唆している可能性がある) や sshd をクラッシュさせる
   クライアントの振舞い (sshd を悪用する試みを示唆している可能性がある) が
   含まれる.

   When such a condition is observed, sshd will record a penalty of
   some duration (e.g. 30 seconds) against the client's address. If
   this time is above a minimum configurable threshold, then all
   connections from the client address will be refused (along with any
   others in the same PerSourceNetBlockSize CIDR range).

   これらの状況が観測されると, sshd はクライアントアドレスに対して
   それなりの時間 (例えば 30 秒) の罰を記録する. この時間が
   設定できる閾値の最小値を越えている場合, クライアントアドレスからの
   すべての接続が拒否される (同じ PerSourceNetBlockSize CIDR の範囲の
   他の接続も同様).

   訳注: デフォルトでは範囲ではなくアドレス単体

   Repeated offenses by the same client address will accrue greater
   penalties, up to a configurable maximum. Address ranges may be
   exempted from penalties using the PerSourcePenaltyExemptList
   option.

   同じクライアントアドレスから違反が繰替えされると より大きな罰が, 
   設定可能な最大値まで, 発生する. PerSourcePenaltyExemptList 
   設定項目を利用して (特定の)アドレスの範囲を罰しないようにできる.

   訳注: 状況ごとに記録される罰, 拒否にいたる閾値, 拒否の最大値などは
   PerSourcePenalties 設定項目で設定できる.

   We hope these options will make it significantly more difficult for
   attackers to find accounts with weak/guessable passwords or exploit
   bugs in sshd(8) itself. This option is enabled by default.

   これらの設定により攻撃者が 弱い/推測可能なパスワードを持つアカウントの検索や
   sshd(8) 自体のバグの悪用をするのをかなり難しくできると期待している.
   このオプションはデフォルトで有効だ.

 * ssh(8): allow the HostkeyAlgorithms directive to disable the
   implicit fallback from certificate host key to plain host keys.

   ssh(8): HostkeyAlgorithms 設定項目で証明書ホスト鍵から
   プレーンなホスト鍵への暗黙のフォールバックを無効にできるようにする.

Bugfixes
--------

バグ修正

 * misc: fix a number of inaccuracies in the PROTOCOL.*
   documentation. GHPR430 GHPR487

   misc: PROTOCOL.* 文書中の多数の不正確な記述を修正する.
   GHPR430 GHPR487

 * all: switch to strtonum(3) for more robust integer parsing in most
   places.

   all: ほとんどの場所でより堅牢な整数パースをするのに strtonum(3)
   に移行する.

 * ssh(1), sshd(8): correctly restore sigprocmask around ppoll()

   ssh(1), sshd(8): ppoll() 回りで正しく sigprocmask を回復する

 * ssh-keysign(8): stricter validation of messaging socket fd GHPR492

   ssh-keysign(8): メッセージソケットファイルデスクリプタをより厳格に
   検証 GHPR492

 * sftp(1): flush stdout after writing "sftp>" prompt when not using
   editline. GHPR480

   sftp(1): editline を利用していない場合に "sftp>" プロンプトを
   出力した後で stdout を flush する. GHPR480

 * sftp-server(8): fix home-directory extension implementation, it
   previously always returned the current user's home directory
   contrary to the spec. GHPR477

   sftp-server(8): home-directory 拡張実装を修正する. 以前は仕様に反して
   常に現在のユーザーのホームディレクトリに帰っていた. GHPR477

 * ssh-keyscan(1): do not close stdin in any case to prevent error
   messages when stdin is read multiple times. E.g.
    echo localhost | ssh-keyscan -f - -f -

   ssh-keyscan(1): 標準入力が複数回読まれた場合のエラーメッセージを
   防ぐためどんな場合も標準入力を閉じないようにする.
   例えば: echo localhost | ssh-keyscan -f - -f -

 * regression tests: fix rekey test that was testing the same KEX
   algorithm repeatedly instead of testing all of them. bz3692

   regression tests: rekey のテストを修正. 以前は 同じ鍵交換アルゴリズム
   で繰り返しテストしていたが, すべてのアルゴリズムを利用するように.

 * ssh_config(5), sshd_config(5): clarify the KEXAlgorithms directive
   documentation, especially around what is supported vs available.
   bz3701.

   ssh_config(5), sshd_config(5): KEXAlgorithms 設定項目の文書を,
   特に何をサポートしている/利用可能かについて, 明瞭にする.
   bz3701.

Portability
-----------

移植性

 * sshd(8): expose SSH_AUTH_INFO_0 always to PAM auth modules
   unconditionally. The previous behaviour was to expose it only when
   particular authentication methods were in use.

   sshd(8): SSH_AUTH_INFO_0 をPAM 認証モジュールに無条件で露出する.
   以前の動作では特定の認証法が利用される場合のみ露出していた.

 * build: fix OpenSSL ED25519 support detection. An incorrect function
   signature in configure.ac previously prevented enabling the recently
   added support for ED25519 private keys in PEM PKCS8 format.

   build: OpenSSL の ED25519 サポート検出を修正する. 以前の
   configure.ac 中の不正な署名関数の呼び出しでは PEM PKCS8 形式の
   ED25519 秘密鍵に対する最近追加されたサポートを有効にできていなかった.

 * ssh(1), ssh-agent(8): allow the presence of the WAYLAND_DISPLAY
   environment variable to enable SSH_ASKPASS, similarly to the X11
   DISPLAY environment variable. GHPR479

   ssh(1), ssh-agent(8): WAYLAND_DISPLAY 環境変数が存在する場合,
   X11 の DISPLAY 環境変数と 同様に SSH_ASKPASS を有効にする. GHPR479

 * build: improve detection of the -fzero-call-used-regs compiler
   flag. bz3673.

   build: -fzero-call-used-regs コンパイラーフラグの検出を改善する.
   bz3673.

 * build: relax OpenSSL version check to accept all OpenSSL 3.x
   versions.

   build: すべての OpenSSL 3.x バージョンを受け入れるように OpenSSL
   のバージョンチェックを緩和する.

 * sshd(8): add support for notifying systemd on server listen and
   reload, using a standalone implementation that doesn't depend on
   libsystemd. bz2641

   sshd(8): libsystemd に依存しないスタンドアローンの実装を用いて
   サーバーの listen と reload 時での systemd への通知のサポートを追加する.
   bz2641