web-dev-qa-db-ja.com

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

現在、バージョン1.0.1から1.0.1f(包括的)および1.0.2-betaに影響する OpenSSLのバグ が見つかっています。

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

影響を受けるすべてのユーザーがこの更新プログラムを適用する方法now

153
Lucio

セキュリティ更新プログラムは12.04、12.10、13.10で利用可能です および14.04buntu Security Notice USN-2165-1 をご覧ください。

そのため、まず次のコマンドを実行して、利用可能なセキュリティ更新プログラムを適用する必要があります

Sudo apt-get update
Sudo apt-get upgrade

コマンドラインから。

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

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

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キーを再生成する必要があります サーバーから機密情報を取得した可能性があります。

141
Florian Diesch

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

影響は何ですか?

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

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

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

  1. 影響を受けるすべてのサーバーをオフラインにします。サーバーが実行されている限り、重要なデータが漏れている可能性があります。

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

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

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

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

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

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

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

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

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

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

参照資料

71
Gilles

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
...
40
crimi

apt-get repositoriesにプリコンパイル済み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 this ブログ投稿

NB:この回避策では、「1.0.1g openSSLソースで再コンパイルする必要のあるNginxおよびApacheサーバー」は修正されません。

17

サーバー全体のパッケージアップグレードを行いたくない場合。私は今日これらのガイドの束を読み、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/

12
Adrian

緊急に助けを必要とする多くのコメンターに気づきました。彼らは指示に従い、アップグレードし、再起動しますが、いくつかのテスト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。次に、影響を受けるサービスを再起動します。

11
Domino