macOS Sandbox
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
Basic Information
MacOS Sandbox (μ΄κΈ° μ΄λ¦: Seatbelt) λ μλλ°μ€ λ΄μμ μ€νλλ μ ν리μΌμ΄μ μ νμ©λ μμ μ μλλ°μ€ νλ‘νμ μ§μ λ λλ‘ μ νν©λλ€. μ΄λ μ ν리μΌμ΄μ μ΄ μμλ 리μμ€λ§ μ κ·Όνλλ‘ λ³΄μ₯νλ λ° λμμ μ€λλ€.
com.apple.security.app-sandbox κΆνμ κ°μ§ λͺ¨λ μ±μ μλλ°μ€ λ΄μμ μ€νλ©λλ€. Apple λ°μ΄λ리λ μΌλ°μ μΌλ‘ μλλ°μ€ λ΄μμ μ€νλλ©°, App Storeμ λͺ¨λ μ ν리μΌμ΄μ
μ ν΄λΉ κΆνμ κ°μ§λλ€. λ°λΌμ μ¬λ¬ μ ν리μΌμ΄μ
μ΄ μλλ°μ€ λ΄μμ μ€νλ©λλ€.
νλ‘μΈμ€κ° ν μ μλ κ²κ³Ό ν μ μλ κ²μ μ μ΄νκΈ° μν΄ μλλ°μ€λ νλ‘μΈμ€κ° μλν μ μλ κ±°μ λͺ¨λ μμ (λλΆλΆμ μμ€ν νΈμΆ ν¬ν¨)μ νν¬λ₯Ό κ°μ§κ³ μμ΅λλ€. κ·Έλ¬λ μ±μ κΆνμ λ°λΌ μλλ°μ€λ νλ‘μΈμ€μ λν΄ λ κ΄λν μ μμ΅λλ€.
μλλ°μ€μ λͺ κ°μ§ μ€μν κ΅¬μ± μμλ λ€μκ³Ό κ°μ΅λλ€:
- 컀λ νμ₯
/System/Library/Extensions/Sandbox.kext - νλΌμ΄λΉ νλ μμν¬
/System/Library/PrivateFrameworks/AppSandbox.framework - μ¬μ©μ 곡κ°μμ μ€νλλ λ°λͺ¬
/usr/libexec/sandboxd - 컨ν
μ΄λ
~/Library/Containers
Containers
λͺ¨λ μλλ°μ€νλ μ ν리μΌμ΄μ
μ ~/Library/Containers/{CFBundleIdentifier}μ κ³ μ ν 컨ν
μ΄λλ₯Ό κ°μ§λλ€:
ls -l ~/Library/Containers
total 0
drwx------@ 4 username staff 128 May 23 20:20 com.apple.AMPArtworkAgent
drwx------@ 4 username staff 128 May 23 20:13 com.apple.AMPDeviceDiscoveryAgent
drwx------@ 4 username staff 128 Mar 24 18:03 com.apple.AVConference.Diagnostic
drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings.extension
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
[...]
κ° λ²λ€ ID ν΄λ μμλ plistμ ν ν΄λλ₯Ό λͺ¨λ°©ν ꡬ쑰μ μ± λ°μ΄ν° λλ ν 리λ₯Ό μ°Ύμ μ μμ΅λλ€:
cd /Users/username/Library/Containers/com.apple.Safari
ls -la
total 104
drwx------@ 4 username staff 128 Mar 24 18:08 .
drwx------ 348 username staff 11136 May 23 20:57 ..
-rw-r--r-- 1 username staff 50214 Mar 24 18:08 .com.apple.containermanagerd.metadata.plist
drwx------ 13 username staff 416 Mar 24 18:05 Data
ls -l Data
total 0
drwxr-xr-x@ 8 username staff 256 Mar 24 18:08 CloudKit
lrwxr-xr-x 1 username staff 19 Mar 24 18:02 Desktop -> ../../../../Desktop
drwx------ 2 username staff 64 Mar 24 18:02 Documents
lrwxr-xr-x 1 username staff 21 Mar 24 18:02 Downloads -> ../../../../Downloads
drwx------ 35 username staff 1120 Mar 24 18:08 Library
lrwxr-xr-x 1 username staff 18 Mar 24 18:02 Movies -> ../../../../Movies
lrwxr-xr-x 1 username staff 17 Mar 24 18:02 Music -> ../../../../Music
lrwxr-xr-x 1 username staff 20 Mar 24 18:02 Pictures -> ../../../../Pictures
drwx------ 2 username staff 64 Mar 24 18:02 SystemData
drwx------ 2 username staff 64 Mar 24 18:02 tmp
Caution
μ¬λ³Όλ¦ λ§ν¬κ° Sandboxμμ βνμΆβνμ¬ λ€λ₯Έ ν΄λμ μ κ·ΌνκΈ° μν΄ μ‘΄μ¬νλλΌλ, μ±μ μ¬μ ν μ κ·Ό κΆνμ κ°μ ΈμΌ ν©λλ€. μ΄λ¬ν κΆνμ
RedirectablePathsμ.plistμμ μμ΅λλ€.
**SandboxProfileData**λ B64λ‘ μ΄μ€μΌμ΄νλ μ»΄νμΌλ μλλ°μ€ νλ‘ν CFDataμ
λλ€.
# Get container config
## You need FDA to access the file, not even just root can read it
plutil -convert xml1 .com.apple.containermanagerd.metadata.plist -o -
# Binary sandbox profile
<key>SandboxProfileData</key>
<data>
AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
# In this file you can find the entitlements:
<key>Entitlements</key>
<dict>
<key>com.apple.MobileAsset.PhishingImageClassifier2</key>
<true/>
<key>com.apple.accounts.appleaccount.fullaccess</key>
<true/>
<key>com.apple.appattest.spi</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>6N38VWS5BX.ru.keepcoder.Telegram</string>
<string>6N38VWS5BX.ru.keepcoder.TelegramShare</string>
</array>
[...]
# Some parameters
<key>Parameters</key>
<dict>
<key>_HOME</key>
<string>/Users/username</string>
<key>_UID</key>
<string>501</string>
<key>_USER</key>
<string>username</string>
[...]
# The paths it can access
<key>RedirectablePaths</key>
<array>
<string>/Users/username/Downloads</string>
<string>/Users/username/Documents</string>
<string>/Users/username/Library/Calendars</string>
<string>/Users/username/Desktop</string>
<key>RedirectedPaths</key>
<array/>
[...]
Warning
Sandbox μ ν리μΌμ΄μ μ μν΄ μμ±/μμ λ λͺ¨λ κ²μ 격리 μμ±μ κ°κ² λ©λλ€. μ΄λ μλλ°μ€ μ±μ΄ **
open**μΌλ‘ 무μΈκ°λ₯Ό μ€ννλ €κ³ ν λ Gatekeeperλ₯Ό νΈλ¦¬κ±°νμ¬ μλλ°μ€ 곡κ°μ λ°©μ§ν©λλ€.
Sandbox νλ‘νμΌ
Sandbox νλ‘νμΌμ ν΄λΉ Sandboxμμ νμ©/κΈμ§λ λ΄μ©μ λνλ΄λ κ΅¬μ± νμΌμ λλ€. μ΄λ Scheme νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ¬μ©νλ **Sandbox νλ‘νμΌ μΈμ΄(SBPL)**λ₯Ό μ¬μ©ν©λλ€.
μ¬κΈ° μμ κ° μμ΅λλ€:
(version 1) ; First you get the version
(deny default) ; Then you shuold indicate the default action when no rule applies
(allow network*) ; You can use wildcards and allow everything
(allow file-read* ; You can specify where to apply the rule
(subpath "/Users/username/")
(literal "/tmp/afile")
(regex #"^/private/etc/.*")
)
(allow mach-lookup
(global-name "com.apple.analyticsd")
)
Tip
μ΄ μ°κ΅¬λ₯Ό νμΈνμ¬ νμ©λκ±°λ κ±°λΆλ μ μλ λ λ§μ μμ μ νμΈνμΈμ.
νλ‘νμΌμ μ»΄νμΌλ λ²μ μμλ μμ μ μ΄λ¦μ΄ dylibμ kextμμ μλ €μ§ λ°°μ΄μ νλͺ©μΌλ‘ λ체λμ΄ μ»΄νμΌλ λ²μ μ΄ λ μ§§κ³ μ½κΈ° μ΄λ ΅κ² λ§λλλ€.
μ€μν μμ€ν
μλΉμ€λ mdnsresponder μλΉμ€μ κ°μ μ체 λ§μΆ€ μλλ°μ€ λ΄μμ μ€νλ©λλ€. μ΄λ¬ν λ§μΆ€ μλλ°μ€ νλ‘νμΌμ λ€μμμ νμΈν μ μμ΅λλ€:
/usr/share/sandbox/System/Library/Sandbox/Profiles- λ€λ₯Έ μλλ°μ€ νλ‘νμΌμ https://github.com/s7ephen/OSX-SandboxβSeatbeltβProfilesμμ νμΈν μ μμ΅λλ€.
App Store μ±μ νλ‘νμΌ **/System/Library/Sandbox/Profiles/application.sb**λ₯Ό μ¬μ©ν©λλ€. μ΄ νλ‘νμΌμμ **com.apple.security.network.server**μ κ°μ κΆνμ΄ νλ‘μΈμ€κ° λ€νΈμν¬λ₯Ό μ¬μ©ν μ μλλ‘ νμ©νλ λ°©λ²μ νμΈν μ μμ΅λλ€.
κ·Έλ° λ€μ, μΌλΆ Apple λ°λͺ¬ μλΉμ€λ /System/Library/Sandbox/Profiles/*.sb λλ /usr/share/sandbox/*.sbμ μμΉν λ€λ₯Έ νλ‘νμΌμ μ¬μ©ν©λλ€. μ΄λ¬ν μλλ°μ€λ API sandbox_init_XXXλ₯Ό νΈμΆνλ μ£Όμ κΈ°λ₯μ μ μ©λ©λλ€.
SIPλ /System/Library/Sandbox/rootless.confμ μλ platform_profileμ΄λΌλ μλλ°μ€ νλ‘νμΌμ
λλ€.
μλλ°μ€ νλ‘νμΌ μμ
νΉμ μλλ°μ€ νλ‘νμΌλ‘ μ ν리μΌμ΄μ μ μμνλ €λ©΄ λ€μμ μ¬μ©ν μ μμ΅λλ€:
sandbox-exec -f example.sb /Path/To/The/Application
(version 1)
(deny default)
(allow file* (literal "/tmp/hacktricks.txt"))
# This will fail because default is denied, so it cannot execute touch
sandbox-exec -f touch.sb touch /tmp/hacktricks.txt
# Check logs
log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last 30s
[...]
2023-05-26 13:42:44.136082+0200 localhost kernel[0]: (Sandbox) Sandbox: sandbox-exec(41398) deny(1) process-exec* /usr/bin/touch
2023-05-26 13:42:44.136100+0200 localhost kernel[0]: (Sandbox) Sandbox: sandbox-exec(41398) deny(1) file-read-metadata /usr/bin/touch
2023-05-26 13:42:44.136321+0200 localhost kernel[0]: (Sandbox) Sandbox: sandbox-exec(41398) deny(1) file-read-metadata /var
2023-05-26 13:42:52.701382+0200 localhost kernel[0]: (Sandbox) 5 duplicate reports for Sandbox: sandbox-exec(41398) deny(1) file-read-metadata /var
[...]
(version 1)
(deny default)
(allow file* (literal "/tmp/hacktricks.txt"))
(allow process* (literal "/usr/bin/touch"))
; This will also fail because:
; 2023-05-26 13:44:59.840002+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-metadata /usr/bin/touch
; 2023-05-26 13:44:59.840016+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /usr/bin/touch
; 2023-05-26 13:44:59.840028+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /usr/bin
; 2023-05-26 13:44:59.840034+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-metadata /usr/lib/dyld
; 2023-05-26 13:44:59.840050+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) sysctl-read kern.bootargs
; 2023-05-26 13:44:59.840061+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /
(version 1)
(deny default)
(allow file* (literal "/private/tmp/hacktricks.txt"))
(allow process* (literal "/usr/bin/touch"))
(allow file-read-data (literal "/"))
; This one will work
Tip
Appleμ΄ μμ±ν μννΈμ¨μ΄λ Windowsμμ μΆκ°μ μΈ λ³΄μ μ‘°μΉκ° μμΌλ©°, μ ν리μΌμ΄μ μλλ°μ€μ κ°μ κΈ°λ₯μ΄ μμ΅λλ€.
μ°ν μμ:
- https://lapcatsoftware.com/articles/sandbox-escape.html
- https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (κ·Έλ€μ
~$λ‘ μμνλ μ΄λ¦μ νμΌμ μλλ°μ€ μΈλΆμ μΈ μ μμ΅λλ€).
μλλ°μ€ μΆμ
νλ‘νμ ν΅ν
μλλ°μ€κ° λ§€λ² μμ μ΄ νμΈλ λ μννλ λͺ¨λ κ²μ¬λ₯Ό μΆμ ν μ μμ΅λλ€. μ΄λ₯Ό μν΄ λ€μ νλ‘νμ μμ±νμμμ€:
(version 1)
(trace /tmp/trace.out)
κ·Έλ° λ€μ ν΄λΉ νλ‘νμ μ¬μ©νμ¬ λ¬΄μΈκ°λ₯Ό μ€ννμμμ€:
sandbox-exec -f /tmp/trace.sb /bin/ls
In /tmp/trace.outμμλ νΈμΆλ λλ§λ€ μνλ κ° μλλ°μ€ κ²μ¬λ₯Ό λ³Ό μ μμ΅λλ€(μ¦, λ§μ μ€λ³΅μ΄ λ°μν©λλ€).
-t λ§€κ°λ³μλ₯Ό μ¬μ©νμ¬ μλλ°μ€λ₯Ό μΆμ ν μλ μμ΅λλ€: sandbox-exec -t /path/trace.out -p "(version 1)" /bin/ls
APIλ₯Ό ν΅ν λ°©λ²
libsystem_sandbox.dylibμμ λ΄λ³΄λΈ sandbox_set_trace_path ν¨μλ μλλ°μ€ κ²μ¬κ° κΈ°λ‘λ μΆμ νμΌ μ΄λ¦μ μ§μ ν μ μκ² ν΄μ€λλ€.sandbox_vtrace_enable()μ νΈμΆνκ³ , κ·Έ ν sandbox_vtrace_report()λ₯Ό νΈμΆνμ¬ λ²νΌμμ λ‘κ·Έ μ€λ₯λ₯Ό κ°μ Έμ€λ μ μ¬ν μμ
λ κ°λ₯ν©λλ€.
μλλ°μ€ κ²μ¬
libsandbox.dylibλ νλ‘μΈμ€μ μλλ°μ€ μν λͺ©λ‘(νμ₯ ν¬ν¨)μ μ 곡νλ sandbox_inspect_pidλΌλ ν¨μλ₯Ό λ΄λ³΄λ
λλ€. κ·Έλ¬λ μ΄ ν¨μλ νλ«νΌ λ°μ΄λλ¦¬λ§ μ¬μ©ν μ μμ΅λλ€.
MacOS λ° iOS μλλ°μ€ νλ‘νμΌ
MacOSλ μμ€ν μλλ°μ€ νλ‘νμΌμ λ μμΉμ μ μ₯ν©λλ€: /usr/share/sandbox/ λ° /System/Library/Sandbox/Profiles.
κ·Έλ¦¬κ³ μλνν° μ ν리μΌμ΄μ μ΄ com.apple.security.app-sandbox κΆνμ κ°μ§κ³ μλ€λ©΄, μμ€ν μ ν΄λΉ νλ‘μΈμ€μ /System/Library/Sandbox/Profiles/application.sb νλ‘νμΌμ μ μ©ν©λλ€.
iOSμμλ κΈ°λ³Έ νλ‘νμΌμ΄ containerλΌκ³ νλ©°, SBPL ν μ€νΈ ννμ΄ μμ΅λλ€. λ©λͺ¨λ¦¬μμ μ΄ μλλ°μ€λ μλλ°μ€μ κ° κΆνμ λν νμ©/κ±°λΆ μ΄μ§ νΈλ¦¬λ‘ ννλ©λλ€.
App Store μ±μ μ¬μ©μ μ μ SBPL
νμ¬κ° μ¬μ©μ μ μ μλλ°μ€ νλ‘νμΌλ‘ μ±μ μ€νν μ μλ κ°λ₯μ±μ΄ μμ΅λλ€(κΈ°λ³Έ νλ‘νμΌ λμ ). κ·Έλ€μ Appleμ μΉμΈμ΄ νμν com.apple.security.temporary-exception.sbpl κΆνμ μ¬μ©ν΄μΌ ν©λλ€.
μ΄ κΆνμ μ μλ **/System/Library/Sandbox/Profiles/application.sb:**μμ νμΈν μ μμ΅λλ€.
(sandbox-array-entitlement
"com.apple.security.temporary-exception.sbpl"
(lambda (string)
(let* ((port (open-input-string string)) (sbpl (read port)))
(with-transparent-redirection (eval sbpl)))))
μ΄κ²μ μ΄ κΆν μ΄νμ λ¬Έμμ΄μ Sandbox νλ‘νλ‘ evalν©λλ€.
Sandbox νλ‘ν μ»΄νμΌ λ° λμ»΄νμΌ
sandbox-exec λꡬλ libsandbox.dylibμ sandbox_compile_* ν¨μλ₯Ό μ¬μ©ν©λλ€. λ΄λ³΄λ΄λ μ£Όμ ν¨μλ λ€μκ³Ό κ°μ΅λλ€: sandbox_compile_file (νμΌ κ²½λ‘λ₯Ό κΈ°λνλ©°, λ§€κ°λ³μ -f), sandbox_compile_string (λ¬Έμμ΄μ κΈ°λνλ©°, λ§€κ°λ³μ -p), sandbox_compile_name (컨ν
μ΄λμ μ΄λ¦μ κΈ°λνλ©°, λ§€κ°λ³μ -n), sandbox_compile_entitlements (κΆν plistλ₯Ό κΈ°λν©λλ€).
μ΄ λꡬμ 리λ²μ€ λ° μ€ν μμ€ λ²μ μ **sandbox-exec**κ° μ»΄νμΌλ Sandbox νλ‘νμ νμΌμ κΈ°λ‘νλλ‘ νμ©ν©λλ€.
λν, νλ‘μΈμ€λ₯Ό 컨ν
μ΄λ λ΄μ μ ννλ €λ©΄ sandbox_spawnattrs_set[container/profilename]λ₯Ό νΈμΆνκ³ μ»¨ν
μ΄λ λλ κΈ°μ‘΄ νλ‘νμ μ λ¬ν μ μμ΅λλ€.
Sandbox λλ²κ·Έ λ° μ°ν
macOSμμλ νλ‘μΈμ€κ° μ²μλΆν° 컀λμ μν΄ μλλ°μ€νλλ iOSμ λ¬λ¦¬, νλ‘μΈμ€κ° μ€μ€λ‘ μλλ°μ€μ μ°Έμ¬ν΄μΌ ν©λλ€. μ΄λ macOSμμ νλ‘μΈμ€κ° μ κ·Ήμ μΌλ‘ μλλ°μ€μ λ€μ΄κ°κΈ°λ‘ κ²°μ ν λκΉμ§ μλλ°μ€μ μν΄ μ νλμ§ μμμ μλ―Ένλ©°, App Store μ±μ νμ μλλ°μ€νλ©λλ€.
νλ‘μΈμ€λ com.apple.security.app-sandbox κΆνμ΄ μμ κ²½μ° μ¬μ©μ 곡κ°μμ μμν λ μλμΌλ‘ μλλ°μ€νλ©λλ€. μ΄ νλ‘μΈμ€μ λν μμΈν μ€λͺ
μ λ€μμ νμΈνμμμ€:
Sandbox νμ₯
νμ₯μ κ°μ²΄μ μΆκ° κΆνμ λΆμ¬ν μ μμΌλ©°, λ€μ ν¨μ μ€ νλλ₯Ό νΈμΆνμ¬ λΆμ¬λ©λλ€:
sandbox_issue_extensionsandbox_extension_issue_file[_with_new_type]sandbox_extension_issue_machsandbox_extension_issue_iokit_user_client_classsandbox_extension_issue_iokit_registry_rentry_classsandbox_extension_issue_genericsandbox_extension_issue_posix_ipc
νμ₯μ νλ‘μΈμ€ μ격 μ¦λͺ
μμ μ κ·Όν μ μλ λ λ²μ§Έ MACF λ μ΄λΈ μ¬λ‘―μ μ μ₯λ©λλ€. λ€μ **sbtool**μ΄ μ΄ μ 보λ₯Ό μ κ·Όν μ μμ΅λλ€.
νμ₯μ μΌλ°μ μΌλ‘ νμ©λ νλ‘μΈμ€μ μν΄ λΆμ¬λλ€λ μ μ μ μνμμμ€. μλ₯Ό λ€μ΄, tccdλ νλ‘μΈμ€κ° μ¬μ§μ μ κ·Όνλ €κ³ μλνκ³ XPC λ©μμ§μμ νμ©λμμ λ com.apple.tcc.kTCCServicePhotosμ νμ₯ ν ν°μ λΆμ¬ν©λλ€. κ·Έλ° λ€μ νλ‘μΈμ€λ νμ₯ ν ν°μ μλΉν΄μΌ μΆκ°λ©λλ€.
νμ₯ ν ν°μ λΆμ¬λ κΆνμ μΈμ½λ©νλ κΈ΄ 16μ§μμ
λλ€. κ·Έλ¬λ νμ©λ PIDκ° νλμ½λ©λμ΄ μμ§ μμΌλ―λ‘ ν ν°μ μ κ·Όν μ μλ λͺ¨λ νλ‘μΈμ€κ° μ¬λ¬ νλ‘μΈμ€μ μν΄ μλΉλ μ μμ΅λλ€.
νμ₯μ κΆνκ³Ό λ§€μ° κ΄λ ¨μ΄ μμΌλ―λ‘ νΉμ κΆνμ κ°μ§λ©΄ νΉμ νμ₯μ΄ μλμΌλ‘ λΆμ¬λ μ μμ΅λλ€.
PID κΆν νμΈ
μ΄κ²μ λ°λ₯΄λ©΄, sandbox_check ν¨μ(μ΄λ __mac_syscallμ
λλ€)λ νΉμ PID, κ°μ¬ ν ν° λλ κ³ μ IDμ λν΄ μμ
μ΄ νμ©λλμ§ μ¬λΆλ₯Ό νμΈν μ μμ΅λλ€.
λꡬ sbtool (μ¬κΈ° μ»΄νμΌλ λ²μ μ μ°Ύμ μ μμ΅λλ€)μ PIDκ° νΉμ μμ μ μνν μ μλμ§ νμΈν μ μμ΅λλ€:
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
sbtool <pid> file /tmp #Check file access
sbtool <pid> inspect #Gives you an explanation of the sandbox profile and extensions
sbtool <pid> all
[un]suspend
μλλ°μ€λ₯Ό μΌμ μ€μ§νκ³ λ€μ μμνλ κ²λ κ°λ₯ν©λλ€. libsystem_sandbox.dylibμ sandbox_suspend λ° sandbox_unsuspend ν¨μλ₯Ό μ¬μ©ν©λλ€.
μΌμ μ€μ§ ν¨μλ₯Ό νΈμΆνλ €λ©΄ λ€μκ³Ό κ°μ λͺ κ°μ§ κΆνμ΄ νμΈλμ΄ νΈμΆμκ° μ΄λ₯Ό νΈμΆν μ μλλ‘ μΉμΈλ©λλ€:
- com.apple.private.security.sandbox-manager
- com.apple.security.print
- com.apple.security.temporary-exception.audio-unit-host
mac_syscall
μ΄ μμ€ν νΈμΆ (#381)μ 첫 λ²μ§Έ μΈμλ‘ μ€νν λͺ¨λμ λνλ΄λ λ¬Έμμ΄μ κΈ°λνλ©°, λ λ²μ§Έ μΈμλ‘ μ€νν ν¨μλ₯Ό λνλ΄λ μ½λλ₯Ό κΈ°λν©λλ€. κ·Έλ° λ€μ μΈ λ²μ§Έ μΈμλ μ€νλ ν¨μμ λ°λΌ λ¬λΌμ§λλ€.
ν¨μ ___sandbox_ms νΈμΆμ mac_syscallμ λννλ©° 첫 λ²μ§Έ μΈμλ‘ "Sandbox"λ₯Ό λνλ
λλ€. ___sandbox_mspλ mac_set_proc (#387)μ λνΌμ
λλ€. κ·Έλ° λ€μ ___sandbox_msμμ μ§μλλ μΌλΆ μ½λλ λ€μ νμμ μ°Ύμ μ μμ΅λλ€:
- set_profile (#0): νλ‘μΈμ€μ μ»΄νμΌλ λλ λͺ λͺ λ νλ‘νμ μ μ©ν©λλ€.
- platform_policy (#1): νλ«νΌλ³ μ μ± κ²μ¬λ₯Ό μνν©λλ€ (macOSμ iOS κ°μ λ€λ¦).
- check_sandbox (#2): νΉμ μλλ°μ€ μμ μ μλ κ²μ¬λ₯Ό μνν©λλ€.
- note (#3): μλλ°μ€μ μ£Όμμ μΆκ°ν©λλ€.
- container (#4): μΌλ°μ μΌλ‘ λλ²κΉ λλ μλ³μ μν΄ μλλ°μ€μ μ£Όμμ 첨λΆν©λλ€.
- extension_issue (#5): νλ‘μΈμ€μ λν μλ‘μ΄ νμ₯μ μμ±ν©λλ€.
- extension_consume (#6): μ£Όμ΄μ§ νμ₯μ μ¬μ©ν©λλ€.
- extension_release (#7): μ¬μ©λ νμ₯μ μ°κ²°λ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν©λλ€.
- extension_update_file (#8): μλλ°μ€ λ΄μ κΈ°μ‘΄ νμΌ νμ₯μ λ§€κ°λ³μλ₯Ό μμ ν©λλ€.
- extension_twiddle (#9): κΈ°μ‘΄ νμΌ νμ₯μ μ‘°μ νκ±°λ μμ ν©λλ€ (μ: TextEdit, rtf, rtfd).
- suspend (#10): λͺ¨λ μλλ°μ€ κ²μ¬λ₯Ό μΌμμ μΌλ‘ μ€μ§ν©λλ€ (μ μ ν κΆν νμ).
- unsuspend (#11): μ΄μ μ μΌμ μ€μ§λ λͺ¨λ μλλ°μ€ κ²μ¬λ₯Ό μ¬κ°ν©λλ€.
- passthrough_access (#12): μλλ°μ€ κ²μ¬λ₯Ό μ°ννμ¬ λ¦¬μμ€μ λν μ§μ μ μΈ ν¨μ€μ€λ£¨ μ‘μΈμ€λ₯Ό νμ©ν©λλ€.
- set_container_path (#13): (iOS μ μ©) μ± κ·Έλ£Ή λλ μλͺ IDμ λν 컨ν μ΄λ κ²½λ‘λ₯Ό μ€μ ν©λλ€.
- container_map (#14): (iOS μ μ©)
containermanagerdμμ 컨ν μ΄λ κ²½λ‘λ₯Ό κ²μν©λλ€. - sandbox_user_state_item_buffer_send (#15): (iOS 10+) μλλ°μ€μμ μ¬μ©μ λͺ¨λ λ©νλ°μ΄ν°λ₯Ό μ€μ ν©λλ€.
- inspect (#16): μλλ°μ€νλ νλ‘μΈμ€μ λν λλ²κ·Έ μ 보λ₯Ό μ 곡ν©λλ€.
- dump (#18): (macOS 11) λΆμμ μν΄ μλλ°μ€μ νμ¬ νλ‘νμ λ€νν©λλ€.
- vtrace (#19): λͺ¨λν°λ§ λλ λλ²κΉ μ μν μλλ°μ€ μμ μ μΆμ ν©λλ€.
- builtin_profile_deactivate (#20): (macOS < 11) λͺ
λͺ
λ νλ‘νμ λΉνμ±νν©λλ€ (μ:
pe_i_can_has_debugger). - check_bulk (#21): λ¨μΌ νΈμΆμμ μ¬λ¬
sandbox_checkμμ μ μνν©λλ€. - reference_retain_by_audit_token (#28): μλλ°μ€ κ²μ¬μ μ¬μ©ν κ°μ¬ ν ν°μ λν μ°Έμ‘°λ₯Ό μμ±ν©λλ€.
- reference_release (#29): μ΄μ μ μ μ§λ κ°μ¬ ν ν° μ°Έμ‘°λ₯Ό ν΄μ ν©λλ€.
- rootless_allows_task_for_pid (#30):
task_for_pidκ° νμ©λλμ§ νμΈν©λλ€ (μ μ¬νcsrκ²μ¬). - rootless_whitelist_push (#31): (macOS) μμ€ν λ¬΄κ²°μ± λ³΄νΈ(SIP) λ§€λνμ€νΈ νμΌμ μ μ©ν©λλ€.
- rootless_whitelist_check (preflight) (#32): μ€ν μ μ SIP λ§€λνμ€νΈ νμΌμ κ²μ¬ν©λλ€.
- rootless_protected_volume (#33): (macOS) λμ€ν¬ λλ νν°μ μ SIP 보νΈλ₯Ό μ μ©ν©λλ€.
- rootless_mkdir_protected (#34): λλ ν 리 μμ± νλ‘μΈμ€μ SIP/DataVault 보νΈλ₯Ό μ μ©ν©λλ€.
Sandbox.kext
iOSμμλ 컀λ νμ₯μ΄ λͺ¨λ νλ‘νμ νλμ½λ©νμ¬ __TEXT.__const μΈκ·Έλ¨ΌνΈ λ΄μ ν¬ν¨λμ΄ μμ λμ§ μλλ‘ ν©λλ€. λ€μμ 컀λ νμ₯μμ ν₯λ―Έλ‘μ΄ λͺ κ°μ§ ν¨μμ
λλ€:
hook_policy_init:mpo_policy_initμ ννΉνλ©°mac_policy_registerνμ νΈμΆλ©λλ€. μλλ°μ€μ λλΆλΆ μ΄κΈ°νλ₯Ό μνν©λλ€. SIPλ μ΄κΈ°νν©λλ€.hook_policy_initbsd:security.mac.sandbox.sentinel,security.mac.sandbox.audio_activeλ°security.mac.sandbox.debug_modeλ₯Ό λ±λ‘νλ sysctl μΈν°νμ΄μ€λ₯Ό μ€μ ν©λλ€ (PE_i_can_has_debuggerλ‘ λΆν λ κ²½μ°).hook_policy_syscall: βSandboxβλ₯Ό 첫 λ²μ§Έ μΈμλ‘ νκ³ λ λ²μ§Έ μΈμλ‘ μμ μ λνλ΄λ μ½λλ₯Ό μ¬μ©νμ¬mac_syscallμ μν΄ νΈμΆλ©λλ€. μμ²λ μ½λμ λ°λΌ μ€νν μ½λλ₯Ό μ°ΎκΈ° μν΄ switchκ° μ¬μ©λ©λλ€.
MACF Hooks
**Sandbox.kext**λ MACFλ₯Ό ν΅ν΄ λ°± κ° μ΄μμ ννΉμ μ¬μ©ν©λλ€. λλΆλΆμ ννΉμ μ¬μν κ²½μ°λ₯Ό νμΈνμ¬ μμ
μ μνν μ μλλ‘ νλ©°, κ·Έλ μ§ μμ κ²½μ° **cred_sb_evalutate**λ₯Ό νΈμΆνμ¬ MACFμ credentialsμ μνν operationμ ν΄λΉνλ μ«μ λ° μΆλ ₯μ© bufferλ₯Ό μ λ¬ν©λλ€.
κ·Έ μ’μ μλ _mpo_file_check_mmap ν¨μλ‘, **mmap**μ ννΉνλ©° μλ‘μ΄ λ©λͺ¨λ¦¬κ° μ°κΈ° κ°λ₯ν μ§ νμΈν ν (κ·Έλ μ§ μμΌλ©΄ μ€νμ νμ©νμ§ μμ), dyld 곡μ μΊμμμ μ¬μ©λλμ§ νμΈνκ³ κ·Έλ λ€λ©΄ μ€νμ νμ©νλ©°, λ§μ§λ§μΌλ‘ sb_evaluate_internal (λλ κ·Έ λνΌ μ€ νλ)μ νΈμΆνμ¬ μΆκ° νμ© κ²μ¬λ₯Ό μνν©λλ€.
κ²λ€κ°, μλλ°μ€κ° μ¬μ©νλ μλ°± κ°μ ννΉ μ€μμ νΉν ν₯λ―Έλ‘μ΄ μΈ κ°μ§λ λ€μκ³Ό κ°μ΅λλ€:
mpo_proc_check_for: νμν κ²½μ° νλ‘νμ μ μ©νλ©° μ΄μ μ μ μ©λμ§ μμ κ²½μ°μλ§ μ μ©ν©λλ€.mpo_vnode_check_exec: νλ‘μΈμ€κ° κ΄λ ¨ μ΄μ§ νμΌμ λ‘λν λ νΈμΆλλ©°, νλ‘ν κ²μ¬κ° μνλκ³ SUID/SGID μ€νμ κΈμ§νλ κ²μ¬λ μνλ©λλ€.mpo_cred_label_update_execve: λ μ΄λΈμ΄ ν λΉλ λ νΈμΆλ©λλ€. μ΄ ν¨μλ μ΄μ§ νμΌμ΄ μμ ν λ‘λλμμ§λ§ μμ§ μ€νλμ§ μμμ λ νΈμΆλλ©°, μλλ°μ€ κ°μ²΄λ₯Ό μμ±νκ³ , kauth μ격 μ¦λͺ μ μλλ°μ€ ꡬ쑰λ₯Ό 첨λΆνκ³ , mach ν¬νΈμ λν μ‘μΈμ€λ₯Ό μ κ±°νλ λ±μ μμ μ μνν©λλ€.
**_cred_sb_evalutate**λ **sb_evaluate_internal**μ λνΌμ΄λ©°, μ΄ ν¨μλ μ λ¬λ μ격 μ¦λͺ
μ κ°μ Έμ¨ ν eval ν¨μλ₯Ό μ¬μ©νμ¬ νκ°λ₯Ό μνν©λλ€. μ΄ ν¨μλ μΌλ°μ μΌλ‘ λͺ¨λ νλ‘μΈμ€μ κΈ°λ³Έμ μΌλ‘ μ μ©λλ platform profileμ νκ°ν λ€μ specific process profileμ νκ°ν©λλ€. νλ«νΌ νλ‘νμ macOSμ SIPμ μ£Όμ κ΅¬μ± μμ μ€ νλμ
λλ€.
Sandboxd
μλλ°μ€λ λν XPC Mach μλΉμ€ com.apple.sandboxdλ₯Ό λ
ΈμΆνλ μ¬μ©μ λ°λͺ¬μ μ€ννλ©°, 컀λ νμ₯μ΄ ν΅μ νλ λ° μ¬μ©νλ νΉλ³ν ν¬νΈ 14 (HOST_SEATBELT_PORT)μ λ°μΈλ©λ©λλ€. MIGλ₯Ό μ¬μ©νμ¬ μΌλΆ κΈ°λ₯μ λ
ΈμΆν©λλ€.
References
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μ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


