OpenSSLでHeartbleedバグ(CVE-2014-0160)にパッチを適用する方法は?


152

今日の時点で、OpenSSLのバグが(包括的)および1.0.1を通じてバージョンに影響を及ぼしていることが判明しています。1.0.1f1.0.2-beta

Ubuntu 12.04以降、私たちは皆このバグに対して脆弱です。この脆弱性にパッチを適用するには、影響を受けるユーザーがOpenSSLに更新する必要があります1.0.1g

影響を受けるすべてのユーザーがこの更新プログラムを今すぐ適用する方法を教えください。


影響を受けるバージョンのopensslがありますか?
Braiam

パッチが適用されたバージョン1.0.1-4ubuntu5.12を入手し、Apacheサービスを再起動しましたが、サイトでfilippo.io/Heartbleedテストを実行しても脆弱であると言われます。

1
@Matそのサイトが何をテストしているのかわかりませんが、古いキーを使用していることを検出する可能性があります。キーがリークした可能性があるため、キーを再生成する必要があります。
ジル14

1
OpenSSLを更新して新しいバージョンを大量に更新したくないのは、信じられないほどの苦痛です。はるかに簡単なのは、問題にパッチを当てたアップデートパッケージをインストールすることです:ubuntu.com/usn/usn-2165-1
sarnold

アップグレード後にサービスを再起動しましたか?
アクセル

回答:


141

12.04、12.10、13.10および14.04のセキュリティ更新プログラムは、Ubuntu Security Notice USN-2165-1を参照してください。

そのため、最初に利用可能なセキュリティ更新を適用する必要があります。たとえば、次を実行します。

sudo apt-get update
sudo apt-get upgrade

コマンドラインから。

影響を受けるOpenSSLバージョンを使用するサービス(HTTP、SMTPなど)を再起動することを忘れないでください。そうしないと、依然として脆弱です。Heartbleed:それとは何ですか、またそれを軽減するオプションは何ですか?Serverfault.comで。

次のコマンドは、再起動が必要なすべてのサービスを(アップグレード後)表示します。

sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp

その後、すべてのサーバーSSLキー再生成する必要があります。次に、キーが漏洩したかどうかを評価します。この場合、攻撃者がサーバーから機密情報を取得した可能性があります。


23
これがUbuntu 12.04.4 LTSで機能するかどうかはわかりません。完全な更新後、openssl versionを提供しOpenSSL 1.0.1 14 Mar 2012ます。パッチが適用されたバージョンではありませんよね?それとも私はそれを誤解していますか?
ポールカントレル14

7
Ubuntu 13.04で何をしますか?利用可能なアップグレードされたopensslはありません:-(
Frodik 14

20
Ubuntu 12.04では、固定OpenSSLでもバージョンが表示されます1.0.1 14 Mar 2012crimiの回答を読んで、インストールに修正が含まれているかどうかを確認してください。
ダン14

7
ありがとう、@ dan!ここで@crimiの答えを要約します。あなたが走っdpkg -l | grep ' openssl 'て得たなら、それで1.0.1-4ubuntu5.12いいのです。
ポールカントレル14

20
パッチを当てて再起動するだけでは不十分です。キーを再生成し、他の機密資料と同様にキーが漏洩したかどうかを評価する必要があります。たとえば、HeartbleedはすべてのSSLサーバーの新しい証明書を意味しますか?を
ジル14

71

バグはHeartbleedとして知られています。

私は脆弱ですか?

一般に、ある時点でSSLキーを生成したサーバーを実行すると影響を受けます。ほとんどのエンドユーザーは(直接)影響を受けません。少なくともFirefoxとChromeはOpenSSLを使用しません。SSHは影響を受けません。Ubuntuパッケージの配布は影響を受けません(GPG署名に依存します)。

OpenSSLバージョン1.0〜1.0.1fを使用するサーバーを実行すると、脆弱性が生じます(バグが発見されてからパッチが適用されたコースバージョンを除く)。影響を受けるUbuntuバージョンは、11.10から14.04の信頼できるプレリリースまでです。これは実装のバグであり、プロトコルの欠陥ではないため、OpenSSLライブラリを使用するプログラムのみが影響を受けます。OpenSSLの古い0.9.xバージョンに対してリンクされているプログラムがある場合、影響はありません。OpenSSLライブラリを使用してSSLプロトコルを実装するプログラムのみが影響を受けます。他の目的でOpenSSLを使用するプログラムは影響を受けません。

インターネットに公開されている脆弱なサーバーを実行した場合、2014-04-07のアナウンス以降、ログに接続が表示されない限り、サーバーが危険にさらされていると考えてください。(これは、発表前に脆弱性が悪用されていなかったことを前提としています。)サーバーが内部でのみ公開されている場合、キーを変更する必要があるかどうかは、他のセキュリティ対策によって異なります。

影響は何ですか?

このバグにより、SSLサーバーに接続できるクライアントは、サーバーから約64kBのメモリを取得できます。クライアントを認証する必要はありません。攻撃を繰り返すことにより、クライアントは連続した試行でメモリのさまざまな部分をダンプできます。

攻撃者が取得できる重要なデータの1つは、サーバーのSSL秘密キーです。このデータを使用して、攻撃者はサーバーになりすますことができます。

サーバーで回復するにはどうすればよいですか?

  1. 影響を受けるすべてのサーバーをオフラインにします。実行している限り、潜在的に重要なデータを漏らしています。

  2. libssl1.0.0パッケージをアップグレードし、影響を受けるすべてのサーバーが再起動されることを確認します。
    影響を受けるプロセスがまだ実行されているかどうかを確認するには、「grep 'libssl。(削除済み) '/ proc / / maps`

  3. 新しいキーを生成します。これは、バグにより攻撃者が古い秘密鍵を取得できる可能性があるためです。最初に使用したのと同じ手順に従います。

    • 証明機関によって署名された証明書を使用する場合は、新しい公開キーをCAに送信します。新しい証明書を取得したら、サーバーにインストールします。
    • 自己署名証明書を使用する場合は、サーバーにインストールします。
    • いずれにしても、古いキーと証明書を邪魔にならない場所に移動します(ただし、それらを削除しないでください。それらが使用されなくなったことを確認してください)。
  4. 妥協のない新しいキーができたので、サーバーをオンラインに戻すことができます

  5. 古い証明書を取り消します。

  6. 損傷評価:SSL接続を提供しているプロセスのメモリ内にあったデータは、潜在的に漏洩した可能性があります。これには、ユーザーパスワードやその他の機密データが含まれる場合があります。このデータが何であったかを評価する必要があります。

    • パスワード認証を許可するサービスを実行している場合、脆弱性が発表される少し前から接続していたユーザーのパスワードは危険にさらされていると見なされます。(少し前に、パスワードがメモリ内でしばらく使用されなかった可能性があるため。)ログを確認し、影響を受けるユーザーのパスワードを変更します。
    • また、セッションCookieが危険にさらされている可能性があるため、すべてのセッションCookieを無効にします。
    • クライアント証明書は侵害されません。
    • 脆弱性が発生する少し前から交換されたデータは、サーバーのメモリに残っている可能性があるため、攻撃者に漏洩した可能性があります。
    • 誰かが古いSSL接続を記録し、サーバーのキーを取得した場合、そのトランスクリプトを解読できるようになりました。(PFSが保証されていない限り、知らない場合は保証されていません。)

クライアントで回復するにはどうすればよいですか?

クライアントアプリケーションが影響を受ける状況はほとんどありません。サーバー側の問題は、誰でもサーバーに接続してバグを悪用できることです。クライアントを悪用するには、次の3つの条件を満たしている必要があります。

  • クライアントプログラムは、SSLプロトコルを実装するためにバグのあるバージョンのOpenSSLライブラリを使用しました。
  • 悪意のあるサーバーに接続されたクライアント。(たとえば、電子メールプロバイダーに接続した場合、これは懸念事項ではありません。)これは、サーバー所有者が脆弱性を認識した後、おそらく2014-04-07以降に発生する必要がありました。
  • クライアントプロセスのメモリには、サーバーと共有されていない機密データがありました。(したがってwget、ファイルをダウンロードするために実行した場合、リークするデータはありませんでした。)

2014年4月7日の夕方UTCからOpenSSLライブラリのアップグレードまでの間にこれを行った場合、クライアントプロセスのメモリにあったデータが侵害されることを考慮してください。

参照資料


4
「SSL / TLS接続のサーバー側のみが影響を受ける」とは考えていません。openssl.org/news/secadv_20140407.txtは、クライアントまたはサーバーからの秘密を明らかにできると言っています。ubuntu.com/usn/usn-2165-1は同意します。悪意のあるサーバーへの接続中にクライアント証明書を使用する可能性はわずかですが、可能性は存在します。
armb

@armb良い点を挙げます。クライアント証明書が使用されているかどうかは関係なく、データ漏洩は証明書の使用とは無関係です。私は専門家の助けを求めました。
ジル14

クライアント証明書は、秘密鍵を漏洩する場合ですが、はい、パスワード、認証Cookieなどはいずれにしても漏洩する可能性があります。ただし、curlやwgetなどのOpenSSLベースのクライアントの一般的な使用法では、悪意のあるサーバーへの接続中にメモリ内の他のサイトのシークレットがないため、その場合、クライアントシークレットを指定した場合にのみリーケージになると思います正当なサイトにそれらを提供することを期待し、証明書の検証が正しいサイトに接続されていないことを明らかにする前に、ハートブリードはハンドシェイク中にそれらを漏らしました。
armb 14

1
@Gillesあなたは、どのクライアントがHeartbleedに対して脆弱であることが証明されているかという答えに興味があるかもしれません。私はnginx(プロキシモード)、wget、リンクなどで「興味深い」メモリを獲得することができました。
Lekensteyn

1
@MuhamedHuseinbašićパッケージにopensslはコマンドラインツールが含まれています。OpenSSLライブラリを使用してSSLプロトコル(Apacheなど)を実装するアプリケーションでは使用されません。ただし、ディストリビューションのセキュリティ更新プログラムを適用するだけです。
ジル

40

UbuntuにインストールされているOpenSSLバージョンを確認するには、次を実行します。

dpkg -l | grep openssl

次のバージョンの出力が表示される場合、CVE-2014-0160のパッチが含まれている必要があります。

ii  openssl      1.0.1-4ubuntu5.12      Secure Socket Layer (SSL)...

https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12を見ると、どの種類のバグが修正されているかがわかります。

...
 SECURITY UPDATE: memory disclosure in TLS heartbeat extension
    - debian/patches/CVE-2014-0160.patch: use correct lengths in
      ssl/d1_both.c, ssl/t1_lib.c.
    - CVE-2014-0160
 -- Marc Deslauriers <email address hidden>   Mon, 07 Apr 2014 15:45:14 -0400
...

2
アップグレードしてバージョン5.12を入手しましたが、このツールはまだfilippo.io/Heartbleed Thoughtsの脆弱性を教えてくれますか?
toxaq

3
更新されたサーバーをこちらでテストしましたが、影響を受けていないことがわかりました。システムを再起動しましたか、少なくともすべての必要なプロセスが再起動されていると確信していますか?
犯罪14

3
OPENSSLを更新した後は、Apacheサービスを再起動するだけで済みましたが、グレースフルは役に立ちませんでした。私が使用して行くと、再起動する必要がありましたsudo service apache2 restart
トムHertの

1
脆弱性の原因を発見しました:mod-spdy-betaがインストールされていました。これを削除してApacheを再起動すると、すべてのテストが緑色になります。
アンドレアスロス14

3
更新opensslしても、Apache、Nginx、またはpostfixなどのアプリケーションは修正されません。libssl1.0.0他の投稿で説明されているように、それらを更新して再起動する必要があります。
tnj 14

17

もしあなたのapt-getのリポジトリは任意のプリコンパイルされた含まれていません1.0.1gのOpenSSLバージョンを、これだけの公式サイトからソースをダウンロードし、それをコンパイルします。

単一のコマンドラインの下で、最新のopensslバージョンをコンパイルしてインストールします。

curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install

シンボリックリンクを介して、古いopensslバイナリファイルを新しいものに置き換えます。

sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

あなたはすべて良いです!

# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014

Cfこのブログ投稿

NB:ブログ投稿で述べたように、この回避策は「1.0.1g openSSLソースで再コンパイルする必要があるNginxとApacheサーバー」を修正しません。


2
通常、Ubuntuは新しいアップストリームバージョンを提供しませんが、サポートされているすべてのリリースのバージョンにパッチを適用して、変更を最小限に抑えます。
フロリアンディーシュ14

1
注:OpenSSLを更新した後は、必ずサーバーを再起動してください。ApacheとNginxが新しいライブラリを選択し、脆弱性は閉じられました。
ダンジェロフ14

6
この投稿の詳細を読むのに時間をかけた今、インターネットからランダムな場所からtarballをダウンロードし、その一部をrootとして展開し、実行するのは無謀な行動です。tarball署名がダウンロードされてチェックされた場合は少し改善されますが、署名が正しいキーで署名されたことを確認すること自体が難しい質問です。ディストリビューションは、tarballとパッチの安全な出所を確保するための努力をすでに行っています。ありがとう。
sarnold 14

2
今、ソースからコンパイルして、とにかくちょうど私の2セントexpectlyのUbuntuの古いバージョンでない場合よりも、あなたのより安全なその方法は、後述の傾向から、新しいものをインストールすることをお勧めかもしれません
nwgat

2
@sarnold openssl.orgは、opensslのソースをダウンロードするランダムな場所のようには見えません。Canonicalはこれを不要にする必要がありますが、openssl.org 作業を行う権限のあるアップストリームでなければなりません。
ルスタボーレ

12

サーバー全体のパッケージアップグレードを行いたくない場合。私は今日これらのガイドの束を読み、apt-get upgrade openssl=== apt-get upgradeこれはあなたのマシンに必要なすべてのセキュリティ修正を適用します。どこか古いパッケージバージョンに明示的に傾いているのでない限り、すばらしい。

これは、Apache 2を実行するUbuntu 12.04 LTSで必要な最小限のアクションです。

  • 移動し、このアドレスとあなたは脆弱性を持っていることを証明。Webサーバーのダイレクト外部アドレスを使用する必要があります。ロードバランサー(ELBなど)を使用している場合、Webサーバーに直接接続していない可能性があります。

  • パッケージをアップグレードして再起動するには、次の1つのライナーを実行します。はい、すべてのガイドで、2014年4月4日以降にタイムスタンプを設定する必要があると言っていますが、これは私には当てはまらないようです。

    apt-get update && apt-get install openssl libssl1.0.0 && /etc/init.d/apache2 restart

  • 適切なパッケージバージョンがインストールされていることを確認し、Webサーバーで脆弱性をもう一度確認します。

主要なパッケージは次のとおりです。以下のコマンドを使用してこの情報を特定し、不要なものを編集しました(マシンの状態についてそれほど知る必要はありません)。

$ dpkg -l | grep ssl

ii  libssl-dev                       1.0.1-4ubuntu5.12          SSL development libraries, header files and documentation
ii  libssl1.0.0                      1.0.1-4ubuntu5.12          SSL shared libraries
ii  openssl                          1.0.1-4ubuntu5.12          Secure Socket Layer (SSL)* binary and related cryptographic tools

1.0.1-4ubuntu5.12脆弱性を含めるべきではありません。以下のWebサイトに再度アクセスし、Webサーバーをテストして、これが当てはまることを確認してください。

http://filippo.io/Heartbleed/


2
外部サイトを使用してサーバーの脆弱性を証明することは、私にとって間違ったアプローチのようです。
リンツウィンド14

外部の脆弱性テストスクリプトは、最近ますます一般的になっています。これは、内部スクリプトが行うことを正確に行い、外部Webサーバーから接続が開始されるだけです。すべての接続をリモートで開始するプログラムの例については、WhiteHatSecurity.comなどのサイトをご覧ください。ネットワークの脆弱性テストなど、これが飛ばない場合がありますが、前向きのWebサーバー(一般的にはSSLサーバー)のテストにはこれがほぼ理想的です。
エイドリアン14

パッケージをアップグレードするのにインストールするのはなぜですか?
Braiam

1
apt-get install openssl libssl1.0.0私のためにやった。実行openssl version -a今は、示していますbuilt on: Mon Apr 7 20:33:29 UTC 2014
トファー

「最近、外部の脆弱性テストスクリプトはますます一般的になっています。」これにより、その外部サイトが私のシステムを悪用する可能性が開かれます。いいえ、これは正しい方法ではありません。(そして、はい、apacheとopensslで自分のサイトをホストしています)。
リンツウィンド14

11

緊急に助けを必要とする多くのコメンターに気づきました。彼らは指示に従い、アップグレードし、再起動しますが、いくつかのテストWebサイトを使用するときは依然として脆弱です。

libsslなどの保留中のパッケージがないことを確認する必要があります。

:~$ sudo apt-get upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  libssl-dev (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  libssl1.0.0 (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  linux-image-virtual (3.2.0.31.34 => 3.2.0.60.71)
  linux-virtual (3.2.0.31.34 => 3.2.0.60.71)
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

それらをアップグレードするにはapt-mark unhold libssl1.0.0(たとえば)。次にアップグレードしますapt-get upgrade -V。次に、影響を受けるサービスを再起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.