web-dev-qa-db-ja.com

OS Xのキーチェーンから抽出できない秘密鍵をエクスポートする

OS X 10.9のKeychain Access.appにPKI証明書と秘密鍵を持っています。

/usr/bin/securityのマニュアルページは、-xsecurity importを指定するためのprivate keys are non-extractable after being importedオプションがあることを示しています。

ただし、コピー防止機能を備えた魔法のストレージはなく、証明書がシステムでまだ何らかの形で使用可能な場合は、確かにどこかにまだ存在し、関連するすべてのビットを備えた完全な栄光で保存されており、確実にまだそれをエクスポートします。どうやって?

8
cnst

どうやら、オープンソースのセキュリティフレームワークには、主要な属性がエクスポート不可に設定されているかどうかのチェックがあります。これらの属性の上書きは機能します。 VPN /ブラウザーをデバッガーで実行してみて、キーを使用する機能を中断することもできます。そこから、メモリへのポインタを取得し、秘密鍵を抽出できます。

lldb -- security export -k test.keychain -o asdf -w
break impExpWrappedKeyOpenSslExport
5
fel1x

このツール 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
3
Nikita

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エクスポートを実行することが可能であるように見えます。

1
cnst