ご意見ある方どしどしコメントください。ディスカッションしてより良い提言にしていきましょう。
一言で述べると
- セキュリティを重視するなら、アクセスするサーバー群が共通する端末マシン群ごとに一個作るとよい。
- それでも、踏み台機に置くための鍵ペアを別途作る必要はごく薄い
鍵ペアのセキュリティリスク
鍵ペア・公開鍵認証方式についてはご理解されていることを前提に進めます。
鍵ペアのセキュリティリスクは、秘密鍵が漏洩した場合に発生します。
この漏洩の脅威は単にssh認証を突破されてしまうという点だけではありません。漏洩後に鍵ペアを無効化するのが容易ではないという点にあります。
WebのTLSのために用意されているような統一規格の公開鍵配布・証明基盤はsshにはありません。
もちろん社内システムにおいてはActive DirectoryやLDAP、STNSを使って公開鍵を配布・管理することもできるのですが、あくまで組織ごとにやっている施策であって統一的なものではありません。
認証局があって統一的に公開鍵を配布・管理しているのであれば、秘密鍵が漏洩したときすぐにその鍵ペアを無効なものだと広報できます。ところがそういうものがないsshの世界だと、各所に登録した公開鍵をすべて無効化する網羅的な方法がない、これが大変なのです。
組織内のマシンはすべて公開鍵管理できていたとしても、GitHubに、VPSサービスに、その他クラウドサービスに登録したことはないでしょうか。わかりませんね。
我々の向き合うべきリスク課題は、「秘密鍵漏洩は止めにくい出血なのでいざというときの出血量を減らす」こととわかりました。
端末ごとに変える意味はない
たとえば会社内で2台のPCを使っているとします。
同時に使っているのではなく、マシンを交換したときの先代と現役の2台のことと考えてもよいです。
端末ごとに違う鍵ペアを作ろうということにして、交換後の新マシンで新たにssh-keygenしたとしましょう。
すると、業務で入るサーバーに新しい公開鍵を入れて回ることになります。GitHubその他のクラウドサービスにもですね。
たぶん交換初日に全部はできなくて、交換後仕事をしながら「あっここにも入れなくちゃだった」が何度も出てくると思います。なにしろ、どこに配ったかわからないのが公開鍵ですからね。
すると、だいたいのログイン先では旧公開鍵と新公開鍵の両方が登録されていることになります。
何を意味するかというと、旧秘密鍵と新秘密鍵のどちらが漏洩しても「止めにくい出血」が同じ範囲で発生するのは変わらないってことです。
漏洩して困るデータを複数持ってしまうことのリスクまで勘案するなら、端末ごとに鍵ペアをわける意義はないと言えます。
新マシンには旧マシンのid_rsa, id_rsa.pubをコピーしてくるのがよいでしょうとなりました。
個人用マシンと会社マシンで違う鍵ペアを使う意味はある
個人用マシンと会社マシンで、同じ接続先に同じユーザーとしてログインする可能性はありますか?
まあ、GitHubくらいはありえるかもしれませんが、それ以外はほぼ別々でしょう。
そうすると、個人用と会社用とで鍵ペアをわけることで、それぞれの秘密鍵が漏洩したときの出血範囲はほぼ重なっておらず、漏洩一回あたりの被害と対応工数を絞ることができます。
この、被害範囲を狭めるという考え方からいけば「個人用と会社用でわける」というよりは、接続先が共通するマシン群ごとにわけるのがよいのだと言えましょう。個人用と会社用では当然に接続先が共通しないからわけるのだという理屈に。
踏み台機に置く鍵ペアは?
踏み台を利用したssh接続をする場合、ProxyCommand方式を使うなら、もしくは手動でsshコマンドを2回打つならば踏み台機にも秘密鍵を置かないといけません。
これを、ローカルマシンからコピーして良いのか、別のものを作るべきなのか。
踏み台機なしでアクセスする接続先と踏み台機を通して接続する先は異なるので、「アクセス先サーバー群が共通しない」よって別々という考え方もできますが、そこまでする必要はなさそうに思います。
ひとつは、ssh踏み台接続にはProxyJump方式を使うことが増えてきましたから、結局踏み台の向こう側のサーバーにもローカルマシンの公開鍵を登録することになり、「共通するアクセス先群」になってしまうであろうこと。
もうひとつは、そうでなくても漏洩時のリスク範囲がたいして変わらない点です。
まず、ローカルマシンの秘密鍵だけが漏洩した場合というのはありえません。踏み台機の秘密鍵もそれで取得されてしまいますから速やかに両方の漏洩となります。
つぎに、踏み台機の秘密鍵だけが漏洩したときのリスクというのはかなりのエッジケースです。「踏み台機に誰かしらユーザーとしてログインできる攻撃者」に漏洩した場合に問題になるわけですから、これは組織内の悪意ある同僚の存在が前提になります。そんなものを前提にしだしたら、やるべきセキュリティ対策はもっと膨大な項目にわたり、踏み台機に置く鍵ペアはという小さな問題どころではなくなります。
あわせると、踏み台機にはローカルマシンからコピーしてきた鍵ペアを置いておくので十分という結論です。別のものを作って、ProxyJumpとProxyCommandで認証結果が異なってしまうのは単に不便なだけです。
まとめ
上記の議論をまとめますと、最初に挙げたとおり以下のようになります。
- セキュリティを重視するなら、アクセスするサーバー群が共通する端末マシン群ごとに一個作るとよい。
- それでも、踏み台機に置くための鍵ペアを別途作る必要はごく薄い