Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

CVE-2017-1000253: load_elf_binary により十分な容量が割り当てられない

Updated -
Status
Ongoing
Impact
Important

Red Hat Product Security チームは、ELF バイナリーを読み込む Linux カーネルの実装に影響を与える脆弱性について認識しています。アプリケーションが 位置独立実行形式 (PIE: Position Independent Executables) として構築されている場合に、ローダーにより、アプリケーションのデータセグメントの一部が、スタック用に確保されているメモリー領域にマッピングできるため、スタックが破損し、権限の昇格ができてしまう可能性があります。この脆弱性には CVE-2017-1000253 が割り当てられました。この問題は 2017 年 9 月 26 日に公開され、影響度は 重要 と評価されています。

背景情報

位置独立実行形式 (PIE: Position Independent Executables) は、アプリケーションバイナリー (ELF)、ライブラリー、関連アセットのメモリーの場所を無作為に選択できるようにして攻撃を困難にすることが目的のセキュリティーメカニズムです。これは、データ固有のメモリーの場所を予測できる可能性を減らし、一般的な攻撃の成功率を減らすことが目的です。

PIE 実行ファイルの詳細

実行ファイルは、compile-time オプションとして '-pie' フラグを指定してコンパイラーに渡し、PIE で作成可能です。

$ gcc -pie test.c -o test

既存のプログラムは、 'readelf' を使用して固有のヘッダーを検索することで PIE 実行ファイルであるかどうかを判断することができます。以下は、以前にコンパイルされた test 実行ファイルを検証する際に使用したコマンド例です。

$  readelf -h ./test | grep "Type:[[:space:]]*DYN "
  Type:                              DYN (Shared object file)

$ readelf -d ./test |grep "(DEBUG)"
 0x0000000000000015 (DEBUG)              0x0

攻撃者は、PIE 実行ファイルを作成する能力がなくても、システム上の既存の PIE 実行ファイルを悪用することができます。

謝辞

Red Hat は、この問題の報告について Qualys Research Labs に謝意を表します。

追加の参考資料

https://access.redhat.com/blogs/766093/posts/1975793
http://www.trapkit.de/tools/checksec.html
https://en.wikipedia.org/wiki/Position-independent_code#Position-independent_executables
https://sourceware.org/binutils/docs/binutils/readelf.html


影響を受ける製品

Red Hat Product Security チームは、本件によるセキュリティー上の影響度を重要と評価しています。

以下の Red Hat 製品バージョンが影響を受けます。

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7 (7.4.0 以前のリリース)
  • Red Hat Enterprise Linux for Realtime (kernel-rt-3.10.0-693.rt56.617 以前のバージョン)
  • Red Hat Enterprise MRG 2 (kernel-rt-3.10.0-693.2.1.rt56.585.el6rt 以前のバージョン)

影響を受けない製品

カーネル 3.10.0-693 以降のバージョンが搭載された Red Hat Enterprise Linux 7.4 を実行中のシステム カーネル kernel-rt-3.10.0-693.rt56.617 以降のバージョンが搭載された Red Hat Enterprise Linux for Realtime、カーネル kernel-rt-3.10.0-693.2.1.rt56.585.el6rt 以降が搭載された Red Hat Enterprise MRG-2 は、今回の脆弱性による影響はありません。

Red Hat の Linux コンテナーでは、ホストのカーネルからの不具合が継承されます。Red Hat は、入手可能な最新版のコンテナーイメージを使用することを推奨します。Red Hat Container Catalogue に含まれる Container Health Index を使用すると、いつでもお使いのコンテナーのセキュリティー状況を確認できます。

攻撃の詳細と影響

カーネルが ELF 実行ファイルを読み込もうとすると不具合が発生し、全体的に必要なメモリー容量が正しく算出されなくなります。カーネルがバイナリーのセグメントを読み込むと、バイナリーの一部が アプリケーションとスタックのギャップ用に確保されている領域とそれ以上の領域にマッピングされ、スタック自体と、バイナリーの一部が重複してしまう可能性があります。

攻撃者は、データの破損時には正しくサイズが割り当てられ、有効で機能するペイロードでオーバーレイされるバイナリーを作成して実行する必要があります。攻撃者はカーネルの指示を変更できませんが、特権のあるユーザー空間アプリケーションに対して攻撃が行われた場合 (setuid を使用した場合) や、追加のユーザー権限がある場合には、権限を昇格することができてしまう可能性があります。

これはリモート攻撃ではなく、攻撃者はシステムのローカルアカウントにアクセスできなければなりません。

脆弱性の診断

システムの脆弱性の判断

システムに脆弱性があるかを判断します。以下の診断スクリプトを使用して、現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断します。正規のスクリプトであることを確認するには GPG 分離署名 もダウンロードします。このスクリプトの現在のバージョンは 1.0 です。

対処方法

影響を受けるバージョンのカーネルをご使用のお客様は、パッチのリリース直後にカーネルを更新することが強く推奨されます。影響を受けるパッケージや推奨の軽減策に関する詳細は以下を参照してください。カーネルの更新を適用するには、システムを再起動する必要があります。

影響を受ける製品の更新

Red Hat Enterprise Linux 7.2 以降を実行しているお客様は、kpatch を利用できます。kpatch の利用をご希望されるお客様は、サポートケースを作成してください。

kpatch の詳細については、 RHEL 7 はライブカーネルパッチ (kpatch) をサポートしていますか? を参照してください。

* kpatch をリクエストするには有効なプレミアムサブスクリプションのエンタイトルメントが必要です。

製品パッケージアドバイザリー
Red Hat Enterprise Linux 7.3 Extended Update Support (EUS)*kernelRHSA-2017:2793
Red Hat Enterprise Linux 7.2 Extended Update Support (EUS)*kernelRHSA-2017:2794
Red Hat Enterprise Linux 6kernelRHSA-2017:2795
Red Hat Enterprise Linux 6.7 Extended Update Support (EUS)*kernelRHSA-2017:2796
Red Hat Enterprise Linux 6.6 Advanced Update Support (AUS)**kernelRHSA-2017:2797
Red Hat Enterprise Linux 6.5 Advanced Update Support (AUS)**kernelRHSA-2017:2798
Red Hat Enterprise Linux 6.4 Advanced Update Support (AUS)**kernelRHSA-2017:2799
Red Hat Enterprise Linux 6.2 Advanced Update Support***kernelRHSA-2017:2800
Red Hat Enterprise Linux 5 Extended Life SupportkernelRHSA-2017:2801
Red Hat Enterprise Linux 5.9 Advanced Update Support (AUS)**kernelRHSA-2017:2802

** このパッチを取得するには、有効な EUS サブスクリプションが必要です

お持ちのアカウントに有効な EUS サブスクリプションがない場合は、Red Hat 営業部門または営業の担当者にお問い合わせください。

Red Hat Enterprise Linux Extended Update Support サブスクリプションとは何ですか?

*** RHEL AUS のパッチを入手するには、有効な AUS サブスクリプションが必要です

軽減策

vm.legacy_va_layout を 1 に設定すると、レガシーの nmap レイアウトに切り替えて、この問題を悪用できないように効果的に指定することができます。mmap の割当ては、プロセスアドレス空間の下層部で開始され、ボトムアップの割当モデルにに準拠します。そのため、最初の PIE 実行ファイルは確保されているスタックの領域からはるかに離れた場所にマッピングされ、スタックの干渉ができなくなります。

Red Hat Enterprise Linux 5 の 64 ビットプロセスでは、vm.legacy_va_layout の値の有無に拘らず、強制的にレガシーの仮想アドレスレイアウトが使用されます。

注記: 大容量のリニアアドレス空間を必要とするアプリケーション (特定のデータベース) は、この軽減策で提案されているレガシーのメモリーレイアウトを処理できない可能性があります。システムおよびアプリケーションをテストしてから、実稼働システムにこの軽減策をデプロイすることを推奨します。

root として /etc/sysctl.conf ファイルを編集し、以下のように追加/編集を行います。
vm.legacy_va_layout = 1
この設定を適用するには、root ユーザーとして /sbin/sysctl -p コマンドを実行して、 /etc/sysctl.conf からの設定を再読み込みします。

vm.legacy_va_layout が定義済みの値に設定されていることを確認します。
$ /sbin/sysctl vm.legacy_va_layout
    vm.legacy_va_layout = 1

    さらにサポートが必要な場合には Red Hat グローバルサポートサービス にお問い合わせください。

    Ansible Playbook

    Ansible playbook を利用できます。正規のスクリプトであることを確認するには GPG 分離署名 もダウンロードしてください。

    この Playbook は、HOSTS という名前の変数に対して実行され、次のように起動できます (「hostname」がインベントリーファイルに定義されていることが前提です)。 

    # ansible-playbook -e HOSTS=hostname cve-2017-1000253-mitigation.yml	

     この Playbook には root 権限が必要であり「become: true」を指定するので、適切な権限が設定されているアカウントを使用する必要があります。

    Subscriber exclusive content

    A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

    Current Customers and Partners

    Log in for full access

    Log In
    Close

    Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.