2000年 11月 15日

サイエンティフィクシステム研究会
(富士通(株)ユーザ研究会)
システム技術分科会 第2回会合資料

KEKの計算機環境とSSH

高エネルギー加速器研究機構
計算科学センター
八代茂夫
Shigeo.Yashiro @kek.jp

目次

  1. はじめに


  2. SSH の概要
    1. SSHの機能
    2. SSHのバージョン
    3. PCクライアント

  3. SSH の行なう認証
    1. サーバホスト認証
    2. ユーザ認証
      1. パスワード認証
      2. 公開鍵暗号システムによるユーザ認証
  4. ポートフォワーディング機能
    1. X11フォワーディング
    2. TCP/IPポートフォワーディング

  5. SSHの使い方
    1. Windowsでの使い方
    2. TeraTerm(Pro)へのTTSSH付加
      1. インストレーション
      2. SSHの起動とログイン
      3. X11フォワーディング
    3. UNIXでの使い方
      1. パスワード認証によるログイン
      2. 公開鍵認証によるログイン
      3. X11のフォワーディング
      4. セキュアなファイル転送
  6. UNIX へのインストレーション
  7. まとめ
  8. 謝辞
  9. 参考文献

  1. はじめに
  2. 高エネルギー加速器研究機構 (以下KEKと略す) [e1] [n1] の計算機システムおよびネットワーク環境に対するセキュリティ強化のために Secure SHell(SSH) [e2] [1] [n2] [e3] を導入した.

    計算科学センターでは, 実験データの解析などのKEK の研究プロジェクトで必要とする計算機資源を提供するために, 大型サーバシステムを管理運用している. これらのシステムへは, KEK内のみならず国内外の共同利用者がリモートアクセスする必要があり, セキュリティを高めるために SSH を利用している.


  3. SSH の概要
    1. SSHの機能
    2. SSHを導入した最大の理由は, リモートのホストにアクセスする際の, パスワードを暗号化してセキュリティを強化することである. SSHはリモートログインの機能slogin および ssh によりtelnet, rlogin, rsh を置き換え, リモートファイル転送の機能 sftp により ftp を置き換える.

      SSHは通信を暗号化するので, パスワードだけでなく, すべてのデータが暗号化されて傍受されても内容は保護される.

      SSH は暗号システムを使ってホスト認証を行ない, IPアドレス偽装, IPソースルーチング, DNS偽装, といった不正アクセスの攻撃を防ぐ.

      Xのフォワーディング機能により, Xの通信がSSHのセキュアなチャネルで行なわれる. この機能により, セキュリティ対策の弱いXの通信が傍受や偽装攻撃から保護される. この機能は更に, セキュリティ対策として外部からのアクセスを制限している LANに xterm, kterm などのXクライアントを通過させることに利用できる.

      SSHのサーバホストあるいはクライアントホストに proxy(中継)サーバを作成して, SSHの通信を利用してproxy との間の通信を暗号化する「ポートフォワーディング機能」がある. これは, その都度ユーザが設定して利用する機能であるが, ftp や pop などのセキュアでない通信と組み合わせて利用することにより, セキュリティを高めることができる. これらのフォワーディング機能は, ファイアウォールをまたがっての通信にも利用できる.

       

    3. SSHのバージョン
    4. SSH*1 のプログラムとプロトコルは, 当初フィンランドの Tatu Ylonen によって開発された.現在は SSH Communication Security社 (SSH社と略す)[e4] がプログラムの開発を行ない, それを F-Secure Corporation[e5] が製品化して販売を行なっている. 日本での販売は(株)山田洋行[n3] が代理店となって行なっている. SSHのプロトコル[e6] の標準化は The Internet Engineering Task Force (IETF)[e7] という, 企業から独立した第3者機関が行ない, RFC を策定中である.

      Tatu Ylonen の SSHは当初フリーで配られていた. 現在では, 非商用のSSH1を非営利団体に限って, また非商用のSSH2を教育機関に限って使用できることになっている. SSH2 はSSH1 に比べて, セキュリティが強化され, また sftp のサポートなど機能が強化されている.

      SSH プログラムが有償化されるのに従って, フリーで使えるプログラムを開発する動きが出てきた. 現在 OpenSSH[e8] , LSH[e9] , OSSH[e10] が公開されており入手可能である. OpenSSH はOpenBSD[e11] のプロジェクトとして開発され, OpenBSDのライセンスの下に誰でも使用できる. LSH は GNU ライセンス扱いとなっている. OSSH にはライセンス記述が見当たらない. OSSH と OpenSSH は, SSH1 の中で, ライセンス上まったく問題のない 1.2.12 をベースとして開発され, 1999年後半に相次いで公開された.

      SSH1とSSH2 ではプロトコルが異なり互換性はない[e12] が, SSH社のSSH2 では, インストール時に ssh-1.3.x を併せてインストールし, 互換モードに設定することにより, 自動的にバージョンを合わせて通信する機能がある. OpenSSH の最新バージョンではSSH2プロトコルがサポートされており, 適切な設定をおこなうことにより有効になる.



       

      最新バージョン

      プロトコル

      SSH 2.x

      2.3.0

      SSH version 2 (+1)

      SSH 1.2.X

      1.2.30

      SSH version 1

      LSH

      1.0.7 (2000/3/15)

      SSH version 2

      OSSH

      1.5.6 (2000/7/5)

      SSH version 1

      OpenSSH

      2.2.0 (2000/9/2)

      SSH version 1 & 2

      表 1 SSH プロトコルのプログラムのバージョン



      それぞれのSSHプログラムのバージョン番号とプロトコルバージョンを表 1に示す. 表 2には, それぞれのSSHプログラムがサポートするフォワーディング機能と ファイル機能を示す. ファイル転送機能は rcp に対応する scp と, ftp に対応する sftpがある.
      OpenSSHではファイル転送機能が含まれていないが, Brian Wellington が開発している sftp[e13] など他のフリーソフトを組み合わせて使えば良い. OpenSSH は 1999 年11月に公開されて以来, かなり注目されており, 2000年8月には SSH2プロトコルがサポートされており, 今後の普及が期待できる. LSH は分散ファイルシステム AFS[e14] の環境をサポートしているのが特徴である.

       

        SSH2 SSH1 OpenSSH LSH OSSH
      X-forward

       

      port forward*

      -L, -R

      -L, -R

      -L

      -L, -R

       
      scp

       

      sftp

       


      表 2 各プログラムの機能の比較



    5. PCクライアント
    6. 前節で述べたプログラムはすべて UNIX (Linux を含む)用のサーバおよびクライアントである. 一方, Windows用のクライアントには, F-Secure Corporation の製品 SSH for Windows, 端末エミュレータ TeraTerm と SSH 用のモジュールTTSSH[e15] の組み合わせ, Win32 アプリケーション(Win32SSHと呼ぶ) などがある. この中でTTSSH とWin32SSHはフリーである. Macintosh用のクライアントには, F-Secure Corporation の製品 SSH for Macintosh, フリーの NiftyTelnet SSH[e16] などがある



        F-Secure TTSSH Win32SSH NiftyTelnet

      OS

      Windows, Macintosh

      Windows

      Windows

      Macintosh

      プロトコル

      version2

      version1

      version1

      version1

      ユーザインターフェイス

      GUI/ssh2

      GUI

      ssh1

      GUI

      日本語

      困難

      X-forward

       

      port forward*

      L, R

      L, R

      L, R

       

      scp

      scp2

      scp1

      GUI


      表 3 PC 用のクライアントおよび機能



      表 3にPC 用のクライアントの一覧を示す. 使用できるクライアントは, サーバのバージョンとPC の OS で決まってしまい, 選択の余地がほとんどない. 日本語が表示できるか否かは重要な点である. SSH2 for Windows および TTSSH ではパラメータの設定だけで表示できる[n4] .
      Macintosh 用クライアントでは日本語をサポートしたものがないが, NiftyTelnet でいくつかの準備を行なえば可能になる[n5] [n6] [n7] . Win32SSHは, TTSSHにないファイル転送機能や, 公開鍵の作成機能を補うのに利用するのが適切である.

       


  4. SSH の行なう認証
  5. SSHはクライアントによるサーバホストの認証を, 公開鍵暗号システムを使って行なう. サーバホスト認証が終了した後には, 共有鍵暗号システムを使ってすべての通信内容を暗号化する. 続いてサーバホストによるユーザ認証を行なう[e17] .

    1. サーバホスト認証
    2. サーバホストは公開鍵暗号システムの秘密鍵と公開鍵を持っている. クライアントホストはサーバホストの公開鍵を使って暗号化したデータを送り, サーバホストは送られた暗号文を, 秘密鍵を使って複号化する. 複号化に成功したことで, クライアントホストは正しい通信相手であることを判断する. このサーバホスト認証の通信の間に, そのセッションの通信で使用する暗号システムの決定と, 暗号に使う鍵の転送を行なう.

    3. ユーザ認証
    4. サーバによるユーザ認証は, 4つの方法がある. a) UNIX標準のパスワード認証, b) 公開鍵暗号システムによる認証(以下, 公開鍵認証と呼ぶ), c) rhosts と公開鍵暗号システムを組み合わせた方式による認証(以下, rhosts公開鍵認証と呼ぶ), d) rhosts認証である.

      前の2つの認証方法は全てのSSHがサポートしているが, 後2つの認証方法は必ずしもサポートされていない. セキュリティが弱くなりかねないので, サポートされていても通常は有効にしないほうが良い.

      SSHサーバは, 公開鍵認証, パスワード認証の順に試みる. 公開鍵認証の設定をしていない場合には, パスワード認証が行なわれ, 公開鍵認証の設定をしている場合には公開鍵認証が行なわれる.

       

      1. パスワード認証
      2. UNIX標準のパスワードによる認証の方法である. クライアントはユーザが入力したパスワードをサーバに送る. サーバは通常のパスワード認証ルーチンでチェックする. パスワードは, 暗号化して通信されるので, 通常のtelnet などより格段に安全である.

         

      3. 公開鍵暗号システムによるユーザ認証
      4. サーバが公開鍵暗号システムを使用してユーザ認証を行なう方法である.

        これを利用しようとするユーザは, 前もって準備が必要である. SSHクライアントホストで1組の公開鍵と秘密鍵を作成する. 秘密鍵は鍵を作成したホスト内だけで厳重に管理し, 他のホストには転送しない. 公開鍵はSSHサーバとする予定のホストに送る. これで準備が終了する.

        ログインの要求あると, サーバホストはユーザの公開鍵を使って暗号化したデータを送り, クライアントホストが送られた暗号文をユーザの秘密鍵を使って複号化する. 複号化に成功するとユーザ認証が成立する.


  6. ポートフォワーディング機能
    1. X11フォワーディング
    2. SSHでリモートホスト(Host Bとする)にログインすると, X11フォワーディングが 可能になるように, 自動的に設定される.

      Host B上に疑似Xサーバが生成され, Xクライアントは 疑似Xサーバと通信するように設定される. 疑似Xサーバは受け取った情報をSSHのセキュアチャネルを通してHost Aへ転送する. Host AのSSH クライアントは, 受け取ったXクライアントの情報を Host A上の実際のXサーバに渡す. (図 1).

      X の通信が SSH 経由で暗号化されること, Xサーバへのアクセス認証が xauth 機能で行われることから, 安全性の高いものとなる.

      図 1 X11のトラフィック転送


    3. TCP/IPポートフォワーディング
    4. SSHには, 任意のTCP/IPアプリケーションの通信情報を, SSHサーバと SSHクライアント間の暗号化された通信路上を通すためのポートフォワーディング と呼ばれる機能がある. この機能を利用して, ネットワークにパスワードを流す ftp や POP の通信を安全にすることができる.

      任意のTCP/IPのポート (ローカルポート番号Y, リモートポート番号J; 例えばpop3の110)を指定してSSHを起動すると, SSHサーバ(ポート22)と SSHクライアント(ポート番号X)間に通信路を確立すると共に, SSHクライアント側では, 指定されたポート番号Yでローカルホストからの 接続を待つ(図 2). ローカルホストのユーザーがポート番号Yへ接続するようにアプリケーションクライアント(例えば POPクライアント)を起動すると, SSHクライアントはその接続をSSHの通信路を通してSSHサーバへ転送する. SSHサーバはその接続をポートJを通してアプリケーションサーバへ接続する.

      これにより, アプリケーションサーバとアプリケーションクライアントが暗号化された通信路を通って接続される.

       

      図 2 TCP/IPポートフォワーディングの概略図


  7. SSHの使い方
    1. Windowsでの使い方
    2. フリーソフトウエアを使って, 日本語を表示できるようにするということで, 端末エミュレータ TeraTerm と SSH 用のモジュールTTSSHを組み合わせでSSH1を利用する方法を説明する.

       

    3. TeraTerm(Pro)へのTTSSH 付加
      1. インストレーション
      2. Tera Term Pro本体と, そのSSHモジュールの2つのソフトウエアを入手してインストールする. インストールした後に, Tera Termの起動時にTTSSHの機能が有効になるように, TERATERM_EXTENSIONS変数を‘1’に設定する. WindowsNT4.0の場合には, 「コントロールパネル」→「システム」→ 「環境」 の順に開いて 「ユーザのユーザ環境変数(U)」に追加する.

         

        • TeraTerm Pro ver. 2.3 for Windows 95/NT

        • 入手先: http://hp.vector.co.jp/authors/VA002416/
        • TTSSH: An SSH Extension to Teraterm

        • 入手先: http://www.zip.com.au/~roca/download.html

        TTSSH で公開鍵認証を使用する場合には, 更にコマンドラインモードのSSH クライアントを入手して, その中にあるツールを使って鍵を作成する.

          ftp://ftp.cs.hut.fi/pub/ssh/contrib/からssh-1.2.14-win32bin.zip

      3. SSHの起動とログイン
      4. Windows のメニューバーから「スタート」→「プログラム(P)」→「Tera Term Pro」(フォルダ) →「Tera Term Pro」(プログラム) と選択して ttermpro を起動する.

         

      5. X11フォワーディング
      6. Windows でXサーバが起動されていれば, 以下の設定を行なうことにより, X11フォワーディング機能を利用できる.

        • TeraTermを起動し, メニューバーから「Setup」→「SSH Forwarding」を選択する.
        • 「X Fowarding」の「Display remote X application on local..」をチェックし,「OK」をクリックする.

        上記の設定を行なった後に, メニューバーから「File」→「New connection」を選択し, ホストに接続する. 正常に接続されると, shellのプロンプトが現れる.

    4. UNIXでの使い方
    5. UNIXで使う簡単な方法は, パスワード認証を使う方法である. 従来のtelnetとほぼ同様に使用できる. 公開鍵認証を使用したい場合には, ユーザが前もって公開鍵の準備を行なう.

      上記2つの方法の使い方を説明する. 次に, リモートホストのXクライアントをXサーバにセキュアに転送する機能である, X11のフォワーディング機能を説明する.

      1. パスワード認証によるログイン
      2. SSHコマンド*2でリモートホストにログインする例を示す. ユーザが特に何も設定をしていないとパスワード認証が行なわれる.


          % ssh soleil


      3. 公開鍵認証によるログイン
        • 鍵の作成
        • 公開鍵認証を使用するためには, SSHクライアント側でssh-keygenを実行して, ユーザのprivate-keyと public-keyを作成する.

          ssh-keygenの実行中にpassphraseの入力が要求される. passphraseはファイルに保存する private-keyを暗号化して保護するためのパスワードである*3. Passphraseには非常に長い文字列を指定できるので, 単語ではなく, 自分で覚えやすく, 他人には分かりにくい文章となるような文字列を選ぶ.

          1組の鍵が作られたら, private-keyをidentification ファイルに登録して, 次にpublic-keyのファイルである identity.pub をSSHサーバ側に転送して, authorized keyデータベースに登録する.


        • ログイン
        • 公開鍵認証の設定を行なった SSHサーバにログインする例を示す.ローカルホスト lune からSSHサーバsoleilにログインする例を示す.

            lune % ssh soleil
            Enter passphrase for RSA key 'yashiro@ lune.kek.jp': this is my passphrase

          ログイン操作は, パスワード認証の場合と殆んど同じである. パスワードの入力要求がpassphrase の入力要求に変わるだけである.

      4. X11のフォワーディング
      5. X11のフォワーディングは, SSHサーバの管理者が特に禁止していない限り, 自動的に設定される.


      6. セキュアなファイル転送
      7. SSH を利用した, セキュアなファイル転送は3つの方法が考えられる. 第1はscp の利用, 第2は sftp の利用, 第3は port forwarding 機能を経由してftp*4 のパスワードをセキュアな経路で送ることである.

        scp は rcp あるいは cp と同様に使用できる. 複写元側では, ファイルを総称文字で指定することができる.

        第3の port forwarding 機能を使う方法は, 文献[2]を参照のこと.

        転送するデータが多く, 暗号化および複号化のオーバヘッドが大きい場合いには, サポートされている暗号システムのうちから blowfish や arcfore などの, 軽い暗号システムを選択して指定する. ローカルホスト lune の file1を soleil のホームディレクトリに転送する例を示す.

          lune % scp -p -c blowfish file1 soleil:~


  8. UNIX へのインストレーション
  9. UNIX系マシンには, サーバおよびクライアントがインストールできる.

    筆者は SSH1.2.27, および 商用版SSH2.0.13をインストールして使用している. OpenSSH, LSH, OSSHはまだ試していないでの, SSH1およびSSH2のインストールについて述べる.

    インストールは, 添付のファイルやマニュアルを参照して, “configure”, “make”, および“make install” を行なえばよいので説明を省く. 特に留意する点である, アクセス制限について述べる.

    セキュリティ強化のために導入するのであるから, SSH自身を不正アクセスに利用されないようにするために, TCP wrappersのアクセス制限をリンクして使用するように設定するべきである.

    configure 時にTCP wrappers の library がインストールされているPATHを指定する. たとえば, RedHat 系のLinux のディストリビューションの場合には, /usr/lib/libwrap.a および /usr/include/tcpd.h が入っているので, 以下のように指定する.


    インストール終了後に, TCP wrappers の hosts.allow に SSH の記述を追加する. 以下に設定例を示す. sshdについてのアクセス制限, X11のフォワーディング, 自ホストでフォワーディングを許すポートの番号を記述してある. Hostnameは自ホスト名を記述する. この例では12345番ポートの使用だけを許している.



  10. まとめ
  11. SSHはインストレーションが簡単であり, 使い方も簡単である. telnet, rlogin, rsh, rcpを利用しているユーザが容易に移行でき, セキュリティを高めることができる. しかし使い方に注意しなくては, 逆にセキュリティを低める可能性もある.



    図 3 SSHと telnet を混在させた利用

     

    何段にもリモートログインを重ねる場合には, SSH を使えるログインと, 使えないために telnet を使わざるをえない部分ができることもある. SSH とtelnet を組み合わせて使用する場合 (図 3) には, telnet の部分では通信が暗号化されないので, SSHの通信部分で暗号化されるデータがtelnet の通信部分で非暗号化データとして通信され, SSHを使用する意味が失われかねない. Telnetの部分でパスワードを盗まれて, そのパスワードを使って, SSHのチャネルを使って不正アクセスが行われると, 被害が拡大する.

    ユーザ認証の2つの方法, パスワード認証と公開鍵認証のいずれがより安全かという比較では, 公開鍵認証のパスフレーズがどこにも保存されないという優位性があるのは確かである. しかし, パスワード認証に場合には, 実用的には辞書攻撃で破られないパスワードをつければよいわけだし, 公開鍵認証の場合には, 実用的には十分に長い文字列をパスフレーズとすればよい. いずれの場合でも, ユーザのパスワードやパスフレーズが他人に漏れないことが重要であり, 漏れた場合には不正アクセスを防ぐ手だてはない.

    公開鍵認証では, ユーザが万が一パスフレーズを設定しない秘密鍵を作成した場合, そのクライアントホストがクラックされると, サーバへのアクセスも実質的に認証なしで可能になる. ユーザがパスフレーズを設定したかどうか, また安直な値を設定していないかどうかの検査は, サーバの手の届く範囲外のところにある. パスワード認証ではユーザはリモートホスト毎に異なったパスワードを入力するが, 公開鍵認証はローカルホストで管理する1つのパスフレーズを使って全てのリモートホストにアクセスできる利便性がある. サーバの管理者は以上のことを総合的に考えて, 運用する認証方式を決定する必要がある.

    最後に, 本稿では「SSH が使っている暗号技術」の説明を省略し, 「ポートフォワーディング」や「使い方」の説明を簡略化した. 文献[2]で詳しく説明してあるので,参照していただきたい.


  12. 謝辞
  13. SSHの検討を一緒に行い, 情報を提供して下さっている, KEK計算科学センターの馬渡博司助教授, 柴田章博助手, 湯浅富久子助手, 橋本清治氏に感謝致します. なお本稿の一部は, 文献[2]で橋本清治氏が執筆したものをもとに書き加えたものである.


参考文献

[1]
島 慶一「UNIX知恵袋」第39-41回, Secure Shell, UNIX Magazine Vol.13, No.6-8, 1998/6-8, ASCII
[2]
安全なリモートログインのツールSSH, 八代, 橋本, KEK Internal 2000-1
(http://research.kek.jp/people/yashiro/RepN/KEKint00-01/)

英語の URL

[e1]
High Energy Accelerator Research Organization, http://www.kek.jp/
[e2]
SSHのページ, http://www.ssh.org/
[e3]
http://research.kek.jp/people/yashiro/html/SSH.html
[e4]
SSH Communication Security 社のページ,
http://www.ssh.com/about/company/index.html
[e5]
F-Secure 社のページ, http://www.f-secure.com/
[e6]
SSH2 プロトコル, http://www.ietf.org/html.charters/secsh-charter.html
[e7]
The Internet Engineering Task Force (IETF)のページ, http://www.ietf.org/
[e8]
http://www.openssh.com/
[e9]
http://www.net.lut.ac.uk/psst
[e10]
ossh のftpサイト, ftp://ftp.pdc.kth.se/pub/krypto/ossh/
[e11]
http://www.openbsd.org/
[e12]
SSH1 とSSH2 との互換性,
http://www.f-secure.com/support/ssh/1x-2x_compability.html
[e13]
sftp, http://www.xbill.org/sftp/
[e14]
http://www.transarc.ibm.com/Product/EFS/index.html
[e15]
TTSSH: An SSH Extension to Teraterm, http://www.zip.com.au/~roca/ttssh.html
[e16]
Macintosh用NiftyTelnet SSH, http://www.lysator.liu.se/~jonasw/freeware
[e17]
SSH Communication Security 社の暗号解説のページ
http://www.ssh.fi/tech/crypto/

日本語の URL

[n1]
高エネルギー加速器研究機構, http://www.kek.jp/index-j.html
[n2]
SSH 関係のリンク集.
http://www.vacia.is.tohoku.ac.jp/~s-yamane/FAQ/ssh/link.html
[n3]
(株)山田洋行, http://www.yamada.co.jp/
[n4]
SSH について, http://www.jaist.ac.jp/~uchida-t/ssh/
[n5]
NiftyTelnet 1.1 SSH で日本語表示,
http://red.ep.sci.hokudai.ac.jp/~togari/net/nifty-jp/
[n6]
Macintoshでのインストールと使い方, http://www.bi.a.u-tokyo.ac.jp/~hiro/ssh/
[n7]
Macintosh IP日記:SSHで日本語表示-MindTerm,NiftyTelnet
http://www.zdnet.co.jp/macwire/0007/18/c_ipnikki.html