Jamf ブログ
May 24, 2021 投稿者 Jaron Bradley

XCSSETマルウェアがTCCのゼロデイ脆弱性のバイパスを悪用

TCCのバイパスが悪用され、プライバシーを保護するAppleのTCC保護が回避されてしまいます。攻撃者は、適切なパーミッションが設定されたインストール済みのアプリケーションを利用することで、被害者のデバイス上で実行する不正なアプリケーションを作成する際、ユーザの承認を求めることなしにそのドナーアプリケーションを利用することができます。

著者: Stuart Ashenbrenner, Jaron Bradley and Ferdous Saljooki

はじめに

macOS 11.4のリリースで、Apple は、Transparency Consent and Control (TCC) フレームワークをバイパスするゼロデイエクスプロイト (CVE-2021-30713) にパッチを適用しました。これは、オンライン会議に参加するために、ビデオコラボレーションソフトウェアにウェブカメラとマイクへのアクセスを許可するなど、アプリケーションがアクセスできるリソースを制御するシステムです。このシステムを悪用することで、攻撃者は、ユーザの明示的な同意を必要とせずに、フルディスクアクセスや画面録画などの権限を取得することができます。我々、Jamf Protectの検出チームは、XCSSET マルウェアの追加分析中に、このバイパスが積極的に悪用されていることを発見。そして、その後、その変種が大幅に増加していることを発見しました。XCSSETは、一度、被害者のシステムにインストールされると、追加の許可を必要とせずにユーザのデスクトップのスクリーンショットを撮る目的で、このバイパスを使用していることを検出チームは指摘しました。

マルウェア「XCSSET」とは?

2020年8月、XCSSETと名付けられた新種のマルウェアがトレンドマイクロによって明らかにされました。このマルウェアは、Macの開発者をターゲットとしてXcodeプロジェクトに感染し、Githubリポジトリ経由でさらに拡散することでその範囲を拡大するものでした。

XCSSETは、Appleが開発したスクリプト言語であるAppleScriptで記述されており、スクリプト対応のMacアプリケーションの制御を容易にするという、斬新な開発方法で作られているため、業界で注目を集めています。多くの場合、マルウェアの作者は、多くのbashコマンドを処理できるAppleScriptsを攻撃チェーンに利用し、さらにPythonスクリプトをダウンロードまたは実行することで、様々なスクリプト言語を混同して使用することで意図を難解にしようとすることがあります。

また、XCSSETは、2つのゼロデイ脆弱性を利用したマルウェアであることが判明しました。1つ目は、システム整合性保護によって保護されているSafariブラウザのクッキーを盗むために使用され、2つ目は、Safariアプリケーションの開発者バージョンをインストールするためのプロンプトを回避するために使用されました。さらに深く掘り下げ、Jamfは、このマルウェアがAppleのTCCフレームワークを迂回するために、3番目のゼロデイを悪用していることを発見しました。

TCCとは何か?

ユーザの視点から見ると、TCCは、オンライン会議の例で言及したように、Macがアクションを実行する前にユーザからの明確な許可を必要とすると考えられるアクションをプログラムが実行しようとするときに表示されるプロンプトです。TCCの他の例としては、ドキュメント・ディレクトリへのファイルの保存、キーストロークの記録、スクリーンショットの撮影などがあります。アプリケーションがこのようなアクションを実行しようとすると、ユーザにプロンプトが表示され、アプリケーションにその許可を与えるか拒否するかを尋ねます。場合によっては、アプリケーションにアクションを実行させる前に、ユーザが最初にシステム環境設定にアクセスし、アプリケーションにきめ細かくアクセス許可を与える必要があります。アプリケーションに許可を与えると、プライバシー設定で手動で無効にするまで、ユーザに再度プロンプトを表示することなく、自由にそのアクションを実行できるようになります。

以下の例では、スクリーンショットを撮影するプログラムを実行するために、Terminalアプリがユーザに許可を求めています。

TCC authorization prompting a user to approve access for screen recording permission for Terminal app.

このアプリケーションは、システム環境設定によって許可を得ることができます。

バイパス

Jamf Protectの検知チームは、マルウェアを解析する中で、「screen_sim.applescript」というタイトルのAppleScriptモジュールに注目しました。その中で、"verifyCapturePermissions "という興味深いチェックが使用されており、アプリケーションIDを引数として受け取っていることに気づきました。

Script that includes the code that is executed in creating a malicious app from donor app.

ログのコメントだけを見ると、この悪質なAppleScriptは、スクリーンショットをキャプチャする権限を持つアプリケーションを検索しているように見えます。それだけでなく、そのようなアプリケーションを見つけることに成功すると、祝杯をあげます。

"verifyCapturePermissions "関数に足を踏み入れると、スクリプトのこの部分が、インストールされているアプリケーションの一覧からキャプチャ許可をチェックしていることがわかりました。このリストは、マルウェアが「donorApps」と呼ぶ以下のソフトウェアappIDの以前のチェックから導き出されたものです。

Code snippet that locates and returns currently installed apps that have the permissions the malicious app will require to execute properly.

予想通り、対象となるアプリケーションIDのリストは、ユーザが通常操作の一部として画面共有許可を定期的に付与しているアプリケーションばかりです。そして、マルウェアは、以下のmdfindコマンド(Spotlightのコマンドライン版)を使用して、被害者のデバイスにappIDがインストールされているかどうかをチェックします。

Code snippet that locates and returns currently installed apps that have the permissions the malicious app will require to execute properly.

appIDのいずれかがシステム上に見つかった場合、このコマンドは、インストールされたアプリケーションへのパスを返します。この情報をもとに、マルウェアは、カスタムAppleScriptアプリケーションを作成し、インストールされているドナーアプリケーションに注入します。これは、いくつかの関数を実行することによって行われ、最も注目すべきはcreateDonorApp()と呼ばれるものです。

Script that includes the code that is executed in creating a malicious app from donor app.
View of the attack process from conception to execution.

このスクリプトは、以下のアクションを順番に実行します。

  1. XCSSET AppleScriptスクリーンショット・モジュールが、マルウェア作者のコマンド&コントロール(C2)サーバからダウンロードされる(~/Library/Caches/GameKitフォルダに)
  2. osacompileコマンドを使用して、スクリーンショットモジュールは、avatarde.appと呼ばれるAppleScriptベースのアプリケーションに変換されます。このようにAppleScriptをコンパイルすると、新しく作成されたアプリケーションバンドルの /Contents/MacOS/ ディレクトリに applet という実行ファイルが置かれ、アプレットが実行するスクリプトは /Contents/Resources/Scripts/main.scpt に置くことができるようになります。
  3. 新しく作成されたInfo.plistは、次にplutilバイナリによって変更され、環境設定LSUIElementがtrueに変更されます。これにより、アプリケーションはバックグラウンドプロセスとして実行され、ユーザからその存在を隠すことができます。
  4. 次に、空のアイコンがダウンロードされ、アプリケーションに適用されます。
  5. 最後に、次のコードを使用して、新しく作成したアプリケーションを既存のドナーアプリケーションの中に配置します。
Code snippet displaying the script that processes the donor app information, injecting it into the malicious app.

例えば、仮想会議アプリケーションzoom.us.appがシステム上で見つかった場合、マルウェアは自分自身をこのように配置することになります。

/Applications/zoom.us.app/Contents/MacOS/avatarde.appのように配置されます。

被害者のコンピュータがmacOS 11以上を実行している場合、avatardeアプリケーションにアドホック署名、またはコンピュータ自身によって署名されたものを使用します。

すべてのファイルが配置されると、カスタムアプリケーションは親アプリケーション(上記の例ではZoom)をピギーバックします。これは、悪意のあるアプリケーションが、ユーザの明示的な同意を必要とせずに、スクリーンショットを撮ったり、画面を録画したりできることを意味します。これは、Zoomの親アプリからこれらのTCC権限を完全に継承しています。これは、エンドユーザにとって、プライバシーに関する大きな懸念となります。

Jamfのテストでは、この脆弱性は、画面録画の許可に限定されないことが判明しました。提供元アプリに既に提供されている複数の異なるパーミッションが、悪意を持って作成されたアプリに転送される可能性があるのです。

結論

Jamf Protectは、この脆弱性が悪用される可能性をいつでも検知・防止するための分析を提供する、包括的なMacエンドポイントセキュリティソリューションです。あるアプリケーションが他のアプリケーションにバンドルされているかどうかをチェックし、一致した場合に、2つのアプリケーション間のデジタル署名を検証し、情報の署名プロセスにおけるミスマッチを効果的に検出します。macOS 11.4以降を搭載したMacコンピュータを対象に、XCSSETのようなマルウェアが今後この脆弱性を悪用できないよう、Appleがこの問題のパッチを適用しました。Jamfは、迅速にパッチを適用し、頻繁に更新することを推奨します。

セキュリティ侵害インジケーター(IoC)

Jamfの調査では、これまでVirusTotalで未確認であった複数のハッシュが発見されました。Jamfが発見したハッシュのいくつかは、Appleの組み込みマルウェア検出エンジンであるXProtectによって既に検出されていました。しかし、JamfのチームがXCSSETマルウェアであると特定した追加のハッシュは、Githubに流れ込み、影響を受けたレポジトリを危険にさらすことになったのです。影響を受ける実行ファイルは、Xcodeプロジェクト内で5つのファイル名のうちの1つである可能性があると指摘されています。

Command and Control Domains:

  • trendmicronano[.]com
  • findmymacs[.]com
  • adoberelations[.]com
  • statsmag[.]com
  • statsmag[.]xyz
  • flixprice[.]com
  • adobestats[.].com
  • titiez[.]com
  • icloudserv[.]com
  • atecasec[.]com
  • monotel[.]xyz
  • sidelink[.]xyz
  • mantrucks[.]xyz
  • linebrand[.]xyz
  • nodeline[.]xyz

Jamf Protectでお客様の環境の保護をはじめませんか

Jaron Bradley
他の執筆者:
Stuart Ashenbrenner Ferdous Saljooki
ブログ購読

マーケットトレンド、Apple の最新情報、Jamf のニュースをメールでお届けします。

当社がお客様の情報をどのように収集、利用、移転、および保存するかに関しては、プライバシーポリシーをご参照ください。