macOS SIP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
**시스템 무결성 보호(System Integrity Protection, SIP)**는 macOS에서 가장 권한이 높은 사용자조차도 주요 시스템 폴더에 대한 무단 변경을 방지하기 위해 설계된 메커니즘입니다. 이 기능은 보호된 영역에서 파일을 추가, 수정 또는 삭제하는 등의 작업을 제한하여 시스템의 무결성을 유지하는 데 중요한 역할을 합니다. SIP에 의해 보호되는 주요 폴더는 다음과 같습니다:
/System
/bin
/sbin
/usr
SIP의 동작을 규정하는 규칙은 **/System/Library/Sandbox/rootless.conf
**에 위치한 구성 파일에 정의되어 있습니다. 이 파일 내에서 별표(*)로 접두사가 붙은 경로는 일반적인 SIP 제한의 예외로 표시됩니다.
아래의 예를 고려해 보십시오:
이 스니펫은 SIP가 일반적으로 /usr
디렉토리를 보호하지만, 특정 하위 디렉토리(/usr/libexec/cups
, /usr/local
, /usr/share/man
)에서는 수정이 허용된다는 것을 나타냅니다. 이는 경로 앞에 있는 별표(*)로 표시됩니다.
디렉토리나 파일이 SIP에 의해 보호되는지 확인하려면 ls -lOd
명령을 사용하여 restricted
또는 sunlnk
플래그의 존재를 확인할 수 있습니다. 예:
이 경우, sunlnk
플래그는 /usr/libexec/cups
디렉토리 자체가 삭제될 수 없음을 의미하지만, 그 안의 파일은 생성, 수정 또는 삭제할 수 있습니다.
반면:
여기서 restricted
플래그는 /usr/libexec
디렉토리가 SIP에 의해 보호되고 있음을 나타냅니다. SIP로 보호되는 디렉토리에서는 파일을 생성, 수정 또는 삭제할 수 없습니다.
또한, 파일에 com.apple.rootless
확장 속성이 포함되어 있으면 해당 파일도 SIP에 의해 보호됩니다.
Sandbox 훅 **hook_vnode_check_setextattr
**는 확장 속성 **com.apple.rootless
**를 수정하려는 모든 시도를 방지합니다.
SIP는 다른 루트 작업도 제한합니다:
신뢰할 수 없는 커널 확장 로드
Apple 서명 프로세스에 대한 작업 포트 가져오기
NVRAM 변수 수정
커널 디버깅 허용
옵션은 비트 플래그로 nvram 변수에 유지됩니다 (csr-active-config
는 Intel에서, lp-sip0
는 ARM의 부팅된 Device Tree에서 읽어옵니다). 플래그는 csr.sh
의 XNU 소스 코드에서 찾을 수 있습니다:
다음 명령어로 시스템에서 SIP가 활성화되어 있는지 확인할 수 있습니다:
SIP를 비활성화해야 하는 경우, 컴퓨터를 복구 모드로 재시작해야 합니다(시작 중 Command+R을 누름). 그런 다음 다음 명령을 실행하십시오:
SIP을 활성화한 상태로 디버깅 보호 기능을 제거하려면 다음과 같이 할 수 있습니다:
서명되지 않은 커널 확장(kexts)의 로딩을 금지하여 검증된 확장만이 시스템 커널과 상호작용하도록 보장합니다.
macOS 시스템 프로세스의 디버깅을 방지하여 핵심 시스템 구성 요소를 무단 접근 및 수정으로부터 보호합니다.
dtrace와 같은 도구의 시스템 프로세스 검사 방지로 시스템 운영의 무결성을 추가로 보호합니다.
com.apple.rootless.xpc.bootstrap
: launchd 제어
com.apple.rootless.install[.heritable]
: 파일 시스템 접근
com.apple.rootless.kext-management
: kext_request
com.apple.rootless.datavault.controller
: UF_DATAVAULT 관리
com.apple.rootless.xpc.bootstrap
: XPC 설정 기능
com.apple.rootless.xpc.effective-root
: launchd XPC를 통한 루트 접근
com.apple.rootless.restricted-block-devices
: 원시 블록 장치 접근
com.apple.rootless.internal.installer-equivalent
: 제한 없는 파일 시스템 접근
com.apple.rootless.restricted-nvram-variables[.heritable]
: NVRAM에 대한 전체 접근
com.apple.rootless.storage.label
: 해당 레이블로 com.apple.rootless xattr에 의해 제한된 파일 수정
com.apple.rootless.volume.VM.label
: 볼륨에서 VM 스왑 유지
SIP를 우회하면 공격자가 다음을 수행할 수 있습니다:
사용자 데이터 접근: 모든 사용자 계정에서 메일, 메시지 및 Safari 기록과 같은 민감한 사용자 데이터를 읽습니다.
TCC 우회: TCC(투명성, 동의 및 제어) 데이터베이스를 직접 조작하여 웹캠, 마이크 및 기타 리소스에 대한 무단 접근을 부여합니다.
지속성 확립: SIP로 보호된 위치에 악성 코드를 배치하여 루트 권한으로도 제거에 저항하도록 만듭니다. 여기에는 악성 코드 제거 도구(MRT)를 변조할 가능성도 포함됩니다.
커널 확장 로드: 추가적인 보호 장치가 있지만, SIP를 우회하면 서명되지 않은 커널 확장을 로드하는 과정이 간소화됩니다.
Apple의 인증서로 서명된 설치 패키지는 그 보호를 우회할 수 있습니다. 이는 표준 개발자가 서명한 패키지조차도 SIP로 보호된 디렉토리를 수정하려고 시도하면 차단된다는 것을 의미합니다.
하나의 잠재적 허점은 rootless.conf
에 파일이 지정되었지만 현재 존재하지 않는 경우, 생성될 수 있다는 것입니다. 악성 코드는 이를 악용하여 시스템에서 지속성을 확립할 수 있습니다. 예를 들어, 악성 프로그램이 rootless.conf
에 나열되어 있지만 존재하지 않는 경우 /System/Library/LaunchDaemons
에 .plist 파일을 생성할 수 있습니다.
권한 **com.apple.rootless.install.heritable
**는 SIP를 우회할 수 있게 해줍니다.
시스템이 코드 서명을 검증한 후 설치 패키지를 교환할 수 있다는 것이 발견되었습니다. 그 후 시스템은 원본 대신 악성 패키지를 설치하게 됩니다. 이러한 작업이 **system_installd
**에 의해 수행되었기 때문에 SIP를 우회할 수 있게 됩니다.
마운트된 이미지나 외부 드라이브에서 패키지가 설치되면 설치 프로그램이 해당 파일 시스템에서 바이너리를 실행하게 되어 **system_installd
**가 임의의 바이너리를 실행하게 됩니다.
이 블로그 게시물의 연구자들은 macOS의 시스템 무결성 보호(SIP) 메커니즘에서 'Shrootless' 취약점을 발견했습니다. 이 취약점은 system_installd
데몬을 중심으로 하며, 이 데몬은 **com.apple.rootless.install.heritable
**라는 권한을 가지고 있어 자식 프로세스가 SIP의 파일 시스템 제한을 우회할 수 있게 해줍니다.
system_installd
데몬은 Apple에 의해 서명된 패키지를 설치합니다.
연구자들은 Apple 서명 패키지(.pkg 파일)의 설치 중에 **system_installd
**가 패키지에 포함된 모든 post-install 스크립트를 실행한다는 것을 발견했습니다. 이러한 스크립트는 기본 셸인 **zsh
**에 의해 실행되며, 존재하는 경우 /etc/zshenv
파일의 명령을 자동으로 실행합니다. 이 동작은 공격자에 의해 악용될 수 있습니다: 악성 /etc/zshenv
파일을 생성하고 system_installd
가 zsh
를 호출할 때까지 기다리면, 장치에서 임의의 작업을 수행할 수 있습니다.
게다가 **/etc/zshenv
**는 SIP 우회뿐만 아니라 일반적인 공격 기법으로 사용될 수 있다는 것이 발견되었습니다. 각 사용자 프로필에는 ~/.zshenv
파일이 있으며, 이는 /etc/zshenv
와 동일하게 작동하지만 루트 권한이 필요하지 않습니다. 이 파일은 지속성 메커니즘으로 사용될 수 있으며, zsh
가 시작될 때마다 트리거되거나 권한 상승 메커니즘으로 사용될 수 있습니다. 관리 사용자가 sudo -s
또는 sudo <command>
를 사용하여 루트로 상승하면 ~/.zshenv
파일이 트리거되어 효과적으로 루트로 상승하게 됩니다.
CVE-2022-22583에서 동일한 system_installd
프로세스가 여전히 악용될 수 있다는 것이 발견되었습니다. 이는 /tmp
내의 SIP로 보호된 임의의 이름의 폴더에 post-install 스크립트를 넣고 있었기 때문입니다. 문제는 /tmp
자체는 SIP로 보호되지 않기 때문에, 가상 이미지를 마운트한 후 설치 프로그램이 post-install 스크립트를 그곳에 넣고, 가상 이미지를 언마운트한 다음, 모든 폴더를 재생성하고 payload를 실행할 post installation 스크립트를 추가할 수 있었다는 것입니다.
**fsck_cs
**가 심볼릭 링크를 따라가는 능력으로 인해 중요한 파일을 손상시키는 취약점이 확인되었습니다. 구체적으로, 공격자들은 _/dev/diskX
_에서 /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist
파일로의 링크를 만들었습니다. _/dev/diskX
_에서 **fsck_cs
**를 실행하면 Info.plist
가 손상되었습니다. 이 파일의 무결성은 운영 체제의 SIP(시스템 무결성 보호)에 필수적이며, 이는 커널 확장의 로딩을 제어합니다. 손상되면 SIP의 커널 제외 관리 능력이 손상됩니다.
이 취약점을 악용하기 위한 명령은:
이 취약점의 악용은 심각한 영향을 미칩니다. Info.plist
파일은 일반적으로 커널 확장에 대한 권한을 관리하는 역할을 하지만, 비효율적이 됩니다. 여기에는 AppleHWAccess.kext
와 같은 특정 확장을 블랙리스트에 추가할 수 없는 것이 포함됩니다. 결과적으로 SIP의 제어 메커니즘이 작동하지 않게 되면, 이 확장이 로드될 수 있어 시스템의 RAM에 대한 무단 읽기 및 쓰기 접근을 허용하게 됩니다.
보호를 우회하기 위해 SIP 보호 폴더 위에 새로운 파일 시스템을 마운트하는 것이 가능했습니다.
시스템은 Install macOS Sierra.app
내의 내장 설치 프로그램 디스크 이미지를 사용하여 OS를 업그레이드하기 위해 부팅하도록 설정되어 있으며, bless
유틸리티를 활용합니다. 사용된 명령은 다음과 같습니다:
이 프로세스의 보안은 공격자가 부팅 전에 업그레이드 이미지(InstallESD.dmg
)를 변경하면 손상될 수 있습니다. 이 전략은 동적 로더(dyld)를 악성 버전(libBaseIA.dylib
)으로 대체하는 것을 포함합니다. 이 교체는 설치 프로그램이 시작될 때 공격자의 코드가 실행되도록 합니다.
공격자의 코드는 업그레이드 프로세스 중에 제어를 얻고, 설치 프로그램에 대한 시스템의 신뢰를 악용합니다. 공격은 extractBootBits
메서드를 특히 겨냥하여 메서드 스위즐링을 통해 InstallESD.dmg
이미지를 변경함으로써 진행됩니다. 이를 통해 디스크 이미지가 사용되기 전에 악성 코드를 주입할 수 있습니다.
또한, InstallESD.dmg
내에는 업그레이드 코드의 루트 파일 시스템 역할을 하는 BaseSystem.dmg
가 있습니다. 여기에 동적 라이브러리를 주입하면 악성 코드가 OS 수준 파일을 변경할 수 있는 프로세스 내에서 작동할 수 있어 시스템 손상의 가능성이 크게 증가합니다.
DEF CON 31에서 이 발표에서는 systemmigrationd
(SIP를 우회할 수 있는)가 bash 및 perl 스크립트를 실행하는 방법이 보여지며, 이는 env 변수 BASH_ENV
및 **PERL5OPT
**를 통해 악용될 수 있습니다.
이 블로그 게시물에서 자세히 설명된 바와 같이, InstallAssistant.pkg
패키지의 postinstall
스크립트가 실행되고 있었습니다:
and it was possible to crate a symlink in ${SHARED_SUPPORT_PATH}/SharedSupport.dmg
that would allow a user to unrestrict any file, bypassing SIP protection.
권한 **com.apple.rootless.install
**은 SIP를 우회할 수 있게 해줍니다.
권한 com.apple.rootless.install
은 macOS에서 시스템 무결성 보호(SIP)를 우회할 수 있는 것으로 알려져 있습니다. 이는 CVE-2022-26712와 관련하여 특히 언급되었습니다.
이 특정 경우에 /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc
에 위치한 시스템 XPC 서비스가 이 권한을 가지고 있습니다. 이는 관련 프로세스가 SIP 제약을 우회할 수 있게 해줍니다. 또한, 이 서비스는 보안 조치를 시행하지 않고 파일을 이동할 수 있는 방법을 제공합니다.
봉인된 시스템 스냅샷은 **macOS Big Sur (macOS 11)**에서 Apple이 도입한 기능으로, 시스템 무결성 보호(SIP) 메커니즘의 일환으로 추가적인 보안 및 시스템 안정성을 제공합니다. 이들은 본질적으로 시스템 볼륨의 읽기 전용 버전입니다.
자세한 내용은 다음과 같습니다:
불변 시스템: 봉인된 시스템 스냅샷은 macOS 시스템 볼륨을 "불변"으로 만들어 수정할 수 없게 합니다. 이는 보안이나 시스템 안정성을 위협할 수 있는 무단 또는 우발적인 변경을 방지합니다.
시스템 소프트웨어 업데이트: macOS 업데이트나 업그레이드를 설치할 때, macOS는 새로운 시스템 스냅샷을 생성합니다. 그런 다음 macOS 시작 볼륨은 **APFS (Apple File System)**를 사용하여 이 새로운 스냅샷으로 전환합니다. 업데이트 적용 과정이 더 안전하고 신뢰할 수 있게 되며, 업데이트 중 문제가 발생할 경우 시스템이 항상 이전 스냅샷으로 되돌아갈 수 있습니다.
데이터 분리: macOS Catalina에서 도입된 데이터와 시스템 볼륨 분리 개념과 함께, 봉인된 시스템 스냅샷 기능은 모든 데이터와 설정이 별도의 "데이터" 볼륨에 저장되도록 보장합니다. 이 분리는 데이터를 시스템과 독립적으로 만들어 시스템 업데이트 과정을 단순화하고 시스템 보안을 강화합니다.
이 스냅샷은 macOS에 의해 자동으로 관리되며, APFS의 공간 공유 기능 덕분에 디스크에 추가 공간을 차지하지 않습니다. 또한, 이 스냅샷은 전체 시스템의 사용자 접근 가능한 백업인 타임 머신 스냅샷과는 다르다는 점도 중요합니다.
명령어 **diskutil apfs list
**는 APFS 볼륨의 세부 정보와 레이아웃을 나열합니다:
이전 출력에서 사용자 접근 가능한 위치가 /System/Volumes/Data
아래에 마운트된 것을 볼 수 있습니다.
또한, macOS 시스템 볼륨 스냅샷은 /
에 마운트되어 있으며 봉인되어 있습니다(운영 체제에 의해 암호화 서명됨). 따라서 SIP가 우회되어 수정되면 운영 체제가 더 이상 부팅되지 않습니다.
봉인이 활성화되어 있는지 확인할 수 있는 방법도 있습니다:
또한, 스냅샷 디스크는 읽기 전용으로 마운트됩니다:
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)