悪意あるマクロを利用したmacOSへの攻撃

リサーチャーのパトリック・ウォードル氏が実演した、エクスプロイトチェーンを使ってmacOS Catalinaを攻撃する方法とは。

Macユーザーの中には、今でもMacにセキュリティの対策は必要ないと信じている人が少なくありません。困ったことに、Apple製のハードウェアを使用する社員を抱える企業のシステム管理者がそう考えていることさえあります。

リサーチャーのパトリック・ウォードル(Patrick Wardle)氏がBlack Hat USA 2020カンファレンスで行った発表は、macOSを狙うマルウェアの分析結果を示し、Appleコンピューターを掌握するためのエクスプロイトチェーンを作成することで、こうした誤解を正そうとするものでした。

Microsoft、マクロ、そしてMac

macOSが稼動するコンピューターへの攻撃で特に多いのは、悪意あるマクロを含む文書を使用する方法、つまり、Microsoft Officeアプリケーションを経由した方法です。Appleの生産性アプリケーションもあるのですが、多くの人がMicrosoft Officeを使用しているのが実状です。習慣的に使う人もいれば、同僚が作った文書との互換性を考えて、という場合もあります。

もちろん、マクロを含む文書が危険である可能性については、昔からよく知られています。したがって、MicrosoftもAppleも、利用者を保護するための対策を採っています。

マクロを含む文書をMicrosoft Officeで開くときには、警告が表示されます。さらに、マクロを実行する選択をした場合、マクロはサンドボックス内で実行されます。Microsoftの開発者によれば、マクロがユーザーファイルにアクセスしたりシステムに損害を与えたりするのを防ぐため、このような仕組みになっています。

Appleの場合、最新バージョンのmacOS Catalinaにはいくつかの新しいセキュリティ機能が追加されています。中でも、ファイルの隔離と「公証」を担う機能が、App Store以外から取得された実行ファイルの起動を防いでいます。

基本的には、これらのテクノロジーを組み合わせれば、悪意あるマクロから被害を受けることはないはずで、理論上はセキュリティが万全であるように思われます。

マクロをサンドボックスの外に出すエクスプロイトチェーン

しかし現実には、セキュリティメカニズムの多くがかなり問題のある形で実装されています。そのため、リサーチャー(または攻撃者)によってセキュリティメカニズムの回避方法が見つかる場合があります。ウォードル氏は発表の中で、エクスプロイトチェーンによる攻撃について実演を交えて説明しました。

1. マクロを無効にするメカニズムの回避

例として、文書内にマクロがあることを検知した場合に警告を出すシステムを取り上げましょう。ほとんどの場合、システムは開発者の意図したとおりに機能します。しかし、何の通知も表示せずにマクロが(無効に設定されていても)自動的に起動するような文書を作成することは、可能なのです。

そうした文書の作成に使用されるのは、SYLK(SLK)というファイル形式です。XLMマクロ言語を使用するSYLK形式が開発されたのは1980年代、最後にアップデートされたのは1986年です。しかし、Microsoftのアプリケーション(Excelなど)は、下位互換性維持のために今でもSYLKをサポートしています。この脆弱性は新しいものではなく、2019年には、これについて詳しく説明する記事が公開されています(英語記事)。

2. サンドボックスの回避

このとおり、攻撃者がマクロをひそかに実行させることは可能です。しかし、そうなった場合でも、マクロのコードはMicrosoft Officeの隔絶されたサンドボックス内で実行されるはずです。ならば、ハッカーがコンピューターを攻撃することなどできないのでは?実は、MicrosoftのサンドボックスをMac上で回避するのは、それほど難しくはないことが分かっています。

確かに、コンピューターにすでに保存されているファイルをサンドボックス内から変更することはできません。しかし、ファイルを作成することはできます。この方法は以前にもサンドボックスを回避するのに悪用されたことがあり、Microsoftはこの脆弱性を修正するセキュリティ更新プログラムをリリースしました。しかし、この修正パッチを詳しく調査したところ、問題が完全に解決されてはいなかったことが明らかになりました。この修正パッチは、数名の開発者が危険だと見なした複数の場所からファイルを作成できないようにするという形で、問題に対処していました。たとえば、再起動後に自動実行されるスクリプトの保存場所である「LaunchAgents」フォルダーからのファイル作成がブロックされています。

しかし、パッチ作成時に、「危険な場所」はすべて把握されていたのでしょうか?現実には、Pythonで記述されたスクリプトをOffice文書から起動させる(この場合サンドボックス内で実行される)ことで、「Login Item」と呼ばれるオブジェクトを作成可能でした。この名前を持つオブジェクトは、ユーザーがシステムにログインすると自動的に実行されます。このオブジェクトがシステムによって起動されれば、Officeのサンドボックスの外で実行されるわけで、Microsoftのセキュリティシステムによる制限を受けません。

3. Appleのセキュリティメカニズムの回避

このように、密かにマクロを実行してLogin Itemオブジェクトを作成可能であることが分かりました。とはいえ、サンドボックス内から怪しげなプロセスによってバックドアが作成されたとしても、macOSのセキュリティメカニズムが働いてバックドアは起動しないはずです。

一つには、そのとおりです。Appleのセキュリティメカニズムは、そうした方法で取得されたコードの実行を阻止します。その一方で、抜け道もあります。Login ItemとしてZIPアーカイブファイルを潜り込ませれば、次回のログイン時に、システムがこのファイルを自動的に解凍します。

そうなれば、攻撃者としては、後はファイルの解凍先を指定するだけです。たとえばZIPファイルをユーザーライブラリと同じディレクトリ、つまり、Launch Agentタイプのオブジェクトが保存されるディレクトリ(Microsoftが危険性を正しく認識している場所)の1つ上の階層に配置可能です。このZIPファイル内には、Launch Agentスクリプトを含む「LaunchAgents」という名前のディレクトリを含めることができます。

ZIPが解凍されると、スクリプトはLaunchAgentsフォルダー内に配置され、再起動時に実行されます。信頼されたプログラム(Archiver)によって作成され、隔離属性もないこのスクリプトは、もっと危険な何かの実行に利用される可能性があります。セキュリティメカニズムは、このファイルの実行を阻止しません。

その結果、攻撃者はbashコマンドを通じてリモートアクセス権を入手することが可能となります(いわゆる「リバースシェル」)。このbashプロセスはファイル(こちらも隔離属性はない)のダウンロードに使用可能であるため、攻撃者は悪意のあるコードをダウンロードして、何の制限も受けずに実行できるようになります。

まとめると、以下のとおりです。

  • 攻撃者は、警告や通知が表示されないようにしながら、密かにマクロを実行することが可能です。設定内でマクロが無効化されている場合でも同様です。攻撃者に必要なのは、Office文書をダウンロードさせ、開かることだけです。
  • 攻撃者は次に、Microsoft Officeのサンドボックスを回避して、Login Itemオブジェクトと、Launch Agentが含まれるアーカイブを作成することが可能です。Launch Agentは、次回ログイン時にサンドボックス外で自動実行されます。
  • 攻撃者は、2、3の手順を踏むだけで、ZIPアーカイブからLaunch Agentタイプのオブジェクトを取り出し、Appleのセキュリティメカニズムを容易に回避することが可能です。セキュリティメカニズムを回避したプログラムは、悪意あるコードの「攻撃」部分をダウンロードして実行できるようになります。

悪意あるマクロからMacを守るには

当然ながら、ウォードル氏はAppleとMicrosoftの双方に調査結果を報告しています。両社ともすでに問題を修正していますが、その事実を喧伝することはせず、この脆弱性に公式のCVE識別番号を割り当てることもしていません。しかし状況から見て、セキュリティメカニズムを詳細に調査することで、メカニズム回避の方法が見つかる可能性は高いと言えます。

過去には、macOSは安全性が高いと考えられていました。それは特別に高度なセキュリティメカニズムが採用されているからというよりも、攻撃者が概してmacOSに関心を払っていなかったためでした。しかし、Appleコンピューターが普及し、企業内でも使われるようになってきたことから、攻撃者たちはmacOSを標的とする攻撃に関心を寄せるようになりつつあります。

したがって、セキュリティを維持するには、システムとシステム上の全ソフトウェアを常に最新の状態にしておくだけではなく、疑わしい動作を検知して阻止するセキュリティ製品を使用する必要があります。Kasperskyでは、macOSにも対応した製品を、個人向けおよび企業向けにご用意しています。

ヒント