• JP
  • magnifying glass search icon to open search field
  • お問い合わせ
  • リソースセンター
  • サポートを受ける
  • 現在、攻撃を受けていますか?
Palo Alto Networks logo
  • 製品
  • ソリューション
  • サービス
  • 業種
  • パートナー
  • パロアルトネットワークスをお勧めする理由
  • 会社案内
  • その他
  • JP
    Language
  • お問い合わせ
  • リソースセンター
  • サポートを受ける
  • 現在、攻撃を受けていますか?
  • スタート ガイド

Windows エラー報告 (WER) ゼロデイ脆弱性(CVE-2019-0863) 概要

Gal De Leon 7 03, 2019 at 02:45 午後

本ブログは米国で2019年07月02日に公開されたUnit 42ブログ「Tale of a Windows Error Reporting Zero-Day (CVE-2019-0863)」の日本語翻訳です。

 

 

2018年12月、「SandboxEscaper」というエイリアスで知られるハッカーが Windows エラー報告 (Windows Error Reporting, WER) コンポーネントに存在するゼロデイ脆弱性を公開しました。この公開内容をさらに深く掘り下げた結果、筆者はその脆弱性とはべつにもうひとつのゼロデイ脆弱性があることを発見しました。その脆弱性はシステム特権昇格に悪用される可能性があるもので、Microsoft のアドバイザリによれば、2019年5月にパッチがリリースされるまで攻撃者たちが当該脆弱性をゼロデイとして悪用していたようです。

そこで本稿では、当該脆弱性がどのような機序で悪用されるのかを見ていきます。
 

Microsoft WINDOWS エラー報告 (WINDOWS ERROR REPORTING)とは

Windows エラー報告 は、イベントに基づいて柔軟なフィードバックを行うためのしくみで、Windows で検出可能なハードウェア/ソフトウェア関連の障害情報を収集し、その情報を Microsoft に報告し、ユーザーに利用可能な解決策を提供するよう設計されています。

たとえば、Windows がシステム クラッシュや障害に遭遇した場合、エラー レポートが生成され、Windows エラー報告のレポート キュー ディレクトリにそのレポートが保存されます (C:\ProgramData\Microsoft\Windows\WER\ReportQueue)。このディレクトリ以下には、レポートごとのサブディレクトリと関連メタデータを含む一意の Report.wer INI ファイルが置かれます。すべてのプロセスが障害報告できるよう、ReportQueue ディレクトリは、どのユーザーでも書き込みが可能です (下図参照)。

 

図 1 Windows エラー報告のキュー ディレクトリ

生成後のレポートは、さらなる分析のために Microsoft に送信する必要があります。この情報のやりとりをトリガーする方法には何種類かあって、その 1 つがタスク スケジューラの Windows Error Reporting\QueueReporting スケジュール タスクを利用する方法です。このタスクはセキュリティの観点で見て興味深く、次のような特徴をもっています。

  • タスクの [セキュリティ オプション] セクションで定義されているとおり、システム権限で実行される
  • タスクを要求時に実行できる
  • 決め打ちのコマンドライン引数を指定して専用バイナリ コードを実行する (wermgr.exe -upload)

 

図 2 Windows エラー報告のタスク スケジュール

実行されると、wermgr.exe は保留になっているレポート ファイルやディレクトリとやり取りをする、つまりレポート ファイルを読み取り、解析し、ほかのディレクトリにコピーし、ときには削除することもあります。要するにここには、誰にでも書き込み権限のあるファイルにアクセス可能な、最上位特権で動作するコンポーネントがあり、注意して実装しないと深刻なセキュリティ脆弱性が生じる可能性がある、ということになります。
 

ファイルシステム リンクの悪用

Windows は、さまざまな種類のファイルシステム リンクをサポートしています。リンクを使用すれば、あるファイルやディレクトリがべつの意図したファイルやディレクトリを指すようにすることができます。ごく簡単に言うなら、リンクはいったんスキャン・再解析された後は、ユーザーを意図したべつのパスにリダイレクトするようになります。セキュリティの観点から見ると、最大の脅威はハードリンクとマウントポイントの悪用によるものでしょう。というのもこれらを悪用すれば、ユーザーは、もともと書き込み権限を持っていないファイルやディレクトリにもリンクできるようになるからです。

たとえば次の例は、kernel32.dll に対する書き込み権限を持っていないユーザーが、c:\temp\Dir\x.dll と C:\Windows\System32\kernel32.dll の間にリンクを作成する様子を示しています。ハッカーにとっては、より高い特権をもつコンポーネントにリダイレクトさえできればそれで用が足りるのです。それだけあれば、機微な重要ファイルの読み書きに加え、それらの削除すら可能になります。

 

図 3 ユーザーが書き込み権限を持っていないファイルにハードリンクを作成する様子


Windows エラー報告の特権の昇格の脆弱性について

かいつまんで言えば、ハッカーは、Windows エラー報告の機能を悪用して、先に説明したファイルシステムのリンクを使ってレポート ディレクトリ内のファイルをコンピュータ上のべつの意図したファイルにリンクすることで、自分が読み取り・書き込み・削除をしたいほかのファイルに対し、そのための権限を割り当てることができるようになります。

もうすこし詳しく説明するなら、当該脆弱性は次のようにして悪用されます。

  • ステップ 1: wermger.exe がレポート ディレクトリ以下すべてのファイルを 1 つずつ解析し、それらを Microsoft に送信します。
  • ステップ 2: wermger.exe が Report.wer INI ファイルの破損を検出した場合、当該ファイルを削除するためにプロセス実行者権限を付与してファイルの DACL (discretionary access control list、随意アクセス制御リスト) プロパティを変更し、そののちに最終的な削除を行います。
  • エクスプロイト: ハッカーは、「wermger.exe によるファイルの DACL 読み取り」から「当該ファイルに削除権限が付与されるまで」までのごく短かい隙を突きます。攻撃者がそうした破損ファイルとシステム上にあるべつのファイルとの間にリンクを作成した場合、DACL 読み取り後に wermgr.exe がほかのファイルのセキュリティ記述子を誤って変更してしまいます。これがきわめて、きわめて深刻なシナリオであることに疑いの余地はないでしょう。

ステップ 1:

最初に wermgr.exe -upload が行うのは、wermgr!DoCoreUpload 関数の呼び出しです。wermgr!DoCoreUpload 関数は、ReportQueue 以下のすべてのサブディレクトリを一覧する関数です。この関数が、エラーレポートを読み取って、Microsoft に送信します。

int64 DoCoreUpload(/* ... */) {
	/* ... */
	Ret = WerpSubmitReportFromStore(ReportPath, /* ... */);
	if (Ret >= 0) {
		/* Report successfully uploaded */
	} else {
		if (Ret == ERROR_FILE_CORRUPT) {
			DeleteCorruptedReportFromStore(ReportPath);
		}
	}
}

 

ステップ 2:

wermgr.exe が Report.wer INI ファイルの破損を検出し、後で削除するために DACL を変更します。具体的には以下を行います。

  1. 最初に wermgr!DeleteCorruptedReportFromStore がレポートのサブディレクトリ以下のすべてのファイルを一覧にします。
  2. その後、 wermgr!PreparePathForDeletion が各ファイルの権限を変更します。これが本脆弱性において核心となる部分です。なぜなら、この関数が kernel32!GetFileSecurity を使ってファイルのセキュリティ記述子を読み込み、kernel32!SetFileSecurity を呼び出して、削除を指定したセキュリティ記述子をファイルに適用するからです。

 

int64 PreparePathForDeletion(wchar_t* FileName) {
	PSECURITY_DESCRIPTOR SecurityDescriptor = NULL;
	DWORD BytesRead = 0;
	PDACL Dacl = NULL;
	/* ... */
	
	if ( !GetFileSecurity(FileName, 
				    DACL_SECURITY_INFORMATION, 
				    NULL, 0, &BytesRead) ) {
		/* ... */
		return;
	}
	
	SecurityDescriptor = new BYTE[BytesRead];
	
	if ( !GetFileSecurity(FileName, 
				    DACL_SECURITY_INFORMATION, 
				    SecurityDescriptor, 
				    BytesRead, &BytesRead) ) { 
		/* ... */
		return;
	}
	
	if ( GetSecurityDescriptorDacl(SecurityDescriptor, 
						 &DaclPresent, 
						 &Dacl, &DaclDefaulted) )
	{
		/* ... */
		HANDLE TokenHandle = NULL;
		PACL NewAcl = NULL;
		EXPLICIT_ACCESS ExplicitAccess = {0};
		
		/* ... */
		LPVOID UserName = new BYTE[/* ... */];
		GetTokenInformation(TokenHandle, TokenUser, 
					  UserName, &BytesRead);
		
		ExplicitAccess.Trustee.ptstrName = UserName;
		ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_NAME;
		ExplicitAccess.grfAccessMode = GRANT_ACCESS;
		ExplicitAccess.grfAccessPermissions = DELETE | /* ... */;
		/* ... */
		
		SetEntriesInAcl(1, &ExplicitAccess, Dacl, &NewAcl);
		InitializeSecurityDescriptor(&SecurityDescriptor, 1);
		SetSecurityDescriptorDacl(&SecurityDescriptor, 1, NewAcl, 0);
		SetFileSecurity(FilePath, DACL_SECURITY_INFORMATION, 
				    &SecurityDescriptor);	
	}
}

 

正確なタイミングでリンクを作成することは非常にむずかしいのですが、根気強いハッカーなら成功するまで何度でもやってみることでしょう。また、攻撃者はおそらく実行可能ファイル (DLL、EXE、またはスクリプト) を狙ってそれらを悪意のあるペイロードで上書きすることでしょう。なぜなら、上書きされたファイルが後でシステムの権限で実行されることを知っているからです。
 

Traps の振る舞い検知によるシステム保護

エンドポイントの保護とレスポンスを提供するパロアルトネットワークスの Traps™ は、エンドポイント上の脅威を阻止し、ネットワーク、クラウドのセキュリティ対策と連携することにより、サイバー攻撃を未然に防ぎます。Traps は、高度な攻撃も自動検出して対応する機械学習 (ML) と人工知能 (AI) を組み込み、攻撃テクニック、攻撃の振る舞いを観測することにより、マルウェア、エクスプロイト、ランサムウェアを阻止します。本稿で説明したような脆弱性の悪用を防止するため、Traps の Behavioral Threat Protection (BTP、振る舞いベースの脅威保護) 機能は、一連のイベントにまたがる悪意のある行動を監視し、攻撃を検出すると直ちにこれを終了させます。さらに、機械学習による Traps のローカル解析は、悪意のあるペイロードの実行を防止します。

Traps について更に詳しくは https://www.paloaltonetworks.jp/products/secure-the-endpoint/traps をご確認ください。

 

ニュース

Wireshark によるパケット解析講座 1

Wireshark は無料で利用できるプロトコル アナライザです。 Wireshark を使うとネットワーク トラフィックをキャプチャしたり、キャプチャしたパケットを表示させることができます。そこでパロアルトネットワークスの脅威インテリジェンス調査チーム Unit42 に所属するアナリストが、Wireshark を使ってマルウェア検体が生成したトラフィックをレビューするさいに利用している便利な使いかたをご紹介していきます。
January 17, 2019

ニュース

Wireshark によるパケット解析講座 3

前回までではWiresharkの列表示のカスタマイズ方法と表示フィルタの式について見ていきました。本稿ではトラフィックから感染ないし侵害を受けたホスト名やユーザーを特定する方法について説明します。
March 31, 2019

ニュース

Wireshark によるパケット解析講座 2

前回は Wiresharkの列表示のカスタマイズ方法について見ていきました。本稿では脅威インテリジェンスの調査上便利なフィルタリングの設定方法について説明します。
January 20, 2019

ニュース

DNSトンネリング: 攻撃者はDNSをどう悪用するのか

悪意のある攻撃者は、ドメインネームサービス(DNS)をコマンド&コントロール(C2)用通信チャネルとして悪用してきました。またこのプロトコルはこのほかに、データを漏出させる目的でも悪用されてきました。DNS の悪用はC2に「ハートビート」接続のために通信するという用途からさらに広がっており、攻撃者はここ数年、悪意のあるデータやペイロードをDNS経由で被害者のシステムに侵入させる用途にもDNSを使っています。本稿では、DNSを悪用したデータ侵入・漏出の種類、方法、使用方法を紹介し、その防御メカニズムへの指針を示します。
March 18, 2019

ニュース

Wireshark によるパケット解析講座 4

セキュリティ専門家は、不審なアクティビティのパケット キャプチャ(pcap)をレビューする際、より詳しく調べるために、オブジェクトをpcapからエクスポートしなければならない場合があります。
July 12, 2019

データシート

PA-400シリーズ

パロアルトネットワークスの機械学習を活用したNGFW「PA-400 Series (PA-460、PA-450、PA-440)」なら、分散した大企業の支社、小売店、中規模企業にも次世代ファイアウォール機能を導入できます。
August 3, 2022

最新ニュース、イベント情報、脅威アラートを配信

このフォームを送信すると、お客様は弊社の利用規約とプライバシー ポリシーに同意したものとみなされます。

black youtube icon black twitter icon black facebook icon black linkedin icon
  • USA (ENGLISH)
  • AUSTRALIA (ENGLISH)
  • BRAZIL (PORTUGUÉS)
  • CANADA (ENGLISH)
  • CHINA (简体中文)
  • FRANCE (FRANÇAIS)
  • GERMANY (DEUTSCH)
  • INDIA (ENGLISH)
  • ITALY (ITALIANO)
  • JAPAN (日本語)
  • KOREA (한국어)
  • LATIN AMERICA (ESPAÑOL)
  • MEXICO (ESPAÑOL)
  • SINGAPORE (ENGLISH)
  • SPAIN (ESPAÑOL)
  • TAIWAN (繁體中文)
  • UK (ENGLISH)

人気のあるリソース

  • 会社概要
  • イベント センター
  • イベント
  • リソースセンター
  • プレスリリース
  • Unit42 ブログ
  • 投資家の皆様へ
  • ブログ
  • Japan Live Community
  • Tech Docs
  • キャリア
  • お問い合わせ
  • サイトマップ

法定通知

  • プライバシー
  • 個人情報保護基本方針
  • 利用規約
  • トラスト センター
  • ドキュメント
  • 一般事業主行動計画

アカウント

  • 購読の管理
  • パートナーログイン
  • パートナーになる
脆弱性の報告

Copyright © 2023 Palo Alto Networks. All rights reserved