transparent huge page における"Dirty COW" のバリアント - CVE-2017-1000405
Updated -
- Status
- Ongoing
- Impact
- Important
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 セグメントがゼロにマッピングされていることを想定しているユーザースペースアプリケーションを悪用することで、権限のエスカレーションが可能になります。
脆弱性の診断
対処方法
影響を受けるバージョンのカーネルをご使用のお客様は、パッチのリリース直後にカーネルを更新することが強く推奨されます。影響を受けるパッケージや推奨される軽減策の詳細については、以下を参照してください。カーネルの更新を適用するには、システムを再起動する必要があります。
影響を受ける製品の更新
製品名 | パッケージ | アドバイザリー/更新 |
|---|---|---|
| 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 を無効にする方法を以下のページで説明しています。
- Red Hat Enterprise Linux 7 で transparent hugepages (THP) を無効にする: https://access.redhat.com/ja/solutions/1565043
お使いのアプリケーションで transparent huge pages を必要とする場合は、ソフトウェアベンダーに確認してください。
Ansible Playbook
Ansible playbook が利用可能です。正規のスクリプトであることを確認するために、GPG 分離署名 もダウンロードできます。
この Playbook は、HOSTS という名前の変数に対して実行され、以下の方法で起動できます (「hostname」がインベントリーファイルで定義されていることが前提)。
# ansible-playbook -e HOSTS=hostname cve-2017-1000405-mitigate.yml
この Playbook には root 権限が必要なため、適切なパーミッションのあるアカウントを使用する必要があります。
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
