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

This commit is contained in:
Translator 2024-04-18 13:52:38 +00:00
parent c1578a6acd
commit 723669cdd2
4 changed files with 299 additions and 219 deletions

View file

@ -1,19 +1,33 @@
# macOS - 검사, 디버깅 및 Fuzzing
# macOS Apps - 검사, 디버깅 및 Fuzzing
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 **제로**부터 **히어로**로 **AWS 해킹** 배우기!</summary>
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
- **회사를 HackTricks에서 광고**하거나 **PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com) 받기
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하고, 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션을 만나보세요.
- 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
- **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, **회사**나 **고객**이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 **무료**로 확인할 수 있는 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시도해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
---
## 정적 분석
### otool
@ -36,7 +50,7 @@ objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemb
### jtool2
이 도구는 **codesign**, **otool**, **objdump**의 **대체**로 사용될 수 있으며 몇 가지 추가 기능을 제공합니다. [**여기에서 다운로드**](http://www.newosxbook.com/tools/jtool.html)하거나 `brew`로 설치할 수 있습니다.
이 도구는 **codesign**, **otool**, **objdump**의 **대체**로 사용될 수 있으며 몇 가지 추가 기능을 제공합니다. [**여기에서 다운로드하세요**](http://www.newosxbook.com/tools/jtool.html) 또는 `brew`를 사용하여 설치하세요.
```bash
# Install
brew install --cask jtool2
@ -86,15 +100,17 @@ ldid -S/tmp/entl.xml <binary>
```
### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html)은 **.pkg** 파일(설치 프로그램)을 설치하기 전에 내부를 확인하는 데 유용한 도구입니다.\
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html)은 **.pkg** 파일(설치 프로그램)을 검사하고 설치하기 전에 내부를 확인하는 데 유용한 도구입니다.\
이러한 설치 프로그램에는 일반적으로 악성 소프트웨어 제작자가 악용하는 `preinstall``postinstall` bash 스크립트가 포함되어 있습니다.
### hdiutil
이 도구를 사용하면 Apple 디스크 이미지(**.dmg**) 파일을 실행하기 전에 내용을 확인할 수 있습니다:
이 도구를 사용하면 Apple 디스크 이미지(**.dmg**) 파일을 **마운트**하여 실행하기 전에 내용을 검사할 수 있습니다:
```bash
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```
`/Volumes`에 마운트됩니다.
### Objective-C
#### Metadata
@ -107,7 +123,7 @@ Objective-C로 작성된 프로그램은 [Mach-O 바이너리](../macos-files-fo
* 클래스 메소드
* 클래스 인스턴스 변수
[class-dump](https://github.com/nygard/class-dump) 사용하여 이 정보를 얻을 수 있습니다:
[class-dump](https://github.com/nygard/class-dump) 사용하여 이 정보를 얻을 수 있습니다:
```bash
class-dump Kindle.app
```
@ -115,15 +131,15 @@ class-dump Kindle.app
바이너리에서 Objective-C를 사용하는 함수가 호출될 때, 컴파일된 코드는 해당 함수를 호출하는 대신 **`objc_msgSend`**를 호출합니다. 이는 최종 함수를 호출할 것입니다:
![](<../../../.gitbook/assets/image (560).png>)
![](<../../../.gitbook/assets/image (302).png>)
이 함수가 기대하는 매개변수는 다음과 같습니다:
- 첫 번째 매개변수인 (**self**)은 "메시지를 수신할 클래스의 **인스턴스를 가리키는 포인터**"입니다. 간단히 말하면, 메소드가 호출되는 객체입니다. 메소드가 클래스 메소드인 경우, 이것은 클래스 객체의 인스턴스(전체)일 것이며, 인스턴스 메소드의 경우 self는 클래스의 인스턴스로 객체화된 인스턴스를 가리킵니다.
- 첫 번째 매개변수인 (**self**)은 "메시지를 수신할 클래스의 **인스턴스를 가리키는 포인터**"입니다. 간단히 말하면, 메소드가 호출되는 객체입니다. 메소드가 클래스 메소드인 경우, 이것은 클래스 객체의 인스턴스(전체)일 것이며, 인스턴스 메소드의 경우 self는 객체로서 클래스의 인스턴스를 가리킵니다.
- 두 번째 매개변수인 (**op**)은 "메시지를 처리하는 메소드의 셀렉터"입니다. 간단히 말하면, 이것은 **메소드의 이름**입니다.
- 나머지 매개변수는 메소드에서 필요로 하는 **값들**입니다 (op).
- 나머지 매개변수는 메소드에서 **필요로 하는 값들**입니다 (op).
ARM64에서 **`lldb`**를 사용하여 이 정보를 쉽게 얻는 방법을 확인하세요:
ARM64에서 **`lldb`**를 사용하여 이 정보를 쉽게 얻는 방법은 이 페이지에서 확인할 수 있습니다:
{% content-ref url="arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](arm64-basic-assembly.md)
@ -131,7 +147,7 @@ ARM64에서 **`lldb`**를 사용하여 이 정보를 쉽게 얻는 방법을 확
x64:
| **인자** | **레지스터** | **(objc\_msgSend용) ** |
| **인자** | **레지스터** | **(objc\_msgSend에 대해)** |
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
| **1번째 인자** | **rdi** | **self: 메소드가 호출되는 객체** |
| **2번째 인자** | **rsi** | **op: 메소드의 이름** |
@ -145,7 +161,7 @@ x64:
Swift 바이너리의 경우, Objective-C 호환성이 있기 때문에 때로는 [class-dump](https://github.com/nygard/class-dump/)를 사용하여 선언을 추출할 수 있지만 항상 그렇지는 않습니다.
**`jtool -l`** 또는 **`otool -l`** 명령어를 사용하 **`__swift5`** 접두어로 시작하는 여러 섹션을 찾을 수 있습니다:
**`jtool -l`** 또는 **`otool -l`** 명령어를 사용하 **`__swift5`** 접두어로 시작하는 여러 섹션을 찾을 수 있습니다:
```bash
jtool2 -l /Applications/Stocks.app/Contents/MacOS/Stocks
LC 00: LC_SEGMENT_64 Mem: 0x000000000-0x100000000 __PAGEZERO
@ -157,9 +173,9 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
```
더 많은 정보를 [**이 블로그 포스트에서 찾을 수 있습니다**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
다음 블로그 포스트에서 이 섹션에 저장된 정보에 대한 자세한 내용을 찾을 수 있습니다.
또한, **Swift 이진 파일에는 심볼이 포함**될 수 있습니다(예: 라이브러리는 함수를 호출하기 위해 심볼을 저장해야 함). **심볼에는 일반적으로 함수 이름과 속성에 대한 정보가 포함**되어 있으며, 이들은 보통 지저분한 방식으로 표시되므로 매우 유용하며 "**디멩글러"**가 원래 이름을 가져올 수 있습니다:
또한, **Swift 이진 파일에는 심볼이 포함**될 수 있습니다 (예: 라이브러리는 함수를 호출하기 위해 심볼을 저장해야 함). **일반적으로 심볼에는 함수 이름과 속성에 대한 정보**가 지저분한 방식으로 포함되어 있으므로 매우 유용하며 "**디멩글러"**가 원래 이름을 가져올 수 있습니다:
```bash
# Ghidra plugin
https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py
@ -176,46 +192,46 @@ swift demangle
## 동적 분석
{% hint style="warning" %}
바이너리를 디버깅하려면 **SIP를 비활성화**해야 합니다 (`csrutil disable` 또는 `csrutil enable --without debug`) 또는 바이너리를 임시 폴더로 복사하고 `codesign --remove-signature <binary-path>`로 서명을 **제거**하거나 바이너리의 디버깅을 허용합니다 (이 스크립트를 사용할 수 있습니다 [여기](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)).
바이너리를 디버깅하려면 **SIP를 비활성화**해야 합니다 (`csrutil disable` 또는 `csrutil enable --without debug`) 또는 바이너리를 임시 폴더로 복사하고 `codesign --remove-signature <binary-path>`로 서명을 제거하거나 바이너리의 디버깅을 허용해야 합니다 (이 스크립트를 사용할 수 있습니다).
{% endhint %}
{% hint style="warning" %}
macOS에서 **시스템 바이너리** (예: `cloudconfigurationd`)를 **기기**하는 경우, **SIP를 비활성화**해야 합니다 (서명을 제거하는 것만으로는 작동하지 않음).
macOS**시스템 바이너리** (예: `cloudconfigurationd`)를 **인스트루먼트**하려면 **SIP를 비활성화**해야 합니다 (서명을 제거하는 것만으로는 작동하지 않습니다).
{% endhint %}
### 통합 로그
MacOS는 **어플리케이션을 실행**할 때 매우 유용한 로그를 생성합니다.
MacOS는 **어플리케이션 실행 중 무엇을 하는지** 이해하는 데 유용한 많은 로그를 생성합니다.
또한, 일부 로그에는 `<private>` 태그가 포함되어 **사용자** 또는 **컴퓨터** **식별 가능한** 정보를 **숨기는**데, 이 정보를 공개하기 위해 **인증서를 설치**할 수 있습니다. [**여기**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)의 설명을 따르세요.
또한, 일부 로그에는 `<private>` 태그가 포함되어 **사용자** 또는 **컴퓨터** **식별 가능한** 정보를 **숨기기** 위한 것입니다. 그러나 **이 정보를 공개하기 위해 인증서를 설치**할 수 있습니다. [**여기**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)의 설명을 따르세요.
### Hopper
#### 왼쪽 패널
Hopper의 왼쪽 패널에서는 이진 파일의 심볼 (**레이블**), 프로시저 및 함수 목록 (**Proc**) 및 문자열 (**Str**)을 볼 수 있습니다. 이들은 Mac-O 파일의 여러 부분에서 정의된 문자열 중 일부이며 (_cstring 또는_ `objc_methname`과 같은).
Hopper의 왼쪽 패널에서는 이진 파일의 심볼 (**라벨**), 프로시저 및 함수 목록 (**Proc**) 및 문자열 (**Str**)을 볼 수 있습니다. 이들은 Mac-O 파일의 여러 부분에서 정의된 문자열 중 일부이지만 모든 문자열은 아닙니다 (예: _cstring 또는 `objc_methname`).
#### 가운데 패널
가운데 패널에서는 **디스어셈블리 코드**를 볼 수 있습니다. 그리고 **원시** 디스어셈블리, **그래프**, **디컴파일** 및 **바이너리**로 볼 수 있습니다. 각각의 아이콘을 클릭하여:
가운데 패널에서는 **어셈블리 코드**를 볼 수 있습니다. **원시** 어셈블리, **그래프**, **디컴파일** 및 **바이너리**로 볼 수 있습니다. 각 아이콘을 클릭하여 확인할 수 있습니다:
<figure><img src="../../../.gitbook/assets/image (2) (6).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (340).png" alt=""><figcaption></figcaption></figure>
코드 객체를 마우스 오른쪽 버튼으로 클릭하면 해당 객체에 대한 **참조/참조**를 볼 수 있거나 이름을 변경할 수 있습니다 (디컴파일된 의사 코드에서는 작동하지 않음):
<figure><img src="../../../.gitbook/assets/image (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1114).png" alt=""><figcaption></figcaption></figure>
또한, **가운데 아래에서 파이썬 명령어를 작성**할 수 있습니다.
#### 오른쪽 패널
오른쪽 패널에서는 **탐색 기록** (현재 상황에 도달하는 방법을 알 수 있음), **호출 그래프** (이 함수를 호출하는 모든 함수 및 이 함수가 호출하는 모든 함수를 볼 수 있) 및 **로컬 변수** 정보와 같은 흥미로운 정보를 볼 수 있습니다.
오른쪽 패널에서는 **탐색 기록** (현재 상황에 도달 방법을 알 수 있음), **호출 그래프** (이 함수를 호출하는 모든 함수 및 이 함수가 호출하는 모든 함수를 볼 수 있는 그래프) 및 **로컬 변수** 정보와 같은 흥미로운 정보를 볼 수 있습니다.
### dtrace
Dtrace는 사용자가 **매우 낮은 수준**에서 응용 프로그램에 액세스할 수 있도록 하며, 사용자가 **프로그램을 추적**하고 실행 흐름을 심지어 변경할 수 있는 방법을 제공합니다. Dtrace는 **커널 전체에 배치된** 프로브를 사용하며 시스템 호출의 시작과 끝과 같은 위치에 있습니다.
Dtrace는 사용자가 **매우 낮은 수준**에서 응용 프로그램에 액세스할 수 있도록 하며 프로그램을 **추적**하고 실행 흐름을 변경할 수 있는 방법을 제공합니다. Dtrace는 **커널 전체에 배치된 프로브**를 사용하며 시스템 호출의 시작과 끝과 같은 위치에 있습니다.
DTrace는 각 시스템 호출에 대해 프로브를 생성하기 위해 **`dtrace_probe_create`** 함수를 사용합니다. 이러한 프로브는 각 시스템 호출의 **진입점과 종료점**에서 발생할 수 있습니다. DTrace와의 상호 작용은 루트 사용자에게만 제공되는 /dev/dtrace를 통해 이루어집니다.
DTrace는 각 시스템 호출에 대해 프로브를 생성하기 위해 **`dtrace_probe_create`** 함수를 사용합니다. 이러한 프로브는 각 시스템 호출의 **진입점과 종료점**에서 발생할 수 있습니다. DTrace와의 상호 작용은 루트 사용자만 사용할 수 있는 /dev/dtrace를 통해 이루어집니다.
{% hint style="success" %}
SIP 보호를 완전히 비활성화하지 않고 Dtrace를 활성화하려면 복구 모드에서 다음을 실행할 수 있습니다: `csrutil enable --without dtrace`
@ -293,45 +309,45 @@ dtruss -c -p 1000 #get syscalls of PID 1000
```
### ktrace
심지어 **SIP가 활성화**된 상태에서도 이를 사용할 수 있습니다.
**SIP가 활성화된 상태에서도** 사용할 수 있습니다.
```bash
ktrace trace -s -S -t c -c ls | grep "ls("
```
### ProcessMonitor
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) 프로세스가 수행하는 프로세스 관련 작업을 확인하는 매우 유용한 도구입니다 (예: 프로세스가 생성하는 새 프로세스를 모니터링).
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) 프로세스가 수행하는 프로세스 관련 작업을 확인하는 매우 유용한 도구입니다 (예: 프로세스가 생성하는 새로운 프로세스를 모니터링).
### SpriteTree
[**SpriteTree**](https://themittenmac.com/tools/)는 프로세스 간 관계를 출력하는 도구입니다.\
**`sudo eslogger fork exec rename create > cap.json`**과 같은 명령으로 맥을 모니터링해야 합니다 (이 명령을 실행하는 터미널은 FDA가 필요합니다). 그런 다음 이 도구에서 json을 로드하여 모든 관계를 볼 수 있습니다:
**`sudo eslogger fork exec rename create > cap.json`**과 같은 명령을 사용하여 맥을 모니터링해야 합니다 (이 명령을 실행하는 터미널은 FDA가 필요합니다). 그런 다음 이 도구에서 json을 로드하여 모든 관계를 볼 수 있습니다:
<figure><img src="../../../.gitbook/assets/image (710).png" alt="" width="375"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1179).png" alt="" width="375"><figcaption></figcaption></figure>
### FileMonitor
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor)는 파일 이벤트 (생성, 수정 삭제와 같은)를 모니터링하여 이러한 이벤트에 대한 자세한 정보를 제공합니다.
[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor)는 파일 이벤트 (생성, 수정, 삭제와 같은)를 모니터링하여 이러한 이벤트에 대한 자세한 정보를 제공합니다.
### Crescendo
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo)는 Microsoft Sysinternal의 _Procmon_에서 Windows 사용자가 알 수 있는 외관을 가진 GUI 도구입니다. 이 도구를 사용하면 다양한 이벤트 유형의 녹화를 시작하고 중지할 수 있으며 파일, 프로세스, 네트워크 등과 같은 범주별로 이러한 이벤트를 필터링하고 json 형식으로 기록된 이벤트를 저장할 수 있습니다.
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo)는 Microsoft Sysinternal의 _Procmon_에서 Windows 사용자가 알 수 있는 외관을 가진 GUI 도구입니다. 이 도구를 사용하면 다양한 이벤트 유형의 녹화를 시작하고 중지할 수 있으며 파일, 프로세스, 네트워크 등과 같은 범주별로 이러한 이벤트를 필터링할 수 있으며 녹화된 이벤트를 json 형식으로 저장할 수 있습니다.
### Apple Instruments
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html)은 Xcode의 개발자 도구의 일부입니다. 애플리케이션 성능을 모니터링하고 메모리 누수를 식별하며 파일 시스템 활동을 추적하는 데 사용됩니다.
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html)은 Xcode의 개발자 도구의 일부로 사용되며 애플리케이션 성능을 모니터링하고 메모리 누수를 식별하며 파일 시스템 활동을 추적하는 데 사용됩니다.
![](<../../../.gitbook/assets/image (15).png>)
![](<../../../.gitbook/assets/image (1135).png>)
### fs\_usage
프로세스가 수행하는 작업을 따를 수 있게 해줍니다:
프로세스가 수행하는 작업을 따를 수 있게 니다:
```bash
fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls
fs_usage -w -f network curl #This tracks network actions
```
### TaskExplorer
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html)는 이진 파일이 사용하는 **라이브러리**, 사용 중인 **파일****네트워크** 연결을 볼 수 있는 유용한 도구입니다.\
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html)는 이진 파일이 사용하는 **라이브러리**, 사용 중인 **파일****네트워크** 연결을 확인하는 데 유용합니다.\
또한 바이너리 프로세스를 **virustotal**에 대해 확인하고 해당 바이너리에 대한 정보를 표시합니다.
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
@ -340,14 +356,14 @@ fs_usage -w -f network curl #This tracks network actions
### lldb
**lldb**는 **macOS** 이진 파일 **디버깅**을 위한 사실상의 도구입니다.
**lldb**는 **macOS** 이진 파일 **디버깅**에 대한 사실상의 도구입니다.
```bash
lldb ./malware.bin
lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
**`.lldbinit`**이라는 파일을 홈 폴더에 만들고 다음 줄을 추가하여 lldb를 사용할 때 intel 플레이버를 설정할 수 있습니다:
홈 폴더에 다음 라인을 포함하는 **`.lldbinit`**이라는 파일을 만들어 lldb를 사용할 때 intel 플레이버를 설정할 수 있습니다:
```bash
settings set target.x86-disassembly-flavor intel
```
@ -355,10 +371,10 @@ settings set target.x86-disassembly-flavor intel
lldb 내에서 `process save-core`를 사용하여 프로세스 덤프
{% endhint %}
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) 명령어</strong></td><td><strong>설명</strong></td></tr><tr><td><strong>run (r)</strong></td><td>중단점이 만나거나 프로세스가 종료될 때까지 계속 실행을 시작합니다.</td></tr><tr><td><strong>continue (c)</strong></td><td>디버그된 프로세스의 실행을 계속합니다.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>다음 명령을 실행합니다. 이 명령은 함수 호출을 건너뜁니다.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>다음 명령을 실행합니다. nexti 명령과 달리 이 명령은 함수 호출 내부로 진입합니다.</td></tr><tr><td><strong>finish (f)</strong></td><td>현재 함수("프레임")의 남은 명령을 실행하고 중지합니다.</td></tr><tr><td><strong>control + c</strong></td><td>실행을 일시 중지합니다. 프로세스가 실행(r)되거나 계속(c)된 경우 현재 실행 중인 위치에서 프로세스를 중지시킵니다.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main # main 함수 호출</p><p>b <binname>`main # 바이너리의 main 함수</p><p>b set -n main --shlib <lib_name> # 지정된 바이너리의 main 함수</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l # 중단점 목록</p><p>br e/dis <num> # 중단점 활성화/비활성화</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint # 중단점 명령어 도움말</p><p>help memory write # 메모리 쓰기 도움말</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <a href="https://lldb.llvm.org/use/variable.html#type-format">format</a></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address></strong></td><td>메모리를 널 종료된 문자열로 표시합니다.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>어셈블리 명령으로 메모리를 표시합니다.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>바이트로 메모리를 표시합니다.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>매개변수로 참조된 객체를 출력합니다.</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>대부분의 Apple Objective-C API 또는 메서드는 객체를 반환하므로 "print object" (po) 명령을 통해 표시해야 합니다. 의미 있는 출력이 나오지 않으면 <code>x/b</code>를 사용하세요.</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 # 해당 주소에 AAAA 쓰기<br>memory write -f s $rip+0x11f+7 "AAAA" # 주소에 AAAA 쓰기</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis # 현재 함수를 어셈블합니다</p><p>dis -n <funcname> # 함수 어셈블</p><p>dis -n <funcname> -b <basename> # 함수 어셈블<br>dis -c 6 # 6줄 어셈블</p><p>dis -c 0x100003764 -e 0x100003768 # 한 주소부터 다른 주소까지<br>dis -p -c 4 # 현재 주소에서 어셈블 시작</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 레지스터의 3개 구성 요소 배열 확인</td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) 명령어</strong></td><td><strong>설명</strong></td></tr><tr><td><strong>run (r)</strong></td><td>중단점이 만나거나 프로세스가 종료될 때까지 계속 실행을 시작합니다.</td></tr><tr><td><strong>continue (c)</strong></td><td>디버깅 중인 프로세스의 실행을 계속합니다.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>다음 명령을 실행합니다. 이 명령은 함수 호출을 건너뜁니다.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>다음 명령을 실행합니다. nexti 명령과 달리, 이 명령은 함수 호출 내부로 진입합니다.</td></tr><tr><td><strong>finish (f)</strong></td><td>현재 함수("프레임")의 남은 명령을 실행하고 중지합니다.</td></tr><tr><td><strong>control + c</strong></td><td>실행을 일시 중지합니다. 프로세스가 실행 중이거나 계속되고 있다면, 프로세스가 현재 실행 중인 위치에서 중지됩니다.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main # main 함수 호출</p><p>b <binname>`main # 바이너리의 main 함수</p><p>b set -n main --shlib <lib_name> # 지정된 바이너리의 main 함수</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l # 중단점 목록</p><p>br e/dis <num> # 중단점 활성화/비활성화</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint # 중단점 명령어 도움말</p><p>help memory write # 메모리 쓰기 도움말</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <a href="https://lldb.llvm.org/use/variable.html#type-format">format</a></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address></strong></td><td>메모리를 널 종료된 문자열로 표시합니다.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>어셈블리 명령으로 메모리를 표시합니다.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>바이트로 메모리를 표시합니다.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>매개변수로 참조된 객체를 출력합니다.</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>대부분의 Apple Objective-C API 또는 메서드는 객체를 반환하므로 "print object" (po) 명령을 통해 표시해야 합니다. 의미 있는 출력이 나오지 않으면 <code>x/b</code>를 사용하세요.</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 # 해당 주소에 AAAA 쓰기<br>memory write -f s $rip+0x11f+7 "AAAA" # 주소에 AAAA 쓰기</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis # 현재 함수의 어셈블리 코드 표시</p><p>dis -n <funcname> # 함수 어셈블리 코드 표시</p><p>dis -n <funcname> -b <basename> # 함수의 어셈블리 코드 표시</p><p>dis -c 6 # 6줄 어셈블리 코드 표시</p><p>dis -c 0x100003764 -e 0x100003768 # 한 주소부터 다른 주소까지</p><p>dis -p -c 4 # 현재 주소부터 어셈블리 코드 표시 시작</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 레지스터의 3개 구성 요소 배열 확인</td></tr></tbody></table>
{% hint style="info" %}
**`objc_sendMsg`** 함수를 호출할 때 **rsi** 레지스터는 널 종료된("C") 문자열로 **메서드 이름**을 보유합니다. lldb를 통해 이름을 출력하려면 다음을 수행합니다:
**`objc_sendMsg`** 함수를 호출할 때, **rsi** 레지스터는 널 종료된 ("C") 문자열로 **메서드 이름**을 보유합니다. lldb를 통해 이름을 출력하려면:
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
@ -372,24 +388,24 @@ lldb 내에서 `process save-core`를 사용하여 프로세스 덤프
#### VM 탐지
* **`sysctl hw.model`** 명령은 **호스트가 MacOS**인 경우 "Mac"을 반환하고 VM인 경우 다른 값을 반환합니다.
* **`sysctl hw.model`** 명령은 호스트가 MacOS인 경우 "Mac"을 반환하고 VM인 경우 다른 값을 반환합니다.
* 일부 악성 코드는 **`hw.logicalcpu`** 및 **`hw.physicalcpu`** 값을 조작하여 VM인지 여부를 감지하려고 합니다.
* 일부 악성 코드는 MAC 주소(00:50:56)를 기반으로 **VMware**인지 여부를 감지할 수 있습니다.
* 일부 악성 코드는 MAC 주소(00:50:56)를 기반으로 기계가 VMware인지 여부를 감지할 수 있습니다.
* 간단한 코드로 **프로세스가 디버깅되고 있는지** 확인할 수 있습니다:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //process being debugged }`
* **`ptrace`** 시스템 호출을 **`PT_DENY_ATTACH`** 플래그와 함께 호출할 수도 있습니다. 이렇게 하면 디버거가 첨부되고 추적되는 것을 방지합니다.
* **`sysctl`** 또는 **`ptrace`** 함수가 **가져오기(imported)**되었는지 확인할 수 있습니다(그러나 악성 코드는 동적으로 가져올 수 있음)
* **`sysctl`** 또는 **`ptrace`** 함수가 **가져오기(imported)**되었는지 확인할 수 있습니다(악성 코드가 동적으로 가져올 수도 있음)
* 이 글에서 언급된 대로, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_메시지 Process # exited with **status = 45 (0x0000002d)**는 일반적으로 디버그 대상이 **PT\_DENY\_ATTACH**를 사용하고 있음을 나타내는 신호입니다_”
“_메시지 Process # exited with **status = 45 (0x0000002d)**는 일반적으로 디버그 대상이 **PT\_DENY\_ATTACH**를 사용하고 있음을 나타내는 신호입니다._”
## Fuzzing
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
ReportCrash **분석이 중단된 프로세스를 분석하고 충돌 보고서를 디스크에 저장**합니다. 충돌 보고서에는 충돌 원인을 진단하는 데 도움이 되는 정보가 포함되어 있습니다.\
사용자별 launchd 컨텍스트에서 실행되는 응용 프로그램 및 기타 프로세스의 경우 ReportCrash는 LaunchAgent로 실행되어 사용자의 `~/Library/Logs/DiagnosticReports/`에 충돌 보고서를 저장합니다.\
데몬, 시스템 launchd 컨텍스트에서 실행되는 기타 프로세스 및 다른 권한이 있는 프로세스의 경우 ReportCrash는 LaunchDaemon으로 실행되어 시스템의 `/Library/Logs/DiagnosticReports`에 충돌 보고서를 저장합니다.
ReportCrash **는 충돌하는 프로세스를 분석하고 충돌 보고서를 디스크에 저장**합니다. 충돌 보고서에는 충돌 원인을 진단하는 데 **도움이 되는 정보**가 포함되어 있습니다.\
응용 프로그램 및 다른 프로세스 **사용자별 launchd 컨텍스트에서 실행**되는 경우 ReportCrash는 LaunchAgent로 실행되어 사용자의 `~/Library/Logs/DiagnosticReports/`에 충돌 보고서를 저장합니다.\
데몬, 시스템 launchd 컨텍스트에서 실행되는 다른 프로세스 및 다른 권한이 있는 프로세스의 경우 ReportCrash는 LaunchDaemon으로 실행되어 시스템의 `/Library/Logs/DiagnosticReports`에 충돌 보고서를 저장합니다.
Apple로 전송되는 충돌 보고서에 대해 걱정된다면 비활성화할 수 있습니다. 그렇지 않으면 충돌 보고서는 **서버가 어떻게 충돌했는지 파악하는 데 유용**할 수 있습니다.
Apple로 **보내지는 충돌 보고서**에 대해 걱정된다면 비활성화할 수 있습니다. 그렇지 않으면 충돌 보고서는 **서버가 어떻게 충돌했는지 파악하는 데 유용**할 수 있습니다.
```bash
#To disable crash reporting:
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
@ -399,9 +415,9 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Roo
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
```
### 슬립
### 수면
MacOS에서 퍼징을 할 때 Mac이 슬립 모드로 들어가지 않도록하는 것이 중요합니다:
MacOS에서 퍼징을 할 때 Mac이 잠들지 않도록하는 것이 중요합니다:
* systemsetup -setsleep Never
* pmset, 시스템 환경 설정
@ -420,7 +436,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
```
### 내부 핸들러
**다음 페이지를 확인하세요** 지정된 scheme 또는 protocol을 처리하는 앱을 찾는 방법을 알아볼 수 있습니다:
**다음 페이지를 확인하여** 지정된 scheme 또는 protocol을 처리하는 앱을 찾는 방법을 알아보세요:
{% content-ref url="../macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
@ -428,7 +444,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
### 네트워크 프로세스 열거
네트워크 데이터를 관리하는 프로세스를 찾는 데 흥미로운 정보입니다:
네트워크 데이터를 관리하는 프로세스를 찾는 것은 흥미로운 작업입니다:
```bash
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
#wait some time
@ -451,7 +467,7 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL
#### [AFL++](https://github.com/AFLplusplus/AFLplusplus)
CLI 도구에 작동합니다.
CLI 도구에 대해 작동합니다.
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
@ -485,7 +501,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
```
{% endcode %}
### 더 많은 MacOS 정보에 대한 Fuzzing
### 더 많은 MacOS Fuzzing 정보
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
* [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf)
@ -499,16 +515,29 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
* [**The Art of Mac Malware: The Guide to Analyzing Malicious Software**](https://taomm.org/)
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 도난 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 대항하는 것입니다.
그들의 웹사이트를 방문하여 엔진을 무료로 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
<details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로**부터 **히어로**까지 **AWS 해킹 배우기**</summary>
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks를 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* **회사를 HackTricks에 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details>

View file

@ -2,103 +2,117 @@
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
- **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details>
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 도난 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 방지하는 것입니다.
그들의 웹사이트를 방문하여 엔진을 **무료로** 시험해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
---
## **기본 정보**
macOS의 **시스템 무결성 보호 (SIP)**는 가장 권한이 있는 사용자도 시스템의 핵심 폴더에 무단으로 변경을 가하는 것을 방지하기 위해 설계된 메커니즘입니다. 이 기능은 보호된 영역에서 파일을 추가, 수정 또는 삭제하는 것과 같은 작업을 제한하여 시스템의 무결성을 유지하는 데 중요한 역할을 합니다. SIP에 의해 보호되는 주요 폴더는 다음과 같습니다:
macOS의 **시스템 무결성 보호(SIP)**는 가장 권한이 높은 사용자조차도 주요 시스템 폴더에 무단으로 변경을 가하는 것을 방지하기 위해 설계된 메커니즘입니다. 이 기능은 보호된 영역에서 파일을 추가, 수정 또는 삭제하는 것과 같은 작업을 제한함으로써 시스템의 무결성을 유지하는 데 중요한 역할을 합니다. SIP에 의해 보호되는 주요 폴더는 다음과 같습니다:
* **/System**
* **/bin**
* **/sbin**
* **/usr**
- **/System**
- **/bin**
- **/sbin**
- **/usr**
SIP의 동작을 규정하는 규칙은 **`/System/Library/Sandbox/rootless.conf`**에 위치한 구성 파일에서 정의됩니다. 이 파일에서 별표 (*)로 접두사가 붙은 경로는 엄격한 SIP 제한의 예외로 표시됩니다.
SIP의 동작을 규정하는 규칙은 **`/System/Library/Sandbox/rootless.conf`**에 위치한 구성 파일에서 정의됩니다. 이 파일에서 별표(\*)로 접두사가 붙은 경로는 엄격한 SIP 제한의 예외로 표시됩니다.
다음은 예시입니다:
아래 예시를 살펴보세요:
```javascript
/usr
* /usr/libexec/cups
* /usr/local
* /usr/share/man
```
코드 조각은 SIP가 일반적으로 **`/usr`** 디렉토리를 보호하지만, 특정 하위 디렉토리 (`/usr/libexec/cups`, `/usr/local`, `/usr/share/man`)는 경로 앞에 별표 (*)가 표시되어 수정이 허용된다는 것을 의미합니다.
스니펫은 SIP가 일반적으로 **`/usr`** 디렉토리를 보호하지만, 특정 하위 디렉토리(``/usr/libexec/cups`, `/usr/local`, `/usr/share/man`)에서는 수정이 허용되며, 이는 해당 경로 앞에 별표(\*)가 표시됨을 나타냅니다.
SIP로 보호되는 디렉토리 파일을 확인하려면 **`ls -lOd`** 명령을 사용하여 **`restricted`** 또는 **`sunlnk`** 플래그의 존재 여부를 확인할 수 있습니다. 예를 들어:
SIP로 보호되는 디렉토리 또는 파일을 확인하려면 **`ls -lOd`** 명령을 사용하여 **`restricted`** 또는 **`sunlnk`** 플래그의 존재를 확인할 수 있습니다. 예를 들어:
```bash
ls -lOd /usr/libexec/cups
drwxr-xr-x 11 root wheel sunlnk 352 May 13 00:29 /usr/libexec/cups
```
이 경우, **`sunlnk`** 플래그는 `/usr/libexec/cups` 디렉토리 자체가 **삭제될 수 없음**을 나타냅니다. 그러나 그 안에 있는 파일은 생성, 수정 또는 삭제될 수 있습니다.
이 경우 **`sunlnk`** 플래그는 `/usr/libexec/cups` 디렉토리 자체가 **삭제될 수 없음**을 나타냅니다. 그러나 그 내의 파일은 생성, 수정 또는 삭제할 수 있습니다.
반면에:
한편:
```bash
ls -lOd /usr/libexec
drwxr-xr-x 338 root wheel restricted 10816 May 13 00:29 /usr/libexec
```
여기서 **`restricted`** 플래그는 `/usr/libexec` 디렉토리가 SIP로 보호되고 있음을 나타냅니다. SIP로 보호된 디렉토리에서는 파일을 생성, 수정 또는 삭제할 수 없습니다.
여기서 **`restricted`** 플래그는 `/usr/libexec` 디렉토리가 SIP로 보호된 것을 나타냅니다. SIP로 보호된 디렉토리에서는 파일을 생성, 수정 또는 삭제할 수 없습니다.
또한, 파일**`com.apple.rootless`** 확장 **속성**이 포함되어 있다면 해당 파일도 **SIP로 보호**됩니다.
또한, 파일**`com.apple.rootless`** 확장 **속성**을 포함하는 경우 해당 파일도 **SIP로 보호**됩니다.
**SIP는 루트 권한으로 수행되는 다른 작업도 제한**합니다. 예를 들어:
**SIP는 또한 다른 루트 작업을 제한**합니다:
* 신뢰할 수 없는 커널 확장을 로드하는 것
* Apple 서명된 프로세스의 작업 포트 가져오기
* 신뢰할 수 없는 커널 확장 기능 로드
* Apple 서명된 프로세스에 대한 task-ports 가져오기
* NVRAM 변수 수정
* 커널 디버깅 허용
옵션은 nvram 변수로 유지되며, 비트 플래그로 표시됩니다(Intel의 경우 `csr-active-config`, ARM의 경우 부팅된 Device Tree에서 `lp-sip0`로 읽힘). XNU 소스 코드의 `csr.sh`에서 플래그를 찾을 수 있습니다:
옵션은 비트플래그로 nvram 변수에 유지됩니다(Intel의 `csr-active-config` 및 ARM의 부팅된 Device Tree에서 `lp-sip0`를 읽습니다). `csr.sh`에서 XNU 소스 코드에서 플래그를 찾을 수 있습니다:
<figure><img src="../../../.gitbook/assets/image (720).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1189).png" alt=""><figcaption></figcaption></figure>
### SIP 상태
다음 명령을 사용하여 시스템에서 SIP가 활성화되었는지 확인할 수 있습니다:
다음 명령어로 시스템에서 SIP가 활성화되어 있는지 확인할 수 있습니다:
```bash
csrutil status
```
SIP를 비활성화해야 하는 경우, 컴퓨터를 복구 모드로 재시작해야 합니다 (시작 중에 Command+R을 누르세요). 그런 다음 다음 명령을 실행하세요:
만약 SIP를 비활성화해야 한다면, 컴퓨터를 복구 모드로 재부팅해야 합니다 (부팅 중에 Command+R을 누름), 그리고 다음 명령어를 실행해야 합니다:
```bash
csrutil disable
```
SIP를 활성화한 상태로 디버깅 보호 기능을 제거하려면 다음을 수행할 수 있습니다:
만약 SIP를 활성화한 채로 디버깅 보호를 제거하고 싶다면 다음을 사용할 수 있습니다:
```bash
csrutil enable --without debug
```
### 기타 제한 사항
### 다른 제한 사항
- **사인되지 않은 커널 확장자**(kext)의 로딩을 금지하여 확인된 확장자만 시스템 커널과 상호 작용하도록 합니다.
- macOS 시스템 프로세스의 **디버깅을 방지**하여 무단 접근 및 수정으로부터 핵심 시스템 구성 요소를 보호합니다.
- dtrace와 같은 **도구가 시스템 프로세스를 검사하는 것을 방해**하여 시스템 운영의 무결성을 더욱 보호합니다.
* **사인되지 않은 커널 익스텐션**(kext)의 로딩을 금지하여 확인된 익스텐션이 시스템 커널과 상호작용하도록 합니다.
* macOS 시스템 프로세스의 **디버깅을 방지**하여 핵심 시스템 구성 요소가 무단 액세스와 수정으로부터 안전하게 보호됩니다.
* **dtrace**와 같은 도구가 시스템 프로세스를 검사하는 것을 금지하여 시스템 작동의 무결성을 더욱 보호합니다.
**[이 발표에서 SIP 정보에 대해 자세히 알아보세요](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship).**
[**이 발표에서 SIP 정보에 대해 자세히 알아보기**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
## SIP 우회
SIP 우회를 통해 공격자는 다음을 수행할 수 있습니다:
SIP 우회는 공격자가 다음을 수행할 수 있게 합니다:
- **사용자 데이터에 접근**: 모든 사용자 계정에서 메일, 메시지 및 Safari 기록과 같은 민감한 사용자 데이터를 읽을 수 있습니다.
- **TCC 우회**: TCC(투명성, 동의 및 제어) 데이터베이스를 직접 조작하여 웹캠, 마이크 및 기타 리소스에 무단 액세스 권한을 부여할 수 있습니다.
- **지속성 확보**: SIP로 보호된 위치에 악성 소프트웨어를 배치하여 루트 권한으로도 제거할 수 없도록 만듭니다. 이는 악성 소프트웨어 제거 도구(MRT)를 조작할 수 있는 잠재력도 포함됩니다.
- **커널 확장자 로딩**: 추가적인 보호 기능이 있지만, SIP 우회는 사인되지 않은 커널 확장자를 로딩하는 과정을 단순화합니다.
* **사용자 데이터 액세스**: 모든 사용자 계정에서 메일, 메시지 및 Safari 기록과 같은 민감한 사용자 데이터를 읽을 수 있습니다.
* **TCC 우회**: TCC(투명성, 동의 및 제어) 데이터베이스를 직접 조작하여 웹캠, 마이크 및 기타 리소스에 무단 액세스를 허용할 수 있습니다.
* **영속성 확립**: SIP로 보호된 위치에 악성 코드를 배치하여 루트 권한으로도 제거할 수 없게 만듭니다. 이는 악성 코드 제거 도구(MRT)를 변조할 수 있는 잠재적인 가능성을 포함합니다.
* **커널 익스텐션 로드**: 추가적인 보호장치가 있지만 SIP 우회는 사인되지 않은 커널 익스텐션을 로드하는 과정을 간단화합니다.
### 설치 프로그램 패키지
### 설치 프로그램
**Apple의 인증서로 서명된 설치 프로그램 패키지**는 SIP의 보호 기능을 우회할 수 있습니다. 따라서 표준 개발자가 서명한 패키지도 SIP로 보호된 디렉터리를 수정하려고 시도하면 차단됩니다.
**Apple의 인증서로 서명된 설치 프로그램**은 이러한 보호장치를 우회할 수 있습니다. 이는 표준 개발자가 서명한 패키지라도 SIP로 보호된 디렉토리를 수정하려고 시도하면 차단됩니다.
### SIP 파일이 존재하지 않을 경우
### 존재하지 않는 SIP 파일
잠재적인 루프홀은 **`rootless.conf`에 지정된 파일이 현재 존재하지 않는 경우** 해당 파일을 생성할 수 있다는 것입니다. 악성 소프트웨어는 시스템에 **지속성을 확립**하기 위해 이를 악용할 수 있습니다. 예를 들어, 악성 프로그램`rootless.conf`에는 나열되어 있지만 실제로는 존재하지 않는 `/System/Library/LaunchDaemons`에 .plist 파일을 생성할 수 있습니다.
잠재적인 구멍 중 하나는 **`rootless.conf`**에 파일이 지정되어 있지만 현재 존재하지 않는 경우, 해당 파일을 생성할 수 있습니다. 악성 코드는 시스템에 **영속성을 확립**하기 위해 이를 악용할 수 있습니다. 예를 들어, 악성 프로그램 `/System/Library/LaunchDaemons`에 .plist 파일을 생성할 수 있습니다. 이 파일이 `rootless.conf`에 나열되어 있지만 존재하지 않은 경우입니다.
### com.apple.rootless.install.heritable
@ -108,80 +122,75 @@ SIP 우회를 통해 공격자는 다음을 수행할 수 있습니다:
#### Shrootless
[**이 블로그 게시물의 연구원들**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/)은 macOS의 시스템 무결성 보호(SIP) 메커니즘인 'Shrootless' 취약점을 발견했습니다. 이 취약점은 **`system_installd`** 데몬을 중심으로 합니다. 이 데몬은 **`com.apple.rootless.install.heritable`**라는 권한을 가지고 있으며, 이를 통해 자식 프로세스 중 어느 것이든 SIP의 파일 시스템 제한을 우회할 수 있습니다.
[**이 블로그 게시물의 연구원들**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/)은 macOS의 시스템 무결성 보호(SIP) 메커니즘에서 'Shrootless' 취약점이라고 불리는 취약점을 발견했습니다. 이 취약점은 **`system_installd`** 데몬을 중심으로 하며, 이 데몬은 **`com.apple.rootless.install.heritable`** 권한을 가지고 있어 자식 프로세스 중 어느 것이든 SIP의 파일 시스템 제한을 우회할 수 있습니다.
**`system_installd`** 데몬은 **Apple**에서 서명한 패키지(.pkg 파일)를 설치합니다.
**`system_installd`** 데몬은 **Apple**에서 서명된 패키지를 설치합니다.
연구원들은 Apple에서 서명한 패키지(.pkg 파일)를 설치하는 동안, 패키지에 포함된 **후속 설치 스크립트**를 **`system_installd`**가 실행한다는 것을 발견했습니다. 이 스크립트는 기본 쉘인 **`zsh`**에 의해 실행되며, 비대화식 모드에서도 **`/etc/zshenv`** 파일에서 명령을 자동으로 실행합니다. 이 동작은 공격자에 의해 악용될 수 있습니다. 악성 `/etc/zshenv` 파일을 생성하고 **`system_installd``zsh`를 호출**할 때까지 기다린 다음, 장치에서 임의의 작업을 수행할 수 있습니다.
연구원들은 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` 파일이 트리거되어 실제로 루트로 상승됩니다.
또한 **`/etc/zshenv`를 SIP 우회뿐만 아니라 일반적인 공격 기술로 사용할 수 있다는 것**이 발견되었습니다. 각 사용자 프로필에는 루트 권한이 필요하지 않은 `~/.zshenv` 파일이 있으며, 이 파일은 `zsh`가 시작될 때마다 트리거되거나 권한 상승 메커니즘으로 사용될 수 있습니다. 관리자 사용자가 `sudo -s` 또는 `sudo <command>`를 사용하여 루트로 상승하`~/.zshenv` 파일이 트리거되어 사실상 루트로 상승합니다.
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
[**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)에서는 동일한 **`system_installd`** 프로세스가 여전히 악용될 수 있다는 것이 발견되었습니다. 이는 **`/tmp` 내부에 SIP로 보호된 임의의 이름을 가진 폴더에 후속 설치 스크립트를 넣는 것**이었습니다. 문제는 **`/tmp` 자체가 SIP로 보호되지 않기 때문에**, 가상 이미지를 마운트한 다음 **설치 프로그램**이 거기에 **후속 설치 스크립트**를 넣고 가상 이미지를 **언마운트**하고 **모든 폴더를 다시 생성**하고 **페이로드**가 포함된 **후속 설치 스크립트**를 추가할 수 있다는 것입니다.
[**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)에서는 동일한 **`system_installd`** 프로세스가 여전히 악용될 수 있음이 발견되었습니다. 이는 **`post-install` 스크립트를 `/tmp` 내 SIP로 보호된 임의의 이름의 폴더에 넣었기 때문**입니다. **`/tmp` 자체는 SIP로 보호되지 않기 때문에** 가상 이미지를 마운트하고, 그런 다음 **installer**가 거기에 **post-install 스크립트를 넣고**, 가상 이미지를 언마운트하고, 모든 **폴더를 다시 생성**하고, **실행할 payload가 포함된 post-installation 스크립트를 추가**할 수 있었습니다.
#### [fsck\_cs 유틸리티](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
**`fsck_cs`**가 **심볼릭 링크**를 따를 수 있는 능력 때문에 중요한 파일을 손상시키는 오류가 발견되었습니다. 구체적으로, 공격자는 _`/dev/diskX`_에서 파일 `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`로의 링크를 만들었습니다. _`/dev/diskX`_에서 **`fsck_cs`**를 실행하면 `Info.plist`가 손상됩니다. 이 파일의 무결성은 운영 체제의 SIP(System Integrity Protection)에 매우 중요하며, 커널 확장자의 로딩을 제어합니다. 손상된 후에는 SIP의 커널 제외 기능이 손상됩니다.
이 취약점을 악용하기 위한 명령어는 다음과 같습니다:
**`fsck_cs`**가 **심볼릭 링크**를 따르는 능력으로 인해 중요한 파일을 손상시키도록 속이는 취약점이 식별되었습니다. 구체적으로, 공격자는 _`/dev/diskX`_에서 파일 `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`로의 링크를 작성했습니다. _`/dev/diskX`_에서 **`fsck_cs`**를 실행하면 `Info.plist`가 손상됩니다. 이 파일의 무결성은 커널 익스텐션의 로딩을 제어하는 SIP(System Integrity Protection)에 중요합니다. 한 번 손상되면 SIP의 커널 제외 관리 능력이 손상됩니다.
```bash
ln -s /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist /dev/diskX
fsck_cs /dev/diskX 1>&-
touch /Library/Extensions/
reboot
```
이 취약점의 악용은 심각한 영향을 가집니다. 일반적으로 커널 확장의 권한을 관리하는 `Info.plist` 파일이 효과가 없어집니다. 이는 `AppleHWAccess.kext`와 같은 특정 확장을 블랙리스트에 추가할 수 없음을 의미합니다. 따라서 SIP의 제어 메커니즘이 정상적으로 작동하지 않으면 이 확장이 로드되어 시스템의 RAM에 무단으로 읽기 및 쓰기 액세스 권한을 부여할 수 있습니다.
이 취약점을 악용하면 심각한 결과가 초래됩니다. 일반적으로 커널 확장 프로그램의 권한을 관리하는 `Info.plist` 파일이 효과가 없어집니다. 이는 `AppleHWAccess.kext`와 같은 특정 확장 프로그램을 블랙리스트에 추가할 수 없게 되는 것을 포함합니다. 결과적으로 SIP의 제어 메커니즘이 제대로 작동하지 않으면 이 확장 프로그램이 로드되어 시스템 RAM에 대한 무단 읽기 및 쓰기 액세스가 부여될 수 있습니다.
#### [SIP 보호 폴더 위에 마운트](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
#### [SIP 보호된 폴더 위에 마운트](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
**SIP 보호된 폴더 위에 새 파일 시스템을 마운트하여 보호를 우회**하는 것이 가능했습니다.
**SIP 보호 폴더 위에 새 파일 시스템을 마운트하여 보호를 우회**하는 것이 가능했습니다.
```bash
mkdir evil
# Add contento to the folder
hdiutil create -srcfolder evil evil.dmg
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg
```
#### [Upgrader 우회 (2016)](https://objective-see.org/blog/blog\_0x14.html)
#### [업그레이드 우회 (2016)](https://objective-see.org/blog/blog\_0x14.html)
시스템은 `Install macOS Sierra.app`에 포함된 설치 디스크 이미지를 이용하여 OS를 업그레이드하기 위해 `bless` 유틸리티를 사용하여 부팅됩니다. 사용된 명령은 다음과 같습니다:
시스템은 `Install macOS Sierra.app`의 임베디드 설치 디스크 이미지에서 부팅하도록 설정되어 있어 OS를 업그레이드하기 위해 `bless` 유틸리티를 활용합니다. 사용된 명령어는 다음과 같습니다:
```bash
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
```
이 프로세스의 보안은 공격자가 부팅하기 전에 업그레이드 이미지 (`InstallESD.dmg`)를 변경하는 경우 침해될 수 있습니다. 이 전략은 악성 버전 (`libBaseIA.dylib`)으로 동적 로더 (dyld)를 대체하는 것을 포함합니다. 이 대체로 인해 설치 프로그램이 시작될 때 공격자의 코드가 실행됩니다.
해커가 부팅하기 전에 업그레이드 이미지(`InstallESD.dmg`)를 변경하면 이 프로세스의 보안이 침해될 수 있습니다. 이 전략은 악성 버전(`libBaseIA.dylib`)의 동적 로더(dyld)로 동적 로더(dyld)를 대체하는 것을 포함합니다. 이 교체로 인해 설치 프로그램이 시작될 때 공격자의 코드가 실행됩니다.
공격자의 코드는 업그레이드 프로세스 중에 제어를 얻으며, 설치 프로그램에 대한 시스템의 신뢰를 악용합니다. 공격은 `InstallESD.dmg` 이미지를 메소드 스위즐링을 통해 변경함으로써 진행됩니다. 특히 `extractBootBits` 메소드를 대상으로 합니다. 이를 통해 디스크 이미지가 사용되기 전에 악성 코드를 주입할 수 있습니다.
또한, `InstallESD.dmg` 내에는 업그레이드 코드의 루트 파일 시스템으로 작동하는 `BaseSystem.dmg`가 있습니다. 이에 동적 라이브러리를 주입함으로써 악성 코드가 OS 수준 파일을 변경할 수 있는 프로세스 내에서 작동할 수 있습니다. 이는 시스템 침해 가능성을 크게 증가시킵니다.
공격자의 코드는 업그레이드 프로세스 중에 제어를 얻으며, 시스템이 설치 프로그램을 신뢰하는 것을 악용합니다. 공격은 `InstallESD.dmg` 이미지를 메소드 스위즐링을 통해 변경하여 진행되며, 특히 `extractBootBits` 메소드를 대상으로 합니다. 이를 통해 디스크 이미지가 사용되기 전에 악성 코드를 삽입할 수 있습니다.
또한 `InstallESD.dmg` 내에는 업그레이드 코드의 루트 파일 시스템으로 작동하는 `BaseSystem.dmg`가 있습니다. 이에 동적 라이브러리를 삽입하면 악성 코드가 OS 수준 파일을 변경할 수 있는 프로세스 내에서 작동할 수 있어 시스템 침해 가능성이 크게 증가합니다.
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
[**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk)에서 이야기하는 것처럼 **`systemmigrationd`** (SIP 우회 가능)가 **bash**와 **perl** 스크립트를 실행하는 것을 보여줍니다. 이는 env 변수 **`BASH_ENV`**와 **`PERL5OPT`**를 통해 악용될 수 있습니다.
[**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk)에서 이루어진 이 발표에서는 SIP를 우회할 수 있는 **`systemmigrationd`**가 **bash****perl** 스크립트를 실행하는 것을 보여줍니다. 이는 환경 변수 **`BASH_ENV`** 및 **`PERL5OPT`**를 통해 악용될 수 있습니다.
### **com.apple.rootless.install**
{% hint style="danger" %}
**`com.apple.rootless.install`** 권한은 SIP 우회를 허용합니다.
**`com.apple.rootless.install`** 권한은 SIP를 우회할 수 있게 합니다.
{% endhint %}
`com.apple.rootless.install` 권한은 macOS에서 System Integrity Protection (SIP) 우회를 허용하는 것으로 알려져 있습니다. 이는 특히 [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/)와 관련하여 언급되었습니다.
`com.apple.rootless.install` 권한은 macOS에서 시스템 무결성 보호(SIP)를 우회하는 데 사용됩니다. 이는 특히 [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/)와 관련하여 주목받았습니다.
특정 경우에는 `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc`에 위치한 시스템 XPC 서비스가 이 권한을 가지고 있습니다. 이로 인해 관련 프로세스는 SIP 제약을 우회할 수 있습니다. 또한, 이 서비스는 보안 조치를 강제하지 않고 파일을 이동할 수 있는 메소드를 제공합니다.
특정 경우에는 `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc`에 위치한 시스템 XPC 서비스가 이 권한을 가지고 있습니다. 이로 인해 관련 프로세스가 SIP 제약을 우회할 수 있습니다. 또한 이 서비스는 보안 조치를 적용하지 않고 파일을 이동할 수 있는 방법을 제공합니다.
## 봉인된 시스템 스냅샷
## Sealed System Snapshots
봉인된 시스템 스냅샷은 **macOS Big Sur (macOS 11)**에서 Apple에 의해 도입된 기능으로, **시스템 무결성 보호 (SIP)** 메커니즘의 일부로 추가적인 보안 및 시스템 안정성 계층을 제공합니다. 이는 본질적으로 시스템 볼륨의 읽기 전용 버전입니다.
Sealed System Snapshots는 Apple이 **macOS Big Sur (macOS 11)**에서 도입한 기능으로, **System Integrity Protection (SIP)** 메커니즘의 일부로 추가적인 보안 및 시스템 안정성을 제공합니다. 이는 사실상 시스템 볼륨의 읽기 전용 버전입니다.
다음은 더 자세한 내용입니다:
자세한 내용은 다음과 같습니다:
1. **불변 시스템**: 봉인된 시스템 스냅샷은 macOS 시스템 볼륨을 "불변"하게 만들어 시스템을 수정할 수 없게 합니다. 이는 보안이나 시스템 안정성을 저해할 수 있는 무단 또는 우연한 변경을 방지합니다.
2. **시스템 소프트웨어 업데이트**: macOS 업데이트나 업그레이드를 설치할 때 macOS는 새로운 시스템 스냅샷을 생성합니다. macOS 시작 볼륨은 이 새로운 스냅샷으로 전환하기 위해 **APFS (Apple File System)**를 사용합니다. 업데이트 적용 프로세스 전체가 이전 스냅샷으로 되돌릴 수 있기 때문에 업데이트 과정이 더 안전하고 신뢰할 수 있어집니다.
3. **데이터 분리**: macOS Catalina에서 소개된 데이터 및 시스템 볼륨 분리 개념과 함께, 봉인된 시스템 스냅샷 기능은 모든 데이터와 설정이 별도의 "**데이터**" 볼륨에 저장되도록 합니다. 이 분리로 인해 데이터가 시스템과 독립되어 시스템 업데이트 프로세스가 간소화되고 시스템 보안이 강화됩니다.
1. **불변 시스템**: Sealed System Snapshots는 macOS 시스템 볼륨을 "불변"하게 만들어 변경할 수 없도록 합니다. 이는 보안이나 시스템 안정성을 저해할 수 있는 무단 또는 우발적인 시스템 변경을 방지합니다.
2. **시스템 소프트웨어 업데이트**: macOS 업데이트 또는 업그레이드를 설치할 때마다 macOS는 새로운 시스템 스냅샷을 생성합니다. macOS 시작 볼륨은 이 새로운 스냅샷으로 전환하기 위해 **APFS (Apple File System)**를 사용합니다. 업데이트 적용 프로세스 전체가 이전 스냅샷으로 롤백할 수 있기 때문에 업데이트 과정이 더 안전하고 신뢰할 수 있습니다.
3. **데이터 분리**: macOS Catalina에서 도입된 데이터 및 시스템 볼륨 분리 개념과 함께 Sealed System Snapshot 기능은 모든 데이터와 설정이 별도의 "**Data**" 볼륨에 저장되도록 보장합니다. 이 분리는 데이터를 시스템으로부터 독립시키므로 시스템 업데이트 프로세스를 간소화하고 시스템 보안을 강화합니다.
이러한 스냅샷은 macOS에서 자동으로 관리되며 APFS의 공간 공유 기능 덕분에 디스크에 추가 공간을 차지하지 않습니다. 또한, 이러한 스냅샷은 전체 시스템의 사용자 접근 가능한 백업인 **Time Machine 스냅샷**과는 다릅니다.
이러한 스냅샷은 macOS에 의해 자동으로 관리되며 APFS의 공간 공유 기능 덕분에 디스크에 추가 공간을 차지하지 않습니다. 또한 이러한 스냅샷은 전체 시스템의 사용자 접근 가능한 백업인 **타임 머신 스냅샷**과는 다릅니다.
### 스냅샷 확인
@ -224,30 +233,42 @@ Sealed System Snapshots는 Apple이 **macOS Big Sur (macOS 11)**에서 도입한
| FileVault: Yes (Unlocked)
</code></pre>
이전 출력에서 **사용자 접근 가능 위치**가 `/System/Volumes/Data` 아래에 마운트되어 있는 것을 볼 수 있습니다.
이전 출력에서 **사용자 접근 가능 위치**가 `/System/Volumes/Data` 아래에 마운트되어 있는 것을 볼 수 있습니다.
또한, **macOS 시스템 볼륨 스냅샷**은 `/`에 마운트되어 있으며 **봉인**되어 있습니다 (OS에 의해 암호화 서명됨). 따라서 SIP가 우회되고 수정되면 **OS가 더 이상 부팅되지 않습니다**.
또한, **macOS 시스템 볼륨 스냅샷**은 `/`에 마운트되어 있으며 **봉인**되어 있습니다(OS에 의해 암호화 서명됨). 따라서 SIP가 우회되고 수정되면 **OS가 더 이상 부팅되지 않습니다**.
봉인이 활성화되었는지 확인하려면 다음을 실행하면 됩니다:
봉인이 활성화되어 있는지 **확인**하려면 다음을 실행할 수 있습니다:
```bash
csrutil authenticated-root status
Authenticated Root status: enabled
```
또한, 스냅샷 디스크는 **읽기 전용**으로 마운트됩니다:
```
게다가, 스냅샷 디스크는 **읽기 전용**으로도 마운트됩니다:
```bash
mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
```
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취와 랜섬웨어 공격을 막는 것입니다.
그들의 웹사이트를 방문하여 **무료**로 엔진을 시도해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배우세요!</summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
* **HackTricks에 귀사를 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>

View file

@ -1,63 +1,65 @@
# SOME - 동일 출처 메서드 실행
# SOME - Same Origin Method Execution
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스그**](https://peass.creator-spring.com)를 얻으세요.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **해킹 트릭을 공유하면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 또는 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* [**공식 PEASS & HackTricks 스그**](https://peass.creator-spring.com)를 얻으세요
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details>
## 동일 출처 메서드 실행
### [WhiteIntel](https://whiteintel.io)
일부 페이지에서는 제한된 자바스크립트를 실행할 수 있는 경우가 있습니다. 예를 들어, **실행될 콜백 값을 제어**할 수 있는 경우입니다(./#javascript-function).
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
이러한 경우에는 **DOM에 액세스하여** 해당 위치에서 찾을 수 있는 **민감한 동작**(예: 버튼 클릭)을 호출하는 것이 가장 좋습니다. 그러나 일반적으로 이러한 취약점은 **DOM에 흥미로운 내용이 없는 작은 엔드포인트에서 발견**됩니다.
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 통해 제공되는 검색 엔진으로, 회사나 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다.
이러한 시나리오에서는 이 공격이 매우 유용할 것입니다. 왜냐하면 이 공격의 목표는 **동일 도메인의 다른 페이지에서 DOM 내에서 제한된 JS 실행을 악용**하는 것입니다.
WhiteIntel의 주요 목표는 정보 도난 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
그들의 웹사이트를 확인하고 무료로 엔진을 시험해볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
---
## Same Origin Method Execution
가끔 페이지에서 일부 제한된 자바스크립트를 실행할 수 있는 경우가 있습니다. 예를 들어, **실행될 콜백 값을 제어할 수 있는 경우**입니다.
이러한 경우에는 **DOM에 액세스하여** 거기에서 발견할 수 있는 민감한 작업(예: 버튼 클릭)을 호출하는 것이 가장 좋은 일 중 하나입니다. 그러나 보통 **DOM에 흥미로운 것이 없는 작은 엔드포인트**에서 이 취약점을 찾을 수 있습니다.
이러한 시나리오에서는 이 공격이 매우 유용할 것입니다. 왜냐하면 이 공격의 목표는 **동일한 도메인의 다른 페이지에서 DOM 내의 제한된 JS 실행을 악용**하여 매우 흥미로운 작업을 수행할 수 있도록 하는 것입니다.
기본적으로 공격 흐름은 다음과 같습니다:
* **악용할 수 있는 콜백을 찾습니다**(잠재적으로 \[\w\\.\_]로 제한됨).
* 제한이 없고 임의의 JS를 실행할 수 있는 경우 일반적인 XSS로 이를 악용할 수 있습니다.
* **피해자가 공격자가 제어하는 페이지를 엽니다**.
* **페이지는 새 창에서 자체를 엽니다**(새 창에는 초기 페이지를 참조하는 **`opener`** 객체가 있습니다).
* **초기 페이지**는 **DOM이 위치한 페이지**를 로드합니다.
* **두 번째 페이지**는 **콜백을 악용하는 취약한 페이지를 로드**하고 **`opener`** 객체를 사용하여 **초기 페이지에서 일부 동작에 액세스하고 실행**합니다(이제 흥미로운 DOM이 포함된 상태입니다).
* **악용할 수 있는 콜백을 찾으세요** (잠재적으로 \[\w\\.\_]로 제한될 수 있음).
* 제한이 없고 어떤 JS든 실행할 수 있는 경우, 이를 일반적인 XSS로 악용할 수 있습니다.
* **피해자에게** **공격자가 제어하는 페이지를 열도록** 하세요
* **페이지는** **다른 창**에서 **자체를 열게** 됩니다(새 창은 초기 창을 참조하는 **`opener`** 객체를 가집니다).
* **초기 페이지**는 **흥미로운 DOM이 있는 페이지**를 로드합니다.
* **두 번째 페이지**는 **콜백을 악용**하고 **`opener`** 객체를 사용하여 **초기 페이지에서 어떤 작업을 액세스하고 실행**합니다(이제 흥미로운 DOM이 포함된 초기 페이지).
{% hint style="danger" %}
초기 페이지가 두 번째 페이지를 생성한 후에 새 URL에 액세스하더라도 **두 번째 페이지의 `opener` 객체는 새 DOM에서 첫 번째 페이지를 유효한 참조로 유지**됩니다.
두 번째 페이지가 두 번째 페이지를 생성한 후에 새 URL에 액세스하더라도, **두 번째 페이지의 `opener` 객체는 새 DOM에서 첫 번째 페이지를 여전히 유효한 참조로 유지**합니다.
또한 두 번째 페이지가 opener 객체를 사용할 수 있도록 하려면 **두 페이지 모두 동일 출처에 있어야 합니다**. 이러한 취약점을 악용하려면 동일 출처에서 **XSS 유형**을 찾아야 합니다.
또한 두 번째 페이지가 opener 객체를 사용할 수 있도록 하려면 **두 페이지가 동일한 출처에 있어야**합니다. 이것이 이 취약점을 악용하기 위해 **동일 출처의 XSS를 찾아야 하는 이유**입니다.
{% endhint %}
### Exploitation
* 이 양식을 사용하여 이러한 유형의 취약점을 악용하는 **PoC를 생성**할 수 있습니다: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
* 클릭을 사용하여 HTML 요소에 대한 DOM 경로를 찾으려면 이 브라우저 확장 프로그램을 사용할 수 있습니다: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
* 이 양식을 사용하여 이 유형의 취약점을 악용하는 **PoC를 생성**할 수 있습니다: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
* 클릭으로 HTML 요소에 대한 DOM 경로를 찾기 위해 이 브라우저 확장 프로그램을 사용할 수 있습니다: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
### 예제
### Example
* 취약한 예제를 [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)에서 찾을 수 있습니다.
* 이 예제에서 서버는 **콜백 매개변수의 내용**을 기반으로 **자바스크립트 코드를 생성**하고 **HTML에 추가**합니다: `<script>opener.{callbacl_content}</script>`. 이 예에서는 명시적으로 `opener`의 사용을 표시할 필요가 없습니다.
* [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)에서 취약한 예제를 찾을 수 있습니다.
* 이 예제에서 서버는 **콜백 매개변수의 내용에 따라 javascript 코드를 생성**하고 **HTML에 추가**합니다: `<script>opener.{callbacl_content}</script>` . 이 예에서는 명시적으로 `opener`의 사용을 표시할 필요가 없습니다.
* 또한 이 CTF writeup을 확인하세요: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
## 참고 자료
## References
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details>

View file

@ -1,43 +1,58 @@
# 무결성 수준
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**** **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
- **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
- **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>
### [WhiteIntel](https://whiteintel.io)
# 무결성 수준
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
Windows Vista 및 이후 버전에서 모든 보호된 항목은 **무결성 수준** 태그와 함께 제공됩니다. 이 설정은 대부분 파일 및 레지스트리 키에 "중간" 무결성 수준을 할당합니다. 단, Internet Explorer 7이 낮은 무결성 수준에서 쓸 수 있는 특정 폴더 및 파일을 제외하고는 말입니다. 기본 동작은 표준 사용자에 의해 시작된 프로세스가 중간 무결성 수준을 갖도록 하는 것이고, 서비스는 일반적으로 시스템 무결성 수준에서 작동합니다. 루트 디렉토리는 높은 무결성 레이블로 보호됩니다.
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, **무료** 기능을 제공하여 회사나 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 확인할 수 있습니다.
중요한 규칙 중 하나는 객체를 해당 객체의 수준보다 낮은 무결성 수준을 가진 프로세스가 수정할 수 없다는 것입니다. 무결성 수준은 다음과 같습니다:
WhiteIntel의 주요 목표는 정보 도난 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
- **Untrusted**: 이 수준은 익명 로그인을 가진 프로세스를 위한 것입니다. %%%예시: Chrome%%%
- **Low**: 주로 인터넷 상호 작용에 사용되며, 특히 Internet Explorer의 보호 모드에서 관련 파일 및 프로세스, 그리고 **임시 인터넷 폴더**와 같은 특정 폴더에 영향을 줍니다. 낮은 무결성 프로세스는 레지스트리 쓰기 액세스 및 제한된 사용자 프로필 쓰기 액세스를 포함한 중요한 제한 사항을 겪습니다.
- **Medium**: 대부분의 활동에 대한 기본 수준으로, 표준 사용자와 특정 무결성 수준이 없는 객체에 할당됩니다. 관리자 그룹의 구성원도 기본적으로 이 수준에서 작동합니다.
- **High**: 관리자를 위해 예약된 수준으로, 높은 수준 자체를 포함하여 낮은 무결성 수준의 객체를 수정할 수 있게 합니다.
- **System**: Windows 커널 및 핵심 서비스를 위한 가장 높은 작동 수준으로, 심지어 관리자도 접근할 수 없어 중요한 시스템 기능을 보호합니다.
- **Installer**: 다른 모든 객체를 제거할 수 있도록 하는 독특한 수준입니다.
그들의 웹사이트를 방문하여 엔진을 **무료로** 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
---
## 무결성 수준
Windows Vista 이상 버전에서 모든 보호된 항목에는 **무결성 수준** 태그가 있습니다. 이 설정은 대부분 파일과 레지스트리 키에 "중간" 무결성 수준을 할당하며, 특정 폴더 및 파일을 제외하고 Internet Explorer 7이 낮은 무결성 수준에서 쓸 수 있는 파일이나 레지스트리 키에 대해 낮은 무결성 수준을 할당합니다. 기본 동작은 일반 사용자에 의해 시작된 프로세스가 중간 무결성 수준을 갖도록 하는 것이며, 서비스는 일반적으로 시스템 무결성 수준에서 작동합니다. 고 무결성 레이블은 루트 디렉토리를 보호합니다.
중요한 규칙은 객체가 해당 객체의 수준보다 낮은 무결성 수준을 갖는 프로세스에 의해 수정될 수 없다는 것입니다. 무결성 수준은 다음과 같습니다:
- **신뢰되지 않는**: 익명 로그인을 사용하는 프로세스를 위한 수준입니다. %%%예시: Chrome%%%
- **낮음**: 주로 인터넷 상호작용을 위한 것으로, 특히 Internet Explorer의 보호 모드에서 관련 파일 및 프로세스에 영향을 미치며, **임시 인터넷 폴더**와 같은 특정 폴더에 영향을 줍니다. 낮은 무결성 프로세스는 레지스트리 쓰기 액세스가 없고 사용자 프로필 쓰기 액세스가 제한되는 등 중요한 제한을 받습니다.
- **중간**: 대부분의 활동에 대한 기본 수준으로, 특정 무결성 수준이 없는 일반 사용자 및 객체에 할당됩니다. 관리자 그룹의 구성원조차 기본적으로 이 수준에서 작동합니다.
- **높음**: 관리자를 위해 예약되어 있으며, 높은 수준 자체를 포함하여 낮은 무결성 수준의 객체를 수정할 수 있게 합니다.
- **시스템**: Windows 커널 및 핵심 서비스를 위한 최고 운영 수준으로, 심지어 관리자도 접근할 수 없어 중요한 시스템 기능을 보호합니다.
- **설치 프로그램**: 다른 모든 수준보다 높은 고유한 수준으로, 이 수준의 객체는 다른 모든 객체를 제거할 수 있게 합니다.
프로세스의 무결성 수준은 **Sysinternals**의 **Process Explorer**를 사용하여 프로세스의 **속성**에 액세스하고 "**보안**" 탭을 확인하여 얻을 수 있습니다:
![](<../../.gitbook/assets/image (318).png>)
![](<../../.gitbook/assets/image (821).png>)
`whoami /groups`를 사용하여 **현재 무결성 수준**을 확인할 수도 있습니다.
또한 `whoami /groups`를 사용하여 **현재 무결성 수준**을 확인할 수 있습니다.
![](<../../.gitbook/assets/image (319).png>)
![](<../../.gitbook/assets/image (322).png>)
## 파일 시스템의 무결성 수준
### 파일 시스템의 무결성 수준
파일 시스템 내부의 객체는 **최소 무결성 수준 요구 사항**을 필요로 할 수 있으며, 프로세스가 이 무결성 프로세스를 갖지 않으면 해당 객체와 상호 작용할 수 없습니다.\
예를 들어, 일반 사용자 콘솔에서 **일반 파일을 생성하고 권한을 확인**해 보겠습니다:
파일 시스템 내의 객체는 **최소 무결성 수준 요구 사항**이 있을 수 있으며, 프로세스가 이 무결성 프로세스를 갖지 않으면 상호 작용할 수 없습니다.\
예를 들어, **일반 사용자 콘솔에서 일반 파일을 만들고 권한을 확인**해 봅시다:
```
echo asd >asd.txt
icacls asd.txt
@ -48,7 +63,7 @@ NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
```
이제 파일에 최소 **높은** 무결성 수준을 할당해 보겠습니다. 이 작업은 **관리자 권한으로 실행되는 콘솔**에서 수행되어야 합니다. 일반 콘솔은 중간 무결성 수준에서 실행되므로 객체에 높은 무결성 수준을 할당할 수 없습니다.
이제 파일에 **높은** 최소 무결성 수준을 할당합시다. 이 작업은 **관리자 권한으로 실행되는 콘솔**에서 수행되어야 합니다. 일반 콘솔은 중간 무결성 수준에서 실행되므로 객체에 **높은** 무결성 수준을 할당할 수 없습니다:
```
icacls asd.txt /setintegritylevel(oi)(ci) High
processed file: asd.txt
@ -63,7 +78,7 @@ NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Mandatory Label\High Mandatory Level:(NW)
```
여기서 흥미로운 점이 나타납니다. 사용자 `DESKTOP-IDJHTKP\user`가 파일에 대해 **전체 권한**을 가지고 있음을 알 수 있습니다 (실제로 이 파일을 생성한 사용자입니다). 그러나 최소 무결성 수준이 구현되어 있기 때문에 그는 더 이상 파일을 수정할 수 없습니다. 단, 높은 무결성 수준에서 실행 중인 경우에만 파일을 읽을 수 있습니다.
이곳에서 흥미로운 점이 나타납니다. 사용자 `DESKTOP-IDJHTKP\user`가 파일에 대해 **전체 권한**을 가지고 있음을 알 수 있습니다 (실제로 이 사용자가 파일을 생성한 사용자였습니다). 그러나 최소 무결성 수준이 구현되어 있기 때문에 더 이상 파일을 수정할 수 없을 것입니다. 높은 무결성 수준에서 실행 중이 아닌 한 (참고로 파일을 읽을 수는 있습니다):
```
echo 1234 > asd.txt
Access is denied.
@ -73,12 +88,12 @@ C:\Users\Public\asd.txt
Access is denied.
```
{% hint style="info" %}
**따라서 파일이 최소 무결성 수준을 가질 때 해당 파일을 수정하려면 해당 무결성 수준 이상으로 실행해야 합니다.**
**따라서 파일이 최소 무결성 수준을 갖고 있을 때 해당 파일을 수정하려면 적어도 해당 무결성 수준에서 실행 중이어야 합니다.**
{% endhint %}
## 이진 파일의 무결성 수준
### 이진 파일의 무결성 수준
나는 `cmd.exe``C:\Windows\System32\cmd-low.exe`로 복사하고 **관리자 콘솔에서 낮은 무결성 수준으로 설정했습니다:**
나는 `cmd.exe`의 사본을 `C:\Windows\System32\cmd-low.exe`로 만들었고 **관리자 콘솔에서 낮은 무결성 수준으로 설정했습니다:**
```
icacls C:\Windows\System32\cmd-low.exe
C:\Windows\System32\cmd-low.exe NT AUTHORITY\SYSTEM:(I)(F)
@ -88,29 +103,42 @@ APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APP PACKAGES:(I)(RX)
Mandatory Label\Low Mandatory Level:(NW)
```
이제 `cmd-low.exe`를 실행하면 **중간 수준 대신 낮은 무결성 수준에서 실행**됩니다:
이제 `cmd-low.exe`를 실행하면 **낮은 무결성 수준**에서 실행됩니다. 대신에 중간 수준에서:
![](<../../.gitbook/assets/image (320).png>)
![](<../../.gitbook/assets/image (310).png>)
궁금한 사람들을 위해, 이진 파일에 높은 무결성 수준을 할당하면 (`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`), 자동으로 높은 무결성 수준에서 실행되지 않습니다 (기본적으로 중간 무결성 수준에서 호출하는 경우 중간 무결성 수준에서 실행됩니다).
궁금한 사람들을 위해, 이진 파일에 높은 무결성 수준을 할당하면 (`icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high`), 자동으로 높은 무결성 수준에서 실행되지 않습니다 (기본적으로 중간 무결성 수준에서 호출하 중간 무결성 수준에서 실행됩니다).
## 프로세스의 무결성 수준
### 프로세스의 무결성 수준
모든 파일과 폴더가 최소한의 무결성 수준을 갖지는 않지만, **모든 프로세스는 무결성 수준에서 실행**됩니다. 파일 시스템에서 발생한 것과 유사하게, **프로세스가 다른 프로세스 내부에 쓰기를 하려면 적어도 동일한 무결성 수준을 가져야 합니다**. 즉, 낮은 무결성 수준을 갖는 프로세스는 중간 무결성 수준을 갖는 프로세스에 대한 전체 액세스를 가진 핸들을 열 수 없습니다.
모든 파일과 폴더가 최소 무결성 수준을 갖지는 않지만, **모든 프로세스는 무결성 수준에서 실행됩니다**. 파일 시스템에서 발생한 것과 유사하게, **프로세스가 다른 프로세스 내부에 쓰기를 원할 때는 적어도 동일한 무결성 수준을 가져야 합니다**. 이는 낮은 무결성 수준을 갖는 프로세스가 중간 무결성 수준을 갖는 프로세스에 대한 전체 액세스 핸들을 열 수 없음을 의미합니다.
이와 이전 섹션에서 언급한 제한 사항으로 인해, 보안적인 측면에서는 항상 **가능한 한 낮은 무결성 수준에서 프로세스를 실행하는 것이 권장**됩니다.
이와 이전 섹션에서 언급된 제한 사항으로 인해, 보안적인 측면에서 항상 **가능한 한 낮은 무결성 수준에서 프로세스를 실행하는 것이 권장됩니다**.
### [WhiteIntel](https://whiteintel.io)
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 무료 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 탈취 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
그들의 웹사이트를 방문하여 무료로 엔진을 시도해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %}
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기술을 공유하세요.
* **회사를 HackTricks에 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>