macOS Security Protections

HackTricks 지원하기

게이트키퍼

게이트키퍼는 일반적으로 Quarantine + Gatekeeper + XProtect의 조합을 의미하며, 이는 사용자가 잠재적으로 악성 소프트웨어를 실행하는 것을 방지하려고 시도하는 3개의 macOS 보안 모듈입니다.

자세한 정보는 다음에서 확인할 수 있습니다:

macOS Gatekeeper / Quarantine / XProtect

프로세스 제한

SIP - 시스템 무결성 보호

macOS SIP

샌드박스

macOS 샌드박스는 샌드박스 내에서 실행되는 애플리케이션의 허용된 작업을 샌드박스 프로필에 지정된 대로 제한합니다. 이는 애플리케이션이 예상된 리소스만 접근하도록 보장하는 데 도움이 됩니다.

macOS Sandbox

TCC - 투명성, 동의 및 제어

**TCC (투명성, 동의 및 제어)**는 보안 프레임워크입니다. 이는 애플리케이션의 권한을 관리하도록 설계되었으며, 특히 민감한 기능에 대한 접근을 규제합니다. 여기에는 위치 서비스, 연락처, 사진, 마이크, 카메라, 접근성 및 전체 디스크 접근과 같은 요소가 포함됩니다. TCC는 앱이 이러한 기능에 접근하기 위해 명시적인 사용자 동의를 얻어야만 하도록 보장하여 개인 데이터에 대한 프라이버시와 제어를 강화합니다.

macOS TCC

실행/환경 제약 및 신뢰 캐시

macOS의 실행 제약은 프로세스 시작을 규제하는 보안 기능으로, 누가 프로세스를 시작할 수 있는지, 어떻게, 어디서 시작할 수 있는지를 정의합니다. macOS Ventura에서 도입된 이 기능은 시스템 바이너리를 제약 카테고리로 분류하여 신뢰 캐시 내에 저장합니다. 모든 실행 가능한 바이너리는 자기, 부모, 책임 제약을 포함한 시작에 대한 규칙이 설정되어 있습니다. macOS Sonoma에서 타사 앱에 대해 환경 제약으로 확장되어, 이러한 기능은 프로세스 시작 조건을 규제하여 잠재적인 시스템 악용을 완화하는 데 도움을 줍니다.

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**에 저장되며, 터미널은 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에 대한 추가 정보:

HackTricks 지원하기

Last updated