2023-08-03 19:12:22 +00:00
# macOS XPC连接进程检查
2023-05-23 12:53:12 +00:00
< 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 > 🐦 推特 🐦< / 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-05-23 12:53:12 +00:00
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 )或[**电报群组**](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来分享你的黑客技巧。**
2023-05-23 12:53:12 +00:00
< / details >
2023-08-03 19:12:22 +00:00
## XPC连接进程检查
2023-05-23 12:53:12 +00:00
2023-08-03 19:12:22 +00:00
当与XPC服务建立连接时, 服务器将检查连接是否被允许。通常会执行以下检查:
2023-05-23 12:53:12 +00:00
2023-08-03 19:12:22 +00:00
1. 检查连接的**进程是否使用Apple签名的**证书( 仅由Apple提供) 。
* 如果**未经验证**,攻击者可以创建一个**伪造的证书**以匹配其他任何检查。
2. 检查连接的进程是否使用**组织的证书**进行签名( 团队ID验证) 。
* 如果**未经验证**, 可以使用Apple的**任何开发者证书**进行签名并连接到服务。
3. 检查连接的进程是否包含**正确的Bundle ID**。
4. 检查连接的进程是否具有**正确的软件版本号**。
* 如果**未经验证**, 即使其他检查已经通过, 仍然可以使用旧的、存在进程注入漏洞的客户端连接到XPC服务。
5. 检查连接的进程是否具有允许其连接到服务的**授权**。这适用于Apple二进制文件。
6. **验证**必须基于连接的**客户端的审计令牌**而不是其进程ID( PID) , 因为前者可以防止PID重用攻击。
* 开发人员很少使用审计令牌API调用, 因为它是**私有的**, 所以Apple可以随时**更改**。此外, Mac App Store应用程序不允许使用私有API。
2023-05-23 12:53:12 +00:00
2023-08-03 19:12:22 +00:00
有关PID重用攻击检查的更多信息, 请参见:
2023-05-24 22:31:58 +00:00
{% content-ref url="macos-pid-reuse.md" %}
[macos-pid-reuse.md ](macos-pid-reuse.md )
{% endcontent-ref %}
2023-08-03 19:12:22 +00:00
### Trustcache - 防止降级攻击
2023-06-13 16:23:33 +00:00
2023-08-03 19:12:22 +00:00
Trustcache是一种在Apple Silicon机器上引入的防御方法, 它存储了Apple二进制文件的CDHSAH数据库, 因此只有允许的非修改二进制文件才能执行。这可以防止执行降级版本。
2023-06-13 16:23:33 +00:00
2023-08-03 19:12:22 +00:00
### 代码示例
2023-05-23 12:53:12 +00:00
2023-08-03 19:12:22 +00:00
服务器将在一个名为**`shouldAcceptNewConnection`**的函数中实现此**验证**。
2023-05-23 12:53:12 +00:00
{% code overflow="wrap" %}
```objectivec
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection * )newConnection {
2023-08-03 19:12:22 +00:00
//Check connection
return YES;
2023-05-23 12:53:12 +00:00
}
```
{% endcode %}
2023-08-03 19:12:22 +00:00
对象NSXPCConnection有一个**私有**属性**`auditToken`**(应该使用但可能会更改)和一个**公共**属性**`processIdentifier`**(不应该使用)。
2023-05-23 12:53:12 +00:00
2023-08-03 19:12:22 +00:00
可以使用以下方式验证连接的进程:
2023-05-23 12:53:12 +00:00
{% code overflow="wrap" %}
```objectivec
[...]
SecRequirementRef requirementRef = NULL;
NSString requirementString = @"anchor apple generic and identifier \"xyz.hacktricks.service\" and certificate leaf [subject.CN] = \"TEAMID\" and info [CFBundleShortVersionString] >= \"1.0\"";
/* Check:
- Signed by a cert signed by Apple
- Check the bundle ID
- Check the TEAMID of the signing cert
- Check the version used
*/
// Check the requirements
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
```
2023-08-03 19:12:22 +00:00
如果开发人员不想检查客户端的版本,他至少可以检查客户端是否容易受到进程注入的攻击:
2023-05-23 12:53:12 +00:00
{% code overflow="wrap" %}
```objectivec
[...]
CFDictionaryRef csInfo = NULL;
SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo);
uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString * )kSecCodeInfoStatus] intValue];
2023-08-03 19:12:22 +00:00
const uint32_t cs_hard = 0x100; // don't load invalid page.
2023-05-23 12:53:12 +00:00
const uint32_t cs_kill = 0x200; // Kill process if page is invalid
const uint32_t cs_restrict = 0x800; // Prevent debugging
const uint32_t cs_require_lv = 0x2000; // Library Validation
const uint32_t cs_runtime = 0x10000; // hardened runtime
if ((csFlags & (cs_hard | cs_require_lv)) {
2023-08-03 19:12:22 +00:00
return Yes; // Accept connection
2023-05-23 12:53:12 +00:00
}
```
{% endcode %}
< 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**吗?请查看[**订阅计划**](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 repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **提交PR来分享你的黑客技巧。**
2023-05-23 12:53:12 +00:00
< / details >