

RootPipe Testerは、お使いのMac(Mac OS X 10.2.8以降、PowerPC/Intelの両方)上で動作する小さなアプリケーションで、RootPipe(CVE-2015-1130)とPhoenix(CVE-2015-3673)の両方のエクスプロイトを使って権限昇格を試みます。
お使いのMacが脆弱かどうかは、実行しているMac OS Xのバージョンに依存しますが、成功するかどうかは設定している環境設定にも依存します。
RootPipe Testerを使えば、広範なテストや試行錯誤をしなくても、脆弱かどうかを確認できるワンクリックソリューションを用意しました。
このリポジトリのリリースページからディスクイメージをダウンロードするか、お好みで自分でコンパイルしてください。
ディスクイメージをマウントし、その中に含まれるアプリケーションを実行します(ディスクイメージからRootPipe Testerを実行しても安全です)。
「Start Test」をクリックして、テストが完了するまで待ちます(ウィンドウタイトルの「Running…」で完了したかどうかが分かります)。
正確な結果を得るには、Macを再起動して「新しいログイン」でもう一度テストを実行することをお勧めします。
テストの実行のうち少なくとも1つが脆弱なシステムを検出した場合は、PANICセクションを確認するとよいでしょう。
いいえ! 落ち着いて、お使いのシステムバージョンに該当するガイドを読んでください。
注記:「ユーザー認可では脆弱ではない」とは、システムがアクセスを許可しないか、管理者ユーザーとしての認証を求める認証ダイアログを表示することを意味します。
ある程度これは権限昇格でもあります。adminグループはrootほど多くの権限を持っていませんが、sudoのデフォルト設定では、「admin」グループのすべてのユーザーはパスワードを入力することでrootを取得できるため、単にsudoを実行するだけでも同じ効果が得られます。
できるだけ早く10.10.3にアップグレードして、システムがwriteconfigバイナリのエンタイトルメントを正しく強制できるようにしてください。(少なくともAppleはそう言っています)
何らかの理由で10.10.3にアップグレードできない場合は、OS X 10.9 Mavericksのセクションを確認してください。
Mavericksでは、攻撃者がnil認可で通過できてしまうため、古いバージョンのMac OS Xよりもはるかに困難な状況にあります。
can_I_suidを参照するとよいでしょう。
テスト結果:
脆弱
セキュリティ環境設定パネルで「各システム環境設定パネルのロックを解除するにはパスワードを要求」を有効にしてください。
テスト結果:
脆弱ではない
おめでとうございます! あなたは最も安全なバージョンのMac OS Xの1つをお使いです(少なくともRootPipeに関する限りは)。
これらのシステムでは、セキュリティ環境設定パネルの「各システム環境設定パネルのロックを解除するにはパスワードを要求」(Tigerでは「各安全なシステム環境設定のロックを解除するにはパスワードを要求」)が正しく機能しており、_本当に有効にすべき_です!
注記:「パスワードを要求」チェックボックスがオフの場合、システムは_ログインのたびに_安全な環境設定パネルのロックを解除します。管理者アカウントを使用している場合、毎回のログイン後にシステム環境設定でロックを手動で閉じるまで、システムは脆弱な状態になります。
テスト結果:
脆弱ではない
後のシステムとは異なり、Pantherでは、セキュリティ環境設定パネルの「各安全なシステム環境設定のロックを解除するにはパスワードを要求」チェックボックスは、このエクスプロイトの動作を完全に妨げる効果がありません。それでもチェックすることをお勧めします。
システムを保護するには、標準ユーザーアカウントのみを使用するように切り替え、システム環境設定で設定を変更した後は必ず手動で「ロックを閉じる」ことを_強く_お勧めします。
システム環境設定を閉じるだけでは認証は適切に無効化されず、標準ユーザーとしてシステム環境設定のGUIが閉じたロックを表示していても、ログアウトするまでこのエクスプロイトは機能します。
テスト結果:
脆弱ではない
後のシステムとは異なり、Jaguarには「各安全なシステム環境設定のロックを解除するにはパスワードを要求」チェックボックスはありませんが、ログイン時にすべての管理者ユーザーに対して安全な環境設定パネルのロックを解除します。
システムを保護するには、標準ユーザーアカウントのみを使用するように切り替えることを_強く_お勧めします。
注記:Jaguarは、システム環境設定が終了しても安全な環境設定パネルをロックしないため、必ず手動で安全なパネルをロックしてください。これを怠ると、ログアウトするまでエクスプロイトが機能します。
注記:標準ユーザーアカウントに切り替えられない場合は、ログイン項目として安全な環境設定パネルをロックする簡単なAppleScriptで代用できます。
注記:通常版のRootPipe TesterはJaguarでは動作しません。Jaguarで実行する場合は、RootPipe TesterのLegacy版をダウンロードしてください。
RootPipe TesterのLegacy版は、通常版と機能は同等ですが、GCC 4.0ではなくGCC 3.1でコンパイルされています。
テスト結果:
脆弱ではない
Pumaに対するエクスプロイトは実現可能と思われます。なぜなら、システム環境設定の認証に同じ手順を使用しており、必要なコンポーネントのほとんどが存在するからです。
エクスプロイトを妨げている唯一の点は、Pumaには、後のバージョンで認証に使用されるSecurityFoundation.frameworkがないことです。
その代わりに、最初にリバースエンジニアリングが必要なNIInterface.frameworkというPrivateFrameworkを使用しています。
とはいえ良い知らせもあります。ほぼ存在しないユーザーベースを狙ってエクスプロイトに時間を費やす人は誰もいません。
セキュリティを強化するには、標準ユーザーアカウントのみを使用し、_かつ_安全な環境設定パネルを手動でロックすることが引き続き推奨されます。
注記:この段落は話半分に読んでください。実際に何が起こっているのかを解明するために最善を尽くしましたが、すべてPrivateFrameworkであるため、特に私がカバーしようとしているほど多くのMac OS Xのバージョンにわたって、これらのメソッドが何をしているのかを100%知ることはできません。
RootPipeエクスプロイトの仕組みは、基本的にシステム環境設定が設定ファイルを書き込むときに行う処理(そのためWriteConfigという名前)と同じですが、このエクスプロイトのユーザーがシステム環境設定アプリケーションでなくてもよい点が異なります。
ここまではそれほどひどいものではなく、実際、エクスプロイト全体もそれほどひどいものではありません。
しかし、コードを見てみましょう。
// Authorization
SFAuthorization auth = [SFAuthorization authorization];
id authenticator = [Authenticator sharedAuthenticator];
[authenticator authenticateUsingAuthorizationSync:auth];
// Profit?
id sharedLiaison = [ToolLiaison sharedToolLiaison];
id tool = [sharedLiaison tool];
ご覧のとおり、これは「旧スタイル」のコードですが、新スタイルの原則もほぼ同じです。
このスニペットの最初の3行は認証で、最後の2行が本当の面白い部分です。
システム環境設定の環境設定パネルが特権で実行する必要がある操作を行う場合、左下隅にSFAuthorizationView(ロック記号)を配置します。このSFAuthorizationViewがsystem.preferences権利の取得と破棄を処理します。
ここまでは順調ですが、このsystem.preferencesとは何でしょうか?
Appleが使用する権利とその設定方法は時代とともに変化しましたが、原則は同じです。以下に、Authorization Servicesポリシーデータベースの抜粋を示します。
10.5.8 の system.preferences
{
"allow-root" = 1;
class = user;
comment = "Checked by the Admin framework when making changes to certain System Preferences.";
group = admin;
shared = 1;
}
ご覧のとおり、これは共有権利です。つまり、この権利が一度取得されると、セッションが破棄される(ログアウトする)まで、他のすべてのプロセスもそれを使用できます。
これはそれ自体はそれほど悪くありません。アプリケーションがsystem.preferencesを初めて使用したいときに認証する必要があるからです。残念ながら、システムはログイン時に(管理者ユーザーに対して)自動的にそれを認証してしまいます。
つまり、RootPipe Testerは認証を受ける必要がなく、代わりにシステムの認証を使用できるのです。
標準ユーザーは安全です。システムがログイン時にsystem.preferences権利を認証しないためです。
適切な認証を取得すれば、任意の権限で設定ファイル(またはその他のファイル)を書き込むのは非常に簡単なゲームです。
ToolLiaisonは喜んでwriteconfigへのNSDistantObjectを設定してくれ、writeconfigも喜んでファイルを書き込んでくれます。なぜなら、彼らの認識では、あなたは適切に認証を受けているからです。
システム環境設定で「各システム環境設定パネルのロックを解除するにはパスワードを要求」チェックボックスをオンにすると、Mac OS X 10.4〜10.8のすべてのバージョンでRootPipeが修正されます。
このチェックボックスをオンにすると、system.preferences権利が変更され、sharedがfalseに設定されます。
権利が共有されていない場合、すべてのプロセスが独自の認証を取得する必要があることを意味します。認証の取得には管理者のパスワードの入力が必要なため、攻撃をユーザーが気付くことができます。
また、単にsudoを実行しても同じ効果が得られるため、この攻撃は無意味になります。
厳密には違います。一目見ると、rootとして実行され、適切な認証を行っていないPrivateFramework内にあるため、バックドアのように見えるかもしれません。
しかし、本当の問題はむしろ設計不良です。Appleは、すべての管理者ユーザーがシステム環境設定を完全に使用できるようにしたいと考えていました。Unixではすべてに設定ファイルが必要であり、それらは(ほとんどの場合rootとして)書き込まれる必要があります。
これは悪い考えだと主張する人もいるでしょう(私も同意します)が、認証は適切に機能しており、すべての管理者はsudoでrootを取得できるため、バックドアとは考えません。
ここでの主な問題は、Appleがセキュリティよりも利便性を重視したことですが、それも彼らにとっては特に特別なことではありません。