transparent huge page における"Dirty COW" のバリアント - CVE-2017-1000405

Public Date: November 29, 2017, 09:30
更新 January 3, 2018, 19:07 - 英語
Resolved 状態
Important Impact

Red Hat Product セキュリティーチームは、Linux kernel 内の脆弱性について認識しています。この脆弱性には、CVE-2017-1000405 が割り当てられています。この問題は 2017年 11月 29 日に公開され、重要な影響 と評価されています。

背景情報

Linux カーネルのメモリーサブシステムが、メモリーマッピングをベースとしたプライベートな読み取り専用の huge-page のコピーオンライト (COW) を処理する方法において、競合状態が発生することが判明しました。

この不具合を悪用すると、権限のないローカルユーザーが、本来は読み取り専用であるメモリーマッピングへの書き込み権限を取得し、読み取り専用ページを修正できるようになるため、ユーザースペースのアプリケーションの動作に影響を及ぼすことが可能になります。

謝辞

Red Hat は、Eylon Ben Yaakov 氏と Daniel Shapiro 氏がこの問題を報告してくださったことに感謝いたします。

影響を受ける製品

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

  • Red Hat Enterprise Linux 7 for ARM および Red Hat Enterprise Linux for Power LE

影響を受けない製品

以下の Red Hat 製品のバージョンでは、この問題をもたらすコミットをバックポートしていないので、影響を受けません。

  • Red Hat Enterprise Linux 5、6、7
  • Red Hat Enterprise MRG 2

Red Hat の Linux コンテナーは、今回の不具合のようなカーネル問題による直接の影響は受けませんが、Red Hat では最新版のコンテナーイメージを使用することを推奨しています。Red Hat Container Catalogue に含まれる Container Health Index を使用すると、お使いのコンテナーのセキュリティー状況を確認できます。

攻撃の詳細と影響

この不具合により、ローカルシステムのアカウントを持つ攻撃者は、適切なパーミッションなしでは編集できないようにする標準のパーミッションメカニズムを迂回して、従来は「読み取り専用」と考えられていた hugepage を変更することが可能になります。touch_pmd と can_follow_write_pmd のアクセスを競合させることで、COW サイクルを経ることなく pmd を「ダーティー」とすることができ、上記が可能になります。

攻撃者が実行できる最も初歩的な攻撃方法は、物理ページ 0 を変更することです。ELF フォーマットのアプリケーションバイナリーは、このページが読み取り専用にマッピングされ、その "BSS" セクションの一部として利用可能であることに依存しています。コンパイラーは、変数が未初期化されている (0 に設定) ことを想定して、コードを作成します。この不具合を利用すると、COW プロセスなしに物理ページ 0 のマッピングと書き込みが可能になります。このため、このページのすべてのマッピングには 0 の値のみが含まれるという不変式が壊されて、予想外で未定義の動作が発生します。

今回のバグは、攻撃者が変更できるメモリーページのタイプを勘案すると、元の "Dirty COW" ほど深刻なものではありません。通常のファイルは、transparent huge page を使ってマッピングできません。ただし、BSS セグメントがゼロにマッピングされていることを想定しているユーザースペースアプリケーションを悪用することで、権限のエスカレーションが可能になります。


脆弱性の診断

システムの脆弱性の判断

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

対処方法

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

影響を受ける製品の更新

製品名

パッケージアドバイザリー/更新
Red Hat Enterprise Linux 7 for ARM および Red Hat Enterprise Linux for Power LE
kernel-alt保留中

軽減策

この不具合を悪用する際にはまず、ページ 0 を変更してユーザーのコンテンツで置き換えることになります。異なる攻撃方法が見つけられる可能性もあるので、ご使用の環境に適した軽減策を検討してください。


1 次軽減策:

/sys ディレクトリー内の設定を以下のように修正すると、0 ページが huge page としてマッピングされることを回避できます。この方法により、今回の不具合の悪用を防ぐことができます。

# echo 0 > /sys/kernel/mm/transparent_hugepage/use_zero_page

この軽減策はシステムを再起動すると維持されないため、システムを起動するたびに適用する必要があります。

2 次軽減策:

システム上で hugepage を無効にすることで、この不具合を軽減することもできます。ユーザーのアプリケーションによっては、パフォーマンスを上げるために hugepage を必要とするものもあるので、hugepage なしで実行するとパフォーマンスが下がる場合もあります。

Red Hat では、transparent hugepages を無効にする方法を以下のページで説明しています。

お使いのアプリケーションで transparent huge pages を必要とする場合は、ソフトウェアベンダーに確認してください。

Ansible Playbook

Ansible playbook が利用可能です。正規のスクリプトであることを確認するために、GPG 分離署名 もダウンロードできます。

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

# ansible-playbook -e HOSTS=hostname cve-2017-1000405-mitigate.yml	

この Playbook には root 権限が必要なため、適切なパーミッションのあるアカウントを使用する必要があります。

Comments