OS X 10.9のKeychain Access.app
にPKI証明書と秘密鍵を持っています。
/usr/bin/security
のマニュアルページは、-x
にsecurity import
を指定するためのprivate keys are non-extractable after being imported
オプションがあることを示しています。
ただし、コピー防止機能を備えた魔法のストレージはなく、証明書がシステムでまだ何らかの形で使用可能な場合は、確かにどこかにまだ存在し、関連するすべてのビットを備えた完全な栄光で保存されており、確実にまだそれをエクスポートします。どうやって?
どうやら、オープンソースのセキュリティフレームワークには、主要な属性がエクスポート不可に設定されているかどうかのチェックがあります。これらの属性の上書きは機能します。 VPN /ブラウザーをデバッガーで実行してみて、キーを使用する機能を中断することもできます。そこから、メモリへのポインタを取得し、秘密鍵を抽出できます。
lldb -- security export -k test.keychain -o asdf -w
break impExpWrappedKeyOpenSslExport
このツール chainbreaker を使用して、macOS High Sierra 10.13.6から抽出できない秘密キーを抽出することができました。 hexdump
およびpycrypto
パッケージとともにPython2
が必要です。このREADMEツールのリポジトリ内のファイルは、その方法を説明しています README-keydump.txt 。
一般に:
Sudo pip2 install hexdump pycrypto pyOpenSSL
git clone https://github.com/n0fate/chainbreaker
cd chainbreaker
python2 chainbreaker.py -f ~/Library/Keychains/login.keychain-db -p 'YOUR_KEYCHAIN_PASS'
# After the command has finished running, there will be a new folder
# exported with 3 more folders for certs, keys and key-cert pairs
ls exported/associated
# This will show you folders with found key-certificate pairs as numbered
# subfolders and separate files there. Those files are in DER format, so,
# for example, to convert those to PEM:
openssl x509 -inform DER -in exported/associated/1/3.crt -out exported/associated/1/cert.pem
openssl rsa -inform DER -in exported/associated/1/5.key -out exported/associated/1/key.pem
https://reverseengineering.stackexchange.com/questions/6043/extract-non-extractable-private-key-from-os-x-keychain のように、OS X 10.5はサポートしていないようですkSecAttrIsExtractable
辞書キーとCSSM_KEYATTR_EXTRACTABLE
ビット。
そのため、login.keychainをOS X 10.9から10.5にコピーして、p12エクスポートを実行することが可能であるように見えます。