paiza times

paizaがお届けする、テック・キャリア・マネジメント領域における「今必要な情報」を届けるWebメディア

logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

OpenSSHクライアントで秘密鍵が漏洩する脆弱性(CVE-2016-0777)の内容と対策

f:id:paiza:20180216150104j:plain Photo by Torkild Retvedt

f:id:paiza:20151217152725j:plainこんにちは、吉岡([twitter:@yoshiokatsuneo])です。

サーバ管理で使わない人はいないSSH(OpenSSH)ですが、SSHクライアントで秘密鍵が漏洩する 可能性のある脆弱性(CVE-2016-0777)が発見されています。 各ベンダーからリリースされるアップデートを適用していただくのですが、まだアップデートがリリース されていない環境も多いです。 そのような場合を含めて、結論から言うと、以下のコマンドをSSHクライアントでルート権限で実行することで、脆弱性は回避できます。

# echo -e '\nHost *\nUseRoaming no' >> /etc/ssh/ssh_config

ルート権限で上記コマンドが実行できない場合、以下のようにユーザ単位の設定を変更します。

$ echo -e '\nHost *\nUseRoaming no' >> ~/.ssh/config

この脆弱性は、OpenSSHでドキュメント化されていない実験的なローミング機能に関するもので、上記のローミングを 無効にするコマンドにより、この脆弱性を回避することができます。

また、もし秘密鍵がすでに漏洩されている場合には、鍵の再作成を行います。

詳しい情報は以下で公開されていますが、概要について書いてみます。

Qualys Security Advisory / Roaming through the OpenSSH client: CVE-2016-0777 and CVE-2016-0778

脆弱性の詳細

OpenSSH 5.4(2010/3/8リリース)以降で、OpenSSHクライアントは非公開のローミング機能を実装しています。 このローミング機能では、サーバとの接続が予期なく切断され、サーバ側がローミング機能をサポートしている場合、 クライアントはサーバと再接続を行い、中断されたセッションを再開することができます。

この機能はOpenSSHサーバではサポートされていませんが、OpenSSHクライアントではデフォルトで有効にされており、 また以下の2つの脆弱性により悪意のあるサーバで悪用される可能性があります。

  • 情報漏洩(メモリの内容取得)
  • バッファオーバフロー(ヒープメモリ)

情報漏洩の脆弱性はOpenSSHクライアントのデフォルト設定で存在し、クライアントのバージョン、コンパイラ、OSによりますが、 クライアントのSSH秘密鍵を悪意のあるサーバが取得できます。 この脆弱性による情報漏洩はすでに悪用されている可能性もあり、その場合、高度なセキュリティが求められるサイトでは SSH鍵の再生成と再配布が必要になる場合があります。

もう1つのバッファオーバフローの脆弱性もデフォルトで存在しますが、悪用するには2つのオプション ProxyCommandと、ForwardAgent(-A)又はForwardX11(-X)を有効にする必要があります。 そのため、この脆弱性はそれほど広く悪用される可能性は低いですが、考慮が必要な場合もあります。

OpenSSHのバージョン5.4から7.1に脆弱性は存在します。 非公開オプション"UseRoaming"を"no"にすることで回避することができます。 OpenSSH 7.1p2(2016/1/14リリース)にてローミングを無効にすることにより修正されています。

脆弱性が回避される場合

* この脆弱性は、"UseRoaming no"を設定ファイル(/etc/ssh/ssh_configや~/ssh/config)に設定するか、 コマンドラインで無効にする(-o "UseRoaming no")ことで無効にできます。

  • SSHクライアントがサーバから切断されてローミング機能を提供した場合、SSHクライアントは
[connection suspended, press return to resume]

というメッセージをクライアントの標準エラーに表示し、改行が標準入力で待ちます。 熟練したユーザは疑いを持ち、Contro-C/Control-Zにより中断して脆弱性を回避できます。

しかしながら、標準入力をデータ転送で用いている場合や、バックアップスクリプトやcronで バッチで起動している場合は漏洩が起こる可能性があります。 同様にSCPでコピーを行う場合も発生する可能性があります。

  • Man in the Middleアタックだけではなく、攻撃者はサーバに侵入するなどにより、ユーザを攻撃された サーバに接続させる必要があります。

  • セキュリティ以外のバグにより、特定のバージョンや設定のOpenSSHでは実際にはローミング機能が動作せずに 脆弱性が悪用されない可能性があります。特に、OpenSSHバージョン6.5(2014/1/30リリース)以降では、 デフォルトのssh_connect_direct()(単純なTCP接続)でのバグにより、サーバへの再接続ができなくなります。

秘密鍵漏洩の例

以下の環境にて、実際に秘密鍵が漏洩することが確認されています。

  • FreeBSD 10.0, OpenSSH 6.4p1
  • FreeBSD 9.2, OpenSSH 6.2p2
  • OpenBSD 5.4, OpenSSH 6.3
  • OpenBSD 5.8, OpenSSH 7.0 (ProxyCommand利用)
  • CentOS 7, OpenSSH 6.4p1
  • Fedora 20, OpenSSH 6.4p1

参照

まとめ

SSH(OpenSSH)はサーバ管理でのセキュリティの基本ツールですので、このような重要なツールでの脆弱性は 影響範囲が大きくなる可能性があります。 この件に限らず、適時リスクなどを判断して適時対応を行っていただくのが良いかと思います。

履歴

2016-01-15 16:51 設定ファイルが改行で終わっていない場合を考慮し、echoの先頭に改行"\n"を追加。




paizaは、技術を追い続けることが仕事につながり、スキルのある人がきちんと評価される場を作ることで、日本のITエンジニアの地位向上を目指したいと考えています。

自分のスキルを磨いていきたいと考えている方におすすめなのが「paizaラーニング」。オンラインでプログラミングしながらスキルアップできる入門学習コンテンツです。初心者でも楽しくプログラミングの基本を学ぶことができます。

paizaラーニング

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

paizaのスキルチェック

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

paizaのおすすめコンテンツ

Webセキュリティ入門 ハッカー入門 Webセキュリティ講座がスタート!CVは内田真礼さん! Python✕AI 機械学習入門講座 CVに上坂すみれさんを起用!人気の機械学習講座を公開中!
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.