![]() |
SSHのはてな |
(1)SSHとは
SSH(Secure Shell)とは、コンピュータで通信のために使われる※プロトコルです。
認証部分を含めたすべての通信が暗号化され、第三者には容易に解読できないようになります。
※プロトコルとは通信をやり取りする際に必要な決まりの事です。
コンピュータで通信を行う際に使われるサービスには、従来からTelnet(Teletype network)やFTP(File Transfer Protocol)等があります。
これらに共通していることは「暗号化がされていない」ということです。
暗号化されていない場合、以下のようなリスクがあります。
・IDやパスワード、その他重要な情報(個人情報等)の盗聴
・情報漏洩
・なりすまし
以上の問題を解決するために開発されたのが、通信を暗号化して安全に通信する仕組みです。
在宅勤務やテレワークといった働き方が増えて行く中で、活躍する技術のひとつとなります。
「通信内容を暗号化する」「鍵認証など高度な認証方法を使う」等の方法を使うことでセキュア(安全・安心・頑丈・堅牢)な通信を行うことができるようになります。
認証の仕組みとしては、「パスワード」「認証鍵」などの方法が使えますが、SSHでもっとも重要な点となるのは「通信を暗号化することで通信内容を読み取られない」ようにしたことです。
これにより主にサーバへの接続方法としてSSHを採用するようになっています。
(2)SSLとの違い
SSHと同様に安全な通信を実現する仕組みとしてよく取り上げられるものとして※SSL(Secure Socket Layer)/TLS( Transport Layer Security )があります。※以下SSLと記載
SSHとSSLは通信を暗号化して安全に送受信を行うためのプロトコルですが以下のような違いがあります。
SSH | SSL | |
---|---|---|
目的 |
・接続先サーバが意図した相手であること ・接続先サーバから接続元クライアントが認証できること ・通信内容の暗号化 |
・接続先が正しいか(なりすましでないか)の認証による証明 ・通信内容の暗号化 |
認証方式 | 公開鍵方式 | 証明書認証 |
主な対象者 | サーバ管理者 | Webサイト閲覧者 |
SSHは主に遠隔地からサーバを操作する際に、通信データを暗号化させるプロトコルです。
SSLは、インターネット上でのクライアントとサーバ間における通信データを暗号化して送受信させるプロトコルになります。
また、ユーザの認証方法にも違いがあります。SSHの場合はユーザ認証には「公開鍵による認証」を行いますが、一方のSSLは「証明書による認証」という違いがあります。通信を暗号化するという部分は同じですが、用途や目的が異なる為、混同しないように注意しましょう。
(3)認証方式の種類
SSHの主要な認証方式は公開鍵認証方式です。それ以外にはパスワード認証もありますので、それぞれ説明します。
●公開鍵認証方式
公開鍵認証方式は「公開鍵」と「秘密鍵」を照合して認証する方法です。公開鍵認証方式を使うことで「鍵を持っている人(クライアント)からのみ、ログインを許可」という方式に変更できます。ちなみに「鍵」と称していますがシステム照合のことであり、便宜上このような名前となっています。
名称 | 用途 |
---|---|
秘密鍵 | 電子署名データを作成 |
公開鍵 | 電子署名データが正しいものか検証 |
秘密鍵では「電子署名」というデータを作成できます。この秘密鍵から作成された「公開鍵」を、サーバ側へ配布し登録しておきます。
その後、ログインしようとするクライアントの秘密鍵で電子署名データを作成・サーバへ送付し、サーバ側で登録されている公開鍵と合致するものか検証し、合格すれば認証成功となってリモート接続が許可されるようになります。
公開鍵認証方法であれば、秘密鍵が第三者に流出しない限り安全です。
●パスワード認証方式
パスワード認証方式は、その名の通り「パスワードでサーバにアクセスする方法」です。
サーバ側にパスワードを設定しておき、アクセスした際に一致するパスワードをクライアントから入力するとログインできるようになります。
パスワード認証方法は従来からある一般的な方法です。しかし、公開鍵認証方式に比べるとセキュリティ面での不安がある認証方式となり、おすすめできません。
理由としては管理者が容易に推測できる単純なパスワードに設定してしまった場合、第三者から簡単にパスワードを解析されて不正ログインが発生してしまう危険性があります。
また、複数のWebサイトで同じパスワードを使いまわしていた場合にも、別のところから情報が盗まれる・漏洩する等してセキュリティを突破されてしまう危険性もあります。
パスワード認証方式は公開鍵認証方式と比較して設定が容易ではあるものの、より強固なセキュリティでリモート接続ができる公開鍵認証方式をおすすめします。
(4)SSHによる通信の仕組み
SSHで安全な通信が行われるためにはどういった仕組みになっているかを簡単に説明します。
SSHで安全な通信を行うためのポイントとなるのが「公開鍵によるユーザ認証」です。以下のような流れで行われます。
①クライアント側で秘密鍵と公開鍵のペアを作成する
②接続先サーバに公開鍵を配置する
③ログイン時にクライアント側で秘密鍵を使って署名を生成してサーバに送付する
④サーバ側で公開鍵の照合・署名を検証して認証する
(5)SSHのリスク
SSHはセキュアな通信を行いますが以下のようなリスクもあります。
●ID/パスワードの使いまわし
全てのサーバを共通ID/パスワードで使用すると、情報漏洩のリスクが高くなります。ID/パスワードが1つ漏洩するだけで、すべてのサーバが不正ログイン等の被害に遭ってしまうためです。サーバ毎に異なるパスワードを使用するか公開鍵認証を使用するようにしましょう。
●安全性の低いパスワードの使用
安全性の低いパスワードを使用していると、ブルートフォースアタック(総当たり攻撃)で簡単にセキュリティを破られてしまう危険性があります。安全性の高いパスワードを使用するか公開鍵認証を使用するようにしましょう。
●シェルスクリプト内のパスワード埋め込み
シェルスクリプトに直接パスワードが書き込まれていると、容易にパスワードの入手が可能になってしまいます。これはスクリプトファイルが平文でサーバ上に格納されているためです。パスワードの使用を止められるのであればスクリプトに埋め込むこと自体を止めるべきですが、技術的な理由等で止められない場合はパスワードファイルの中身の文字列を暗号化させるなど対策が必要になります。
●公開鍵認証の鍵の使いまわし
公開鍵認証では1つの鍵を使いまわすことで、情報漏洩のリスクが高まります。鍵が1つ漏洩しただけで、その鍵を利用するすべてのサーバが被害に遭ってしまうためです。どのサーバにも簡単にアクセスできて情報漏洩のリスクが高まるため、個々に鍵を作成するようにしましょう。より強固なアクセス環境を作るのであれば、同じユーザーであっても接続先のサーバ毎に鍵のペアを作成することをおすすめします。
●鍵の管理が不適切
公開鍵認証でSSHを使用している中で、適切に鍵の管理ができていないと情報漏洩のリスクが高まります。管理者はどのサーバに鍵が配置されているかを把握し、不要・不明な鍵が存在していないか管理する必要があります。これができていないと不正アクセスに気付けず、情報漏洩につながる可能性があります。鍵の管理を適切に行うには、管理台帳を作成して管理する等の対応が必要です。
・秘密鍵と公開鍵のペアを紐づけて、管理台帳で鍵の管理を行う。
・不正・不明な鍵がないかを定期的にサーバにログインして確認を行い、記録する 。
(確認用スクリプトを定期実行してスクリプトのログを確認する等)