セキュリティマイスターコラム 第17回

Windows 10のランサムウェア対策を「すり抜ける」攻撃がある
「保護されているフォルダー」にもアクセスできるその手口とは

ワーム型ランサムウェア「WannaCry」が世界中で猛威を振るった2017年、その秋にMicrosoftは「Windows 10 Fall Creators Update」をリリースし、「Ransomware protection」機能を追加しました。
現在のMicrosoftのセキュリティ基準では脆弱性とは認められてはいませんが、この機能をすり抜けて攻撃を可能にする方法を富士通のセキュリティマイスターが発見しました。誰にでも簡単にできる、というその「攻撃手口」の詳細を解説します。

「保護されているフォルダー」にもアクセスできるアプリケーションが引き起こす脅威

半年ごとに実施されるWindows 10の大型アップデートでは、様々な改良や機能が追加されます。2017年秋に、Microsoftはランサムウェア対策として「Ransomware protection」機能を追加しました。これは、「Windows Defender セキュリティセンター」→「ウイルスと脅威の防止」→「ランサムウェアの防止」より利用できる機能で、ユーザーが指定したフォルダーにアクセスするアプリケーションを限定できる機能です。例えば、重要なファイルを格納するフォルダーを作成し、そのフォルダーを「保護するフォルダー」に指定すれば、許可されたアプリケーションしかアクセスできなくなり、仮にコンピュータがランサムウェアに感染しても、そのフォルダーにはアクセスされないというものです。

ところが、「Ransomware protection」は、もともとエクスプローラーなどの一部のアプリケーションからは、「保護されているフォルダー」であってもアクセスを許可する設定になっています。その設定を悪用すれば、「Ransomware protection」が有効になっていても悪意のあるプログラムが、保護されたフォルダーにアクセスできてしまうのです。そのことは、以前のセキュリティコラム(参照://www.fujitsu.com/jp/solutions/business-technology/security/secure/column/meister-column/15/)で指摘しました。今回のコラムでは、「Ransomware protection」の機能を「回避して」、「攻撃可能となる手口」についてより詳しく説明します。

「Controlled folder access」で
保護するフォルダーを指定し、特定のアプリケーションにアクセス許可を与える

始めに、「Ransomware protection」の設定画面で、「保護するフォルダー」及び「そのフォルダーにアクセスできるアプリケーション」を指定する方法を紹介します。

これは、「Controlled folder access」と呼ばれる機能です。以下の図のように、「Controlled folder access」を有効にすると、「Protected folders」画面および「allows an app through Controlled folder access」画面が有効になります。

[図]

次に、「Protected folders」画面を開き、保護したいフォルダーを追加します。
[図]

追加した情報は以下のレジストリに格納されます。
[図]

なおレジストリには書かれていませんが(システム内にハードコードされていると思われます)、デフォルトでは以下のフォルダーが保護されています。
[図]

その次は、「allows an app through Controlled folder access」の画面で、保護されたフォルダーにアクセスできるアプリケーションを追加します。
[図]

追加した情報は以下のレジストリに格納されます。
[図]

以上が、重要なファイルを保護するためのフォルダーを指定し、そのフォルダーにアクセスできるアプリケーションを指定する方法です。

「Controlled folder access」機能でも防げない攻撃

「Ransomware protection」には、保護されたフォルダーにアクセスできるアプリケーションがデフォルトでいくつか用意されています。エクスプローラーやOfficeなどが該当しますが、どれだけのアプリケーションが、デフォルトでアクセス許可されているのか、その全貌は明らかになっていません。

では、アクセスを許可されたアプリケーションにランサムウェアが仕込まれたらどうなるでしょうか。保護されたフォルダーであってもアクセスできるので、ファイルが書き換えられてしまいます。残念ながら、現在の「Controlled folder access」では、このような攻撃を防ぐことができません。

セキュリティ専門家であるYago Jesus氏は、Word経由でこれを実現する方法を発見しました。

彼は、WordやExcel、PowerPointなどのOfficeアプリケーションが、保護されたフォルダーにもデフォルトでアクセスできる「ホワイトリスト」に含まれていることに着目。OLE/COMオブジェクトを使用し、Word経由でWordファイルを書き換えるpythonコードを作成し、保護されたフォルダーにアクセスしてWordファイルの書き換えることに成功しました。ただし、この方法ではOffice関連のファイルしか書き換えることができません。

エクスプローラーを悪用すれば、保護されたフォルダー内のほぼすべてのファイルを書き換え可能

デフォルトでホワイトリストに含まれているアプリケーションにはエクスプローラーがあります。エクスプローラーはファイルを扱うアプリケーションという性質上、これを悪用すれば、ほとんど全てのファイルにアクセス可能です。そのためエクスプローラーにランサムウェアなど、悪意のあるプログラムをインジェクションすることで、保護されたフォルダーにアクセスし、そこにあるほぼ全てのファイルを書き換えることが可能になるのです。以下、私が検証した方法を解説します。

エクスプローラーが起動するときにロードするShell Extension DLLの仕組みを理解する

「通常アプリケーションは起動時に、必要なDLLをロードします。エクスプローラーも同様にDLLをロードしますが、Shell Extension DLLというサードパーティー製のDLLをロードする機構があります。
そのリストは以下のレジストリ配下に記載されています。
HKEY_CLASSES_ROOT \ * \ shellex \ ContextMenuHandlers \

[図]

例えばGUID {90AA3A4E-1CBA-4233-B8BB-535773D48449}ですが、DLLのパスは、以下のレジストリ配下に記載されています。
HKEY_CLASSES_ROOT \ CLSID \ {90AA3A4E-1CBA-4233-B8BB-535773D48449} \ InProcServer32 \

[図]

そして、その値は、%SytemRoot% \ system32 \ shell32.dll となっています。

しかし、このDLLパスは、実際には別の場所に書かれている値が表示されているに過ぎません。
MSDNに記載されていますが、HKEY_CLASSES_ROOT はHKEY_LOCAL_MACHINEとHKEY_CURRENT_USERをマージしたもので、HKEY_LOCAL_MACHINEよりもHKEY_CURRENT_USERが優先されます。

HKEY_LOCAL_MACHINEとHKEY_CURRENT_USERを確認すると以下のようになっています。
HKLM\SOFTWARE \ Classes \ CLSID

[図]

HKCU \ Software \ Classes \ CLSID [図]

HKEY_CURRENT_USERにはそもそもGUIDがありません。そのためHKEY_LOCAL_MACHINEに書かれている値がHKEY_CLASSES_ROOTに反映されることになります。

エクスプローラー起動時に自動的にマルウェアを読み込み、保護された領域のユーザーファイルを暗号化

前出のGUIDの場合、HKEY_CURRENT_USERに悪意あるDLLパスを書くことで、そのDLLをエクスプローラーに読み込ませることができます。しかもHKEY_LOCAL_MACHINEに値を書くには管理者権限が必要ですが、HKEY_CURRENT_USERに値を書くには管理者権限は必要ではありません。

[図]

通常は、HKEY_LOCAL_MACHINEに書かれているパスshell32.dllがHKEY_CLASSES_ROOTに反映され、エクスプローラーが起動時にその値を読み、shell32.dllをロードする動きになります。しかし、悪意のある攻撃者がHKEY_CURRENT_USERに不正なDLLパスを書きこむと、HKEY_CLASSES_ROOTに反映され、エクスプローラーが起動時にその値を読み、不正なDLLをロードし、結果ユーザーファイルを暗号化できてしまいます。この時、不正なDLLパスはローカルである必要がなく、ネットワーク上のパスの指定も可能です。ネットワーク上のどこかにDLLが存在していれば、ターゲットのパソコンにファイルを送り込む必要すらありません。

そしてProcessExplorerを使ってExplorerの状態を確認すると、以下のようにネットワーク上のDLLがExplorerによってロードされていることが分かります。

[図]

「Ransomware protection」をすり抜ける攻撃に対するMicrosoftの見解

今回紹介した攻撃は、Microsoftに報告を行っています。
しかしながらMicrosoftからの回答は、これはセキュリティの脆弱性ではないというものでした。Microsoftの脆弱性の定義は、ユーザーアカウントをベースにしており、各アカウントで境界を区切っています。

つまり、あるユーザーアカウントで行った処理が境界を越えて他のユーザーアカウントに影響を及ぼせる状態を脆弱性と定義しています。

今回発見した攻撃方法は、ユーザー自身のアカウント内に閉じており、他のユーザーアカウントに影響を及ぼしません。つまりMicrosoftの定義では脆弱ではないということになります。

ユーザーアカウントベース以外の境界を超えた攻撃も「脆弱性」として対処が必要ではないか

「Ransomware protection」機能について、今一度、その意味合いを考えてみます。この機能はもともと、WannaCryがMS17-010の脆弱性を使って、境界を越えて他のPCに感染したとしても、保護されたユーザーのデータにアクセスできないようにする機能です。つまりMicrosoftはデータ保護のための新たな境界を作成しています。この境界を超える攻撃については、何らかの対処が必要となるはずです。ユーザーアカウントベースではない境界、脆弱性について、例えば準境界、準脆弱性などを新たに定義する必要があると考えます。

現状、「Ransomware protection」機能を悪用した攻撃への有効な対処方法はありません。

[図]

2019年2月5日

富士通システム統合研究所
研究員
セキュリティマイスター(ハイマスター)
青山 荘也

Windows系(主にネットワーク関連)の開発部門からサイバーセキュリティの研究部門に転属。今までの経験を活かし、Windowsの脆弱性に関する研究を行っている。
過去にAVTOKYO、BSidesLV、OWASP Sendaiでの講演や、鹿児島大学での情報セキュリティ講義のゲスト講師の経験がある。得意分野はネットワーク。ドライバ層からアプリケーション層まで、ほぼ全ての層の開発を経験。

[写真]

「セキュリティ」に関するお問い合わせ・ご相談

Webでのお問い合わせ

お電話でのお問い合わせ

ページの先頭へ