GNU/Linux >> Linux の 問題 >  >> Linux

Heartbleed:OpenSSL のバージョンを確実かつ移植可能にチェックする方法は?

解決策 1:

お使いのバージョンの OpenSSL で表示される日付に基づいて、あなたはいるようです そこにフルバージョンが表示されます。

Open SSL 1.0.1 は 2012 年 3 月 14 日にリリースされました。1.0.1a は 2012 年 4 月 19 日にリリースされました。

それでは、openssl version -a をアサートします。 システムにインストールされている OpenSSL の完全なバージョンを表示するには、ディストリビューションをまたがる適切な方法です。私がアクセスできるすべての Linux ディストリビューションで機能するようで、help.ubuntu.com OpenSSL ドキュメントでも提案されている方法です。 Ubuntu LTS 12.04 には、バニラの OpenSSL v1.0.1 が同梱されています。これは、後に続く文字がないため、省略版のように見えるバージョンです。

そうは言っても、メジャーがあるようです Ubuntu のバグ (または OpenSSL のパッケージ化方法)、その openssl version -a OpenSSL が新しいバージョンにアップグレードされているかどうかに関係なく、2012 年 3 月 14 日から引き続き元の 1.0.1 バージョンを返します。そして、雨が降るとほとんどの場合と同様に、土砂降りになります。

Ubuntu は、更新を OpenSSL (または他のパッケージ) にバックポートする習慣を持っている唯一の主要なディストリビューションではありません。これは、誰もが認識しているアップストリームの更新とバージョン番号付けに依存するよりも重要です。文字のバージョン番号がバグ修正とセキュリティ更新のみを表す OpenSSL の場合、これはほとんど理解できないように思えますが、これは FIPS 検証済みプラグインの主要な Linux ディストリビューションが OpenSSL に同梱されているためである可能性があるとのことです。セキュリティ ホールを塞ぐ変更であっても、何らかの変更によってトリガーされる再検証に関する要件により、バージョンがロックされます。

たとえば、Debian では、修正済みバージョンは 1.0.1e-2+deb7u5 のバージョン番号を表示します 1.0.1g の上流バージョンの代わりに .

その結果、現時点では、Linux ディストリビューション全体で SSL バージョンを確認するための信頼できるポータブルな方法はありません 、それらはすべて、異なるバージョン番号付けスキームで独自のバックポートされたパッチと更新を使用しているためです。実行している Linux の各ディストリビューションの固定バージョン番号を調べ、インストールされている OpenSSL のバージョンをそのディストリビューションの特定のバージョン番号と照合して、サーバーが脆弱なバージョンを実行しているかどうかを判断する必要があります。

解決策 2:

真のクロスプラットフォームが必要な場合は、バージョン番号に依存するのではなく、脆弱性自体を確認してください。

脆弱であることがわかっているバージョン番号を報告するコードがあるかもしれませんが、実際のコードは脆弱ではありません .そしてその逆 -- 静かに脆弱なコード -- は、さらに悪化する可能性があります!

OpenSSL や OpenSSH などのオープンソース製品をバンドルする多くのベンダーは、API の安定性と予測可能性を維持するために、緊急の修正を古いバージョンのコードに選択的に後付けします。これは、「長期リリース」およびアプライアンス プラットフォームに特に当てはまります。

しかし、これを暗黙のうちに (独自のバージョン文字列サフィックスを追加せずに) 行うベンダーは、脆弱性スキャナーで誤検知を引き起こす (そしてユーザーを混乱させる) 危険性があります。そのため、これを透過的かつ検証可能にするために、一部のベンダーは独自の文字列をメジャー パッケージ バージョンに追加しています。 Debian (OpenSSL) と FreeBSD (OpenSSH では、VersionAddendum 経由) の両方 sshd_config ディレクティブ) でこれを行うこともあります。

これを行わないベンダーは、他のプログラムがバージョン番号をチェックする直接的および間接的な方法が多数あるため、破損の可能性を最小限に抑えるためにそうしている可能性があります。

したがって、次のようになります:

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

...パッチが適用されているにもかかわらず:

$ dpkg -l openssl | grep openssl
ii  openssl  1.0.1-4ubuntu5.12  [truncated]

$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr  7 12:37 /usr/bin/openssl

$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748  /usr/bin/openssl

このような状況では、バージョン番号を信用しないほうがよいでしょう。

解決策 3:

残念ながら、あるかどうかはわかりません これを行うクロスプラットフォームの方法。ブログの投稿で説明したように、Ubuntu 12.04 に表示される OpenSSL のバージョンは、固定バージョンにアップグレードした後も 1.0.1 のままです。

Ubuntu 12.04 の場合のみ、以下のすべてに該当する場合、更新されたかどうかを判断できます:

<オール>
  • dpkg -s openssl | grep Version バージョン 1.0.1-4ubuntu5.12 以降を示します。
  • dpkg -s libssl1.0.0 | grep Version バージョン 1.0.1-4ubuntu5.12 以降を示します。
  • openssl version -a 2014 年 4 月 7 日以降の「作成日」を示しています。
  • 追加情報を提供してくれた @danny に感謝します。

    解決策 4:

    以下を試してみてください。 crypto からすべての文字列を抽出します ssh がリンクされているライブラリ。複数行の出力が生成されますが、必要に応じて 1 行に変換できます。

    ldd `which ssh` | awk '/\// { print $3 }' | grep crypto | xargs strings  | grep OpenSSL
    

    生産

    OpenSSLDie
    DSA_OpenSSL
    ...
    MD4 part of OpenSSL 1.0.1f 6 Jan 2014 
    MD5 part of OpenSSL 1.0.1f 6 Jan 2014
    ... 
    etc
    

    例えばEmerge前にGentooで

    [ebuild     U  ] dev-libs/openssl-1.0.1f [1.0.1c] USE="bindist (sse2) tls-heartbeat%* zlib -gmp -kerberos -rfc3779 -static-libs {-test} -vanilla" 4,404 kB
    

    上記のコマンドの結果

    ...
    OpenSSL 1.0.1c 10 May 2012
    

    ...
    OpenSSL 1.0.1f 6 Jan 2014
    

    ああ、まだ g がありません。

    解決策 5:

    これらのスクリプトはすべてのサービスをテストしますか? それとも HTTPS のみをテストしますか?私の知る限り、PostgreSQL は脆弱ですが、実際の攻撃が表面化するまでは噂にすぎません.

    使用可能な metasploit スクリプトがあります。

    https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a
    

    これを入力するか (2014-01-14 日付の GnuWin32 OpenSSL バイナリ バージョン 1.0.1.6 でテスト済み)、またはこのスクリプトの下のコメントでスクリプトを使用することができます。より正確で簡単です!

    s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state
    

    タイプ B に接続すると、脆弱なホストが表示され、切断されません:

    B
    
    HEARTBEATING
    write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
    0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49   ....=.o 5 (0x5))
    0000 - 18 03 03 00 3d                                    ....=
    read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
    0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34   .M...........;H4
    0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0   n.....:4.{.|....
    0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f   .u.......NJ}Q...
    0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f            .#.w....w.+..
    read R BLOCK
    

    これに似たハートビート応答が得られます。

    パッチが適用されたホストでは、以下のような応答が表示され、切断されます:

    Bを入力してください

    HEARTBEATING
    write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
    0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c   ....`....;?..:.L
    0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56   .3..=CTuD},{.G.V
    0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95   .7.C..{.f..U_...
    0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51   .Le.!...zpy....Q
    0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6   [email protected]
    0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87   !BdXb..Q....!.o.
    0060 - b9 c2 04 c8 47                                    ....G
    

    ソース:

    • ブログ投稿 OpenSSL のハートブリードをテストする方法

    これらのツールもあります:

    • https://github.com/titanous/heartbleeder

    • http://filippo.io/Heartbleed/

    • https://github.com/musalbas/heartbleed-masstest


    Linux
    1. LinuxでMySQLのバージョンを確認する方法

    2. CentOS のバージョンを確認する方法

    3. ターミナルでHZを確認するには?

    1. Redhatのバージョンを確認する方法

    2. OSとLinuxのバージョンを確認する方法

    3. Linux コマンドを使用して OS とバージョンを確認する方法

    1. LinuxでMySQLのバージョンを確認する方法

    2. OpenSSLバージョン番号を確認する方法

    3. 使用中のWordpressのバージョンを確認してください