キーチェーンがアプリケーションをどのように識別するのか疑問に思います。私はこれがコード署名に基づいているのではないかと思うが、実験はこれと実際には一致していない:
まったく署名されていない実行可能ファイルに対して機能します。
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
このエントリへのアクセスを許可したアプリ
/usr/bin/security
パスワードを問い合わせますか?