Secure Shell
Secure Shell(セキュア シェル、SSH)は、暗号や認証技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証を含むすべてのネットワーク上の通信が暗号化される。 概要従来からTelnet、rsh、rloginなどリモートホストのシェルを利用するためのプロトコルは存在した。しかしながら、これらはネットワークに平文でパスワードを送信するため、パスワードを覗き見(盗聴)される危険性が高く、特にインターネット上では大きな問題であった。SSHは通信を暗号化した代替の通信プロトコルである。 オリジナルのSSHは、フィンランド出身のプログラマであるタトュ・ウルネン (Tatu Ylönen) により1995年に開発され、はじめフリーで公開された。しかし、同年12月には、SSH社 (SSH Communications Security) が設立され、プロプライエタリソフトウェアとなった。[1] ファイルコピー用のコマンドrcpを代替するscpや、FTPを代替するsftpも用意されている。 SSHの暗号通信はいわゆるハイブリッド暗号であり:
認証方式は公開鍵認証の他にも、パスワード認証、ワンタイムパスワードなどが提供されており、各個人/企業の情報セキュリティポリシーに合わせて選択できる。 なりすましを防止するための仕組みも充実している。 現在はバージョン1と2の2種類のプロトコルが共存している。バージョン1は既知の脆弱性があり推奨されない。 商用、自由ソフトウェア含めて幾つかの実装があり、特許や互換性の問題などでやや混乱があったが、2006年にSSHおよびその関連技術がRFCとして制定された[2]。2008年の時点で最も普及しているのは、オープンソースのOpenSSHである[3]。Linuxなどでも標準利用されており、現在では単にSSHと言った場合、OpenSSHの実装系を指すことが多い。 ソフトウェアSSHサーバ
SSHクライアント
フィンガープリントSSHフィンガープリント(エスエスエイチフィンガープリント)は、SSHプロトコルにおいて、サーバーの公開鍵を識別するために使用されるハッシュ関数(例: SHA-256)を用いて生成された短い文字列である。 SSHでサーバーに初めて接続する際、クライアント側では接続先が正規のサーバーであるかを判断できない。そのため、サーバーは自身の公開鍵をクライアントに送信し、クライアント側でその公開鍵のフィンガープリント(ハッシュ値)を利用して検証を行う。フィンガープリントは、短い文字列なので、目視で確認がしやすくなっており、これにより、利用者は接続先のサーバーが正しいものかを確認できる。SSH接続時にサーバ鍵のフィンガープリントを確認しないと、意図しないリモートコンピュータに接続している事に気づかず、通信内容を盗聴される恐れがある。 SSHサーバによっては、設定次第でブルートフォースアタックでシェルへのアクセスを許してしまう。IPAが発表している不正アクセスの届け出状況では、SSHポート経由でパスワードクラッキングが行われた例が繰り返し発表されている[4][5]。「パスワード管理の徹底」「セキュリティパッチの適用」「アクセスログの監視による攻撃の迅速な発見」のような対策に加えて、公開鍵認証を採用することをIPAは推奨している。 2023年10月頃にTerrapin Attackという中間者攻撃法が報告された[6]。 ホスト認証ホスト認証は、SSHクライアントがサーバーに接続する際に、そのサーバーがなりすましでないことを証明するプロセスである。この仕組みは、中間者攻撃を防ぐために不可欠である。ホスト認証のプロセスは以下の通りである。
これのプロセスにより、単に公開鍵を交換するだけでなく、サーバーが秘密鍵を確かに保有していることを検証し、通信の安全性を確保する。 フィンガープリントの確認利用者は、SSH接続時に表示されたフィンガープリントが、接続しようとしているサーバーのものと一致するかを事前に確認することが推奨される。サーバー上でフィンガープリントを確認するには、`ssh-keygen` コマンドを使用する。例えば、CentOS 8の場合、ホストの公開鍵は `/etc/ssh/ssh_host_rsa_key.pub` に保存されている。コマンドを実行することで、サーバーに保存されている公開鍵のフィンガープリントを表示できる。 サーバーのホスト鍵が変更された場合何らかの理由(サーバーの再構築やセキュリティポリシーの変更など)でサーバーのホスト鍵が変更された場合、クライアントが次回接続しようとすると警告メッセージが表示される。これは、`known_hosts` ファイルに保存されている古い公開鍵と、サーバーから新たに提示された公開鍵が一致しないために発生する。 この警告は、中間者攻撃の可能性を示唆するものでもあるため、注意が必要である。サーバー管理者が意図的に鍵を変更したことが確認できている場合に限り、クライアント側の `~/.ssh/known_hosts` ファイルから該当する古いホスト鍵の情報を削除する。情報を削除した後、再度SSH接続を試みると、初回接続時と同様のフィンガープリントの確認メッセージが表示される。ここで新しいフィンガープリントを承認することで、`known_hosts` ファイルが更新され、再び接続が可能となる。 脚注
関連項目 |