mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

OpenSSHはなぜバージョン情報を簡単に非公開にできないのか?

先日落ちたLPIC202で「OpenSSHは修正してコンパイルし直さないとバージョン情報が出る。デフォルトでバージョン情報が『公開』になっているのには理由があるがそれはなぜか?」という問題が出てた。その時は「接続に必要な情報として、クライアント側にSSHサーバのバージョン情報を伝えた方がいいから」という選択肢を選んで、それはまあ結果として合ってたんだけど、詳細を調べたのでまとめておく。

OpenSSHはデフォルトで自分のバージョン情報を表示する

たとえばサーバにtelnetで入ろうとすると、こんな感じでOpenSSHのバージョンが表示される。

# telnet localhost
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3

BINDならnamed.confのoptionsステートメント内でversionオプションを追加して、Apacheならhttpd.confのServerTokensディレクティブでProdを指定して、そうすることでバージョン情報を隠すのがセキュリティの常套手段(なぜならば特定のバージョンで脆弱性が見つかったときに、バージョン情報を開示してると「僕ね!脆弱性あるよ!」と自ら言ってるようなものだから)なのに、OpenSSHの設定ファイルにはどうもそういう設定が見当たらないし、デフォルトででーんと公開している。

隠すことも出来るけど何かダメっぽい

OpenSSH バージョン 非表示」とかで検索すると、みんな「できない」「ソースいじってコンパイルし直せばいけるけど、あんまりよくないっぽい」っていう話はしてるけど、OpenSSHがなんでその方針なのかが見つからず。OpenSSHだけなんでバージョン情報を簡単に非公開にできないんだろう?

コメント#1213407 | サーバのバージョンは隠すのが常識? | スラッシュドット・ジャパン

と思ったら答えは公式サイトに書いてあった

何はともあれ公式情報を見てみよう!と、 http://openssh.comFAQ開いてversionで検索したらあったー!

http://www.openssh.com/faq.html#2.14

2.14 - Why does OpenSSH report its version to clients? OpenSSH, like most SSH implementations, reports its name and version to clients when they connect, e.g. SSH-2.0-OpenSSH_3.9 This information is used by clients and servers to enable protocol compatibility tweaks to work around changed, buggy or missing features in the implementation they are talking to. This protocol feature checking is still required at present because versions with incompatibilities are still in wide use.

 

頑張って翻訳すると、「バージョン情報は、接続先SSHサーバとのプロトコルの互換性を有効にする調整のために、サーバとクライアントによって使用される。非互換のバージョンはまだ広く使われているので、このプロトコル機能のチェックは現在もまだ必要とされている」かな。SSHサーバのバージョンと、SSHクライアントのバージョンに互換性がない場合でも、サーバ側のOpenSSHのバージョンをクライアントに知らせることでうまく接続できるような仕組みになってるから、隠しちゃうと「うまくいかない」んだね。

ほんとに・・・こんなこまかい問題でるんだから、完全に理解してないと試験勉強程度で受かるわけないよねー、LPIC202。(白目)