hacktricks/macos-hardening/macos-red-teaming/macos-keychain.md

144 lines
8.6 KiB
Markdown
Raw Normal View History

2023-08-03 19:12:22 +00:00
# macOS 密钥链
<details>
2023-08-03 19:12:22 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2023-08-03 19:12:22 +00:00
* 你在一家**网络安全公司**工作吗?你想在 HackTricks 中看到你的**公司广告**吗?或者你想获得**PEASS 的最新版本或下载 PDF 格式的 HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享你的黑客技巧。**
</details>
2023-08-03 19:12:22 +00:00
## 主要密钥链
2023-08-03 19:12:22 +00:00
* **用户密钥链** (`~/Library/Keychains/login.keycahin-db`),用于存储**特定用户的凭据**,如应用程序密码、互联网密码、用户生成的证书、网络密码和用户生成的公钥/私钥。
* **系统密钥链** (`/Library/Keychains/System.keychain`),用于存储**系统范围的凭据**,如 WiFi 密码、系统根证书、系统私钥和系统应用程序密码。
2023-08-03 19:12:22 +00:00
### 密码密钥链访问
2023-08-03 19:12:22 +00:00
这些文件虽然没有固有的保护,可以**下载**,但它们是加密的,需要**用户的明文密码进行解密**。可以使用 [**Chainbreaker**](https://github.com/n0fate/chainbreaker) 这样的工具进行解密。
2023-08-03 19:12:22 +00:00
## 密钥链条目保护
### ACLs
2023-08-03 19:12:22 +00:00
密钥链中的每个条目都受**访问控制列表 (ACLs)** 的管理ACLs 规定了谁可以对密钥链条目执行各种操作,包括:
2023-08-03 19:12:22 +00:00
* **ACLAuhtorizationExportClear**:允许持有者获取明文密码。
* **ACLAuhtorizationExportWrapped**:允许持有者获取使用另一个提供的密码加密的明文密码。
* **ACLAuhtorizationAny**:允许持有者执行任何操作。
2023-08-03 19:12:22 +00:00
ACLs 还附带了一个**可信应用程序列表**,这些应用程序可以在不提示的情况下执行这些操作。这可以是:
2023-08-03 19:12:22 +00:00
* **N`il`**(无需授权,**每个人都受信任**
* 一个**空**列表(**没有人**受信任)
* 特定**应用程序**的**列表**。
2023-08-03 19:12:22 +00:00
此外,条目可能包含键**`ACLAuthorizationPartitionID`**,用于标识**teamid、apple**和**cdhash**。
2023-08-03 19:12:22 +00:00
* 如果指定了**teamid**,则为了在**不提示**的情况下**访问条目**值,使用的应用程序必须具有**相同的 teamid**。
* 如果指定了**apple**,则该应用程序需要由**Apple**签名。
* 如果指定了**cdhash**,则应用程序必须具有特定的**cdhash**。
2023-08-03 19:12:22 +00:00
### 创建密钥链条目
2023-08-03 19:12:22 +00:00
当使用**`Keychain Access.app`**创建一个**新的条目**时,适用以下规则:
2023-08-03 19:12:22 +00:00
* 所有应用程序都可以进行加密。
* **没有应用程序**可以导出/解密(无需提示用户)。
* 所有应用程序都可以查看完整性检查。
* 没有应用程序可以更改 ACLs。
* **partitionID** 设置为**`apple`**。
2023-08-03 19:12:22 +00:00
当应用程序在密钥链中创建条目时,规则略有不同:
2023-08-03 19:12:22 +00:00
* 所有应用程序都可以进行加密。
* 只有**创建条目的应用程序**(或其他明确添加的应用程序)可以导出/解密(无需提示用户)。
* 所有应用程序都可以查看完整性检查。
* 没有应用程序可以更改 ACLs。
* **partitionID** 设置为**`teamid:[teamID here]`**。
2023-08-03 19:12:22 +00:00
## 访问密钥链
### `security`
```bash
# 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" %}
2023-08-03 19:12:22 +00:00
可以使用工具[**LockSmith**](https://github.com/its-a-feature/LockSmith)来进行**密钥链枚举和转储**,而不会生成提示。
{% endhint %}
2023-08-03 19:12:22 +00:00
列出并获取每个密钥链条目的**信息**
2023-08-03 19:12:22 +00:00
* API **`SecItemCopyMatching`** 提供有关每个条目的信息,并且在使用时可以设置一些属性:
* **`kSecReturnData`**如果为true它将尝试解密数据设置为false以避免潜在的弹出窗口
* **`kSecReturnRef`**还获取密钥链条目的引用如果稍后发现可以在没有弹出窗口的情况下解密则设置为true
* **`kSecReturnAttributes`**:获取条目的元数据
* **`kSecMatchLimit`**:返回的结果数量
* **`kSecClass`**:密钥链条目的类型
2023-08-03 19:12:22 +00:00
获取每个条目的**ACL**
2023-08-03 19:12:22 +00:00
* 使用API **`SecAccessCopyACLList`** 可以获取密钥链条目的ACL并返回一个ACL列表如`ACLAuhtorizationExportClear`和之前提到的其他列表),其中每个列表都有:
* 描述
* **受信任的应用程序列表**。这可以是:
* 一个应用程序:/Applications/Slack.app
* 一个二进制文件:/usr/libexec/airportd
* 一个组group://AirPort
2023-08-03 19:12:22 +00:00
导出数据:
2023-08-03 19:12:22 +00:00
* API **`SecKeychainItemCopyContent`** 获取明文
* API **`SecItemExport`** 导出密钥和证书,但可能需要设置密码以加密导出的内容
2023-08-03 19:12:22 +00:00
以下是**导出密钥而无需提示**的**要求**
2023-08-03 19:12:22 +00:00
* 如果列出了**1个或多个受信任的**应用程序:
* 需要适当的**授权**`Nil`),或者是授权访问秘密信息的应用程序允许列表的一部分
* 需要代码签名与**PartitionID**匹配
* 需要代码签名与一个**受信任的应用程序**匹配或者是正确的KeychainAccessGroup的成员
* 如果**所有应用程序都受信任**
* 需要适当的**授权**
* 需要代码签名与**PartitionID**匹配
* 如果**没有PartitionID**,则不需要此项
{% hint style="danger" %}
2023-08-03 19:12:22 +00:00
因此,如果只有**1个应用程序**列出,您需要**在该应用程序中注入代码**。
2023-08-03 19:12:22 +00:00
如果**partitionID**中指定了**apple**,则可以使用**`osascript`**访问它因此可以信任所有具有apple的partitionID的应用程序。也可以使用**`Python`**进行此操作。
{% endhint %}
2023-08-03 19:12:22 +00:00
### 两个附加属性
2023-08-03 19:12:22 +00:00
* **Invisible**:这是一个布尔标志,用于从**UI**密钥链应用程序中**隐藏**条目
* **General**:用于存储**元数据**(因此**不加密**
* Microsoft将所有用于访问敏感端点的刷新令牌明文存储。
2023-08-03 19:12:22 +00:00
## 参考资料
* [**#OBTS v5.0: "Lock Picking the macOS Keychain" - Cody Thomas**](https://www.youtube.com/watch?v=jKE1ZW33JpY)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2023-08-03 19:12:22 +00:00
* 您在**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗?或者您想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>