6月の”パッチ・チューズデイ”(6月12日)*1 が到来したものの、まだ多くのWindows 10ユーザーがパッチを当てていないようです。*2 ぜひ、まだプログラムを更新していない方は、Windows 10 デバイスを放っておかずに更新をしてください。今回のパッチは、Windows 10 および 音声アシスタント「コルタナ」のデフォルトの設定を使用してコードを実行する脆弱性を修正します。ここでは、これが当てられる前のWindows 10端末のロック画面からコード実行が可能であるこの脆弱性がどのように使用されるかを詳しく説明します(このパッチサイクルの前にRS3、RS4で確認済み)。この脆弱性は、McAfee Labs Advanced Threat Researchチームの開示ポリシーに則り、4月23日にMicrosoftに提出されました。
この記事では、Windows10およびコルタナのデフォルト設定の脆弱性に関する調査結果について報告します。情報漏洩に関連する内容をはじめ、今回の方法の一部が確認できるデモも用意しましたのでご覧ください。
目次
「Hey、コルタナ」と呼びかけるだけで機密情報を取得
シリ、アレクサ、グーグルアシスタント、コルタナなどのパーソナル・デジタル・アシスタント商品は、最新技術に関心が高い多くの家庭で見られるようになりました。冗談を言ったり、買い物リストを確認したり、キッチンの照明をつけたりまでしてくれるなど、私たちの日常生活における役割が増えていくに従い、不思議とだんだんとこのロボットの声に親近感が沸いてきます。一方で、ラップトップ、タブレット、スマホへの新しい攻撃経路にもなるため、組み込まれているデジタルパーソナルアシスタントがはらむ危険性は増加しており、注意が必要です。当社のマイクロソフトのコルタナの音声アシストに関する調査は、業界の研究員が発表した”BadUSB”攻撃についての記事を読んだ事がきっかけで始まりました。私たちはさらに一歩踏み込んで、コルタナに関連するいくつかの問題を発見し、マイクロソフトに報告しました。
コルタナと話したことがあるなら、「彼女」は、意味を教えてくれたり、企業、映画、アーティスト、アスリートを探すなどの単純なタスクに非常に役立つことに気づかれたのではないでしょうか。算数も得意です。Windows 10では、報告を提出した時点の初期設定では、ロック画面からでも呼びかけると作動し、誰でも音声ベースのアシスタントと対話できるようになっています。このため、興味深いことがいくつか起こり、最終的に任意のコード実行を可能にする脆弱性が生じています。
この分析ではまず、Windowsのインデックス作成について簡単に見ていきます。コントロールパネルの[インデックスのオプション]から[詳細設定]を開き、[ファイルの種類]タブにいくと、ファイル拡張子の長い一覧が表示されます。それぞれについて、インデックス作成のプロセスで使用される関連するフィルタの詳細が表示されます。基本的に、「ファイルプロパティフィルタ」と、「ファイルプロパティとファイルコンテンツフィルタ」としてまとめることができる他のいくつかのフィルタがあります。
これは、インデックスプロセスがファイルを開き、それらのドキュメントに存在するいくつかの文字列を含むコンテンツをインデックス化することを意味します。 このことは後でまた触れますので、覚えておいてください。
私たちはこの知識を使用して、ロックされていないデバイスでコルタナ検索を使用するときに表示されるのと同じメニューにアクセスしようとしました。
結果は驚くものとなり、これが私たちが見つけたすべての問題の中核でもあるのですが、コルタナがロックされたデバイスの質問を聞き始める時にタイプするだけで、次のようにWindowsのコンテキストメニューが表示されます。
この例では、コルタナになんの前触れもなくただpasという用語を問い合わせましたが、なぜ「pass」でなく、PASなのでしょうか?コルタナは理解する語彙が限られていて「pass」という単語は定義されていないため、コルタナはデバイスのロックを解除してからEdgeで続行するよう促したのです。あるいは、口で言うのではなく、「タップして話す」ボタンをクリックして、テキスト入力をすることもできます。
するとロックされたWindows 10デバイスにコンテキストメニューが表示されるようになります。何がいけないのでしょう?
コルタナによって提示されるすべての結果は、インデックスファイルおよびアプリケーションから得られ、いくつかのアプリケーションでは、ファイルの内容もインデックス付けされているのです。そのため関連の照合結果を簡単にみる事が出来るのです。ファイル名が一致した事で照合された場合は、ファイルのフルパスが示されます。ファイル内容の一致によって照合されたときは、ファイル自体の内容が表示されることもあります。
ユーザーフォルダ構造全体がインデックスされていることに留意してください。これにはほとんどのドキュメントのデフォルトの場所だけでなく、OneDriveのようなマッピングも含まれています。
このことを知ることにより、想像力を働かせれば、ロックされたデバイスから秘密情報を収集するために使用できそうなキーワードが思い浮かぶでしょう。
ロック画面からのコード実行
(ユーザーインタラクションが必要な場合があります)
次に、私たちは質問をしてみました:「認証されたユーザーのコンテキストでさらに進んでコードを実行できますか?」この時点でコンテキストメニューにアクセスするのに、音声コマンドとマウス、タッチパッド、タッチスクリーンの組み合わせのみを使用していることを覚えておいてください。ファイルの上をホバリングしているだけでファイルのフルパスまたはコンテンツが表示されることを確認しました。では、それをクリックしたらどうなるでしょう?それはターゲットによります。開かれたファイルがアプリケーションまたは実行可能ファイル(notepadやcalc.exeなど)の場合、ユーザーが適切にログインした後にのみファイルは実行され、アクセスが可能です。ドキュメント、スクリプト、またはテキストファイルの場合は、実行される代わりにエディタで開きます。この時点では、計算機などのさまざまなプリロードされたWindowsユーティリティを実行できますが、コマンドラインにパラメータを渡すことはできません。PowerShellを含むスクリプトを開くことはできますが、実行する代わりに、テキストエディタ(メモ帳)で開かれます。 パラメータの欠如は、悪意のある目的を達成するために手元にあるツールとコンテンツを使った「手当り次第の(live off the land)」攻撃の限界です。しかし、この限界のある範囲の中でも実行できる悪質な活動はたくさんあります。たとえば、多くのアンインストーラはパラメータを必要とせずにソフトウェアを削除します。
話を戻します:ロック画面からのコード実行です。コンテキストメニューに何かが表示される唯一の要件は、それがインデックス化されることです。
認証されていない攻撃者が認証されたユーザーのインデックスに結果を表示するには、複数の方法があります。まずOneDriveに依存する方法。OneDriveディレクトリ構造のルートはユーザーフォルダにあるため、すべてのOneDriveコンテンツは既定でインデックスが作成されます。基本的に、「編集」権限を持つフォルダやファイルを共有した場合、共有した相手や転送されたリンクの他の受信者は、インデックスされたファイルを削除できることになります。インデックスされたファイルを続行するには複数のオプションがあります。
オプション1:実行可能ファイルをドロップ
この方法では、実行可能ファイルをディスクに書き込むことができると仮定しているので、あなたが実行する必要はありません。フィッシング攻撃や他の脆弱性を介して、攻撃者はバックドア(例えば、Cobalt Strike BeaconやMeterpreter)から攻撃を仕掛ける可能性があります。ペイロードを管理者として実行する必要がある場合は、右クリックし(タッチスクリーンの場合は、長押しになります)、[管理者として実行]を選択します。
Auto-Elevate Privilegeを持たないアプリケーションを実行すると、ユーザーアカウント制御(UAC)プロンプトが表示され、何も実行されません。ユーザーがプロンプトの内容を確認することはめったになく、警告ダイアログボックスを通じた実行がほとんどなため、これでも有効な攻撃になる可能性があります。攻撃者はプログラムを実行し、認証されたユーザーがログインしてジョブを終了するまで待つ必要があるかもしれません。アプリケーションにAuto-Elevate Privilegeがある場合は、UACプロンプトが表示されず、アプリケーションは実行されます。
これは面白い動作ですが、それ自体は攻撃シナリオではありませんので、引き続きオプションを検討してみましょう。なお、物理的なアクセスがあるため、USBキーを使用してペイロードをドロップするだけではダメなのか、というと、USBキーの内容はインデックスされていないため、検索クエリの結果として表示されません(USBデバイスを使用する他の方法がありますので下記を参照ください)。
オプション2:非PEのペイロードをドロップ
Portable Executable (PE) のバックドアは素晴らしいものですが、例えばPowerShellスクリプトのような非PEのペイロードで実行させることはできるでしょうか?同様の右クリックの技を使っても良いのですが、これに小さな工夫を加えると良いでしょう。右クリックのメニューは指定のファイルタイプであっても必ずしも常に同じものを示すわけではありません。
コルタナに”PS1″について聞くと、インデックスされたPowerShellスクリプトが表示されます。そこで右クリックすると、「ファイルの場所を開く」や、「フルパスをコピー」が表示できますが、実行する手段がありません。
先にも記載したファイルをクリックすると、ファイルは編集モードで開きます。不思議なことに、それは PowerShell スクリプトのデフォルトのエディター (PowerShell ISE) を開かず、代わりにメモ帳でスクリプトを開くのです。PowerShell ISEとは異なり、メモ帳はスクリプトを実行できないため、私たちはこれはセキュリティ対策のためと推測しました。
コルタナが入力クエリに基づいて結果を変更すると先に述べたことを思い出してください。正しくログインし、コルタナに “txt”について聞きたい時、「Hey、コルタナ」と呼びかけたのちに “T”、 “X”、 “T”という文字列を入力すると、コルタナはテキストドキュメント、メモ帳、 メモ帳の最近使ったファイルを示してきます。しかし、[最近のカテゴリ]内のアイテムの右クリックメニューは、[ドキュメントカテゴリ]内の同アイテムの右クリックメニューとは異なります。
3つのステップのプロセス:
・インデックスされる場所にPowerShellスクリプトを作成する
・パブリックフォルダー、パブリックシェア、またはOneDrive
・検索クエリでドキュメントを表示して、クリックする
・「Hey、コルタナ、PS1」
・今インデックスしたPowerShellスクリプトを選び、左クリックする
・PowerShellスクリプトがメモ帳で開く
・検索クエリをかけて最近のドキュメントが表示されたら右クリックし、そして
・コルタナを使って、コンテキストメニューに”txt”と入力するか検索をかける
・上部にあるアプリタブの[最新のカテゴリ(ドキュメントではなく)]の所でPowerShellスクリプトを右クリックする
・「PowerShellで実行」をクリックする
これで最新のロックされたWindows 10のデバイスで、デバイスが暗号化されていても、エクスプロイトしなくても、選択したペイロードでローカルコードを実行できるようになりました。
これで最新のロックされたWindows 10のデバイスで、デバイスが暗号化されていても、エクスプロイトしなくても、選択したペイロードでローカルコードを実行できるようになりました。
ユーザーインタラクションを使わずロックされたデバイスにログインする
最後に、ローカルコードの実行。これにはいくつかの大きな制約があります。ペイロードをインデックス化する必要がありますが、コマンドラインのパラメーターを渡すことはできません。実行ポリシーが実行を妨げる可能性があり、コマンドラインパラメーターがないと “-ExecutionPolicy Bypass”等を渡すことができないため、これはPowerShellの攻撃区分の制限要因となる可能性があります。また、攻撃を受ける側にPS1スクリプトを作成し、更に実際のPCやログイン画面にリモートアクセスできる方法を見つける必要があります。これまでに説明した手法は、次に述べる手法の単純さと有効性に比べればはるかに複雑です。
コルタナがロックされたデバイスの質問を聞き始める時にタイプするだけで、Windowsのコンテキストメニューが表示されたのを思い出してください。コルタナが応答を表示し始める時から、任意のキーストロークでメニューを起動できます。この時点でいずれかのキーを押します。大抵の場合、スペースバーを使います。何故ならバックスペースは使えず、Windowsがテキストのスペースを無視またはトリミングするからです。キーボード入力が早すぎる、またはコルタナが聞きとる前だと、パスワードを入力するように指示されます。 またあまりにもキーボード入力が遅いと、コルタナがスリープモードに戻ってしまい、コンテキストメニューなしで通常の結果を表示します。
音声コマンドに対してキーボードを使用するのは直感的ではありませんが、ロックされていないデバイスでの操作と同じように検索を入力できます。
次のスクリーンショットは、この動作を示しています。
・「タップして話す」または「Hey、コルタナ」と話しかけてコルタナを起動する
・「今何時?」と質問をする
・スペースバーを押すと、コンテキストメニューが表示される
・escボタンを押すとメニューが消えます
・スペースバーをもう一度押し、コンテキストメニューが表示されますが、今回は検索クエリが空の状態にあります。
・入力を開始します(バックスペースは使えません)間違ったら、escボタンを押し、やり直します。
・コマンドを(丁寧に)入力し終えたら、コマンドカテゴリーのエントリーをクリックします。(このカテゴリーは入力情報がコマンドとして認識された後にだけ表示されます)
・いつでも、「管理者として実行」をクリックして選ぶことができます(ただし、ユーザーはUACをクリアするためにログインする必要があることを覚えておきましょう)
こちらに表示したシンプルなPowerShellコマンドを試しに実行することができます。ロックされたデバイスから流れるデモコードの発信音をしばしお楽しみください。
さて、この時点であらゆることができてしまうことがお分かりいただけたと思います。一部のデモを用意しましたのでご覧ください。Windows 10搭載のデバイスのパスワードの再設定とログインがこのシンプルな操作だけで可能でした。
デバイスにパッチをあてていない状態(私たちはパッチをあてることを強く推奨しますが)での、最も簡単な被害の軽減手段としては、ロックスクリーンにあるコルタナを落とすことです。マイクロソフト社から発行された6/12のパッチ・チューズデイのCVE-2018-8140内にてこの問題は修復されています。
以上で私たちのコルタナの検証を終わります。マカフィーのAdvanced Threat Researchチームは、使用するハードウェアおよびソフトウェアに対する重大な脅威を排除することが根本的な使命です。今月のパッチは、そのゴールに進むための明確なステップです。音声コマンドとパーソナルデジタルアシスタントに関する脅威については、まだかなりの調査が必要です。我々の調査は この重要な分野で実施されるべき大量の調査のほんの氷山の一角に過ぎません。
*1 マイクロソフト社がいつも火曜日にセキュリティーパッチを発行することから業界で使われている用語。
*2 US時間でこの記事が公開された時点。