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 μ§€μ›ν•˜κΈ°

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 μ„œλΉ„μŠ€μ™€ 같은 자체 맞좀 μƒŒλ“œλ°•μŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 맞좀 μƒŒλ“œλ°•μŠ€ ν”„λ‘œνŒŒμΌμ€ λ‹€μŒμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

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μ—μ„œ 좔가적인 λ³΄μ•ˆ μ‘°μΉ˜κ°€ μ—†μœΌλ©°, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒŒλ“œλ°•μŠ€μ™€ 같은 κΈ°λŠ₯이 μ—†μŠ΅λ‹ˆλ‹€.

우회 μ˜ˆμ‹œ:

μƒŒλ“œλ°•μŠ€ 좔적

ν”„λ‘œν•„μ„ ν†΅ν•œ

μƒŒλ“œλ°•μŠ€κ°€ 맀번 μž‘μ—…μ΄ 확인될 λ•Œ μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  검사λ₯Ό 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ λ‹€μŒ ν”„λ‘œν•„μ„ μƒμ„±ν•˜μ‹­μ‹œμ˜€:

(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 κΆŒν•œμ΄ μžˆμ„ 경우 μ‚¬μš©μž κ³΅κ°„μ—μ„œ μ‹œμž‘ν•  λ•Œ μžλ™μœΌλ‘œ μƒŒλ“œλ°•μŠ€ν™”λ©λ‹ˆλ‹€. 이 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 λ‹€μŒμ„ ν™•μΈν•˜μ‹­μ‹œμ˜€:

macOS Sandbox Debug & Bypass

Sandbox ν™•μž₯

ν™•μž₯은 객체에 μΆ”κ°€ κΆŒν•œμ„ λΆ€μ—¬ν•  수 있으며, λ‹€μŒ ν•¨μˆ˜ 쀑 ν•˜λ‚˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ λΆ€μ—¬λ©λ‹ˆλ‹€:

  • sandbox_issue_extension
  • sandbox_extension_issue_file[_with_new_type]
  • sandbox_extension_issue_mach
  • sandbox_extension_issue_iokit_user_client_class
  • sandbox_extension_issue_iokit_registry_rentry_class
  • sandbox_extension_issue_generic
  • sandbox_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 μ§€μ›ν•˜κΈ°