macOS λ³΄μ•ˆ 보호

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

Gatekeeper

GatekeeperλŠ” 일반적으둜 Quarantine + Gatekeeper + XProtect의 쑰합을 μ˜λ―Έν•˜λ©°, μ΄λŠ” μ‚¬μš©μžκ°€ 잠재적으둜 μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 것을 λ°©μ§€ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” 3개의 macOS λ³΄μ•ˆ λͺ¨λ“ˆμž…λ‹ˆλ‹€.

μžμ„Έν•œ μ •λ³΄λŠ” λ‹€μŒμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

macOS Gatekeeper / Quarantine / XProtect

ν”„λ‘œμ„ΈμŠ€ μ œν•œ

MACF

SIP - μ‹œμŠ€ν…œ 무결성 보호

macOS SIP

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

MacOS μƒŒλ“œλ°•μŠ€λŠ” μƒŒλ“œλ°•μŠ€ ν”„λ‘œν•„μ— μ§€μ •λœ ν—ˆμš©λœ μž‘μ—…μœΌλ‘œ μƒŒλ“œλ°•μŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œν•œν•©λ‹ˆλ‹€. μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜ˆμƒλœ λ¦¬μ†ŒμŠ€λ§Œ μ ‘κ·Όν•˜λ„λ‘ 보μž₯ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

macOS Sandbox

TCC - 투λͺ…μ„±, λ™μ˜ 및 μ œμ–΄

**TCC (투λͺ…μ„±, λ™μ˜ 및 μ œμ–΄)**λŠ” λ³΄μ•ˆ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΆŒν•œμ„ κ΄€λ¦¬ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμœΌλ©°, 특히 λ―Όκ°ν•œ κΈ°λŠ₯에 λŒ€ν•œ 접근을 κ·œμ œν•©λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” μœ„μΉ˜ μ„œλΉ„μŠ€, μ—°λ½μ²˜, 사진, 마이크, 카메라, μ ‘κ·Όμ„± 및 전체 λ””μŠ€ν¬ μ ‘κ·Όκ³Ό 같은 μš”μ†Œκ°€ ν¬ν•¨λ©λ‹ˆλ‹€. TCCλŠ” 앱이 μ΄λŸ¬ν•œ κΈ°λŠ₯에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ λͺ…μ‹œμ μΈ μ‚¬μš©μž λ™μ˜λ₯Ό μ–»μ–΄μ•Όλ§Œ ν•˜λ„λ‘ 보μž₯ν•˜μ—¬ 개인 데이터에 λŒ€ν•œ ν”„λΌμ΄λ²„μ‹œμ™€ μ œμ–΄λ₯Ό κ°•ν™”ν•©λ‹ˆλ‹€.

macOS TCC

μ‹€ν–‰/ν™˜κ²½ μ œμ•½ 및 μ‹ λ’° μΊμ‹œ

macOS의 μ‹€ν–‰ μ œμ•½μ€ ν”„λ‘œμ„ΈμŠ€ μ‹œμž‘μ„ κ·œμ œν•˜λŠ” λ³΄μ•ˆ κΈ°λŠ₯으둜, λˆ„κ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹œμž‘ν•  수 μžˆλŠ”μ§€, μ–΄λ–»κ²Œ, μ–΄λ””μ„œ μ‹œμž‘ν•  수 μžˆλŠ”μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. macOS Venturaμ—μ„œ λ„μž…λœ 이 κΈ°λŠ₯은 μ‹œμŠ€ν…œ λ°”μ΄λ„ˆλ¦¬λ₯Ό μ‹ λ’° μΊμ‹œ λ‚΄μ˜ μ œμ•½ μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜ν•©λ‹ˆλ‹€. λͺ¨λ“  μ‹€ν–‰ κ°€λŠ₯ν•œ λ°”μ΄λ„ˆλ¦¬λŠ” 자기, λΆ€λͺ¨, μ±…μž„ μ œμ•½μ„ ν¬ν•¨ν•œ μ‹œμž‘μ— λŒ€ν•œ κ·œμΉ™μ΄ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. macOS Sonomaμ—μ„œ 제3자 앱에 λŒ€ν•΄ ν™˜κ²½ μ œμ•½μœΌλ‘œ ν™•μž₯된 이 κΈ°λŠ₯은 ν”„λ‘œμ„ΈμŠ€ μ‹œμž‘ 쑰건을 κ·œμ œν•˜μ—¬ 잠재적인 μ‹œμŠ€ν…œ μ•…μš©μ„ μ™„ν™”ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

macOS Launch/Environment Constraints & Trust Cache

MRT - μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄ 제거 도ꡬ

μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄ 제거 도ꡬ(MRT)λŠ” macOS의 λ³΄μ•ˆ μΈν”„λΌμ˜ 또 λ‹€λ₯Έ λΆ€λΆ„μž…λ‹ˆλ‹€. μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ MRT의 μ£Όμš” κΈ°λŠ₯은 κ°μ—Όλœ μ‹œμŠ€ν…œμ—μ„œ μ•Œλ €μ§„ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ œκ±°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

Macμ—μ„œ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ°μ§€λ˜λ©΄(XProtect λ˜λŠ” λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ), MRTλ₯Ό μ‚¬μš©ν•˜μ—¬ μžλ™μœΌλ‘œ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. MRTλŠ” λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 쑰용히 μž‘λ™ν•˜λ©°, 일반적으둜 μ‹œμŠ€ν…œμ΄ μ—…λ°μ΄νŠΈλ˜κ±°λ‚˜ μƒˆλ‘œμš΄ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄ μ •μ˜κ°€ λ‹€μš΄λ‘œλ“œλ  λ•Œ μ‹€ν–‰λ©λ‹ˆλ‹€(μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°μ§€ν•˜κΈ° μœ„ν•œ κ·œμΉ™μ΄ λ°”μ΄λ„ˆλ¦¬ 내에 μžˆλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€).

XProtect와 MRTλŠ” λͺ¨λ‘ macOS의 λ³΄μ•ˆ 쑰치의 μΌλΆ€μ΄μ§€λ§Œ, μ„œλ‘œ λ‹€λ₯Έ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  • XProtectλŠ” 예방 λ„κ΅¬μž…λ‹ˆλ‹€. μ΄λŠ” 파일이 λ‹€μš΄λ‘œλ“œλ  λ•Œ(νŠΉμ • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 톡해) νŒŒμΌμ„ κ²€μ‚¬ν•˜κ³ , μ•Œλ €μ§„ μœ ν˜•μ˜ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ°μ§€λ˜λ©΄ 파일이 μ—΄λ¦¬λŠ” 것을 λ°©μ§€ν•˜μ—¬ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ‹œμŠ€ν…œμ— κ°μ—Όλ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€.
  • MRTλŠ” λ°˜μ‘ λ„κ΅¬μž…λ‹ˆλ‹€. μ΄λŠ” μ‹œμŠ€ν…œμ—μ„œ μ•…μ„± μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ°μ§€λœ ν›„ μž‘λ™ν•˜λ©°, 문제의 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ œκ±°ν•˜μ—¬ μ‹œμŠ€ν…œμ„ μ •λ¦¬ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.

MRT μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ **/Library/Apple/System/Library/CoreServices/MRT.app**에 μœ„μΉ˜ν•©λ‹ˆλ‹€.

λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… 관리

macOSλŠ” 이제 도ꡬ가 잘 μ•Œλ €μ§„ μ½”λ“œ μ‹€ν–‰ 지속 기술(예: 둜그인 ν•­λͺ©, 데λͺ¬ λ“±)을 μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ μ•Œλ¦Όμ„ μ œκ³΅ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ‚¬μš©μžλŠ” μ–΄λ–€ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ§€μ†λ˜κ³  μžˆλŠ”μ§€ 더 잘 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κΈ°λŠ₯은 /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/backgroundtaskmanagementd에 μœ„μΉ˜ν•œ 데λͺ¬κ³Ό /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Support/BackgroundTaskManagementAgent.app에 μœ„μΉ˜ν•œ μ—μ΄μ „νŠΈμ™€ ν•¨κ»˜ μž‘λ™ν•©λ‹ˆλ‹€.

**backgroundtaskmanagementd**κ°€ 지속적인 폴더에 μ„€μΉ˜λœ 무언가λ₯Ό μ•„λŠ” 방법은 FSEventsλ₯Ό κ°€μ Έμ˜€κ³  이λ₯Ό μœ„ν•œ ν•Έλ“€λŸ¬λ₯Ό μƒμ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ, μ• ν”Œμ΄ κ΄€λ¦¬ν•˜λŠ” 잘 μ•Œλ €μ§„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν¬ν•¨λœ plist 파일이 있으며, μ΄λŠ” /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist에 μœ„μΉ˜ν•©λ‹ˆλ‹€.

[...]
"us.zoom.ZoomDaemon" => {
"AssociatedBundleIdentifiers" => [
0 => "us.zoom.xos"
]
"Attribution" => "Zoom"
"Program" => "/Library/PrivilegedHelperTools/us.zoom.ZoomDaemon"
"ProgramArguments" => [
0 => "/Library/PrivilegedHelperTools/us.zoom.ZoomDaemon"
]
"TeamIdentifier" => "BJ4HAAB9B3"
}
[...]

Enumeration

Apple cli 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬μ„±λœ λͺ¨λ“  λ°±κ·ΈλΌμš΄λ“œ ν•­λͺ©μ„ μ—΄κ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

# The tool will always ask for the users password
sfltool dumpbtm

λ˜ν•œ, DumpBTMλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 정보λ₯Ό λ‚˜μ—΄ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

# You need to grant the Terminal Full Disk Access for this to work
chmod +x dumpBTM
xattr -rc dumpBTM # Remove quarantine attr
./dumpBTM

이 μ •λ³΄λŠ” **/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v4.btm**에 μ €μž₯되며, Terminal은 FDAκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

BTM μ‘°μž‘ν•˜κΈ°

μƒˆλ‘œμš΄ 지속성이 발견되면 ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADD μœ ν˜•μ˜ μ΄λ²€νŠΈκ°€ λ°œμƒν•©λ‹ˆλ‹€. λ”°λΌμ„œ 이 μ΄λ²€νŠΈκ°€ μ „μ†‘λ˜λŠ” 것을 λ°©μ§€ν•˜κ±°λ‚˜ μ‚¬μš©μžμ—κ²Œ κ²½κ³ ν•˜λŠ” μ—μ΄μ „νŠΈλ₯Ό λ°©μ§€ν•˜λŠ” 방법은 κ³΅κ²©μžκ°€ BTM을 _우회_ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.

  • λ°μ΄ν„°λ² μ΄μŠ€ μž¬μ„€μ •: λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€κ°€ μž¬μ„€μ •λ©λ‹ˆλ‹€(κΈ°μ΄ˆλΆ€ν„° λ‹€μ‹œ ꡬ좕해야 함). κ·ΈλŸ¬λ‚˜ μ–΄λ–€ 이유둜 인해, 이λ₯Ό μ‹€ν–‰ν•œ ν›„μ—λŠ” μ‹œμŠ€ν…œμ΄ μž¬λΆ€νŒ…λ  λ•ŒκΉŒμ§€ μƒˆλ‘œμš΄ 지속성이 κ²½κ³ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • root κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€.
# Reset the database
sfltool resettbtm
  • μ—μ΄μ „νŠΈ 쀑지: μƒˆλ‘œμš΄ 탐지가 발견될 λ•Œ μ‚¬μš©μžμ—κ²Œ μ•Œλ¦¬μ§€ μ•Šλ„λ‘ μ—μ΄μ „νŠΈμ— 쀑지 μ‹ ν˜Έλ₯Ό 보낼 수 μžˆμŠ΅λ‹ˆλ‹€.
# Get PID
pgrep BackgroundTaskManagementAgent
1011

# Stop it
kill -SIGSTOP 1011

# Check it's stopped (a T means it's stopped)
ps -o state 1011
T
  • 버그: 지속성을 μƒμ„±ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ κ·Έ 직후에 λΉ λ₯΄κ²Œ μ‘΄μž¬ν•˜λ©΄, 데λͺ¬μ€ 그것에 λŒ€ν•œ 정보λ₯Ό μ–»μœΌλ €κ³  μ‹œλ„ν•˜κ³ , μ‹€νŒ¨ν•˜λ©°, μƒˆλ‘œμš΄ 것이 μ§€μ†λ˜κ³  μžˆλ‹€λŠ” 이벀트λ₯Ό 보낼 수 μ—†μŠ΅λ‹ˆλ‹€.

BTM에 λŒ€ν•œ 참고자료 및 μΆ”κ°€ 정보:

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