macOS Keychain

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

WhiteIntel是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件侵害

WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。

您可以访问他们的网站并免费尝试他们的引擎:


主要钥匙串

  • 用户钥匙串~/Library/Keychains/login.keycahin-db),用于存储诸如应用程序密码、互联网密码、用户生成的证书、网络密码和用户生成的公钥/私钥等特定于用户的凭据。

  • 系统钥匙串/Library/Keychains/System.keychain),存储系统范围的凭据,如WiFi密码、系统根证书、系统私钥和系统应用程序密码。

密码钥匙串访问

这些文件虽然没有固有的保护,可以被下载,但是它们是加密的,需要用户的明文密码才能解密。可以使用类似Chainbreaker的工具进行解密。

钥匙串条目保护

ACLs

钥匙串中的每个条目都受**访问控制列表(ACLs)**的管辖,ACLs规定了谁可以对钥匙串条目执行各种操作,包括:

  • ACLAuhtorizationExportClear:允许持有者获取密钥的明文。

  • ACLAuhtorizationExportWrapped:允许持有者获取使用另一个提供的密码加密的明文。

  • ACLAuhtorizationAny:允许持有者执行任何操作。

ACLs还伴随着一个可信应用程序列表,这些应用程序可以在不提示的情况下执行这些操作。这可能是:

  • Nil(无需授权,每个人都受信任

  • 一个列表(没有人受信任)

  • 特定应用程序列表

此外,条目可能包含**ACLAuthorizationPartitionID密钥,用于识别teamid、applecdhash**。

  • 如果指定了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

密钥链枚举和转储不会生成提示的机密可以使用工具LockSmith来完成

列出并获取每个密钥链条目的信息

  • 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,则不需要这个

因此,如果列出了1个应用程序,则需要在该应用程序中注入代码

如果partitionID中指定了apple,则可以使用**osascript访问它,因此任何信任带有apple的partitionID中的所有应用程序的内容。Python**也可用于此目的。

两个额外属性

  • Invisible:这是一个布尔标志,用于从UI密钥链应用程序中隐藏条目

  • General:用于存储元数据(因此未加密

  • Microsoft将所有用于访问敏感端点的刷新令牌都以明文形式存储。

参考资料

WhiteIntel是一个由暗网推动的搜索引擎,提供免费功能,用于检查公司或其客户是否已受到窃取恶意软件侵害

WhiteIntel的主要目标是打击由窃取信息的恶意软件导致的账户劫持和勒索软件攻击。

您可以在以下网址检查他们的网站并尝试他们的引擎,免费

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

最后更新于