mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-19 09:34:03 +00:00
8.6 KiB
8.6 KiB
macOS 密钥链
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?你想在 HackTricks 中看到你的公司广告吗?或者你想获得PEASS 的最新版本或下载 PDF 格式的 HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入💬 Discord 群组 或 telegram 群组 或 关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks 仓库 和hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。
主要密钥链
- 用户密钥链 (
~/Library/Keychains/login.keycahin-db
),用于存储特定用户的凭据,如应用程序密码、互联网密码、用户生成的证书、网络密码和用户生成的公钥/私钥。 - 系统密钥链 (
/Library/Keychains/System.keychain
),用于存储系统范围的凭据,如 WiFi 密码、系统根证书、系统私钥和系统应用程序密码。
密码密钥链访问
这些文件虽然没有固有的保护,可以下载,但它们是加密的,需要用户的明文密码进行解密。可以使用 Chainbreaker 这样的工具进行解密。
密钥链条目保护
ACLs
密钥链中的每个条目都受访问控制列表 (ACLs) 的管理,ACLs 规定了谁可以对密钥链条目执行各种操作,包括:
- ACLAuhtorizationExportClear:允许持有者获取明文密码。
- ACLAuhtorizationExportWrapped:允许持有者获取使用另一个提供的密码加密的明文密码。
- ACLAuhtorizationAny:允许持有者执行任何操作。
ACLs 还附带了一个可信应用程序列表,这些应用程序可以在不提示的情况下执行这些操作。这可以是:
- N
il
(无需授权,每个人都受信任) - 一个空列表(没有人受信任)
- 特定应用程序的列表。
此外,条目可能包含键**ACLAuthorizationPartitionID
,用于标识teamid、apple和cdhash**。
- 如果指定了teamid,则为了在不提示的情况下访问条目值,使用的应用程序必须具有相同的 teamid。
- 如果指定了apple,则该应用程序需要由Apple签名。
- 如果指定了cdhash,则应用程序必须具有特定的cdhash。
创建密钥链条目
当使用**Keychain Access.app
创建一个新的条目**时,适用以下规则:
- 所有应用程序都可以进行加密。
- 没有应用程序可以导出/解密(无需提示用户)。
- 所有应用程序都可以查看完整性检查。
- 没有应用程序可以更改 ACLs。
- partitionID 设置为**
apple
**。
当应用程序在密钥链中创建条目时,规则略有不同:
- 所有应用程序都可以进行加密。
- 只有创建条目的应用程序(或其他明确添加的应用程序)可以导出/解密(无需提示用户)。
- 所有应用程序都可以查看完整性检查。
- 没有应用程序可以更改 ACLs。
- partitionID 设置为**
teamid:[teamID here]
**。
访问密钥链
security
# Dump all metadata and decrypted secrets (a lot of pop-ups)
security dump-keychain -a -d
# Find generic password for the "Slack" account and print the secrets
security find-generic-password -a "Slack" -g
# Change the specified entrys PartitionID entry
security set-generic-password-parition-list -s "test service" -a "test acount" -S
APIs
{% hint style="success" %} 可以使用工具LockSmith来进行密钥链枚举和转储,而不会生成提示。 {% endhint %}
列出并获取每个密钥链条目的信息:
- API
SecItemCopyMatching
提供有关每个条目的信息,并且在使用时可以设置一些属性: kSecReturnData
:如果为true,它将尝试解密数据(设置为false以避免潜在的弹出窗口)kSecReturnRef
:还获取密钥链条目的引用(如果稍后发现可以在没有弹出窗口的情况下解密,则设置为true)kSecReturnAttributes
:获取条目的元数据kSecMatchLimit
:返回的结果数量kSecClass
:密钥链条目的类型
获取每个条目的ACL:
- 使用API
SecAccessCopyACLList
可以获取密钥链条目的ACL,并返回一个ACL列表(如ACLAuhtorizationExportClear
和之前提到的其他列表),其中每个列表都有: - 描述
- 受信任的应用程序列表。这可以是:
- 一个应用程序:/Applications/Slack.app
- 一个二进制文件:/usr/libexec/airportd
- 一个组:group://AirPort
导出数据:
- API
SecKeychainItemCopyContent
获取明文 - API
SecItemExport
导出密钥和证书,但可能需要设置密码以加密导出的内容
以下是导出密钥而无需提示的要求:
- 如果列出了1个或多个受信任的应用程序:
- 需要适当的授权(
Nil
),或者是授权访问秘密信息的应用程序允许列表的一部分 - 需要代码签名与PartitionID匹配
- 需要代码签名与一个受信任的应用程序匹配(或者是正确的KeychainAccessGroup的成员)
- 如果所有应用程序都受信任:
- 需要适当的授权
- 需要代码签名与PartitionID匹配
- 如果没有PartitionID,则不需要此项
{% hint style="danger" %} 因此,如果只有1个应用程序列出,您需要在该应用程序中注入代码。
如果partitionID中指定了apple,则可以使用**osascript
访问它,因此可以信任所有具有apple的partitionID的应用程序。也可以使用Python
**进行此操作。
{% endhint %}
两个附加属性
- Invisible:这是一个布尔标志,用于从UI密钥链应用程序中隐藏条目
- General:用于存储元数据(因此不加密)
- Microsoft将所有用于访问敏感端点的刷新令牌明文存储。
参考资料
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看SUBSCRIPTION PLANS!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks衣物
- 加入💬 Discord群组 或 电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享您的黑客技巧。