macOS XPC Connecting Process Check

рд╕реАрдЦреЗрдВ рдФрд░ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХрд░реЗрдВ AWS рд╣реИрдХрд┐рдВрдЧ:HackTricks Training AWS Red Team Expert (ARTE) рд╕реАрдЦреЗрдВ рдФрд░ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХрд░реЗрдВ GCP рд╣реИрдХрд┐рдВрдЧ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

XPC рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдЪреЗрдХ

рдЬрдм рдПрдХ XPC рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдпрд╣ рдЬрд╛рдВрдЪреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпреЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЬрд╛рдВрдЪреЗрдВ рд╣реИрдВ:

  1. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдПрдХ Apple-рд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдХреЗрд╡рд▓ Apple рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

  • рдпрджрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдирдХрд▓реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЬрд╛рдВрдЪ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

  1. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрд╕реНрдерд╛рди рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЯреАрдо рдЖрдИрдбреА рд╕рддреНрдпрд╛рдкрди)ред

  • рдпрджрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ Apple рд╕реЗ рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  1. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдПрдХ рдЙрдЪрд┐рдд рдмрдВрдбрд▓ рдЖрдИрдбреА рд░рдЦрддрд╛ рд╣реИред

  • рдпрджрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕реА рд╕рдВрдЧрдарди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ XPC рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  1. (4 рдпрд╛ 5) рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╣реИред

  • рдпрджрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдкреБрд░рд╛рдирд╛, рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ, рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ, XPC рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЕрдиреНрдп рдЬрд╛рдВрдЪреЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдВред

  1. (4 рдпрд╛ 5) рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдЦрддрд░рдирд╛рдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣рд╛рд░реНрдбрдирдб рд░рдирдЯрд╛рдЗрдо рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдЬреЛ рдордирдорд╛рдиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдХрд░рдиреЗ рдпрд╛ DYLD env vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ)ред

  • рдпрджрд┐ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  1. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ Apple рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИред

  2. рд╕рддреНрдпрд╛рдкрди рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдСрдбрд┐рдЯ рдЯреЛрдХрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рдХреЗ рдкреНрд░реЛрд╕реЗрд╕ рдЖрдИрдбреА (PID) рдХреЗ рдмрдЬрд╛рдп рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрд╡ PID рдкреБрди: рдЙрдкрдпреЛрдЧ рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

  • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрднреА-рдХрднреА рдСрдбрд┐рдЯ рдЯреЛрдХрди API рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рдЬреА рд╣реИ, рдЗрд╕рд▓рд┐рдП Apple рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдордп рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдирд┐рдЬреА API рдХрд╛ рдЙрдкрдпреЛрдЧ Mac App Store рдРрдкреНрд╕ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

  • рдпрджрд┐ рд╡рд┐рдзрд┐ processIdentifier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  • xpc_dictionary_get_audit_token рдХрд╛ рдЙрдкрдпреЛрдЧ xpc_connection_get_audit_token рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓рд╛ рднреА рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдЪрд╛рд░ рд╣рдорд▓реЗ

PID рдкреБрди: рдЙрдкрдпреЛрдЧ рд╣рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд░реЗрдВ:

macOS PID Reuse

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП xpc_connection_get_audit_token рд╣рдорд▓реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:

macOS xpc_connection_get_audit_token Attack

Trustcache - рдбрд╛рдЙрдирдЧреНрд░реЗрдб рд╣рдорд▓реЛрдВ рдХреА рд░реЛрдХрдерд╛рдо

Trustcache рдПрдХ рд░рдХреНрд╖рд╛рддреНрдордХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ Apple Silicon рдорд╢реАрдиреЛрдВ рдореЗрдВ рдкреЗрд╢ рдХреА рдЧрдИ рд╣реИ рдЬреЛ Apple рдмрд╛рдЗрдирд░реА рдХреЗ CDHSAH рдХрд╛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЕрдиреБрдордд рдЧреИрд░-рд╕рдВрд╢реЛрдзрд┐рдд рдмрд╛рдЗрдирд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЬреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдХреЛрдб рдЙрджрд╛рд╣рд░рдг

рд╕рд░реНрд╡рд░ рдЗрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛ shouldAcceptNewConnection рдирд╛рдордХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

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

рдСрдмреНрдЬреЗрдХреНрдЯ NSXPCConnection рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдкреНрд░реЙрдкрд░реНрдЯреА auditToken рд╣реИ (рдЬреЛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдмрджрд▓ рд╕рдХрддреА рд╣реИ) рдФрд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░реЙрдкрд░реНрдЯреА processIdentifier рд╣реИ (рдЬреЛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП)ред

рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

[...]
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 with the PID (vulnerable)
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);

// Check the requirements wuing the auditToken (secure)
SecTaskRef taskRef = SecTaskCreateWithAuditToken(NULL, ((ExtendedNSXPCConnection*)newConnection).auditToken);
SecTaskValidateForRequirement(taskRef, (__bridge CFStringRef)(requirementString))

рдпрджрд┐ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИ:

[...]
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 рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE) рд╕реАрдЦреЗрдВ рдФрд░ GCP рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

Last updated