同じSSHサーバーキーを持つ複数のデバイスを使用するのはどれほど悪いですか?


21

FreeBSDとSSHを実行する組み込みデバイスで作業しています。

ご存じのとおり、sshdは最初の起動時にサーバーキーのセットをランダムに生成することを好みます。問題は、読み取り専用のsdカードファイルシステム(交渉不可)で製品を出荷することです。

私が見るように私の2つのオプションは次のとおりです。

  • すべてのデバイスで同じsshdサーバーキーを出荷する
  • メモリファイルシステムをマウントし、各起動時にサーバーキーを生成します(遅い...)

すべてのデバイスに同じサーバーキーを出荷することは重大なセキュリティ上の問題ですか?これらのアイテムはインターネット上に直接ありません。同じ人が同じネットワーク上に所有する複数のデバイスが存在する場合があります。

ほとんどの場合、デバイスはインターネットに接続されません。

SSHを使用したログインは、通常の操作の一部ではありません。それは主にプログラマーと技術者の便宜のためです。お客様は、SSHを使用してデバイスにログインすることはありません。

複数のハードウェアデバイスで同じサーバーキーを使用することの影響は何ですか?

PS誰かがモノのインターネットタグを作成してください。

編集:私はすべてのサーバー(デバイス)に同じホスト秘密鍵をインストールすることについて話している。ユーザーの公開鍵/秘密鍵に関しては、現在、鍵ベースのログインを使用する予定はありません-パスワードログインになります。繰り返しますが、すべてのサーバー(デバイス)で同じパスワードを使用します。

これはおそらく悪い考えであることを知っています。トレードオフを理解できるように、なぜそれが悪いアイデアなのかを正確に知りたいのですが。


ホストキーを意味する場合、複数のデバイスを持つユーザーは、sshクライアントの構成によっては警告を受け取る場合があります。大きな懸念は、実際のssh認証キーに関するものです。秘密鍵をインストールせず、公開鍵が特定のソースネットワークに制限され、技術者が所有する秘密鍵に強力なパスフレーズがあり、それらの鍵が誤ってレポにチェックインされないことを願っています。IoTは、これらのことから本当に悪い名前になっています。あなたがそう言うのではなく、ただそれを言うのは大きな問題です。
アーロン

私が言っているのは、同じホスト秘密鍵をすべてのサーバーにインストールすることです。
NXT

2
すべてのデバイスで同じユーザー名/パスワードを使用することは非常に悪い考えです。これらは、公開鍵認証に使用される秘密鍵よりもブルートフォースが簡単です。これらのdevicedがインターネットに直接接続されることになっていない場合でも、誰かがとにかくそれを行います。NAT手段を「直接接続されていない」場合と、彼らは、接続されている十分に...ある
TERO Kilkanen

7
SSHキーを共有するということは、1つのデバイスの秘密キーにアクセスできる人が、これらすべてのデバイスになりすますことができることを意味します。
user253751 16

3
これは興味深い質問ですが、システム管理に関連するものは何も見当たらないため、Server Faultのトピックから外れています。あなたは、システム管理者に関連するインターフェースではなく、出荷している組み込みデバイス用のデバッグ/診断インターフェースの設計について尋ねています。この質問は、情報セキュリティに移行できます。
200_success 16

回答:


27

sshホストキーなどのホスト固有のデータをSDカードまたはその他の読み取り専用メディアに保存するのではなく、これをNVRAMに保存することができます。これは、組み込みシステムでの目的です。起動時にキーを保存および取得するには、カスタムスクリプトを実行する必要がありますが、スクリプトはすべてのデバイスでまったく同じになります。


12

すべてのデバイスで同じキーペアを出荷することの影響は、それらに接続しているクライアントのセキュリティに直接関連しています。これは、(SSHクライアントから)接続先のデバイスを一意に識別する方法がないことを意味します。キーペアが漏洩した場合、MITM攻撃に使用される可能性があります。

一方、各ブートでキーを再生成すると、クライアントでアラートがトリガーされます。

参照用man ssh(1)

sshこれまでに使用されたすべてのホストのIDを含むデータベースを自動的に維持およびチェックします。ホストキーは~/.ssh/known_hostsユーザーのホームディレクトリに保存されます。さらに、ファイル/etc/ssh/ssh_known_hostsは既知のホストについて自動的にチェックされます。新しいホストはユーザーのファイルに自動的に追加されます。ホストのIDが変更された場合、これsshについて警告し、パスワード認証を無効にして、サーバーのなりすましや中間者攻撃を防ぎます。そうでなければ、暗号化を回避するために使用できます。このStrictHostKeyCheckingオプションを使用して、ホストキーが不明または変更されたマシンへのログインを制御できます。


2
一度だけ(各デバイスで、最初の起動時に)生成できず、二度と生成されない(それらが削除されない限り)ことができない理由がわかりません。
djsmiley2k-CoW

完全に実行可能。しかし、OPは「メモリファイルシステムをマウントし、各ブートでサーバーキーを生成する」ことを望んでいると述べています。だから私の答えはそれを前提としています。
dawud

ああ、最初に読んだときに懐かしかった。
djsmiley2k-CoW

5

最初のオプションでは、SSHキーがSDカードで利用できるようです。したがって、どのユーザーでもカードを取り、それらを読み取ることができます。したがって、基本的にあなたの秘密鍵は(ほとんど)公開されています。

これにより、次のような中間者攻撃が可能になります。

  1. ユーザーは、デバイスから取得した秘密キーを使用してSSHサーバーをセットアップし、そのIPアドレスを技術者に渡します。
  2. 技術者がSSH接続を介してルートパスワードを入力します。
  3. これで、ユーザーはすべてのデバイスで有効なルートパスワードを知っています。

ただし、そもそもrootパスワードを使用しないでください。代わりに認証にsshキーを使用してください。LANからのみログオンする場合、共有サーバーキーの影響はごくわずかです

SSHは前方秘匿性も提供するため、攻撃者はキーを利用するために偽のサーバーをセットアップできる必要があります。トラフィックを受動的にスニッフィングしても、復号化は許可されません。


私たちの先入観が私たちを盲目にすることができるのは面白いです(私)。SDカードは、ユニットの内側、パネルの後ろ、回路基板の下にあるため、誰かがそれを引き出すことはありませんでした。しかし、あなたは正しい、それはドライバーで誰でも絶対にアクセス可能です。システムの物理的なセキュリティを検討することを思い出させてくれてありがとう。
NXT

WRT#2、SSH接続を介してルートパスワードを送信しないでください。端末クライアントに入力し、秘密を送信せずに秘密を所有していることを証明する認証プロトコルのローカル半分に使用する必要があります(「知識証明」)。数十年前のシステムでさえ、パスワード自体ではなくパスワードのハッシュを送信することを知っていました。チャレンジ/レスポンスプロトコルにナンスを含めると、攻撃者は元のパスワードも、その場所で使用できるトークンも知りません。
ベンフォークト

1
@BenVoigtほとんどのUNIXシステムはパスワードをサーバーに送信すると思います。シャドウファイルにはハッシュのみが保存されますが、クライアントによって生成されたハッシュを信頼したくありません。そのため、サーバーはbcryptなどを実行するために実際のパスワードを知っている必要があります。
日本時間16

2

私はこれを恐怖で読んだ!同じsshホストキーを使用して同じクラスター内で複数のマシンを実行したことがある私は、決してこれを行うことはありません。どのような状況でも、異なる管理者セットを持つマシンがsshホストキーを共有することを許可しないでください。その方法は、セキュリティ不足のために投稿されたときの狂気と悲鳴の恐怖にあります。

実を言うと、1台のデバイスを侵害した人がすべてのデバイスを侵害しています。一度入手すると、悪意のある人が自由に別の人にジャンプし、セキュリティが薄い紙のようにロールバックすることを期待してください。


1
攻撃者が盗まれたサーバーの秘密鍵を使用して他のデバイスを侵害する方法について詳しく説明していただけますか?
jpa

@jpa:ホストキーの場合、パスワードの傍受や盗用など。また、このセットアップでは、ユーザーキーで同じことを行うことを提案しているようです。
joshudson

1

SSHアクセスはエンドユーザー/顧客によって使用されないことに言及しているため、SSHアクセスをデフォルトでオフにし、デバイスが「デバッグ」モードになったときに一時的にのみ有効にすることができます。

その後、デバイスをハッキングしようとする誰かがリモートでトリガーできないように「デバッグ」モードを保護していると仮定して、すべてのデバイスを同じキーで出荷できます。

または、デバイスが「デバッグ」モードになったときに新しいキーが生成されるため、デバイスの電源を入れるたびにキーを生成するブート時間を無駄にする必要がありません。


私はこのアイデアが好きです。
NXT

1

制約に基づいた攻撃シナリオの例を次に示します。

デバイスがあれば、たとえばRaspberry Piのように言います。立ち上がってSDカードを1つからヤンクすると、SDカードを自分のコンピューターに貼り付けてsshdキーを見つけ、それを好きな場所にコピーできます。たぶん、私は自分のラズベリーパイとUSBイーサネットカードをつかみます。これで、ターゲットデバイスとそれらが行く先の間にそれを貼り付けて、ssh接続を監視できます。ターゲットデバイスがssh接続を確立しようとしていることがわかったら、次のようにします。

(target) <---> (my evil sshd <--> decrypted traffic <--> ssh) <---> (real server)
                                       |
                                       V
                                    log file

あ、あれは何?パスワードは「猫が好き」ですか?ボーイ、これはあなたがあなたの妻に送った面白いメールです。彼女があなたがあなたの隣の隣人の妻に送ったこの電子メールを読むなら、それはさらに面白いだろうと思う。

可能性は無限です。sshdキーは実サーバーで見つかったものと同一であるため、ターゲットは決して知ることはありません。デバイスを受け取っている施設の物理的なセキュリティによっては、これは非常に簡単な場合があります。これをしないでください。

代わりに、あなたがすでに提案していることを行いますが、それを修正します。イメージを作成する前に、次のように実行します。

ssh-keygen -f some-new-server
cp some-new-server /path/to/the/mounted/image/sshd/key
cp some-new-server.pub /path/to/the/mounted/image/sshd/key.pub

そして今、すべてのサーバーに新しいキーがあります。あなたは本当に、本当にキーのコピーを配布したくないので。正直なところ、少なくとも家の鍵の写真を撮って、自宅の住所でインターネットにアップロードするのと同じくらい悪いことです。


1
誰かがあなたのハードウェアに物理的にアクセスしていて、保存中のデータの暗号化に失敗した場合、すべての賭けはオフになります。
user9517はGoFundMonicaを16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.