macOS XPC Connecting Process Check

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Перевірка процесу підключення XPC

Коли встановлюється з'єднання з XPC-сервісом, сервер перевіряє, чи дозволено це з'єднання. Ось перевірки, які зазвичай виконуються:

  1. Перевірка, чи підключений процес підписаний Apple-підписом (наданим лише Apple).

  • Якщо це не підтверджено, зловмисник може створити фальшивий сертифікат, щоб відповідати будь-якій іншій перевірці.

  1. Перевірка, чи підключений процес підписаний сертифікатом організації (перевірка ідентифікатора команди).

  • Якщо це не підтверджено, можна використовувати будь-який сертифікат розробника від Apple для підпису та підключення до сервісу.

  1. Перевірка, чи підключений процес містить правильний ідентифікатор пакета.

  • Якщо це не підтверджено, будь-який інструмент, підписаний тією ж організацією, може бути використаний для взаємодії з XPC-сервісом.

  1. (4 або 5) Перевірка, чи у підключеному процесі є правильний номер версії програмного забезпечення.

  • Якщо це не підтверджено, можна використовувати старі, небезпечні клієнти, вразливі до впровадження процесу, для підключення до XPC-сервісу навіть за умови інших перевірок.

  1. (4 або 5) Перевірка, чи у підключеному процесі є зміцнений час виконання без небезпечних дозволів (таких, як ті, що дозволяють завантажувати довільні бібліотеки або використовувати змінні середовища DYLD)

  2. Якщо це не підтверджено, клієнт може бути вразливим до впровадження коду

  3. Перевірка, чи у підключеному процесі є дозвіл, що дозволяє йому підключатися до сервісу. Це застосовується до бінарних файлів Apple.

  4. Перевірка повинна бути заснована на аудиторському токені підключення клієнта замість його ідентифікатора процесу (PID), оскільки перше запобігає атакам повторного використання PID.

  • Розробники рідко використовують виклик API аудиторського токена, оскільки він є приватним, тому Apple може змінити його в будь-який момент. Крім того, використання приватного API не дозволяється в додатках Mac App Store.

  • Якщо використовується метод processIdentifier, це може бути вразливим

  • Слід використовувати xpc_dictionary_get_audit_token замість xpc_connection_get_audit_token, оскільки останнє також може бути вразливим у певних ситуаціях.

Атаки на комунікацію

Для отримання додаткової інформації про перевірку атаки повторного використання PID див.:

pagemacOS PID Reuse

Для отримання додаткової інформації про атаку xpc_connection_get_audit_token див.:

pagemacOS xpc_connection_get_audit_token Attack

Trustcache - Запобігання атакам на зниження рівня

Trustcache - це захисний метод, введений на машинах Apple Silicon, який зберігає базу даних CDHSAH бінарних файлів Apple, щоб можна було виконувати лише дозволені незмінені бінарні файли. Це запобігає виконанню версій зниження.

Приклади коду

Сервер реалізує цю перевірку у функції з назвою shouldAcceptNewConnection.

- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
//Check connection
return YES;
}

Якщо розробник не хоче перевіряти версію клієнта, він може перевірити, що клієнт принаймні не вразливий на впровадження процесу:

[...]
CFDictionaryRef csInfo = NULL;
SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo);
uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString *)kSecCodeInfoStatus] intValue];
const uint32_t cs_hard = 0x100;        // don't load invalid page.
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)) {
return Yes; // Accept connection
}
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated