OS Xでシステムキーチェーンはどのように保護されますか?


22

私は、OS Xを除くiOS向けのこのセキュリティホワイトペーパーのようなもの、またはさらに優れた、独立した専門家による何らかの種類のセキュリティ監査レポートを探しています。「キーチェーンサービスプログラミングガイド」などのドキュメントを読んだ後、OS Xシステムの暗号化されていないバックアップに対する敵対的な攻撃に対して何が脆弱かについてさらに混乱しています。

前回チェックしたとき、OS Xでのユーザーのログインキーチェーンは、パスワードとほぼ同じくらい安全でした。パスワードがキーに変換される方法に問題があるため、キーの実際の秘密を111ビットのようなものに縮小した問題を思い出します(霧の記憶、私を修正してください)うまくいけば、それは修正されました。

一方、管理者は誰でもアクセスできるため、システムキーチェーンは本質的に安全性が低いと言われています。侵入者は、単一のユーザーのパスワードを推測する以外にも、管理者になるための多くのオプションがあります。

特に、システムファイルがバックアップされ、さらに暗号化されずにオフサイトに保存されるため、自動化されたスクリプトで使用されるパスワードをシステムキーチェーンに保存することが心配です。文書やその他のユーザーデータは、オフサイトに持ち込まれる前に暗号化されますが、システムキーチェーンが侵害された場合にそれらのキーを回復するために見落としているパスがあるのではないかと疑っています(手順により、必ずしも暗号化の欠陥ではありません) 。そのため、システムキーチェーンがどのように同時にセキュリティ保護され、どの管理者にもアクセス可能であるかを完全に理解したいと思います。

  1. 管理ユーザーがシステムキーチェーンをロック解除できるように、キーはどのように設計されていますか?

  2. 管理ユーザーがシステムキーチェーンの情報を使用して実行できることを制限する暗号化の制限はありますか?

  3. のない暗号化されていないシステムバックアップ 考えると、/Usersシステムキーチェーンのキーにどのようにアクセスできますか?

OS X 10.5 Leopard以降のバージョンに興味があります。


答えはありませんが、逸話です。管理者権限のない標準ユーザーとして、システムキーチェーンから比較的簡単にパスワードを抽出することができました。正確な手順は覚えていませんが、確かに可能です。サイドノートでは、これはsecurity.stackexchange.comでより良いかもしれませんか?
alexwlchan

@Alex、最初にSecurity.SEを試しましたが、答えはありませんでした。
オールドプロ

1
あなたがしていることのために別個のキーチェーンを一緒に使用しないのはなぜですか?スクリプトがシステムキーチェーンにアクセスする必要がある正当な理由はありますか?
ジェイトンプソン

@eyemyth、はい、スクリプトはシステムによって実行される必要があるため、ユーザーの許可に関係なくディスク上のすべてのファイルにアクセスできます。
古いプロ

回答:


11

システムキーチェーンはに格納され/Library/Keychains/System.keychain、ロックを解除するためのキーはに格納され/var/db/SystemKeyます(デフォルトのファイルパーミッションはルートのみが読み取り可能です)。これらのファイルの場所は、security-systemkeychain ソースからsecurity-checksystemスクリプトで参照されます。次を使用して、システムキーチェーンの自動ロック/ロック解除をテストすることもできます。

systemkeychain -vt

キーチェーンセキュリティフレームワークにより、非特権プログラムは、キーチェーンエントリ内に格納されているACL内にある情報を要求できます。明らかに、ユーザーがシステムにrootを持っている場合、システムキーチェーンを保存するファイルとロックを解除するキーの両方に直接アクセスできるため、セキュリティフレームワークを介してリクエストを行う必要がなく、キーチェーン内に保存されているACLに拘束されません自体。

(私は実際に元の質問に答えなかったので、これをもう一度やりましょう)

管理ユーザーがシステムキーチェーンをロック解除できるように、キーはどのように設計されていますか?

libsecurityキーホルダーフレームワークは、通常のプロセスは、AppleのXPCプロセス間通信フレームワーク(IPC)を使用して認証方法で、システムキーチェーンと対話することができます。

プログラムAは、IPCを使用してシステムキーチェーン情報にアクセスする要求を送信します。要求しているユーザーがすでにwheelグループに属していること、またwheelグループのユーザーのパスワードを知っていることを確認します。承認が確認されると、特権kcproxyデーモンを使用して/var/db/SystemKey、のマテリアルにアクセスし、システムキーチェーンのロックを解除して、要求された情報を返すことができます。

管理ユーザーがシステムキーチェーンの情報を使用して実行できることを制限する暗号化の制限はありますか?

いいえ-管理者ユーザーは、システムキーチェーンのすべてにアクセス/変更できます。たとえできなかったとしても、完全に制御できる別のマシンに基礎となるファイルをコピーし、そこでロックを解除/アクセスすることができます。

/ Usersを使用しない暗号化されていないシステムバックアップがある場合、システムキーチェーンのキーにどのようにアクセスしますか?

バックアップは、のコピーが含まれていると/Library/Keychains/System.keychainし、/var/db/SystemKeyその後、私は新しいOS Xシステムと使用上のそれぞれの位置にコピーしますsystemkeychain後にロック解除が元にし、使用してキーチェーンデータベースをダンプしますsecurity dump-keychain


1
GuidanceSoftware / EnCaseのdumpkeychainというユーティリティがあり、Windowsで(SystemKeyを使用して)システムキーチェーンを直接ダンプできます(新しいOS Xインストールをセットアップしてダンプするよりも簡単な場合があります)。
drfrogsplat 14年

1
@Anon、上記の情報を使用して、別のコンピューターのTime MachineバックアップからSystem.keychainにアクセス/ロック解除/ダンプするにはどうすればよいですか?つまり、System.keychainとSystemKeyを外部ディスクに保存しているので、両方のファイルへのパスを指定して、デフォルトの場所のファイルを使用しないようにする必要があります。
デシベル

この投稿は関連しています(SystemKeyを使用して古いシステムからSystem.keychainを復号化する方法)。 apple.stackexchange.com/questions/307189/…Keychain Accessまたはsystemkeychain cliを使用して、同じインストールの対応するSystemKeyを使用して、復元されたSystem.keychain(つまり、古いクラッシュしたHDDから)をロック解除する方法があるかどうか興味があります。私の目標は、新しいインストールでログインをロック解除して新しいシステムキーチェーンに移行することです。
mattpr

5

システムキーチェーン

システムキーチェーンには、いくつかの独自の機能があります。これらは、systemkeychainのマニュアルページに文書化されています。マスターパスワードの言及があなたの焦点である可能性があります。特定のソースコードをキーチェーンシステムは小さく、利用可能です。

システムキーチェーンは/System/Library/Keychains/System.keychain、Appleとデーモンが使用する特別なキーチェーンです。通常、ユーザーレベルのスクリプトには使用しないでください。

コードレビュー:キーチェーン

Appleは、Mac OS X 10.5 のキーチェーンとセキュリティフレームワークのソースコードを公開しました。このコードを確認して、その動作を確認できます。

代替アプローチ:別のキーチェーン

別のキーチェーンを作成して、スクリプトの資格情報を保存できます。この方法をお客様に推奨します。コマンドラインツールセキュリティを使用して、グラフィカルインターフェイスに頼らずにキーチェーンにアクセス、抽出、および管理できます。

自動スクリプトのパスワードを別のキーチェーンに保存することを検討してください。このキーチェーンをオフサイトのバックアップから除外してください。

バックアップからキーチェーンを削除することは理想的ではありませんが、懸念に対処できることを感謝しています。Macを復元する際には、別のソースからキーチェーンを取得する必要があります。より信頼できるソースまたはサイドチャネルの可能性があります。

システムキーチェーンには、常に別のキーチェーンのパスワードを保存できます。その後、スクリプトから個別のキーチェーンをロック解除できます。バックアップが攻撃された場合、このファイルはオフサイトバックアップではないため、キーチェーン自体ではなく、個別のキーチェーンにパスワードを公開するだけです。


感謝しますが、システムキーチェーンがどのようにセキュリティで保護され、何がセキュリティを維持するのかをすべてのコードから理解するのは非常に困難です。私たちは、スクリプトにかかわらずにログインしているユーザーのroot権限を持つバックグラウンドで自動的に実行する必要があるため、システムのキーチェーンを使用する必要があります。
旧Proの

1
Apple CDSAメーリングリスト(lists.apple.com/mailman/listinfo/apple-cdsa)で質問するか、Appleテクニカルサポートインシデントを使用することをお勧めします。これらの手段によってのみ、適切なアップルエンジニアに連絡することができます。
グラハムミル

rootとしてのスクリプトをバックグラウンドで実行することは、launchdの仕事です。正確に何をしようとしていますか?
ジェイトンプソン

1
「/System/Library/Keychains/System.keychain」の小さなタイプミス(「Library」を忘れた)。実際には、「編集」>「キーチェーンリスト」を選択することにより、キーチェーンアクセスのキーチェーンの場所のリストを取得できます
ユーザー名

1
@OldProセキュリティ上の懸念がある場合、フルディスク暗号化を使用してみませんか?
グラハムミル

2

Appleは最近、セキュリティ慣行の概要を説明するドキュメントを公開しました。そこで答えが見つかるかもしれません。このドキュメントはiOS固有のものですが、多くのセキュリティ機能はOS Xと多くの共通点を持っています。


これは正しい軌道に乗っており、役立つドキュメントの良い例ですが、iOSにはシステムキーチェーンの概念がないため、私の質問には答えられません。
古いプロ

これがあなたを正しい方向に
導く

0

キーチェーンの特定の知識はありません*が、これはかなり標準化された方法です。

  1. プレーンテキストファイル「foo」を保護する必要があります。Fooのサイズは任意です。
  2. fooを暗号化する対称キーを作成します。
  3. パスフレーズからシードされたキーで対称キーを暗号化します。

それが完了したら、現在のパスフレーズを入力し、対称キーを復号化してから新しいパスフレーズで暗号化することにより、「パスワード」を変更できます。これにより、「foo」が非常に大きい場合の長い復号化/暗号化プロセスが回避されます。

fooのプレーンテキストにアクセスする必要がある複数のユーザーに対して、これはどのように機能しますか?非常に簡単です。対称キーの暗号化されたコピーをユーザーごとに1回作成するだけです。つまり、ユーザーごとに手順3を実行します。

実際には、これらはすべて表示から抽象化されており、エンドユーザーは自分のパスワードを処理するだけで済みます。

質問のパート3に関して、ユーザーのキーは自宅に保存されていません。それらはおそらく/private/varどこかに保存されるでしょう。そのため、/Users以前にアクセスしていた人がいなくても、システムのロックを解除できます。


*キーチェーンの動作が異なる可能性があります。


システムキーチェーンの違いは、誰がログインしているかに関係なく、システムがキーチェーンの内容にアクセスできることです。たとえば、Time Machineは、システムキーチェーンにアクセスしてリモートファイル共有をマウントできます。管理ユーザーであるため、システムキーチェーンにアクセスできません。それで、何か他のものが起こっています、そして、それが何であるかを正確に知りたいです。
古いプロ

繰り返しますが、私は憶測することができますが、IMOそれは実際にはないこと異なります。システム自体が明らかにキーに到達できることは明らかです。ユーザーキーと同様に処理されるシステムキーがあると想定します。しかし今、私たちはあなたの質問の中心にいます...最初のアクセスを提供するものは何ですか?
バハマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.