見出し画像

"Objective By the Sea" カンファレンスの興味深いトピック

2022年10月にスペイン バルセロナで行われた、 Objective By The Sea という macOS セキュリティイベントに参加しました。イベントで発表された内容から、興味深いトピックをエンジニアのNamが紹介します。!

Thomas Reed の講演 「 Mac 脅威の進化」

PUPs (Potential Unwanted Programs: 怪しいプログラム)

脆弱性やハッカーの攻撃によって、悪意のあるソフトウェアがコンピュータに侵入することはありません。その感染となるインストール自体は、巧妙な方法でユーザーの同意を得たり、他のプログラムがダウンロードされる際に一緒に行われます。PUPs は感染した上で、マーケティングツールとして機能し、ブラウザ設定を変更したり、不要な広告を表示したりするものです。 

FACTS

  • 2008: Sweeper というゴミクリーニングアプリ(最初のPUP)こっそりとインストールされ、削除するには購入を求められます。

  • 詐欺的な方法(例:感染しているというメッセージが表示 等)で詐欺サイトから偶然を装い Antivirus アプリがダウンロード・インストール を促します。Antivirus アプリは主にシステム拡張をインストール。システム拡張を解除するには追加操作が必要があり、そのため、Antivirus アプリが見つかってから削除してもシステム拡張が残っているままの可能性があります。

  • App Store(Appleの審査で安全と思われている) にもサブスクリプションタイプの PUPs が存在します。例えば、Mymetronome というアプリ。アプリ起動後、購入ポップアップが表示されます。購入するまで、そのポップアップが閉じられないです( 強制終了方法を知らない場合には...)。 

Adware (アドウェア:広告表示によって収入を得るソフトウェア)

こちらも、PUPs の一種です。

・2010: OpinionSpy (最初のAdware)
ネットワーク活動をトラックしているアプリです。初めて「7art screensaver」で見つかりました。(7art というスクリーンセーバをダウンロード時に感染します)

 PUPs と Adware は 大抵の場合、未公証・未署名のアプリです。
仕組みは複雑ではなく、ユーザの許可を上手に得られるようポップアップ等の分かりやすいガイドが表示されます。

※以前に発見されているものは、XProtect ( macOS 標準搭載の AV) でマルウェアは阻止されます。
最近の Adware はマルウェアの機能と同じく脆弱性を利用します。
例えば、sudoファイルの変更や、Proxy サーバのインストール(中間者攻撃)、Safari へのブラウザ拡張機能をインストールなどです。

このように、App Store にも多くの PUPs が存在することを知り、とても驚きました。 

詳細は以下をご覧ください。

 また、様々な CVE(Common Vulnerabilities and Exposure:共通脆弱性識別子)が紹介されました。以下CVEはとても興味深いと思います。

Jamf Threat Lab の Jaron Bradley & Ferdous Saljooki が見つけた2つの CVE 

【1】CVE-2022-22616 : Webブラウザ Safari で 「ダウンロード後"安全な"ファイルを開く」 設定をONにしている状態で 、「Gatekeeper 」をバイパス

この脆弱性は未公証・未署名のアプリの実行につながります。

詳細:Safari で 「ダウンロード後"安全な"ファイルを開く」設定をONにしている状態でアプリケーションzipファイルをダウンロードした際に発生します。ダウンロードされた Zipファイルを解凍すると、アプリ自体(.app)のみQuarantine 属性(com.apple.quarantine)が格納されていません。

 基本的に、インターネットから(ブラウザを使用)ダウンロードされたアプリは、アプリのディレクトリ(全ファイル・フォルダ)に Quarantine 属性(com.apple.quarantine)が格納されます。最初に実行した際、Quarantine 属性を格納されたら、マルウェアの実行を防止するために Gatekeeper の確認が必要となります。Gatekeeper はアプリの公証・署名があるかどうかを確認する内蔵型OSセキュリティツールです。未公証・未署名のアプリの場合は、警告ポップアップが表示され、実行が出来ません。 

「ダウンロード後"安全な"ファイルを開く」という設定が ON に設定している Safari を使ってアプリの Zipファイルをダウンロードから解凍されるまでの通常の挙動は以下になります。

  1. ダウンロードしたZipファイルは、com.apple.Safari.Sandboxbroker に別の一時的なフォルダーに格納されます。

  2. com.apple.Safari.Sandboxbroker は Zipファイルを解凍し、アプリの全ファイル・フォルダで Quarantine 属性を格納します。

  3. アプリを一時的なフォルダーからダウンロードフォルダに移動 

この CVE にて、アプリケーションのルートレベル (.app) のみ Quarantine 属性が格納されないという事が検知されました。

さらに、テストしたところ、そのアプリをダウンロードした際、Gatekeeper の警告ポップアップが表示せずに実行が可能でした。

テストの結果分かったことは、GateKeeper はアプリケーションのルートレベル(.app)の Quarantine 属性のみをチェックするということです。Quarantine 属性が含まれていれば、Gatekeeper はアプリケーションの公証とコード署名の情報を確認します。

更に調べた結果、Gatekeeper がチェックをしない動作の原因は解凍された Zipファイルの Root にあることが分かりました。Zipファイルの Root は、 test.app ではなく、test.app/Contents になってしまうため、test.app に対するチェックがバイパスされてしまいました。

武器にする方法:未公証・未署名のアプリを Zip ファイルに圧縮してから、アプリのRootはTest.appではなく、Test.app/Contents で始めるものを以下コマンドで設定

zip -r test.zip test.app/Contents

Appleからのアップデート:Monterey12.3(Safari 15.4) で CVE が解消されました。

Jamf Protectの機能:com.apple.Safari.Sandboxbroker のプロセスを監視し、com.apple.quarantine 属性の欠落を検出することができます。  

 【2】CVE-2022-32910:Archive Utility という macOS 内蔵のファイル解凍ツールで Gatekeeper をバイパス

この脆弱性は未公証・未署名のアプリの実行につながります。

詳細:macOS 内蔵のファイル解凍ツールである Archive Utility を使用すると、Rootディレクトリのみで Quarantine 拡張属性が格納されない不具合が見つかりました。

どの圧縮ファイル拡張子で発生しましたが、今回は、Apple Archiveというフォーマット(.aar)で検証しました。

検証の結果、圧縮ファイルの中に二つ以上のファイル・フォルダがある場合のみこの脆弱性が発生しました。、解凍した際に、圧縮ファイルと同じ名前のフォルダーが作成され、Quarantine 拡張属性が格納されませんでした。

この事象によって、Archive Utility が archiveService を使用してファイルを解凍し、Quarantine 属性を適用します。そして、Auhelper は Root ディレクトリの名前を圧縮ファイル名と一致するように変更します。 

CVE-2022-22616により、GateKeeper が Root レベルのディレクトリのQuarantine 属性のみをチェックするので、今回は警告ポップアップを表示せずに実行ができます。 

武器にする方法:通常は、アプリに Contents フォルダだけがあります。今回一つのダミーファイル・フォルダを .app ディレクトリに追加します。以下コマンドで、.app の中である複数ファイル・フォルダを圧縮し(.app自体を含められない)、圧縮ファイル名として<名前>.app.aarという名前を設定します。

aa archive -d test.app -o test.app.aar

ターゲットユーザはがArchive Utility を使用した場合、警告ポップアップが表示されずに実行できます。

Appleからのアップデート:Monterey macOS 12.5 で NSIRD_archiveServices が Rootフォルダに Quarantine 属性を格納するようにアップデートされました。

詳細について
https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/
https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/
https://www.youtube.com/watch?v=LR_A3hIZEZE&list=PLliknDIoYszt5m1kz1vNY90LnR6VMuyOZ&index=3

Fitzl Csaba の講演: Transparency, Consent and Control というユーザデータ保護機能(TCC)の脆弱性

CVE-2021-30965:悪意のあるアプリケーションにより Endpoint Security クライアントソフトに対してサービス拒否が発生する可能性があります。

詳細:悪意のあるアプリケーションはターゲットのコンピュータから Endpoint Security クライアントソフトを無効化することができます。

理由として、Endpoint Security クライアントソフトはコンピュータをスキャンして悪意のあるアクションを検出するために、 Full Disk Access(FDA)の許可を得るのが必要となります。
例:ProcessMonitor という Opensource ツール、Jamf Protect など。

Full Disk Access の許可がなくなると、Endpoint Security クライアントソフトはマシンが再起動またはシャットダウンされるまでしか機能しなくなります。

彼らはユーザーデータ保護機能(TCC)が以下のたった1つの簡単なコマンドで失効してしまう脆弱性を発見しました。

tccutil reset all

TCCの修正とそのバイパス方法:

【1】Apple は、tccutilコマンドを更新し、rootユーザでもユーザ認証を要求するようにしました。
バイパスする方法①:(Rootユーザの場合)認証データベースのアクセスルールを認証不要に変更

sudo security authorizationdb write com.apple.tcc.util.admin allow
tccutil reset all

【2】認証データベースは非推奨になりました。ただ、tccutil コマンドを実行するために、Full Disk Access の許可が必要となります。
※tccutil コマンドは、com.apple.private.tcc.manager.access.read という許可を持っているので、tccデータベースの kTCCServiceSystemPolicyAllFiles で Full Disk Access を許可しているかどうかを確認ができます。

バイパスする方法②:Tccutil は、ファイルに com.apple.developer.endpoint-security.client の属性が含まれているかどうかを確認することで、エンドポイントセキュリティに関連するエントリかどうかを判断します。通常、 Endpoint Security クライアントソフトのチェックする方法は、ファイルで com.apple.developer.endpoint-security.client というエンタイトルメントがあるかどうかを確認します。
今回はディスクをマウントする方法でバイパスします。

1.    Dmg ディスクを作成

hdiutil create tmp/test.dmg -size 10m -ov -volname “bypass” -fs APFS

2.    作成した Dmg は Endpoint Security ディレクトリにマウントする( Endpoint Security クライアントをカバーする)

sudo hdiutil attach -mountpoint /Library/Sentinel /tmp/test.dmg

3.    Tccuti lコマンドを使ってFull Disk Accessという許可をリセット

tccutil reset SystemPolicyAllFiles 

バイパスする方法③:( macOS Ventura ベータでも動作します)古いバージョンの tccutil を BigSur OS からダウンロードし、古いバージョンの tccutil を使ってリセットします。

 Ventura アップデートのTCC 機能:

→TCC は新しい保護機能(kTCCServiceSystemPolicyAppBundles)を備えています。他のアプリへのマウントを含む、他のアプリからのアプリ改変の保護(Endpoint Security の誤操作防止)

→TCC データベースでの新しい kTCCServiceEndpointSecurity という許可があります。(システム環境設定の Full Disk Access に表示されます)

→tccutil のリセットコマンドは tccd (tccdaemon) で処理されます。 
MDMを使用してTCCを設定している場合は、tccutil reset allによるCC設定の取り消しはできないので、ご安心ください。

ユーザーデータ保護機能(TCC)で Full Disk Access という許可は、TCC データベースへのフルアクセスやユーザのプライベートファイルへのフルアクセスとEndpoint Security クライアントの登録制御等、さまざまな権限が付与されます。

Fitzl Csaba は、「Full Disk Access の許可は、使用を制御するために粒度の細かいルールを持つべきであり、TCCデータベースを完全な System Integrity Protection(SIP:システム整合性保護)に移動すべきである」と提案しました。

また、Transparency, Consent and Controlというユーザーデータ保護機能(TCC)は実際にプライバシーを保護するために設計されたものですが、、バイパスしたり市セットしたりする簡単な方法が発見されたことで、Endpoint Security クライアントソフトをOFFができる脆弱性をつくってしまいました。今後の新しい設定によってTCCのバイパス技術が克服されることを期待します。

詳細は以下をご覧ください。

興味深いと思ったトピックは以上となります。

なお、macOS セキュリティ関連トピックにご興味がありましたら、ぜひ下記リンクの Objective By The Sea 収録リンクをご確認ください。

以上、 今回はエンジニアのナトニチャが担当いたしました。
最後まで読んでいただき、ありがとうございました。

新しい記事の情報をツイッターで報告しておりますので是非@magichat2011もフォローして下さい!