SSH は *真の* 事前共有キーをサポートしていますか?

SSH は *真の* 事前共有キーをサポートしていますか?

sshd一般に公開されているマシンでの実行は、攻撃の格好の標的となるため、可能な限り保護する必要があることは周知の事実です。「PermitRootLoginに設定するno」や「公開鍵認証に切り替える」などの明らかなアドバイスの他に、 を装備したスクリプト キディによるマシンへのアクセスを制限するために、次の方法を見つけましたnmap

  • ポートを 22 以外のものに変更します。前述のように、あまり役に立ちませんnmap
  • ポート22を開いたままにして、そこに来るものはすべてドロップし、代わりに別のポートからのSSH接続を受け入れるようにします。この松葉杖以前の方法よりはましですが、それでもまだ障害にしかなりません。
  • ポートノッキングを設定します。面倒でまだ「ノッキング」トラフィックは傍受される可能性があるため、完全に安全ではありません。

自分のマシンにリモートアクセスするためのシステムを設計するとしたら、次のようになります。

  1. ランダムな秘密を生成します。
  2. 接続されている両方のマシンに手動でコピーします (最大限の安全性を確保するため、フラッシュ ドライブを使用してコピーすることもできます)。
  3. 最初のパケット(つまりSSHハンドシェイクの開始)クライアントマシンがサーバーに送信するのはすでにこの秘密で暗号化されます。
  4. サーバーがこの秘密で正しく暗号化されていないパケットを受信した場合、TCP 接続は黙って閉じられます。

その結果、物理的に不可能攻撃者がSSHサービスがサーバー上で実行されていることを知ることさえ困難です。私の頭の中ではこれまさに「事前共有キー」の意味です。

代わりに、「事前共有キーを使用した ssh」を検索しようとすると、 から に移行する方法に関する記事へのリンクしか表示されませPasswordAuthenticationPubkeyAuthentication

答え1

いいえ、そうではありません。プロトコル レベルでは、すべての標準 SSHv2 接続は常に、1) プレーン ASCII のプロトコル バージョン「バナー」、2) サポートされているすべての暗号とキー交換方法をリストした暗号化されていないパケットで始まります。

ステップ3から始めるとできたPSK(理想的には加えて通常の動的 DH キー交換に似ていますが、これにはカスタマイズされた sshd デーモンとカスタム クライアントが必要です。現在、OpenSSH、PuTTY、Bitvise WinSSHD、または私がこれまでに試した他の SSHv2 実装には、このような機能は存在しません。

最も簡単な代替手段は、VPN システムを使用することです。VPN システムは、PSK を頻繁にサポートします (ただし、初期のキー交換を保護するための HMAC キーとしてサポートされるのが一般的です。実際のデータ チャネルを暗号化するための AES キーとしてサポートされるのは、「前方秘匿性」機能が失われるためです)。VPN サービスを実行したら、直接 SSH 接続を完全に無効にすることができます。文字通りリッスンしなくなった sshd を誰も発見できません。

例えば、人気のあるものの中で、WireGuardとOpenVPNは両方とも、事前共有MACキーを使用してすべての接続試行を認証することをサポートしています。どちらも初期ネゴシエーションにUDPを使用するため、応答しません。まったく検証不可能なパケットに対しては、サービスが検出不可能になります。(WireGuard は PSK モードがなくても既にこれを実行していると思いますが...) OpenVPN ではこの機能を「tls-auth」モードと呼んでいます。「static-key」モードと混同しないでください。

ここで IPsec AH を使用することもできます。完全に静的な認証キーだけが必要な場合は、コマンドだけで、動的な IKE ハンドシェイクをまったく必要とせずに、両端で SA を手動で構成できますip xfrm。ただし、面倒になることがあります。

さらに別の方法として、一部のオペレーティングシステムでは、TCPレベルTCP-MD5 (RFC1321) または TCP-AO (RFC5925) のいずれかを使用した事前共有キー認証。これは単一の sockopt のみを必要とするため、SSH ソフトウェアへのハッキングは簡単ですが、これもカスタム クライアントの領域に入ります。また、OS レベルのサポートは貧弱です。TCP-MD5 は BGP で使用したいという要望があるためまだサポートされていますが、TCP-AO のサポートは事実上存在しない可能性があります。

関連情報