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的**任何开发者证书**进行签名并连接到服务。
2023-09-20 23:22:05 +00:00
3. 检查连接的进程是否**包含正确的Bundle ID**。
* 如果**未经验证**,可以使用由同一组织**签名的任何工具**与XPC服务进行交互。
4. ( 4或5) 检查连接的进程是否具有**正确的软件版本号**。
* 如果**未经验证**, 即使其他检查已经通过, 也可以使用旧的、存在安全漏洞的客户端进行连接到XPC服务的过程注入。
5. ( 4或5) 检查连接的进程是否具有带有危险权限的强化运行时( 例如允许加载任意库或使用DYLD环境变量的权限) 。
* 如果**未经验证**,客户端可能**容易受到代码注入**的攻击。
6. 检查连接的进程是否具有允许其连接到服务的**授权**。这适用于Apple的二进制文件。
7. **验证**必须基于连接的**客户端的审计令牌**而不是其进程ID( PID) , 因为前者可以防止PID重用攻击。
2023-08-03 19:12:22 +00:00
* 开发人员很少使用审计令牌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-09-20 23:22:05 +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
*/
2023-09-20 23:22:05 +00:00
// Check the requirements with the PID (vulnerable)
2023-05-23 12:53:12 +00:00
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
2023-09-20 23:22:05 +00:00
// Check the requirements wuing the auditToken (secure)
SecTaskRef taskRef = SecTaskCreateWithAuditToken(NULL, ((ExtendedNSXPCConnection*)newConnection).auditToken);
SecTaskValidateForRequirement(taskRef, (__bridge CFStringRef)(requirementString))
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
[...]
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 >
2023-09-20 23:22:05 +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-09-20 23:22:05 +00:00
* 你在一家 **网络安全公司** 工作吗?你想在 HackTricks 中看到你的 **公司广告**吗?或者你想获得 **PEASS 的最新版本或下载 HackTricks 的 PDF** 吗?请查看 [**订阅计划** ](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 来分享你的黑客技巧。**
2023-05-23 12:53:12 +00:00
< / details >