macOS xpc_connection_get_audit_token ๊ณต๊ฒฉ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์์ธํ ์ ๋ณด๋ ์๋ณธ ํฌ์คํธ๋ฅผ ํ์ธํ์ธ์: https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/. ์์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Mach ๋ฉ์์ง ๊ธฐ๋ณธ ์ ๋ณด
Mach Messages๊ฐ ๋ฌด์์ธ์ง ๋ชจ๋ฅธ๋ค๋ฉด ์ด ํ์ด์ง๋ฅผ ๋จผ์ ํ์ธํ์ธ์:
macOS IPC - Inter Process Communication
์ฐ์ (definition from here)๋ฅผ ๊ธฐ์ตํ์ธ์:
Mach ๋ฉ์์ง๋ _mach port_์ ํตํด ์ ์ก๋๋ฉฐ, ์ด๋ mach ์ปค๋์ ๋ด์ฅ๋ ๋จ์ผ ์์ ์, ๋ค์ค ์ก์ ์ ํต์ ์ฑ๋์
๋๋ค. ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ mach ํฌํธ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง, ์ธ์ ๋ ์ง ๋จ ํ๋์ ํ๋ก์ธ์ค๋ง ํด๋น ํฌํธ์์ ์ฝ์ ์ ์์ต๋๋ค. ํ์ผ ๋์คํฌ๋ฆฝํฐ๋ ์์ผ์ฒ๋ผ mach ํฌํธ๋ ์ปค๋์ ์ํด ํ ๋น๋๊ณ ๊ด๋ฆฌ๋๋ฉฐ ํ๋ก์ธ์ค๋ ์ ์ ํ๋๋ง ๋ณด๊ณ , ์ด๋ฅผ ํตํด ์ปค๋์ ์์ ์ด ์ฌ์ฉํ๋ ค๋ mach ํฌํธ๋ฅผ ์ง์ ํฉ๋๋ค.
XPC ์ฐ๊ฒฐ
XPC ์ฐ๊ฒฐ์ด ์ด๋ป๊ฒ ์ฑ๋ฆฝ๋๋์ง ๋ชจ๋ฅธ๋ค๋ฉด ๋ค์์ ํ์ธํ์ธ์:
์ทจ์ฝ์ ์์ฝ
์์๋ ์ค์ํ ์ ์ XPC์ ์ถ์ํ๋ ์ผ๋์ผ ์ฐ๊ฒฐ์ด์ง๋ง, ๊ทธ ๊ธฐ๋ฐ ๊ธฐ์ ์ ๋ค์ค ์ก์ ์๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์:
- Mach ํฌํธ๋ ๋จ์ผ ์์ ์, ๋ค์ค ์ก์ ์์ ๋๋ค.
- XPC ์ฐ๊ฒฐ์ audit token์ ๊ฐ์ฅ ์ต๊ทผ์ ์์ ๋ ๋ฉ์์ง์์ ๋ณต์ฌ๋ audit token์ ๋๋ค.
- XPC ์ฐ๊ฒฐ์ audit token์ ์ป๋ ๊ฒ์ ๋ง์ ๋ณด์ ์ฒดํฌ์์ ์ค์ํฉ๋๋ค.
์ ์ํฉ์ ์ ๋งํด ๋ณด์ด์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ ์ ์์ต๋๋ค (from here):
- Audit token์ ์ฐ๊ฒฐ์ ์๋ฝํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ถํ ๊ฒ์ฌ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒ์ฌ๋ ์๋น์ค ํฌํธ๋ก ๋ฉ์์ง๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์์ง ์ฐ๊ฒฐ์ด ์๋ฆฝ๋์ง ์์ ์ํ์
๋๋ค. ์ด ํฌํธ๋ก ๋ ๋ง์ ๋ฉ์์ง๊ฐ ๋์ฐฉํ๋ฉด ์ถ๊ฐ ์ฐ๊ฒฐ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๊ฒฐ ์๋ฝ ์ ์ ์ด๋ค์ง๋ ๋ชจ๋ ์ฒดํฌ๋ ์ทจ์ฝํ์ง ์์ต๋๋ค (
-listener:shouldAcceptNewConnection:๋ด๋ถ์ audit token์ ์์ ํฉ๋๋ค). ์ฐ๋ฆฌ๋ ๋ฐ๋ผ์ ํน์ ๋์์ ๊ฒ์ฆํ๋ XPC ์ฐ๊ฒฐ์ ์ฐพ๊ณ ์์ต๋๋ค. - XPC ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ด๋ ํ ๋ฉ์์ง์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์๋ฃ๋์ด์ผ ๋ค์ ๋ฉ์์ง์ ๋ํด ํธ์ถ๋๋ค๋ ์๋ฏธ๋ก, ๋์ ๋์คํจ์น ํ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ฐ๋ผ์ XPC ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์์๋ audit token์ด ๋ค๋ฅธ ์ผ๋ฐ(์๋ต์ด ์๋!) ๋ฉ์์ง์ ์ํด ๋ฎ์ด์ฐ์ฌ์ง ์ ์์ต๋๋ค.
์ด ์ํฉ์ด ์ ์ฉ๋ ์ ์๋ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ:
- Variant1:
- Exploit๊ฐ ์๋น์ค A์ ์๋น์ค B์ ์ฐ๊ฒฐํฉ๋๋ค.
- ์๋น์ค B๋ ์ฌ์ฉ์๊ฐ ํ ์ ์๋ privileged functionality๋ฅผ ์๋น์ค A์์ ํธ์ถํ ์ ์์ต๋๋ค.
- ์๋น์ค A๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ๊ฐ ์๋, ์๋ฅผ ๋ค์ด **
dispatch_async**์์xpc_connection_get_audit_token์ ํธ์ถํฉ๋๋ค. - ๋ฐ๋ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋์คํจ์น๋๋ ์ธ๋ถ์์ ๋ค๋ฅธ ๋ฉ์์ง๊ฐ Audit Token์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
- ์ต์คํ๋ก์์ ์๋น์ค A์ ๋ํ SEND ๊ถํ์ service B์ ์ ๋ฌํฉ๋๋ค.
- ๊ทธ๋์ svc B๊ฐ ์ค์ ๋ก ์๋น์ค A์ ๋ฉ์์ง๋ค์ ๋ณด๋ผ ๊ฒ์ ๋๋ค.
- ์ต์คํ๋ก์์ privileged action์ ํธ์ถํ๋ ค๊ณ ์๋ํฉ๋๋ค. RC ์ํฉ์์ svc A๋ ์ด ๋์์ ๊ถํ์ ๊ฒ์ฌํ๋๋ฐ, ๊ทธ ์์ ์ svc B๊ฐ Audit token์ ๋ฎ์ด์ผ๋ค๋ฉด (์ต์คํ๋ก์์ด privileged action์ ํธ์ถํ ๊ถํ์ ์ป๊ฒ ๋ฉ๋๋ค).
- Variant 2:
- ์๋น์ค B๋ ์ฌ์ฉ์๊ฐ ํ ์ ์๋ privileged functionality๋ฅผ ์๋น์ค A์์ ํธ์ถํ ์ ์์ต๋๋ค.
- ์ต์คํ๋ก์์ service A์ ์ฐ๊ฒฐํ๊ณ , ์๋น์ค A๋ ํน์ reply ํฌํธ์์ ์๋ต์ ๊ธฐ๋ํ๋ ๋ฉ์์ง๋ฅผ ์ต์คํ๋ก์์๊ฒ ๋ณด๋ ๋๋ค.
- ์ต์คํ๋ก์์ ๊ทธ reply port๋ฅผ ์ ๋ฌํ๋ ๋ฉ์์ง๋ฅผ ์๋น์ค B์ ๋ณด๋ ๋๋ค.
- ์๋น์ค B๊ฐ ์๋ตํ ๋, ๊ทธ ๋ฉ์์ง๋ service A๋ก ์ ์ก๋๋ฉฐ, ๋์์ ์ต์คํ๋ก์์ ์๋น์ค A์ ๋ค๋ฅธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด privileged functionality์ ๋๋ฌํ๋ ค ์๋ํ๊ณ , ์๋น์ค B์ ์๋ต์ด ์ ํํ ์๊ฐ์ Audit token์ ๋ฎ์ด์ธ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํฉ๋๋ค (Race Condition).
Variant 1: ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ธ๋ถ์์ xpc_connection_get_audit_token ํธ์ถ
์๋๋ฆฌ์ค:
- ์๋๋ฐ์ค ํ๋กํ๊ณผ ์ฐ๊ฒฐ ์๋ฝ ์ ๊ถํ ๊ฒ์ฌ์ ๋ฐ๋ผ ๋ ๋ค ์ฐ๊ฒฐํ ์ ์๋ ๋ ๊ฐ์ mach ์๋น์ค **
A**์B. - _A_๋ **
B**๊ฐ ์ ๋ฌํ ์ ์๋ ํน์ ๋์์ ๋ํ ๊ถํ ๊ฒ์ฌ๋ฅผ ํด์ผ ํฉ๋๋ค(์ฐ๋ฆฌ ์ฑ์ ํ ์ ์์). - ์๋ฅผ ๋ค์ด, B๊ฐ ์ผ๋ถ entitlements๋ฅผ ๊ฐ์ง๊ณ ์๊ฑฐ๋ root๋ก ์คํ ์ค์ด๋ฉด A์๊ฒ privileged action์ ์์ฒญํ ์ ์์ต๋๋ค.
- ์ด ๊ถํ ๊ฒ์ฌ์์ **
A**๋ ์๋ฅผ ๋ค์ด **dispatch_async**์์xpc_connection_get_audit_token์ ํธ์ถํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก audit token์ ์ป์ต๋๋ค.
Caution
์ด ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๋ Race Condition์ ์ ๋ฐํ ์ ์์ผ๋ฉฐ, ์ต์คํ๋ก์์ A์๊ฒ ์ฌ๋ฌ ๋ฒ ๋์ ์ํ์ ์์ฒญํ๋ฉด์ B๊ฐ
A์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋๋ก ๋ง๋ญ๋๋ค. RC๊ฐ ์ฑ๊ณตํ๋ฉด, B์ audit token์ด ์ฐ๋ฆฌ์ ์์ฒญ์ด A์์ ์ฒ๋ฆฌ๋๋ ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌ๋์ด ๋ค์ด๊ฐ๋ฉฐ, ์ด๋ ์ค์ง B๋ง ์์ฒญํ ์ ์๋ privileged action์ ์ฐ๋ฆฌ์ ์ ๊ทผ์ ํ์ฉํฉ๋๋ค.
์ด ์ฌ๋ก๋ **A**๊ฐ smd์ด๊ณ **B**๊ฐ diagnosticd์์ ๋ ๋ฐ์ํ์ต๋๋ค. smb์ ํจ์ SMJobBless๋ ์๋ก์ด privileged helper tool์ ์ค์นํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค (root๋ก์). root๋ก ์คํ๋๋ ํ๋ก์ธ์ค๊ฐ smd์ ์ฐ๋ฝํ๋ฉด ์ถ๊ฐ ๊ฒ์ฌ๊ฐ ์ํ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์๋น์ค B๋ root๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋ diagnosticd์ด๋ฉฐ, ๋ชจ๋ํฐ๋ง์ด ์์๋๋ฉด ์ด๋น ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ์ ์กํฉ๋๋ค.
๊ณต๊ฒฉ ์ํ ๋ฐฉ๋ฒ:
- ํ์ค XPC ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ
smd๋ผ๋ ์๋น์ค์ ๋ํ ์ฐ๊ฒฐ์ ์์ํฉ๋๋ค. diagnosticd์ ๋ํ ๋ณด์กฐ ์ฐ๊ฒฐ์ ํ์ฑํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ ์ฐจ์ ๋ฌ๋ฆฌ, ํด๋ผ์ด์ธํธ ํฌํธ send ๊ถํ์ ์๋ก ์์ฑํ์ฌ ๋ณด๋ด๋ ๋์smd์ฐ๊ฒฐ๊ณผ ์ฐ๊ด๋ send right์ ๋ณต์ ๋ณธ์ผ๋ก ๋์ฒดํฉ๋๋ค.- ๊ฒฐ๊ณผ์ ์ผ๋ก XPC ๋ฉ์์ง๋
diagnosticd๋ก ๋์คํจ์น๋ ์ ์์ง๋ง,diagnosticd์ ์๋ต์smd๋ก ๋ฆฌ๋ค์ด๋ ํธ๋ฉ๋๋ค.smd์ ์ฅ์์๋ ์ฌ์ฉ์์diagnosticd์์ชฝ์์ ์ค๋ ๋ฉ์์ง๋ค์ด ๊ฐ์ ์ฐ๊ฒฐ์์ ์จ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.

- ๋ค์ ๋จ๊ณ๋
diagnosticd์๊ฒ ์ ํํ ํ๋ก์ธ์ค(์ ์ฌ์ ์ผ๋ก ์ฌ์ฉ์์ ํ๋ก์ธ์ค)๋ฅผ ๋ชจ๋ํฐ๋งํ๋๋ก ์ง์ํ๋ ๊ฒ์ ๋๋ค. ๋์์smd์ ์ผ์์ ์ธ 1004 ๋ฉ์์ง๋ฅผ ๋๋์ผ๋ก ๋ณด๋ ๋๋ค. ๋ชฉ์ ์ ๊ถํ์ด ์์น๋ ๋๊ตฌ๋ฅผ ์ค์นํ๋ ๊ฒ์ ๋๋ค. - ์ด ๋์์
handle_blessํจ์ ๋ด์์ ๋ ์ด์ค ์ปจ๋์ ์ ์ ๋ฐํฉ๋๋ค. ํ์ด๋ฐ์ด ์ค์ํฉ๋๋ค:xpc_connection_get_pidํธ์ถ์ ์ฌ์ฉ์์ ํ๋ก์ธ์ค PID๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค(๊ถํ ์๋ ๋๊ตฌ๊ฐ ์ฌ์ฉ์์ ์ฑ ๋ฒ๋ค์ ์์). ๊ทธ๋ฌ๋connection_is_authorizedํ์ ๋ฃจํด ๋ด์xpc_connection_get_audit_token์diagnosticd์ audit token์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
Variant 2: reply ์ ๋ฌ
XPC ํ๊ฒฝ์์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋์์ ์คํ๋์ง๋ ์์ง๋ง, reply ๋ฉ์์ง ์ฒ๋ฆฌ๋ ๊ณ ์ ํ ๋์์ ํฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ์๋ต์ ๊ธฐ๋ํ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
xpc_connection_send_message_with_reply: ์ด ๋ฐฉ์์์๋ XPC ๋ฉ์์ง๊ฐ ์ง์ ๋ ํ์์ ์์ ๋๊ณ ์ฒ๋ฆฌ๋ฉ๋๋ค.xpc_connection_send_message_with_reply_sync: ๋ฐ๋๋ก ์ด ๋ฐฉ์์์๋ XPC ๋ฉ์์ง๊ฐ ํ์ฌ ๋์คํจ์น ํ์์ ์์ ๋๊ณ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ด ๊ตฌ๋ถ์ reply ํจํท์ด XPC ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์คํ๊ณผ ๋์์ ํ์ฑ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ฃผ๋ชฉํ ์ ์ _xpc_connection_set_creds๊ฐ audit token์ ๋ถ๋ถ์ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฝ์ ์ ์ฉํ์ง๋ง, ์ฐ๊ฒฐ ๊ฐ์ฒด ์ ์ฒด์ ๋ํด์๋ ์ด ๋ณดํธ๋ฅผ ํ์ฅํ์ง ์๋๋ค๋ ์ ์
๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํจํท ํ์ฑ๊ณผ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์คํ ์ฌ์ด์ ๊ฐ๊ฒฉ์์ audit token์ด ๊ต์ฒด๋ ์ ์๋ ์ทจ์ฝ์ ์ด ์๊น๋๋ค.
์ด ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋น๊ฐ ํ์ํฉ๋๋ค:
- ์ฐ๊ฒฐ์ ์ค์ ํ ์ ์๋ ๋ ๊ฐ์ mach ์๋น์ค, **
A**์B. - ์๋น์ค **
A**๋ ์ค์ง **B**๋ง ์ํํ ์ ์๋ ํน์ ๋์์ ๋ํ ๊ถํ ๊ฒ์ฌ๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค(์ฌ์ฉ์ ์ฑ์ ์๋). - ์๋น์ค **
A**๋ ์๋ต์ ๊ธฐ๋ํ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ ๋๋ค. - ์ฌ์ฉ์๋ ์๋น์ค **
B**์ ์๋ตํ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ ์ฉ ์ ์ฐจ:
- ์๋น์ค **
A**๊ฐ ์๋ต์ ๊ธฐ๋ํ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋๊น์ง ๋๊ธฐํฉ๋๋ค. - ๊ทธ ์๋ต์ ์ง์ A์ ๋ณด๋ด์ง ์๊ณ , reply ํฌํธ๋ฅผ ํ์ทจํ์ฌ ์๋น์ค **
B**์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค. - ๊ทธ ํ ๊ธ์ง๋ ๋์์ ํฌํจํ ๋ฉ์์ง๋ฅผ ์ ์กํ์ฌ, ๊ทธ๊ฒ์ด ์๋น์ค B์ ์๋ต๊ณผ ๋์์ ์ฒ๋ฆฌ๋๊ธธ ๊ธฐ๋ํฉ๋๋ค.
์๋๋ ์ค๋ช ๋ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค์ ์๊ฐ์ ํํ์ ๋๋ค:
 (1) (1) (1) (1) (1) (1).png)
.png)
๋ฐ๊ฒฌ์์ ๋ฌธ์
- ์ธ์คํด์ค ์ฐพ๊ธฐ์ ์ด๋ ค์:
xpc_connection_get_audit_token์ฌ์ฉ ์ธ์คํด์ค๋ฅผ ์ ์ /๋์ ์ผ๋ก ์ฐพ๋ ๊ฒ์ด ์ด๋ ค์ ์ต๋๋ค. - ๋ฐฉ๋ฒ๋ก : Frida๋ฅผ ์ฌ์ฉํด
xpc_connection_get_audit_token์ ํํนํ๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ์์ํ์ง ์๋ ํธ์ถ์ ํํฐ๋งํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ํํนํ ํ๋ก์ธ์ค์๋ง ์ ์ฉ๋๋ฉฐ ํด๋น ๊ธฐ๋ฅ์ ์ค์ ๋ก ์ฌ์ฉ ์ค์ผ ๋์๋ง ํจ๊ณผ์ ์ด์์ต๋๋ค. - ๋ถ์ ํด๋ง: IDA/Ghidra ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ๋๋ฌ ๊ฐ๋ฅํ mach ์๋น์ค๋ค์ ์กฐ์ฌํ์ง๋ง, dyld shared cache ๊ด๋ จ ํธ์ถ๋ก ์ธํด ์๊ฐ์ด ๋ง์ด ์์๋๊ณ ๋ณต์กํ์ต๋๋ค.
- ์คํฌ๋ฆฝํ
ํ๊ณ:
dispatch_async๋ธ๋ก์์xpc_connection_get_audit_token์ผ๋ก์ ํธ์ถ์ ์คํฌ๋ฆฝํธ๋ก ๋ถ์ํ๋ ค๋ ์๋๋ ๋ธ๋ก ํ์ฑ๊ณผ dyld shared cache์์ ์ํธ์์ฉ ๋๋ฌธ์ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค.
์์ ์ฌํญ
- ๋ณด๊ณ ๋ ๋ฌธ์ :
smd๋ด์์ ๋ฐ๊ฒฌ๋ ์ผ๋ฐ์ ๋ฐ ํน์ ๋ฌธ์ ๋ฅผ Apple์ ๋ณด๊ณ ํ์ต๋๋ค. - Apple์ ๋์: Apple์
smd์์xpc_connection_get_audit_token์xpc_dictionary_get_audit_token์ผ๋ก ๋์ฒดํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค. - ์์ ์ ์ฑ๊ฒฉ:
xpc_dictionary_get_audit_tokenํจ์๋ ์์ ๋ XPC ๋ฉ์์ง์ ์ฐ๊ด๋ mach ๋ฉ์์ง์์ ์ง์ audit token์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ค๋ง, ์ด ํจ์๋xpc_connection_get_audit_token๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณต๊ฐ API์ ์ผ๋ถ๊ฐ ์๋๋๋ค. - ๊ด๋ฒ์ํ ์์ ๋ถ์ฌ: ์ Apple์ด ์ฐ๊ฒฐ์ ์ ์ฅ๋ audit token๊ณผ ์ผ์นํ์ง ์๋ ๋ฉ์์ง๋ฅผ ํ๊ธฐํ๋ ๋ฑ ๋ ํฌ๊ด์ ์ธ ์์ ์ ํ์ง ์์๋์ง๋ ๋ถ๋ถ๋ช
ํฉ๋๋ค. ํน์ ์๋๋ฆฌ์ค(์:
setuid์ฌ์ฉ)์์ ์ ๋นํ audit token ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ด์ ์ผ ์ ์์ต๋๋ค. - ํ์ฌ ์ํ: ์ด ๋ฌธ์ ๋ iOS 17 ๋ฐ macOS 14์ ์ฌ์ ํ ์กด์ฌํ๋ฉฐ, ์ด๋ฅผ ์๋ณํ๊ณ ์ดํดํ๋ ค๋ ์ฌ๋๋ค์๊ฒ ๋์ ๊ณผ์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค๋ฌด์์ ์ทจ์ฝ ์ฝ๋ ๊ฒฝ๋ก ์ฐพ๊ธฐ (2024โ2025)
XPC ์๋น์ค๋ฅผ ๊ฐ์ฌํ ๋, ๋ฉ์์ง์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ธ๋ถ์์ ์ํ๋๋ ๊ถํ ๊ฒ์ฌ๋ ์๋ต ์ฒ๋ฆฌ์ ๋์์ ์ํ๋๋ ๊ถํ ๊ฒ์ฌ์ ์ฃผ๋ชฉํ์ธ์.
์ ์ ํ์ ํํธ:
dispatch_async/dispatch_after๋๋ ๋ฉ์์ง ํธ๋ค๋ฌ ์ธ๋ถ์์ ์คํ๋๋ ๋ค๋ฅธ ์์ปค ํ๋ฅผ ํตํด ํ์ ์ถ๊ฐ๋ ์ ์๋ ๋ธ๋ก์์ ๋๋ฌ ๊ฐ๋ฅํxpc_connection_get_audit_tokenํธ์ถ์ ๊ฒ์ํ์ธ์.- per-connection๊ณผ per-message ์ํ๋ฅผ ํผํฉํ๋ ๊ถํ ํฌํผ๋ฅผ ์ฐพ์๋ณด์ธ์(์:
xpc_connection_get_pid์์ PID๋ฅผ ๊ฐ์ ธ์ค์ง๋งxpc_connection_get_audit_token์์ audit token์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ). - NSXPC ์ฝ๋์์๋
-listener:shouldAcceptNewConnection:์์ ์ฒดํฌ๊ฐ ์ํ๋๋์ง ํ์ธํ๊ฑฐ๋, ๋ฉ์์ง๋ณ ์ฒดํฌ์ ๊ฒฝ์ฐ ๊ตฌํ์ด per-message audit token์ ์ฌ์ฉํ๋๋ก ๋์ด ์๋์ง ํ์ธํ์ธ์(์: ํ์ ๋ ๋ฒจ ์ฝ๋์์ ๋ฉ์์ง์ dictionary๋ฅผ ํตํดxpc_dictionary_get_audit_token์ฌ์ฉ).
๋์ ํ์ ํ:
xpc_connection_get_audit_token์ ํํนํ๊ณ , ์ฌ์ฉ์ ์คํ์ ์ด๋ฒคํธ ์ ๋ฌ ๊ฒฝ๋ก๊ฐ ํฌํจ๋์ง ์์ ํธ์ถ์ ํ๋๊ทธํ์ธ์(์:_xpc_connection_mach_event). ์์ Frida ํํน:
Interceptor.attach(Module.getExportByName(null, 'xpc_connection_get_audit_token'), {
onEnter(args) {
const bt = Thread.backtrace(this.context, Backtracer.ACCURATE)
.map(DebugSymbol.fromAddress).join('\n');
if (!bt.includes('_xpc_connection_mach_event')) {
console.log('[!] xpc_connection_get_audit_token outside handler\n' + bt);
}
}
});
์ฐธ๊ณ :
- macOS์์๋ ๋ณดํธ๋/Apple ๋ฐ์ด๋๋ฆฌ๋ฅผ instrumentingํ๋ ค๋ฉด SIP๋ฅผ ๋นํ์ฑํํ๊ฑฐ๋ ๊ฐ๋ฐ ํ๊ฒฝ์ด ํ์ํ ์ ์์ต๋๋ค; ์์ฒด ๋น๋๋ userland services๋ฅผ ํ ์คํธํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- reply-forwarding races (Variant 2)์ ๊ฒฝ์ฐ,
xpc_connection_send_message_with_reply์ ์ผ๋ฐ ์์ฒญ์ ํ์ด๋ฐ์ ํผ์งํ์ฌ ์๋ต ํจํท์ ๋์ ํ์ฑ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ถํ ๊ฒ์ฌ(authorization) ๋์ ์ฌ์ฉ๋๋ ์ ํจํ audit token์ด ์ํฅ์ ๋ฐ์ ์ ์๋์ง ํ์ธํ์ญ์์ค.
Exploitation primitives you will likely need
- Multi-sender setup (Variant 1): A์ B์ ๋ํ connections๋ฅผ ์์ฑํฉ๋๋ค; A์ client port์ send right์ ๋ณต์ ํ์ฌ B์ client port๋ก ์ฌ์ฉํ๋ฉด B์ replies๊ฐ A๋ก ์ ๋ฌ๋ฉ๋๋ค.
// Duplicate a SEND right you already hold
mach_port_t dup;
mach_port_insert_right(mach_task_self(), a_client, a_client, MACH_MSG_TYPE_MAKE_SEND);
dup = a_client; // use `dup` when crafting Bโs connect packet instead of a fresh client port
- Reply hijack (Variant 2): A์ ๋๊ธฐ ์ค์ธ ์์ฒญ(reply port)์์ send-once right๋ฅผ ๊ฐ๋ก์ฑ๊ณ , ๊ทธ reply port๋ฅผ ์ฌ์ฉํด B์๊ฒ ์กฐ์๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด B์ ์๋ต์ด ๋น์ ์ ๊ถํ ์๋ ์์ฒญ์ด ํ์ฑ๋๋ ๋์ A๋ก ๋๋ฌํ๊ฒ ํฉ๋๋ค.
์ด๋ค์ XPC bootstrap ๋ฐ ๋ฉ์์ง ํ์์ ์ํ ์ ์์ค mach message crafting์ ํ์๋ก ํฉ๋๋ค; ์ ํํ ํจํท ๋ ์ด์์๊ณผ ํ๋๊ทธ๋ ์ด ์น์ ์ mach/XPC primer ํ์ด์ง๋ฅผ ๊ฒํ ํ์ธ์.
์ ์ฉํ ๋๊ตฌ
- XPC sniffing/dynamic inspection: gxpc (open-source XPC sniffer)๋ ์ฐ๊ฒฐ์ ์ด๊ฑฐํ๊ณ ํธ๋ํฝ์ ๊ด์ฐฐํ์ฌ multi-sender ์ค์ ๊ณผ ํ์ด๋ฐ์ ๊ฒ์ฆํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์:
gxpc -p <PID> --whitelist <service-name>. - Classic dyld interposing for libxpc: libxpc์ ๋ํ ๊ณ ์ ์ ์ธ dyld interposing์ ํตํด
xpc_connection_send_message*์xpc_connection_get_audit_token์ interposeํ์ฌ ๋ธ๋๋ฐ์ค ํ ์คํธ ์ค์ ํธ์ถ ์ง์ ๊ณผ ์คํ์ ๋ก๊ทธํ์ธ์.
์ฐธ๊ณ ์๋ฃ
- Sector 7 โ Donโt Talk All at Once! Elevating Privileges on macOS by Audit Token Spoofing: https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/
- Apple โ About the security content of macOS Ventura 13.4 (CVEโ2023โ32405): https://support.apple.com/en-us/106333
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


