Translated ['src/macos-hardening/macos-security-and-privilege-escalation

This commit is contained in:
Translator 2025-04-07 02:24:42 +00:00
parent 22d890367c
commit 701c15b1dc
2 changed files with 25 additions and 26 deletions

View File

@ -288,7 +288,6 @@
- [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
- [RDPexec](windows-hardening/lateral-movement/rdpexec.md)
- [SCMexec](windows-hardening/lateral-movement/scmexec.md)
- [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
- [WinRM](windows-hardening/lateral-movement/winrm.md)
- [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
- [Pivoting to the Cloud$$external:https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/index.html$$]()

View File

@ -4,17 +4,17 @@
## **기본 정보**
**TCC (투명성, 동의 및 제어)**는 애플리케이션 권한을 규제하는 데 중점을 둔 보안 프로토콜입니다. 그 주요 역할은 **위치 서비스, 연락처, 사진, 마이크, 카메라, 접근성 및 전체 디스크 접근**과 같은 민감한 기능을 보호하는 것입니다. TCC는 이러한 요소에 대한 앱 접근을 허용하기 전에 명시적인 사용자 동의를 요구함으로써 개인 정보 보호 사용자 데이터에 대한 제어를 강화합니다.
**TCC (투명성, 동의 및 제어)**는 애플리케이션 권한을 규제하는 데 중점을 둔 보안 프로토콜입니다. 그 주요 역할은 **위치 서비스, 연락처, 사진, 마이크, 카메라, 접근성 및 전체 디스크 접근**과 같은 민감한 기능을 보호하는 것입니다. TCC는 이러한 요소에 대한 앱 접근을 허용하기 전에 명시적인 사용자 동의를 요구함으로써 개인 정보 보호 사용자 데이터에 대한 제어를 강화합니다.
사용자는 애플리케이션이 보호된 기능에 대한 접근을 요청할 때 TCC를 경험니다. 이는 사용자가 **접근을 승인하거나 거부**할 수 있는 프롬프트를 통해 표시됩니다. 또한, TCC는 특정 파일에 대한 접근을 부여하기 위해 **파일을 애플리케이션으로 드래그 앤 드롭**하는 것과 같은 직접적인 사용자 행동을 수용하여, 애플리케이션이 명시적으로 허용된 것에만 접근할 수 있도록 보장합니다.
사용자는 애플리케이션이 보호된 기능에 대한 접근을 요청할 때 TCC를 경험하게 됩니다. 이는 사용자가 **접근을 승인하거나 거부**할 수 있는 프롬프트를 통해 표시됩니다. 또한, TCC는 **파일을 애플리케이션으로 드래그 앤 드롭**하는 것과 같은 직접적인 사용자 행동을 수용하여 특정 파일에 대한 접근을 허용하며, 애플리케이션이 명시적으로 허용된 것에만 접근할 수 있도록 보장합니다.
![TCC 프롬프트의 예](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
**TCC**는 `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd`에 위치한 **데몬**에 의해 처리되며, `/System/Library/LaunchDaemons/com.apple.tccd.system.plist`에서 구성됩니다 (mach 서비스 `com.apple.tccd.system` 등록).
로그인한 사용자마다 실행되는 **사용자 모드 tccd**가 `/System/Library/LaunchAgents/com.apple.tccd.plist`에 정의되어 있으며, mach 서비스 `com.apple.tccd` `com.apple.usernotifications.delegate.com.apple.tccd`를 등록합니다.
로그인한 사용자마다 실행되는 **사용자 모드 tccd**가 `/System/Library/LaunchAgents/com.apple.tccd.plist`에 정의되어 있으며, mach 서비스 `com.apple.tccd` `com.apple.usernotifications.delegate.com.apple.tccd`를 등록합니다.
여기에서 시스템 사용자로서 실행 중인 tccd를 볼 수 있습니다:
여기에서 시스템 사용자로서 실행 중인 tccd를 볼 수 있습니다:
```bash
ps -ef | grep tcc
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
@ -28,7 +28,7 @@ ps -ef | grep tcc
- **`/Library/Application Support/com.apple.TCC/TCC.db`**에 있는 시스템 전체 데이터베이스.
- 이 데이터베이스는 **SIP 보호**되어 있어, SIP 우회만이 여기에 쓸 수 있습니다.
- 사용자 TCC 데이터베이스 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** 사용자별 설정을 위한 것입니다.
- 사용자 TCC 데이터베이스 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**로, 사용자별 설정을 위한 것입니다.
- 이 데이터베이스는 보호되어 있어, Full Disk Access와 같은 높은 TCC 권한을 가진 프로세스만 쓸 수 있습니다(하지만 SIP로 보호되지는 않습니다).
> [!WARNING]
@ -54,7 +54,7 @@ ps -ef | grep tcc
> com.apple.rootless.storage.TCC
> ```
>
> 그러나 사용자는 **`tccutil`** 명령줄 유틸리티로 규칙을 **삭제하거나 쿼리**할 수 있습니다.
> 그러나 사용자는 **`tccutil`** 명령줄 유틸리티로 **규칙을 삭제하거나 쿼리**할 수 있습니다.
#### 데이터베이스 쿼리
@ -171,7 +171,7 @@ echo "X'$REQ_HEX'"
```
- 더 많은 정보는 **다른 필드**에 대한 [**이 블로그 게시물**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)를 확인하세요.
또한 `System Preferences --> Security & Privacy --> Privacy --> Files and Folders`에서 앱에 대해 **이미 부여된 권한**을 확인할 수 있습니다.
`System Preferences --> Security & Privacy --> Privacy --> Files and Folders`에서 앱에 **이미 부여된 권한**을 확인할 수 있습니다.
> [!TIP]
> 사용자는 **`tccutil`**을 사용하여 **규칙을 삭제하거나 쿼리**할 수 있습니다.
@ -203,12 +203,12 @@ csreq -t -r /tmp/telegram_csreq.bin
### 권한 및 TCC 권한
앱은 **단순히** **요청**하고 **접근 권한을 부여받는 것**만으로는 충분하지 않으며, **관련 권한을 가져야** 합니다.\
예를 들어 **Telegram**은 **카메라에 접근하기 위해** `com.apple.security.device.camera` 권한을 가지고 있습니다. 이 **권한이 없는 앱**은 카메라에 접근할 수 **없으며** (사용자에게 권한 요청하지 않습니다).
앱은 **단순히** **요청**하고 **접근 권한을 부여받는 것**만으로는 부족하며, **관련 권한을 가져야** 합니다.\
예를 들어 **Telegram**은 **카메라에 접근하기 위해** `com.apple.security.device.camera` 권한을 가지고 있습니다. 이 **권한이 없는 앱**은 카메라에 접근할 수 **없으며** (사용자에게 권한 요청하지 않습니다).
그러나 앱이 `~/Desktop`, `~/Downloads``~/Documents`와 같은 **특정 사용자 폴더에 접근하기 위해서는** 특정 **권한이 필요하지 않습니다.** 시스템은 접근을 투명하게 처리하고 **필요에 따라 사용자에게 요청**합니다.
Apple의 앱은 **프롬프트를 생성하지 않습니다.** 이들은 **권한** 목록에 **미리 부여된 권한**을 포함하고 있어, **결코 팝업을 생성하지 않으며**, **TCC 데이터베이스**에 나타나지 않습니다. 예를 들어:
Apple의 앱은 **프롬프트를 생성하지 않습니다**. 이들은 **권한** 목록에 **미리 부여된 권한**을 포함하고 있어, **결코 팝업을 생성하지 않으며**, **TCC 데이터베이스**에 나타나지 않습니다. 예를 들어:
```bash
codesign -dv --entitlements :- /System/Applications/Calendar.app
[...]
@ -222,7 +222,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
이것은 Calendar가 사용자에게 알림, 캘린더 및 주소록에 접근할 것을 요청하지 않도록 합니다.
> [!TIP]
> 권한에 대한 공식 문서 외에도 [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)에서 권한에 대한 비공식적인 **흥미로운 정보를 찾는 것도 가능합니다**.
> 권한에 대한 공식 문서 외에도 **다음에서 비공식적인 흥미로운 정보를 찾을 수 있습니다** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
일부 TCC 권한은: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... 모든 권한을 정의하는 공개 목록은 없지만 이 [**알려진 목록**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)을 확인할 수 있습니다.
@ -234,7 +234,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
### 사용자 의도 / com.apple.macl
앞서 언급했듯이, **파일을 드래그 앤 드롭하여 앱에 접근을 부여하는 것이 가능합니다**. 이 접근은 어떤 TCC 데이터베이스에도 명시되지 않지만 **파일의 확장된 속성**으로 저장됩니다. 이 속성은 허용된 앱의 **UUID**를 **저장합니다**:
앞서 언급했듯이, **파일을 드래그 앤 드롭하여 앱에 접근을 부여할 수 있습니다**. 이 접근은 어떤 TCC 데이터베이스에도 명시되지 않지만 **파일의 확장된 속성**으로 저장됩니다. 이 속성은 허용된 앱의 **UUID**를 저장합니다:
```bash
xattr Desktop/private.txt
com.apple.macl
@ -252,15 +252,15 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
> [!NOTE]
> **`com.apple.macl`** 속성이 tccd가 아닌 **Sandbox**에 의해 관리된다는 점이 흥미롭습니다.
>
> 또한, 컴퓨터에서 앱의 UUID를 허용하는 파일을 다른 컴퓨터로 이동하면, 동일한 앱이 다른 UID를 가지기 때문에 해당 앱에 대한 접근 권한이 부여되지 않습니다.
> 또한, 컴퓨터에서 앱의 UUID를 허용하는 파일을 다른 컴퓨터로 이동하면, 동일한 앱이 다른 UID를 가지기 때문에 해당 앱에 대한 접근 권한이 부여되지 않는다는 점에 유의하세요.
확장 속성 `com.apple.macl` **는** 다른 확장 속성과 달리 **SIP에 의해 보호되기 때문에** 지울 수 없습니다. 그러나 [**이 게시물에서 설명된 바와 같이**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), 파일을 **압축**하고 **삭제**한 후 **압축 해제**하면 이를 비활성화할 수 있습니다.
확장 속성 `com.apple.macl` **는** 다른 확장 속성과 달리 **SIP에 의해 보호되기 때문에** **지울 수 없습니다**. 그러나 [**이 게시물에서 설명된 바와 같이**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), 파일을 **압축**하고 **삭제**한 후 **압축 해제**하면 이를 비활성화할 수 있습니다.
## TCC Privesc & Bypasses
### TCC에 삽입
시점에서 TCC 데이터베이스에 대한 쓰기 접근 권한을 얻으면 다음과 같은 방법을 사용하여 항목을 추가할 수 있습니다(주석을 제거하세요):
시점에서 TCC 데이터베이스에 대한 쓰기 접근 권한을 얻으면 다음과 같은 방법을 사용하여 항목을 추가할 수 있습니다(주석을 제거하세요):
<details>
@ -331,7 +331,7 @@ macos-apple-events.md
이 경우 귀하의 앱은 **`com.apple.Finder`**에 대한 **`kTCCServiceAppleEvents`** 권한이 필요합니다.
{{#tabs}}
{{#tab name="사용자 TCC.db 훔치기"}}
{{#tab name="사용자 TCC.db 훔치기"}}
```applescript
# This AppleScript will copy the system TCC database into /tmp
osascript<<EOD
@ -396,7 +396,7 @@ EOD
```
</details>
**Script Editor 앱**에서도 같은 일이 발생합니다. Finder를 제어할 수 있지만, AppleScript를 사용하여 스크립트를 실행하도록 강제할 수는 없습니다.
**Script Editor 앱**에서도 동일한 일이 발생합니다. Finder를 제어할 수 있지만 AppleScript를 사용하여 스크립트를 실행하도록 강제할 수는 없습니다.
### Automation (SE) to some TCC
@ -446,7 +446,7 @@ rm "$HOME/Desktop/file"
**`System Events`**에서의 자동화 + 접근성 (**`kTCCServicePostEvent`**)은 **프로세스에 키 입력을 전송**할 수 있게 해줍니다. 이렇게 하면 Finder를 악용하여 사용자의 TCC.db를 변경하거나 임의의 앱에 FDA를 부여할 수 있습니다(비밀번호 입력이 필요할 수 있습니다).
Finder가 사용자의 TCC.db를 덮어쓰는 예:
사용자의 TCC.db를 덮어쓰는 Finder 예:
```applescript
-- store the TCC.db file to copy in /tmp
osascript <<EOF
@ -494,7 +494,7 @@ EOF
```
### `kTCCServiceAccessibility` to FDA\*
이 페이지에서 [**접근성 권한을 용하기 위한 페이로드**](macos-tcc-payloads.md#accessibility)를 확인하여 FDA\*로 권한 상승하거나 예를 들어 키로거를 실행할 수 있습니다.
이 페이지에서 [**접근성 권한을 용하기 위한 페이로드**](macos-tcc-payloads.md#accessibility)를 확인하여 FDA\*로 권한 상승하거나 예를 들어 키로거를 실행할 수 있습니다.
### **Endpoint Security Client to FDA**
@ -502,30 +502,30 @@ EOF
### System Policy SysAdmin File to FDA
**`kTCCServiceSystemPolicySysAdminFiles`**는 사용자의 **`NFSHomeDirectory`** 속성을 **변경**할 수 있게 하여 그의 홈 폴더를 변경하고 따라서 **TCC를 우회**할 수 있게 합니다.
**`kTCCServiceSystemPolicySysAdminFiles`**는 사용자의 홈 폴더를 변경하는 **`NFSHomeDirectory`** 속성을 **변경**할 수 있게 하여 TCC를 **우회**할 수 있게 합니다.
### User TCC DB to FDA
**사용자 TCC** 데이터베이스에 대한 **쓰기 권한**을 얻으면 **`FDA`** 권한을 부여할 수는 없지만, 시스템 데이터베이스에 있는 사용자만 그 권한을 부여할 수 있습니다.
하지만 **`Finder에 대한 자동화 권한`**을 부여하고 이전 기술을 악용하여 FDA\*로 상승할 수 있습니다.
하지만 **`Finder에 대한 자동화 권한`**을 부여하고 이전 기술을 남용하여 FDA\*로 권한 상승을 할 수 있습니다.
### **FDA to TCC permissions**
**전체 디스크 접근**의 TCC 이름은 **`kTCCServiceSystemPolicyAllFiles`**입니다.
이것이 실제 권한 상승이라고 생각하지 않지만, 만약 유용하다면: FDA를 제어하는 프로그램이 있다면 **사용자의 TCC 데이터베이스를 수정하고 자신에게 모든 접근 권한을 부여할 수 있습니다**. 이는 FDA 권한을 잃을 경우 지속성 기술로 유용할 수 있습니다.
이것이 실제 권한 상승이라고 생각하지는 않지만, 만약 유용하다고 생각된다면: FDA를 제어하는 프로그램을 가지고 있다면 **사용자의 TCC 데이터베이스를 수정하고 자신에게 모든 접근 권한을 부여할 수 있습니다**. 이는 FDA 권한을 잃을 경우 지속성 기술로 유용할 수 있습니다.
### **SIP Bypass to TCC Bypass**
시스템 **TCC 데이터베이스**는 **SIP**에 의해 보호되므로, **지정된 권한**이 있는 프로세스만 이를 수정할 수 있습니다. 따라서 공격자가 **파일**에 대한 **SIP 우회**를 찾으면 (SIP에 의해 제한된 파일을 수정할 수 있게 되면), 그는 다음을 수행할 수 있습니다:
시스템 **TCC 데이터베이스**는 **SIP**에 의해 보호되므로, **지정된 권한**이 있는 프로세스만 이를 수정할 수 있습니다. 따라서 공격자가 **파일**에 대한 **SIP 우회**를 찾으면 (SIP에 의해 제한된 파일을 수정할 수 있게 되면), 그는 다음을 할 수 있습니다:
- **TCC 데이터베이스의 보호를 제거**하고 자신에게 모든 TCC 권한을 부여할 수 있습니다. 그는 예를 들어 이러한 파일을 용할 수 있습니다:
- TCC 데이터베이스의 **보호를 제거**하고 자신에게 모든 TCC 권한을 부여할 수 있습니다. 그는 예를 들어 이러한 파일을 용할 수 있습니다:
- TCC 시스템 데이터베이스
- REG.db
- MDMOverrides.plist
그러나 이 **SIP 우회를 통해 TCC를 우회**할 수 있는 또 다른 옵션이 있습니다. 파일 `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`는 TCC 예외가 필요한 애플리케이션의 허용 목록입니다. 따라서 공격자가 이 파일의 **SIP 보호를 제거**하고 자신의 **애플리케이션**을 추가할 수 있다면, 해당 애플리케이션은 TCC를 우회할 수 있습니다.\
그러나 이 **SIP 우회를 TCC 우회로 남용하는** 또 다른 옵션이 있습니다. 파일 `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`는 TCC 예외가 필요한 애플리케이션의 허용 목록입니다. 따라서 공격자가 이 파일의 **SIP 보호를 제거**하고 자신의 **애플리케이션**을 추가할 수 있다면, 해당 애플리케이션은 TCC를 우회할 수 있습니다.\
예를 들어 터미널을 추가하기 위해:
```bash
# Get needed info