キーチェーンはどのように実行ファイルを識別しますか?


1

キーチェーンがアプリケーションをどのように識別するのか疑問に思います。私はこれがコード署名に基づいているのではないかと思うが、実験はこれと実際には一致していない:

まったく署名されていない実行可能ファイルに対して機能します。

codesign -dv  /Library/Frameworks/R.framework/Resources/bin/exec/R
# /Library/Frameworks/R.framework/Resources/bin/exec/R: code object is not signed at all

しかし、この秘密のACLにRプロセスが追加されており、楽しくクエリを実行できます。

実行可能ファイルの拡張属性にも何もありません。

xattr -l  /usr/bin/security
# 

ファイル自体を変更しても、それでも機能します。

cp /usr/bin/security foobar
echo "\nharmless" >> foobar
./foobar find-generic-password -a 'gaborcsardi' -s foobar -g
# keychain: "/Users/gaborcsardi/Library/Keychains/login.keychain"
# class: "genp"
# attributes:
#     0x00000007 <blob>="foobar"
#     0x00000008 <blob>=<NULL>
#     "acct"<blob>="gaborcsardi"
# ...
# password: "secret"

しかし、それでそれはどのように動作しますか?より具体的には、キーチェーンは、パスワードの問い合わせが security このエントリへのアクセスを許可したアプリ

回答:


1

キーチェーンはアプリケーションを識別しません、アプリケーションは キーチェーンAPI

キーチェーンサービスAPIはこの問題に対する解決策を提供します。によって   このAPIを1回呼び出すだけで、アプリはわずかなデータを保存できます。   キーチェーンに関する秘密情報   1回の呼び出しで情報を取得します。キーチェーンが固定   データをファイルシステムに格納する前に暗号化してデータを解放します。   複雑な暗号化アルゴリズムを実装する必要があります。の   システムはまた、慎重に保管アイテムへのアクセスを制御します。全体   キーチェーンはロックすることができます。   マスターパスワードでロック解除されるまでは、でも   キーチェーンのロックを解除すると、システムのキーチェーンアクセスポリシーによって、   承認されたアプリのみがキーチェーンの特定の項目にアクセスできます。に   最も単純なケースでは、アイテムを作成したアプリだけがそのアプリです。   後でアクセスできます。ただし、キーチェーンサービスには以下の方法もあります。   アプリ間で秘密を共有する。

enter image description here


それでは、キーチェーンが確認を求める必要がないことをどのようにしてキーチェーンが認識しているか /usr/bin/security パスワードを問い合わせますか?
Gabor Csardi

これが今起こっているので、いくつかのこと オフトピック :1)それは別の質問です。2)あなたはAPIドキュメントを読みましたか?私は見てみることをお勧めします ツアー
Allan

さて、ちょっとした編集を見てください、多分それは質問を明確にします。はい、私はAPIドキュメントを読みましたが、これがどこにも記述されているのを見つけることができませんでした。しかし、Keychain APIリファレンスは没入しているので、見逃しているかもしれません。
Gabor Csardi

あなたは "キーチェーンはアプリケーションを識別しません"と言います。それでは、実行可能ファイル 'x'がエントリへのパスワードなしアクセスを持ち、実行可能ファイル 'y'が持っていないことをどうやって知るのでしょうか。確かに、それはどういうわけか彼らを識別しなければなりません、そしてそれは彼らの道でそれをしていません(明らかに)。
Gabor Csardi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.