Translated ['src/generic-methodologies-and-resources/pentesting-wifi/ena

This commit is contained in:
Translator 2025-07-15 17:15:14 +00:00
parent d7aca45712
commit 53aee4a591
8 changed files with 125 additions and 123 deletions

View File

@ -3,13 +3,13 @@
{{#include ../../banners/hacktricks-training.md}}
## 개요
대부분의 최신 Android 전화는 802.11 모니터 모드나 프레임 주입 기능 없이 출하되는 Broadcom/Cypress Wi-Fi 칩셋을 내장하고 있습니다. 오픈 소스 NexMon 프레임워크는 이러한 기능을 추가하기 위해 독점 펌웨어를 패치하고 이를 공유 라이브러리(`libnexmon.so`)와 CLI 도우미(`nexutil`)를 통해 노출합니다. 이 라이브러리를 기본 Wi-Fi 드라이버에 미리 로드함으로써, 루팅된 장치는 원시 802.11 트래픽을 캡처하고 임의의 프레임을 주입할 수 있어 외부 USB 어댑터의 필요성을 없앱니다.
대부분의 최신 Android 전화는 802.11 모니터 모드나 프레임 주입 기능 없이 출하되는 Broadcom/Cypress Wi-Fi 칩셋을 내장하고 있습니다. 오픈 소스 NexMon 프레임워크는 이러한 기능을 추가하기 위해 독점 펌웨어를 패치하고 이를 공유 라이브러리(`libnexmon.so`)와 CLI 도우미(`nexutil`)를 통해 노출합니다. 이 라이브러리를 기본 Wi-Fi 드라이버에 미리 로드함으로써, 루팅된 장치는 원시 802.11 트래픽을 캡처하고 임의의 프레임을 주입할 수 있습니다 외부 USB 어댑터가 필요하지 않습니다.
이 페이지는 완전히 패치된 삼성 갤럭시 S10 (BCM4375B1)을 예로 들어 빠른 워크플로우를 문서화합니다. 사용되는 항목은 다음과 같습니다:
* 패치된 펌웨어 + `libnexmon.so`를 포함하는 NexMon Magisk 모듈
* 모니터 모드 전환을 자동화하는 Hijacker Android 애플리케이션
* 내부 인터페이스에 대해 클래식 무선 도구(aircrack-ng, wifite, mdk4 )를 직접 실행하기 위한 선택적 Kali NetHunter chroot
* 내부 인터페이스에 대해 클래식 무선 도구(aircrack-ng, wifite, mdk4 )를 직접 실행하기 위한 선택적 Kali NetHunter chroot
같은 기술은 공개적으로 사용 가능한 NexMon 패치가 있는 모든 핸드셋(픽셀 1, 넥서스 6P, 갤럭시 S7/S8 등)에 적용됩니다.
@ -23,7 +23,7 @@
* `/system/lib*/libnexmon.so`
* `/system/xbin/nexutil`
* Hijacker ≥ 1.7 (arm/arm64) [https://github.com/chrisk44/Hijacker](https://github.com/chrisk44/Hijacker)
* (선택 사항) Kali NetHunter 또는 무선 도구를 실행할 Linux chroot
* (선택 사항) 무선 도구를 실행할 Linux chroot인 Kali NetHunter 또는 기타
---
@ -77,14 +77,14 @@ svc wifi disable && ifconfig wlan0 up && nexutil -s0x613 -i -v2
# Disable and return to normal Wi-Fi
nexutil -m0 && svc wifi enable
```
If you only need passive sniffing, omit the `-s0x613` flag.
만약 수동 스니핑만 필요하다면 `-s0x613` 플래그를 생략하세요.
---
## Using `libnexmon` inside Kali NetHunter / chroot
## Kali NetHunter / chroot 내에서 `libnexmon` 사용하기
Kali의 기본 사용자 공간 도구는 NexMon을 인식하지 않지만, `LD_PRELOAD`를 통해 강제로 사용할 수 있습니다:
1. 미리 빌드된 공유 객체를 chroot 복사합니다:
1. 미리 빌드된 공유 객체를 chroot 복사합니다:
```bash
cp /sdcard/Download/kalilibnexmon.so <chroot>/lib/
```
@ -97,32 +97,32 @@ wifite -i wlan0 # 또는 aircrack-ng, mdk4 …
```
4. 완료되면 Android에서 일반적으로 모니터 모드를 비활성화합니다.
펌웨어가 이미 radiotap 주입을 처리하므로, 사용자 공간 도구는 외부 Atheros 어댑터와 동일하게 작동합니다.
펌웨어가 이미 radiotap 주입을 처리하기 때문에, 사용자 공간 도구는 외부 Atheros 어댑터와 동일하게 작동합니다.
---
## Typical Attacks Possible
## 가능한 일반적인 공격
모니터 + TX가 활성화되면 다음을 수행할 수 있습니다:
* `wifite`, `hcxdumptool`, `airodump-ng`로 WPA(2/3-SAE) 핸드쉐이크 또는 PMKID 캡처.
* 클라이언트가 재연결하도록 강제하기 위해 비인증/비연결 프레임 주입.
* `mdk4`, `aireplay-ng`, Scapy 등을 사용하여 임의의 관리/데이터 프레임 생성.
* 휴대폰에서 직접 악성 AP를 구축하거나 KARMA/MANA 공격 수행.
Galaxy S10의 성능은 외부 USB NIC와 유사합니다 (~20 dBm TX, 2-3 M pps RX).
Galaxy S10의 성능은 외부 USB NIC와 비슷합니다 (~20 dBm TX, 2-3 M pps RX).
---
## Troubleshooting
* `Device or resource busy` 모니터 모드를 활성화하기 전에 **Android Wi-Fi 서비스가 비활성화되어 있는지** 확인합니다 (`svc wifi disable`).
* `nexutil: ioctl(PRIV_MAGIC) failed` 라이브러리가 미리 로드되지 않았습니다; `LD_PRELOAD` 경로를 다시 확인합니다.
* 프레임 주입은 작동하지만 패킷이 캡처되지 않음 일부 ROM은 채널을 하드 블록합니다; `nexutil -c <channel>` 또는 `iwconfig wlan0 channel <n>`을 시도합니다.
* SELinux가 라이브러리를 차단함 장치를 *Permissive*로 설정하거나 모듈 컨텍스트를 수정합니다: `chcon u:object_r:system_lib_file:s0 libnexmon.so`.
## 문제 해결
* `Device or resource busy` 모니터 모드를 활성화하기 전에 **Android Wi-Fi 서비스가 비활성화되어 있는지** 확인하세요 (`svc wifi disable`).
* `nexutil: ioctl(PRIV_MAGIC) failed` 라이브러리가 미리 로드되지 않았습니다; `LD_PRELOAD` 경로를 다시 확인하세요.
* 프레임 주입은 작동하지만 패킷이 캡처되지 않음 일부 ROM은 채널을 하드 블록합니다; `nexutil -c <channel>` 또는 `iwconfig wlan0 channel <n>`을 시도하세요.
* SELinux가 라이브러리를 차단함 장치를 *Permissive*로 설정하거나 모듈 컨텍스트를 수정하세요: `chcon u:object_r:system_lib_file:s0 libnexmon.so`.
---
## References
* [Hijacker on the Samsung Galaxy S10 with wireless injection](https://forums.kali.org/t/hijacker-on-the-samsung-galaxy-s10-with-wireless-injection/10305)
* [NexMon firmware patching framework](https://github.com/seemoo-lab/nexmon)
* [Hijacker (aircrack-ng GUI for Android)](https://github.com/chrisk44/Hijacker)
## 참고 문헌
* [Samsung Galaxy S10에서 무선 주입을 위한 Hijacker](https://forums.kali.org/t/hijacker-on-the-samsung-galaxy-s10-with-wireless-injection/10305)
* [NexMon 펌웨어 패칭 프레임워크](https://github.com/seemoo-lab/nexmon)
* [Hijacker (Android용 aircrack-ng GUI)](https://github.com/chrisk44/Hijacker)
{{#include ../../banners/hacktricks-training.md}}

BIN
src/images/discount.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

View File

@ -13,19 +13,19 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
이것은 안드로이드 장치(에뮬레이트된 또는 물리적)에 연결하는 데 필요한 주요 도구입니다.\
**ADB**는 컴퓨터에서 **USB** 또는 **네트워크**를 통해 장치를 제어할 수 있게 해줍니다. 이 유틸리티는 **파일 복사**, **앱 설치 및 제거**, **셸 명령 실행**, **데이터 백업**, **로그 읽기** 등 여러 기능을 가능하게 합니다.
**ADB**는 컴퓨터에서 **USB** 또는 **네트워크**를 통해 장치를 제어할 수 있게 해줍니다. 이 유틸리티는 **파일 복사**, **앱 설치 및 제거**, **셸 명령 실행**, **데이터 백업**, **로그 읽기** 등 여러 기능을 지원합니다.
ADB 사용 방법을 배우기 위해 다음 [**ADB Commands**](adb-commands.md) 목록을 확인하세요.
다음 목록의 [**ADB Commands**](adb-commands.md)를 확인하여 adb 사용 방법을 배워보세요.
## Smali
때때로 **숨겨진 정보**(잘 난독화된 비밀번호나 플래그일 수 있음)에 접근하기 위해 **애플리케이션 코드를 수정하는 것**이 흥미로울 수 있습니다. 그러므로 apk를 디컴파일하고 코드를 수정한 후 다시 컴파일하는 것이 흥미로울 수 있습니다.\
때때로 **숨겨진 정보**(잘 난독화된 비밀번호나 플래그)에 접근하기 위해 **애플리케이션 코드를 수정하는 것**이 흥미로울 수 있습니다. 따라서 apk를 디컴파일하고 코드를 수정한 후 다시 컴파일하는 것이 유용할 수 있습니다.\
[**이 튜토리얼에서는 APK를 디컴파일하고, Smali 코드를 수정하고, 새로운 기능으로 APK를 다시 컴파일하는 방법을 배울 수 있습니다**](smali-changes.md). 이는 **동적 분석 중 여러 테스트의 대안으로 매우 유용할 수 있습니다**. 그러므로 **이 가능성을 항상 염두에 두세요**.
## Other interesting tricks
- [Play Store에서 위치 스푸핑하기](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB 기반 비루트 접근)](shizuku-privileged-api.md)
- [Shizuku Privileged API (ADB 기반 비루트 권 접근)](shizuku-privileged-api.md)
- **APK 다운로드**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- Extract APK from device:
```bash
@ -48,8 +48,8 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
```
## 정적 분석
우선, APK를 분석하기 위해서는 **디컴파일러를 사용하여 Java 코드를 살펴봐야 합니다**.\
자세한 정보는 [**여기에서 다양한 디컴파일러에 대한 정보를 확인하세요**](apk-decompilers.md).
우선, APK를 분석하기 위해서는 **디컴파일러를 사용하여 Java 코드를 살펴봐야 합니다.**\
자세한 정보는 [**여기에서 다양한 디컴파일러에 대한 정보를 확인하세요.**](apk-decompilers.md).
### 흥미로운 정보 찾기
@ -57,18 +57,18 @@ APK의 **문자열**을 살펴보면 **비밀번호**, **URL** ([https://github.
**Firebase**
**firebase URL**에 특별한 주의를 기울이고 잘못 구성되어 있는지 확인하세요. [Firebase가 무엇인지 및 이를 악용하는 방법에 대한 더 많은 정보는 여기에서 확인하세요.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
**Firebase URL**에 특별한 주의를 기울이고 잘못 구성되어 있는지 확인하세요. [Firebase가 무엇인지 및 이를 악용하는 방법에 대한 자세한 정보는 여기에서 확인하세요.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### 애플리케이션에 대한 기본 이해 - Manifest.xml, strings.xml
**애플리케이션의 _Manifest.xml_**_strings.xml_** 파일을 검사하면 잠재적인 보안 취약점을 발견할 수 있습니다**.러한 파일은 디컴파일러를 사용하거나 APK 파일 확장자를 .zip으로 변경한 후 압축을 풀어 접근할 수 있습니다.
**애플리케이션의 _Manifest.xml_**_strings.xml_** 파일을 검사하면 잠재적인 보안 취약점을 발견할 수 있습니다.** 이 파일은 디컴파일러를 사용하거나 APK 파일 확장자를 .zip으로 변경한 후 압축을 풀어 접근할 수 있습니다.
**Manifest.xml**에서 식별된 **취약점**은 다음과 같습니다:
- **디버깅 가능한 애플리케이션**: _Manifest.xml_ 파일에서 디버깅 가능(`debuggable="true"`)으로 설정된 애플리케이션은 연결을 허용하여 악용될 위험이 있습니다. 디버깅 가능한 애플리케이션을 찾고 악용하는 방법에 대한 튜토리얼을 참조하세요.
- **백업 설정**: 민감한 정보를 다루는 애플리케이션의 경우 `android:allowBackup="false"` 속성을 명시적으로 설정하여 adb를 통한 무단 데이터 백업을 방지해야 합니다. 특히 USB 디버깅이 활성화된 경우에 그렇습니다.
- **네트워크 보안**: _res/xml/_의 사용자 지정 네트워크 보안 구성(`android:networkSecurityConfig="@xml/network_security_config"`)은 인증서 핀 및 HTTP 트래픽 설정과 같은 보안 세부정보를 지정할 수 있습니다. 예를 들어 특정 도메인에 대해 HTTP 트래픽을 허용하는 것입니다.
- **내보낸 활동 및 서비스**: 매니페스트에서 내보낸 활동 및 서비스를 식별하면 악용될 수 있는 구성 요소를 강조할 수 있습니다. 동적 테스트 중 추가 분석을 통해 이러한 구성 요소를 악용하는 방법을 밝혀낼 수 있습니다.
- **내보내기된 활동 및 서비스**: 매니페스트에서 내보내기된 활동 및 서비스를 식별하면 악용될 수 있는 구성 요소를 강조할 수 있습니다. 동적 테스트 중 추가 분석을 통해 이러한 구성 요소를 악용하는 방법을 밝혀낼 수 있습니다.
- **콘텐츠 제공자 및 파일 제공자**: 노출된 콘텐츠 제공자는 무단 데이터 접근 또는 수정이 가능할 수 있습니다. 파일 제공자의 구성도 면밀히 검토해야 합니다.
- **브로드캐스트 수신기 및 URL 스킴**: 이러한 구성 요소는 악용될 수 있으며, 입력 취약점에 대한 URL 스킴 관리 방법에 특히 주의해야 합니다.
- **SDK 버전**: `minSdkVersion`, `targetSDKVersion`, `maxSdkVersion` 속성은 지원되는 Android 버전을 나타내며, 보안상의 이유로 구식의 취약한 Android 버전을 지원하지 않는 것이 중요합니다.
@ -78,7 +78,7 @@ APK의 **문자열**을 살펴보면 **비밀번호**, **URL** ([https://github.
### Tapjacking
**Tapjacking**은 **악의적인** **애플리케이션**이 실행되어 **희생 애플리케이션 위에 위치하는 공격**입니다. 희생 앱을 가시적으로 가리면, 사용자 인터페이스는 사용자가 상호작용하도록 속이도록 설계되어 있으며, 이 상호작용은 희생 앱으로 전달됩니다.\
결과적으로, 사용자는 실제로 희생 앱에서 작업을 수행하고 있다는 사실을 **모르게 됩니다**.
결과적으로, 사용자는 실제로 희생 앱에서 작업을 수행하고 있다는 사실을 알지 못하게 됩니다.
자세한 정보는 다음에서 확인하세요:
@ -100,16 +100,16 @@ android-task-hijacking.md
**내부 저장소**
Android에서 **내부** 저장소에 **저장된** 파일은 **생성한 앱**만 **접근할 수 있도록 설계**되었습니다. 이 보안 조치는 Android 운영 체제에 의해 **강제 적용**되며, 대부분의 애플리케이션의 보안 요구 사항에 일반적으로 적합합니다. 그러나 개발자는 때때로 `MODE_WORLD_READABLE` 및 `MODE_WORLD_WRITABLE`와 같은 모드를 사용하여 파일이 서로 다른 애플리케이션 간에 **공유되도록 허용합니다**. 그러나 이러한 모드는 **다른 애플리케이션, 특히 악의적인 애플리케이션**에 의한 파일 접근을 제한하지 않습니다.
Android에서 **내부** 저장소에 **저장된** 파일은 **생성한 앱**만 **접근할 수 있도록 설계**되었습니다. 이 보안 조치는 Android 운영 체제에 의해 **강제 적용**되며, 대부분의 애플리케이션의 보안 요구 사항에 일반적으로 적합합니다. 그러나 개발자들은 때때로 `MODE_WORLD_READABLE``MODE_WORLD_WRITABLE`와 같은 모드를 사용하여 파일이 서로 다른 애플리케이션 간에 **공유**될 수 있도록 합니다. 그러나 이러한 모드는 **다른 애플리케이션, 특히 악의적인 애플리케이션**에 의한 파일 접근을 제한하지 않습니다.
1. **정적 분석:**
- `MODE_WORLD_READABLE``MODE_WORLD_WRITABLE`의 사용이 **신중하게 검토**되어야 합니다. 이러한 모드는 **원치 않거나 무단 접근**을 **노출할 수 있습니다**.
2. **동적 분석:**
- 앱에서 생성된 파일에 설정된 **권한**을 **확인**하세요. 특히, **전 세계적으로 읽거나 쓸 수 있도록 설정된 파일이 있는지 확인**하세요. 이는 **어떤 애플리케이션**이든 장치에 설치된 경우, 출처나 의도에 관계없이 이러한 파일을 **읽거나 수정**할 수 있게 하여 상당한 보안 위험을 초래할 수 있습니다.
- 앱에서 생성된 파일에 설정된 **권한**을 **확인**하세요. 특히, 파일이 **전 세계적으로 읽거나 쓸 수 있도록 설정되어 있는지** 확인하세요. 이는 **장치에 설치된 모든 애플리케이션**이, 출처나 의도에 관계없이, 이러한 파일을 **읽거나 수정**할 수 있게 하여 상당한 보안 위험을 초래할 수 있습니다.
**외부 저장소**
**외부 저장소**에서 파일을 다룰 때는 몇 가지 주의 사항이 있습니다:
**외부 저장소**(예: SD 카드)에서 파일을 다룰 때는 몇 가지 주의 사항을 고려해야 합니다:
1. **접근성**:
- 외부 저장소의 파일은 **전 세계적으로 읽고 쓸 수 있습니다**. 즉, 모든 애플리케이션이나 사용자가 이러한 파일에 접근할 수 있습니다.
@ -117,14 +117,14 @@ Android에서 **내부** 저장소에 **저장된** 파일은 **생성한 앱**
- 접근이 용이하므로 **민감한 정보를 외부 저장소에 저장하지 않는 것이 좋습니다**.
- 외부 저장소는 제거되거나 모든 애플리케이션에 의해 접근될 수 있어 보안성이 떨어집니다.
3. **외부 저장소에서 데이터 처리**:
- 외부 저장소에서 검색한 데이터에 대해 항상 **입력 유효성 검사를 수행**하세요. 이는 데이터가 신뢰할 수 없는 출처에서 온 것이기 때문에 중요합니다.
- 외부 저장소에서 검색한 데이터에 대해 항상 **입력 검증**을 수행하세요. 이는 데이터가 신뢰할 수 없는 출처에서 온 것이기 때문에 중요합니다.
- 외부 저장소에 실행 파일이나 클래스 파일을 저장하여 동적으로 로드하는 것은 강력히 권장되지 않습니다.
- 애플리케이션이 외부 저장소에서 실행 파일을 검색해야 하는 경우, 이러한 파일이 **서명되고 암호학적으로 검증**된 후 동적으로 로드되도록 해야 합니다. 이 단계는 애플리케이션의 보안 무결성을 유지하는 데 중요합니다.
- 애플리케이션이 외부 저장소에서 실행 파일을 검색해야 하는 경우, 이러한 파일이 **서명되고 암호학적으로 검증**된 후 동적으로 로드되도록 해야 합니다. 이 단계는 애플리케이션의 보안 무결성을 유지하는 데 필수적입니다.
외부 저장소는 `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`에서 **접근할 수 있습니다**.
외부 저장소는 `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`에서 접근할 수 있습니다.
> [!TIP]
> Android 4.4 (**API 17**)부터 SD 카드에는 **앱 전용 디렉토리로의 접근을 제한하는 디렉토리 구조**가 있습니다. 이는 악의적인 애플리케이션이 다른 앱의 파일에 대한 읽기 또는 쓰기 접근을 얻는 것을 방지합니다.
> Android 4.4 (**API 17**)부터 SD 카드에는 **앱 전용 디렉토리로의 접근을 제한하는 디렉토리 구조**가 있습니다. 이는 악의적인 애플리케이션이 다른 앱의 파일에 대한 읽기 또는 쓰기 접근을 얻지 못하도록 방지합니다.
**명확한 텍스트로 저장된 민감한 데이터**
@ -135,7 +135,7 @@ Android에서 **내부** 저장소에 **저장된** 파일은 **생성한 앱**
**모든 인증서 수락**
어떤 이유로 개발자는 때때로 호스트 이름이 다음과 같은 코드 줄과 일치하지 않더라도 모든 인증서를 수락합니다:
어떤 이유로 개발자들이 호스트 이름이 코드의 다음 줄과 일치하지 않더라도 모든 인증서를 수락하는 경우가 있습니다:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
@ -150,7 +150,7 @@ A good way to test this is to try to capture the traffic using some proxy like B
**Use of Insecure and/or Deprecated Algorithms**
개발자는 **권장되지 않는 알고리즘**을 사용하여 **검증**을 수행하거나 **데이터를 저장**하거나 **전송**해서는 안 됩니다. 이러한 알고리즘에는 RC4, MD4, MD5, SHA1 등이 포함됩니다. 예를 들어 **해시**를 사용하여 비밀번호를 저장하는 경우, 소금을 사용하여 해시 브루트 포스 **저항성**이 있는 해시를 사용해야 합니다.
개발자는 **권장되지 않는 알고리즘**을 사용하여 **검증**을 수행하거나 **데이터를 저장**하거나 **전송**해서는 안 됩니다. 이러한 알고리즘에는 RC4, MD4, MD5, SHA1 등이 포함됩니다. 예를 들어 **해시**를 사용하여 비밀번호를 저장하는 경우, 소금을 사용하여 해시 브루트 포스 **저항**이 가능한 해시를 사용해야 합니다.
### Other checks
@ -271,7 +271,7 @@ You need to activate the **debugging** options and it will be cool if you can **
> [!WARNING]
> **Android 4.0** 이후 버전에서는 **응용 프로그램이 자신의 로그에만 접근할 수 있습니다**. 따라서 응용 프로그램은 다른 앱의 로그에 접근할 수 없습니다.\
> 어쨌든, **민감한 정보를 로그로 남기지 않는 것이 여전히 권장됩니다**.
> 어쨌든, **민감한 정보를 록하지 않는 것이 여전히 권장됩니다**.
**Copy/Paste Buffer Caching**
@ -279,7 +279,7 @@ Android의 **클립보드 기반** 프레임워크는 앱에서 복사-붙여넣
**Crash Logs**
애플리케이션이 **충돌**하고 **로그를 저장**하는 경우, 이러한 로그는 공격자에게 도움이 될 수 있으며, 특히 애플리케이션을 리버스 엔지니어링할 수 없는 경우 더욱 그렇습니다. 이 위험을 완화하기 위해 충돌 시 로그를 기지 않도록 하고, 로그를 네트워크를 통해 전송해야 하는 경우 SSL 채널을 통해 전송되도록 해야 합니다.
애플리케이션이 **충돌**하고 **로그를 저장**하는 경우, 이러한 로그는 공격자에게 도움이 될 수 있으며, 특히 애플리케이션을 리버스 엔지니어링할 수 없는 경우 더욱 그렇습니다. 이 위험을 완화하기 위해 충돌 시 로그를 기록하지 않도록 하고, 로그를 네트워크를 통해 전송해야 하는 경우 보안을 위해 SSL 채널을 통해 전송되도록 해야 합니다.
펜테스터로서, **이 로그를 살펴보는 것을 시도해 보세요**.
@ -292,14 +292,14 @@ Android의 **클립보드 기반** 프레임워크는 앱에서 복사-붙여넣
대부분의 애플리케이션은 정보를 저장하기 위해 **내부 SQLite 데이터베이스**를 사용합니다. 펜테스트 중에 생성된 **데이터베이스**, **테이블****열**의 이름과 저장된 모든 **데이터**를 살펴보아야 합니다. 왜냐하면 **민감한 정보**(취약점이 될 수 있음)를 찾을 수 있기 때문입니다.\
데이터베이스는 `/data/data/the.package.name/databases`에 위치해야 하며, 예를 들어 `/data/data/com.mwr.example.sieve/databases`와 같습니다.
데이터베이스가 기밀 정보를 저장하고 **암호화되어** 있지만 애플리케이션 내에서 **비밀번호**를 **찾을 수** 있다면 여전히 **취약점**입니다.
데이터베이스가 기밀 정보를 저장하고 **암호화**되어 있지만 애플리케이션 내에서 **비밀번호**를 찾을 수 있다면 여전히 **취약점**입니다.
`.tables`를 사용하여 테이블을 나열하고, `.schema <table_name>`을 사용하여 테이블의 열을 나열합니다.
`.tables`를 사용하여 테이블을 나열하고, `.schema <table_name>`을 사용하여 테이블의 열을 나열하세요.
### Drozer (Exploit Activities, Content Providers and Services)
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer**는 Android 앱의 역할을 **가정**하고 다른 앱과 상호작용할 수 있게 해줍니다. 이는 설치된 애플리케이션이 할 수 있는 모든 작업을 수행할 수 있으며, Android의 프로세스 간 통신(IPC) 메커니즘을 활용하고 기본 운영 체제와 상호작용할 수 있습니다.\
Drozer는 **내보낸 활동, 내보낸 서비스 및 콘텐츠 제공자****악용**하는 데 유용한 도구입니다.
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer**는 **Android 앱의 역할을 가정하고** 다른 앱과 상호작용할 수 있게 해줍니다. 이는 설치된 애플리케이션이 할 수 있는 모든 작업을 수행할 수 있으며, Android의 프로세스 간 통신(IPC) 메커니즘을 활용하고 기본 운영 체제와 상호작용할 수 있습니다.\
Drozer는 **내보낸 활동, 내보낸 서비스 및 콘텐츠 제공자를 악용하는 데 유용한 도구**입니다.
### Exploiting exported Activities
@ -319,38 +319,38 @@ adb에서 내보낸 활동을 시작할 수도 있습니다:
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**NOTE**: MobSF는 활동에서 `android:launchMode`로 _**singleTask/singleInstance**_를 사용하는 것을 악성으로 감지하지만, [이것](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) 때문에, 이는 구버전(API 버전 < 21)에서만 위험한 것으로 보입니다.
**NOTE**: MobSF는 활동에서 `android:launchMode`로 _**singleTask/singleInstance**_를 사용할 경우 악성으로 감지하지만, [이것](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) 때문에, 이는 구버전(API 버전 < 21)에서만 위험한 것으로 보입니다.
> [!TIP]
> 권한 우회가 항상 취약점이 되는 것은 아니며, 이는 우회가 어떻게 작동하는지와 어떤 정보가 노출되는지에 따라 다릅니다.
> 권한 우회가 항상 취약점은 아니라는 점에 유의해야 하며, 이는 우회가 어떻게 작동하는지와 어떤 정보가 노출되는지에 따라 다릅니다.
**민감한 정보 유출**
**활동은 결과를 반환할 수도 있습니다**. 만약 당신이 **`setResult`** 메서드를 호출하고 **민감한 정보를 반환하는** 내보내기된 보호되지 않은 활동을 찾는다면, 이는 민감한 정보 유출입니다.
**활동은 결과를 반환할 수도 있습니다**. 만약 **`setResult`** 메서드를 호출하고 **민감한 정보를 반환하는** 내보내기된 보호되지 않은 활동을 찾는 데 성공한다면, 민감한 정보 유출이 발생합니다.
#### Tapjacking
Tapjacking이 방지되지 않으면, 내보내기된 활동을 악용하여 **사용자가 예상치 못한 행동을 하게 만들 수 있습니다**. [**Tapjacking이 무엇인지에 대한 더 많은 정보는 링크를 따라가세요**](#tapjacking).
Tapjacking이 방지되지 않으면, 내보내기된 활동을 악용하여 **사용자가 예상치 못한 작업을 수행하게** 만들 수 있습니다. [**Tapjacking이 무엇인지에 대한 더 많은 정보는 링크를 따라가세요**](#tapjacking).
### 콘텐츠 제공자 악용 - 민감한 정보 접근 및 조작
[**콘텐츠 제공자가 무엇인지 새롭게 알고 싶다면 이 글을 읽어보세요.**](android-applications-basics.md#content-provider)\
콘텐츠 제공자는 기본적으로 **데이터를 공유하는** 데 사용됩니다. 앱에 사용 가능한 콘텐츠 제공자가 있다면, 그들로부터 **민감한** 데이터를 **추출할 수** 있을지도 모릅니다. 또한 **SQL 인젝션** 및 **경로 탐색**을 테스트하는 것도 흥미롭습니다. 왜냐하면 이들이 취약할 수 있기 때문입니다.
콘텐츠 제공자는 기본적으로 **데이터를 공유**하는 데 사용됩니다. 앱에 사용 가능한 콘텐츠 제공자가 있다면, 그들로부터 **민감한** 데이터를 **추출**할 수 있을지도 모릅니다. 또한 **SQL 인젝션** 및 **경로 탐색**의 가능성을 테스트하는 것도 흥미롭습니다. 이들은 취약할 수 있습니다.
[**Drozer로 콘텐츠 제공자를 악용하는 방법을 배우세요.**](drozer-tutorial/index.html#content-providers)
### **서비스 악용**
[**서비스가 무엇인지 새롭게 알고 싶다면 이 글을 읽어보세요.**](android-applications-basics.md#services)\
서비스의 동작은 `onStartCommand` 메서드에서 시작된다는 을 기억하세요.
서비스의 동작은 `onStartCommand` 메서드에서 시작된다는 을 기억하세요.
서비스는 기본적으로 **데이터를 수신하고**, **처리**하며 **응답**(또는 응답하지 않을 수 있음)을 **반환**할 수 있는 것입니다. 따라서 애플리케이션이 일부 서비스를 내보내고 있다면, **코드를 확인**하여 그것이 무엇을 하는지 이해하고 **민감한 정보를 추출하기 위해 동적으로 테스트**해야 합니다, 인증 수단을 우회하는 것...\
서비스는 기본적으로 **데이터를 수신**하고, **처리**하며, **응답**(또는 하지 않을 수 있음)을 **반환**하는 것입니다. 따라서 애플리케이션이 일부 서비스를 내보내고 있다면, **코드를 확인**하여 그것이 무엇을 하는지 이해하고, **민감한 정보를 추출**하거나 인증 수단을 우회하기 위해 **동적으로 테스트**해야 합니다.\
[**Drozer로 서비스를 악용하는 방법을 배우세요.**](drozer-tutorial/index.html#services)
### **브로드캐스트 수신기 악용**
[**브로드캐스트 수신기가 무엇인지 새롭게 알고 싶다면 이 글을 읽어보세요.**](android-applications-basics.md#broadcast-receivers)\
브로드캐스트 수신기의 동작은 `onReceive` 메서드에서 시작된다는 을 기억하세요.
브로드캐스트 수신기의 동작은 `onReceive` 메서드에서 시작된다는 을 기억하세요.
브로드캐스트 수신기는 특정 유형의 메시지를 기다리고 있습니다. 수신기가 메시지를 처리하는 방식에 따라 취약할 수 있습니다.\
[**Drozer로 브로드캐스트 수신기를 악용하는 방법을 배우세요.**](#exploiting-broadcast-receivers)
@ -369,7 +369,7 @@ _패키지 이름을 **생략할 수** 있으며, 모바일은 해당 링크를
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
```
**코드 실행됨**
**실행된 코드**
**앱에서 실행될 코드**를 찾으려면, 딥링크로 호출된 액티비티로 가서 **`onNewIntent`** 함수를 검색하세요.
@ -377,12 +377,12 @@ _패키지 이름을 **생략할 수** 있으며, 모바일은 해당 링크를
**민감한 정보**
딥링크를 찾을 때마다 **URL 매개변수를 통해 민감한 데이터(예: 비밀번호)를 수신하지 않는지 확인해야 합니다.** 다른 애플리케이션이 **딥링크를 가장하여 해당 데이터를 훔칠 수 있기 때문입니다!**
딥링크를 찾을 때마다 **URL 매개변수를 통해 민감한 데이터(예: 비밀번호)를 수신하지 않는지 확인**하세요. 다른 애플리케이션이 **딥링크를 가장하여 해당 데이터를 훔칠 수 있습니다!**
**경로의 매개변수**
**딥링크가 URL의 경로 내에서 매개변수를 사용하고 있는지 확인해야 합니다.** 예: `https://api.example.com/v1/users/{username}`. 이 경우, `example://app/users?username=../../unwanted-endpoint%3fparam=value`와 같 경로 탐색을 강제할 수 있습니다.\
애플리케이션 내에서 올바른 엔드포인트를 찾으면 **Open Redirect**(경로의 일부가 도메인 이름으로 사용되는 경우), **계정 탈취**(CSRF 토큰 없이 사용자 세부정보를 수정할 수 있고 취약한 엔드포인트가 올바른 메서드를 사용하는 경우) 및 기타 취약점을 유발할 수 있습니다. 더 많은 [정보는 여기](http://dphoeniixx.com/2020/12/13-2/)에서 확인하세요.
**딥링크가 URL의 경로 내에서 매개변수를 사용하고 있는지 확인해야 합니다.** 예: `https://api.example.com/v1/users/{username}`. 이 경우, `example://app/users?username=../../unwanted-endpoint%3fparam=value`와 같 경로 탐색을 강제할 수 있습니다.\
애플리케이션 내에서 올바른 엔드포인트를 찾으면 **Open Redirect**(경로의 일부가 도메인 이름으로 사용되는 경우), **계정 탈취**(CSRF 토큰 없이 사용자 세부정보를 수정할 수 있고 취약한 엔드포인트가 올바른 메서드를 사용하는 경우) 및 기타 취약점을 유발할 수 있습니다. 더 많은 [정보는 여기에서](http://dphoeniixx.com/2020/12/13-2/) 확인하세요.
**더 많은 예시**
@ -390,9 +390,9 @@ _패키지 이름을 **생략할 수** 있으며, 모바일은 해당 링크를
### 전송 계층 검사 및 검증 실패
- **인증서는 Android 애플리케이션에서 항상 제대로 검사되지 않습니다.** 이러한 애플리케이션이 경고를 간과하고 자체 서명된 인증서를 수락하거나, 경우에 따라 HTTP 연결로 되돌아가는 것이 일반적입니다.
- **인증서는 Android 애플리케이션에서 항상 제대로 검사되지 않습니다.** 이러한 애플리케이션이 경고를 무시하고 자체 서명된 인증서를 수락하거나, 경우에 따라 HTTP 연결로 되돌아가는 경우가 흔합니다.
- **SSL/TLS 핸드셰이크 중 협상이 때때로 약합니다.** 안전하지 않은 암호 모음을 사용하는 경우가 있습니다. 이 취약점은 연결을 중간자(MITM) 공격에 취약하게 만들어 공격자가 데이터를 복호화할 수 있게 합니다.
- **민감한 정보의 유출**은 애플리케이션이 안전한 채널을 사용하여 인증하지만 다른 거래를 위해 비안전한 채널을 통해 통신할 때 위험이 있습니다. 이 접근 방식은 세션 쿠키나 사용자 세부정보와 같은 민감한 데이터를 악의적인 엔티티의 가로채기로부터 보호하지 못합니다.
- **민감한 정보의 유출**은 애플리케이션이 안전한 채널을 사용하여 인증하지만 다른 거래에 대해 비안전한 채널을 통해 통신할 때 위험이 있습니다. 이 접근 방식은 세션 쿠키나 사용자 세부정보와 같은 민감한 데이터를 악의적인 엔티티의 가로채기로부터 보호하지 못합니다.
#### 인증서 검증
@ -415,9 +415,9 @@ HTTP 트래픽을 검사하려면 **프록시 도구의 인증서를 설치해
SSL 핀닝이 구현된 경우 HTTPS 트래픽을 검사하기 위해 이를 우회해야 합니다. 이를 위한 다양한 방법이 있습니다:
- **apk**를 자동으로 **수정**하여 SSL 핀닝을 **우회**하는 [**apk-mitm**](https://github.com/shroudedcode/apk-mitm)을 사용할 수 있습니다. 이 옵션의 가장 큰 장점은 SSL 핀닝을 우회하기 위해 루트가 필요하지 않지만, 애플리케이션을 삭제하고 새로 설치해야 하며, 항상 작동하지는 않습니다.
- **Frida**를 사용하여 이 보호를 우회할 수 있습니다(아래에서 논의됨). Burp+Frida+Genymotion을 사용하는 방법에 대한 가이드는 [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)입니다.
- **Frida**를 사용하여 이 보호를 우회할 수 있습니다(아래에서 논의됨). Burp+Frida+Genymotion을 사용하는 방법에 대한 가이드는 [여기](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)에서 확인하세요.
- **objection**을 사용하여 SSL 핀닝을 **자동으로 우회**할 수도 있습니다: `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- **MobSF 동적 분석**을 사용하여 SSL 핀닝을 **자동으로 우회**할 수도 있습니다(아래에서 설명).
- **MobSF 동적 분석**을 사용하여 SSL 핀닝을 **자동으로 우회**할 수도 있습니다(아래에서 설명).
- 여전히 캡처하지 못한 트래픽이 있다고 생각되면 **iptables를 사용하여 트래픽을 burp로 포워딩**할 수 있습니다. 이 블로그를 읽어보세요: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### 일반 웹 취약점 찾기
@ -432,15 +432,15 @@ Android 애플리케이션을 펜테스트하려면 Frida를 사용하는 방법
- Frida 사용 방법 배우기: [**Frida 튜토리얼**](frida-tutorial/index.html)
- Frida로 작업하기 위한 "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection은 Frida 사용을 자동화하는 데 훌륭합니다: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Ojection은 Frida 사용을 자동화하는 데 유용합니다: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- 여기에서 멋진 Frida 스크립트를 찾을 수 있습니다: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)에서 지시한 대로 Frida를 로드하여 안티 디버깅 / 안티 Frida 메커니즘을 우회해 보세요(도구 [linjector](https://github.com/erfur/linjector-rs)).
### **메모리 덤프 - Fridump**
애플리케이션이 비밀번호나 암기구문과 같은 민감한 정보를 저장하고 있지 않은지 확인하세요.
애플리케이션이 비밀번호나 니모닉과 같은 민감한 정보를 메모리에 저장하고 있지 않은지 확인하세요.
[**Fridump3**](https://github.com/rootbsd/fridump3)를 사용하여 앱의 메모리를 덤프할 수 있습니다:
[**Fridump3**](https://github.com/rootbsd/fridump3)를 사용하여 다음과 같이 앱의 메모리를 덤프할 수 있습니다:
```bash
# With PID
python3 fridump3.py -u <PID>
@ -455,7 +455,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
```
### **Keystore의 민감한 데이터**
Android에서 Keystore는 민감한 데이터를 저장하기에 가장 좋은 장소입니다. 그러나 충분한 권한이 있으면 여전히 **접근할 수 있습니다**. 애플리케이션이 여기에서 **명확한 텍스트로 민감한 데이터를 저장하는 경향이 있기 때문에** 루트 사용자로서 또는 장치에 물리적으로 접근할 수 있는 사람이 이 데이터를 훔칠 수 있는지 확인해야 합니다.
Android에서 Keystore는 민감한 데이터를 저장하기에 가장 좋은 장소이지만, 충분한 권한이 있으면 여전히 **접근할 수 있습니다**. 애플리케이션이 여기에서 **명확한 텍스트로 민감한 데이터를 저장하는 경향이 있기 때문에** 루트 사용자로서 또는 장치에 물리적으로 접근할 수 있는 사람이 이 데이터를 훔칠 수 있는지 확인해야 합니다.
앱이 keystore에 데이터를 저장하더라도, 데이터는 암호화되어야 합니다.
@ -465,7 +465,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **지문/생체 인식 우회**
다음 Frida 스크립트를 사용하면 **지문 인증을 우회**할 수 있을 수 있으며, Android 애플리케이션이 **특정 민감한 영역을 보호하기 위해 수행할 수 있습니다:**
다음 Frida 스크립트를 사용하면 **지문 인증을 우회**할 수 있을 수 있습니다. Android 애플리케이션이 **특정 민감한 영역을 보호하기 위해 수행할 수 있습니다:**
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
@ -477,7 +477,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
스냅샷은 일반적으로 다음 위치에 저장됩니다: **`/data/system_ce/0/snapshots`**
Android는 **FLAG_SECURE** 레이아웃 매개변수를 설정하여 스크린샷 캡처를 **방지하는 방법**을 제공합니다. 이 플래그를 사용하면 창 내용이 안전한 것으로 처리되어 스크린샷에 나타나거나 비안전한 디스플레이에서 볼 수 없게 됩니다.
Android는 **FLAG_SECURE** 레이아웃 매개변수를 설정하여 스크린샷 캡처를 **방지하는 방법**을 제공합니다. 이 플래그를 사용하면 창 내용이 안전한 것으로 처리되어 스크린샷에 나타나거나 비안전한 디스플레이에서 볼 수 없게 됩니다.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
@ -526,26 +526,26 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
MobSF는 **Android**(apk)**, IOS**(ipa) **및 Windows**(apx) 애플리케이션을 분석할 수 있습니다 (_Windows 애플리케이션은 Windows 호스트에 설치된 MobSF에서 분석해야 합니다_).\
또한, **Android** 또는 **IOS** 앱의 소스 코드로 **ZIP** 파일을 생성하면 (애플리케이션의 루트 폴더로 이동하여 모든 것을 선택하고 ZIP 파일을 생성), 그것도 분석할 수 있습니다.
MobSF는 **diff/비교** 분석을 허용하고 **VirusTotal** 통합할 수 있습니다 (API 키를 _MobSF/settings.py_에 설정하고 활성화해야 합니다: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). `VT_UPLOAD``False`로 설정하면 **해시**가 파일 대신 **업로드**됩니다.
MobSF는 **diff/비교** 분석을 허용하고 **VirusTotal** 통합할 수 있습니다 (API 키를 _MobSF/settings.py_에 설정하고 활성화해야 합니다: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). `VT_UPLOAD``False`로 설정하면 **해시**가 파일 대신 **업로드**됩니다.
### MobSF를 이용한 보조 동적 분석
**MobSF**는 **Android**에서 **동적 분석**에 매우 유용할 수 있지만, 이 경우 MobSF와 **genymotion**을 호스트에 설치해야 합니다 (VM이나 Docker는 작동하지 않습니다). _참고: **먼저 genymotion에서 VM을 시작**한 후 **MobSF를 시작해야 합니다.**_\
**MobSF**는 **Android**에서 **동적 분석**에 매우 유용할 수 있지만, 이 경우 MobSF와 **genymotion**을 호스트에 설치해야 합니다 (VM이나 Docker는 작동하지 않습니다). _참고: **먼저 genymotion에서 VM을 시작한 후** **MobSF를 시작해야 합니다.**_\
**MobSF 동적 분석기**는 다음을 수행할 수 있습니다:
- **애플리케이션 데이터 덤프** (URL, 로그, 클립보드, 사용자가 만든 스크린샷, "**Exported Activity Tester**"가 만든 스크린샷, 이메일, SQLite 데이터베이스, XML 파일 및 기타 생성된 파일). 이 모든 것은 자동으로 수행되며, 스크린샷은 원할 때 눌러야 하거나 "**Exported Activity Tester**"를 눌러 모든 내보낸 활동의 스크린샷을 얻어야 합니다.
- **애플리케이션 데이터 덤프** (URL, 로그, 클립보드, 사용자가 만든 스크린샷, "**Exported Activity Tester**"가 만든 스크린샷, 이메일, SQLite 데이터베이스, XML 파일 및 기타 생성된 파일). 이 모든 것은 자동으로 수행되지만 스크린샷은 사용자가 원할 때 눌러야 하며, 모든 내보낸 활동의 스크린샷을 얻으려면 "**Exported Activity Tester**"를 눌러야 합니다.
- **HTTPS 트래픽 캡처**
- **Frida**를 사용하여 **런타임** **정보**를 얻기
Android **버전 > 5**에서는 **자동으로 Frida를 시작**하고 **트래픽을 캡처**하기 위해 전역 **프록시** 설정을 설정합니다. 테스트된 애플리케이션에서만 트래픽을 캡처합니다.
Android **버전 > 5**에서는 **자동으로 Frida를 시작**하고 **트래픽 캡처**를 위해 전역 **프록시** 설정을 구성합니다. 테스트된 애플리케이션의 트래픽만 캡처합니다.
**Frida**
기본적으로 SSL 핀닝, **루트 탐지** 및 **디버거 탐지**를 우회하고 **흥미로운 API**를 모니터링하기 위해 일부 Frida 스크립트를 사용합니다.\
MobSF는 또한 **내보낸 활동을 호출**하고, 그 스크린샷을 **캡처**하여 보고서에 **저장**할 수 있습니다.
MobSF는 또한 **내보낸 활동을 호출**하고, 그 스크린샷을 캡처하여 보고서에 **저장**할 수 있습니다.
동적 테스트를 **시작**하려면 초록색 버튼: "**Start Instrumentation**"을 누릅니다. "**Frida Live Logs**"를 눌러 Frida 스크립트에서 생성된 로그를 보고, "**Live API Monitor**"를 눌러 후킹된 메서드에 대한 모든 호출, 전달된 인수 및 반환 값을 확인합니다 (이것은 "Start Instrumentation"을 누른 후에 나타납니다).\
MobSF는 또한 자신의 **Frida 스크립트**를 로드할 수 있습니다 (Frida 스크립트의 결과를 MobSF에 보내려면 `send()` 함수를 사용하십시오). 또한 **여러 개의 미리 작성된 스크립트**를 로드할 수 있습니다 (더 추가할 수 있습니다 `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), 그냥 **선택하고**, "**Load**"를 누르고 "**Start Instrumentation**"을 누릅니다 (해당 스크립트의 로그는 "**Frida Live Logs**"에서 볼 수 있습니다).
MobSF는 또한 자신의 **Frida 스크립트**를 로드할 수 있습니다 (Frida 스크립트의 결과를 MobSF에 보내려면 `send()` 함수를 사용하십시오). 또한 로드할 수 있는 **여러 사전 작성된 스크립트**가 있습니다 (더 추가할 수 있습니다 `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), 그냥 **선택하고**, "**Load**"를 누르고 "**Start Instrumentation**"을 누릅니다 (해당 스크립트의 로그는 "**Frida Live Logs**"에서 볼 수 있습니다).
![](<../../images/image (419).png>)
@ -562,7 +562,7 @@ MobSF는 또한 자신의 **Frida 스크립트**를 로드할 수 있습니다 (
**Shell**
Mobsf는 또한 동적 분석 페이지 하단에 몇 가지 **adb** 명령, **MobSF 명령** 및 일반 **shell** **명령**을 포함한 셸을 제공합니다. 몇 가지 흥미로운 명령:
Mobsf는 동적 분석 페이지 하단에 몇 가지 **adb** 명령, **MobSF 명령** 및 일반 **shell** **명령**을 포함한 셸을 제공합니다. 몇 가지 흥미로운 명령:
```bash
help
shell ls
@ -573,10 +573,10 @@ receivers
```
**HTTP 도구**
HTTP 트래픽이 캡처되면 "**HTTP(S) Traffic**" 하단에서 캡처된 트래픽의 보기 또는 "**Start HTTPTools**" 녹색 버튼에서 더 나은 보기를 볼 수 있습니다. 두 번째 옵션에서 **캡처된 요청**을 **프록시**(예: Burp 또는 Owasp ZAP)로 **전송**할 수 있습니다.\
HTTP 트래픽이 캡처되면 "**HTTP(S) Traffic**" 하단에서 캡처된 트래픽의 보기 또는 "**Start HTTPTools**" 녹색 버튼에서 더 나은 보기를 볼 수 있습니다. 두 번째 옵션에서 **캡처된 요청**을 **프록시**인 Burp 또는 Owasp ZAP으로 **전송**할 수 있습니다.\
이를 위해, _Burp 켜기 -->_ _Intercept 끄기 --> MobSB HTTPTools에서 요청 선택_ --> "**Send to Fuzzer**" 버튼을 누르기 --> _프록시 주소 선택_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
MobSF로 동적 분석을 마친 후 "**Start Web API Fuzzer**"를 눌러 **HTTP 요청을 퍼징**하고 취약점을 찾 수 있습니다.
MobSF로 동적 분석을 마친 후 "**Start Web API Fuzzer**"를 눌러 **HTTP 요청을 퍼징**하고 취약점을 찾아볼 수 있습니다.
> [!TIP]
> MobSF로 동적 분석을 수행한 후 프록시 설정이 잘못 구성될 수 있으며 GUI에서 수정할 수 없습니다. 다음을 수행하여 프록시 설정을 수정할 수 있습니다:
@ -592,13 +592,13 @@ MobSF로 동적 분석을 마친 후 "**Start Web API Fuzzer**"를 눌러 **HTTP
### [Yaazhini](https://www.vegabird.com/yaazhini/)
이것은 **GUI를 사용한 정적 분석을 수행하기 위한 훌륭한 도구**입니다.
이것은 **GUI 정적 분석을 수행하기 위한 훌륭한 도구**입니다.
![](<../../images/image (741).png>)
### [Qark](https://github.com/linkedin/qark)
이 도구는 **소스 코드** 또는 **패키지된 APK**에서 여러 **보안 관련 Android 애플리케이션 취약점**을 찾기 위해 설계되었습니다. 이 도구는 또한 발견된 취약점(노출된 활동, 인텐트, 탭재킹 등)을 악용하기 위한 "Proof-of-Concept" 배포 가능한 APK 및 **ADB 명령**을 생성할 수 있습니다. Drozer와 마찬가지로 테스트 장치를 루팅할 필요가 없습니다.
이 도구는 **소스 코드** 또는 **패키지된 APK**에서 여러 **보안 관련 Android 애플리케이션 취약점**을 찾기 위해 설계되었습니다. 이 도구는 또한 발견된 일부 취약점을 악용하기 위한 "Proof-of-Concept" 배포 가능한 APK 및 **ADB 명령**을 생성할 수 있습니다 (노출된 활동, 인텐트, 탭재킹 등...). Drozer와 마찬가지로 테스트 장치를 루팅할 필요가 없습니다.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -608,7 +608,7 @@ qark --java path/to/specific/java/file.java
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- 모든 추출된 파일을 쉽게 참조할 수 있도록 표시
- APK 파일을 자동으로 Java 및 Smali 형식으로 디컴파일
- APK 파일을 Java 및 Smali 형식으로 자동으로 디컴파일
- 일반적인 취약점 및 동작을 위해 AndroidManifest.xml 분석
- 일반적인 취약점 및 동작에 대한 정적 소스 코드 분석
- 장치 정보
@ -618,7 +618,7 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER는 Windows, MacOS X 및 Linux에서 사용할 수 있는 명령줄 애플리케이션으로, _.apk_ 파일을 분석하여 취약점을 찾습니다. 이는 APK를 압축 해제하고 일련의 규칙을 적용하여 이러한 취약점을 감지니다.
SUPER는 Windows, MacOS X 및 Linux에서 사용할 수 있는 명령줄 애플리케이션으로, _.apk_ 파일을 분석하여 취약점을 찾습니다. 이는 APK를 압축 해제하고 일련의 규칙을 적용하여 이러한 취약점을 감지하는 방식으로 이루어집니다.
모든 규칙은 `rules.json` 파일에 중심을 두고 있으며, 각 회사나 테스터는 필요에 따라 분석할 규칙을 생성할 수 있습니다.
@ -650,7 +650,7 @@ androbugs.exe -f [APK file]
**Androwarn**는 Android 애플리케이션에서 발생할 수 있는 악의적인 행동을 감지하고 사용자에게 경고하는 것을 주요 목표로 하는 도구입니다.
감지는 애플리케이션의 Dalvik 바이트코드에 대한 **정적 분석**을 통해 수행되며, 이는 **Smali**로 표현됩니다. 이 과정은 [`androguard`](https://github.com/androguard/androguard) 라이브러리를 사용합니다.
감지는 애플리케이션의 Dalvik 바이트코드에 대한 **정적 분석**을 통해 수행되며, 이는 **Smali**로 표현됩니다. [`androguard`](https://github.com/androguard/androguard) 라이브러리를 사용합니다.
이 도구는 다음과 같은 **"나쁜" 애플리케이션의 일반적인 행동**을 찾습니다: 전화 식별자 유출, 오디오/비디오 흐름 가로채기, PIM 데이터 수정, 임의 코드 실행...
```
@ -660,7 +660,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**MARA**는 **M**obile **A**pplication **R**everse engineering 및 **A**nalysis Framework입니다. 이는 OWASP 모바일 보안 위협에 대해 모바일 애플리케이션을 테스트하는 데 도움을 주기 위해 일반적으로 사용되는 모바일 애플리케이션 리버스 엔지니어링 및 분석 도구를 통합한 도구입니다. 이 작업을 모바일 애플리케이션 개발자와 보안 전문가에게 더 쉽고 친숙하게 만드는 것이 목표입니다.
**MARA**는 **모바일 애플리케이션 역공학 및 분석 프레임워크**입니다. 이는 OWASP 모바일 보안 위협에 대해 모바일 애플리케이션을 테스트하는 데 도움을 주기 위해 일반적으로 사용되는 모바일 애플리케이션 역공학 및 분석 도구를 모은 도구입니다. 이 작업을 모바일 애플리케이션 개발자와 보안 전문가에게 더 쉽고 친숙하게 만드는 것이 목표입니다.
다음과 같은 기능을 제공합니다:
@ -677,7 +677,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
## 코드 난독화/디오브스큐레이션
코드를 난독화하는 데 사용하는 서비스와 구성에 따라 비밀이 난독화될 수도 있고 그렇지 않을 수도 있습니다.
사용하는 서비스와 구성에 따라 코드 난독화에 따라 비밀이 난독화될 수도 있고 그렇지 않을 수도 있습니다.
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
@ -717,13 +717,13 @@ APKiD는 **APK가 어떻게 만들어졌는지**에 대한 정보를 제공합
### Manual
[사용자 정의 난독화를 리버스하는 방법에 대한 몇 가지 요령을 배우려면 이 튜토리얼을 읽으세요](manual-deobfuscation.md)
[사용자 정의 난독화를 역전하는 방법에 대한 몇 가지 요령을 배우려면 이 튜토리얼을 읽으세요](manual-deobfuscation.md)
## Labs
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4b는 Ubuntu-mate를 기반으로 한 Android 보안 가상 머신으로, 리버스 엔지니어링 및 악성코드 분석을 위한 다양한 보안 전문가와 연구자들의 최신 프레임워크, 튜토리얼 및 실습을 포함합니다.
AndroL4b는 우분투-메이트 기반의 Android 보안 가상 머신으로, 다양한 보안 전문가와 연구자들로부터 최신 프레임워크, 튜토리얼 및 실험실을 포함합니다.
## References

View File

@ -13,7 +13,7 @@ Shizuku는 **`app_process`**를 사용하여 특권 Java 프로세스를 생성
---
## 1. 특권 서비스 시작하기
`moe.shizuku.privileged.api`는 세 가지 방법으로 시작할 수 있으며, 결과 Binder 서비스는 모두 동일하게 작합니다.
`moe.shizuku.privileged.api`는 세 가지 방법으로 시작할 수 있으며, 결과 Binder 서비스는 모두 동일하게 작합니다.
### 1.1 무선 ADB (Android 11+)
1. **개발자 옵션 ➜ 무선 디버깅**을 활성화하고 장치를 페어링합니다.
@ -39,11 +39,11 @@ su -c sh /data/adb/shizuku/start.sh
```bash
adb shell dumpsys activity service moe.shizuku.privileged.api | head
```
성공적인 시작은 `Running services (1)`와 함께 특권 프로세스의 PID를 반환합니다.
A successful start returns `Running services (1)` together with the PID of the privileged process.
---
## 2. 애플리케이션에서 바인딩
타사 앱은 `AndroidManifest.xml` 내에 다음만 필요합니다:
서드파티 앱은 `AndroidManifest.xml` 내에 다음만 필요합니다:
```xml
<uses-permission android:name="moe.shizuku.manager.permission.API"/>
```
@ -98,9 +98,9 @@ pm uninstall --user 0 com.miui.weather2
---
## 4. 보안 고려사항 / 탐지
1. Shizuku는 **ADB 디버깅** 권한이 필요하므로 _개발자 옵션 → USB/무선 디버깅_이 **활성화**되어 있어야 합니다.
1. Shizuku는 **ADB 디버깅** 권한이 필요하므로 _개발자 옵션 → USB/무선 디버깅_이 **활성화**되어야 합니다.
조직은 MDM을 통해 또는 `settings put global development_settings_enabled 0`를 통해 이를 차단할 수 있습니다.
2. 서비스는 `moe.shizuku.privileged.api`라는 이름으로 등록됩니다.
2. 서비스는 `moe.shizuku.privileged.api`라는 이름으로 자신을 등록합니다.
간단한 `adb shell service list | grep shizuku` (또는 엔드포인트 보안 규칙)가 그 존재를 감지합니다.
3. 기능은 `shell` 사용자가 이미 할 수 있는 것에 제한됩니다 **루트가 아닙니다**.
`system` 또는 `root` 사용자가 필요한 민감한 API는 여전히 접근할 수 없습니다.
@ -110,14 +110,14 @@ pm uninstall --user 0 com.miui.weather2
## 5. 완화
* 생산 장치에서 USB/무선 디버깅을 비활성화합니다.
* `moe.shizuku.privileged.api`를 노출하는 Binder 서비스를 모니터링합니다.
* 관리되지 않는 애플리케이션에서 AIDL 인터페이스를 차단하기 위해 SELinux 정책 (Android 엔터프라이즈)을 사용합니다.
* 관리되지 않는 애플리케이션에서 AIDL 인터페이스를 차단하기 위해 SELinux 정책(안드로이드 기업)을 사용합니다.
---
## 참조
- [Blog Shizuku: Unlocking Advanced Android Capabilities Without Root](https://www.mobile-hacker.com/2025/07/14/shizuku-unlocking-advanced-android-capabilities-without-root/)
- [Shizuku 공식 문서](https://shizuku.rikka.app/)
- [awesome-shizuku 지원되는 앱 목록](https://github.com/timschneeb/awesome-shizuku)
- [Shizuku Official Documentation](https://shizuku.rikka.app/)
- [awesome-shizuku list of supported apps](https://github.com/timschneeb/awesome-shizuku)
- [rish shell (privileged reverse-adb shell)](https://github.com/RikkaApps/Shizuku/blob/master/RISH.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,11 +4,12 @@
## Main idea
**`get_task_allow`** 권한으로 서명된 애플리케이션은 타사 애플리케이션이 **`task_for_pid()`**라는 함수를 초기 애플리케이션의 프로세스 ID를 인수로 사용하여 실행할 수 있도록 허용하여 해당 작업 포트를 얻고(제어하고 메모리에 접근할 수 있게) 합니다.
**`get_task_allow`** 권한으로 서명된 애플리케이션은 타사 애플리케이션이 **`task_for_pid()`**라는 함수를 실행할 수 있도록 허용하며, 이 함수는 초기 애플리케이션의 프로세스 ID를 인수로 받아 해당 작업 포트를 가져옵니다(제어하고 메모리에 접근할 수 있게 됨).
하지만 IPA를 가져와서 권한으로 재서명한 후 장치에 다시 플래시하는 것은 그리 간단하지 않습니다. 이는 FairPlay 보호 때문입니다. 앱의 서명이 변경되면 DRM(디지털 권리 관리) 키가 **무효화되어 앱이 작동하지 않습니다**.
하지만 IPA를 가져와서 권한으로 재서명한 후 장치에 다시 플래시하는 것은 그리 간단하지 않습니다. 이는 FairPlay 보호 때문입니다. 앱의 서명이 변경되면 DRM(디지털 권리 관리) 키가 **무효화되며 앱이 작동하지 않습니다**.
구형 탈옥된 장치에서는 IPA를 설치하고, **좋아하는 도구**(예: Iridium 또는 frida-ios-dump)를 사용하여 복호화한 후 장치에서 다시 가져올 수 있습니다. 가능하다면 복호화된 IPA를 클라이언트에게 요청하는 것이 좋습니다.
구형 탈옥된 장치에서는 IPA를 설치하고, **좋아하는 도구**(예: Iridium 또는 frida-ios-dump)를 사용하여 복호화한 후 장치에서 다시 가져오는 것이 가능합니다. 그러나 가능하다면 복호화된 IPA를 클라이언트에게 요청하는 것이 좋습니다.
## Obtain decrypted IPA
@ -18,16 +19,17 @@
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`에 다운로드되어 있으며, 여기서 가져올 수 있습니다.
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를 복호화하기 위해 설치할 것입니다. 그러나 구형 탈옥된 iPhone이 있는 경우, 애플리케이션에서 지원하지 않을 가능성이 높습니다. 일반적으로 앱은 최신 버전만 지원합니다.
따라서 설치하려면 IPA를 압축 해제하세요:
따라서 설치하기 위해 IPA를 압축 해제합니다:
```bash
unzip redacted.ipa -d unzipped
```
@ -49,11 +51,11 @@ Cydia에서 **AppSync Unified tweak**가 필요할 수 있으니 `invalid signat
### 권한 패치 및 재서명
`get-task-allow` 권한으로 애플리케이션을 재서명하기 위해 `app-signer`, `codesign`, `iResign`과 같은 여러 도구를 사용할 수 있습니다. `app-signer`는 재서명할 IPA 파일을 지정하고 **`get-task-allow`**를 설정하며 사용할 인증서와 프로비저닝 프로필을 쉽게 지정할 수 있는 매우 사용자 친화적인 인터페이스를 제공합니다.
`get-task-allow` 권한으로 애플리케이션을 재서명하기 위해 `app-signer`, `codesign`, `iResign`과 같은 여러 도구 있습니다. `app-signer`는 재서명할 IPA 파일을 지정하고 **`get-task-allow`**를 설정하며 사용할 인증서와 프로비저닝 프로필을 쉽게 지정할 수 있는 매우 사용자 친화적인 인터페이스를 제공합니다.
인증서 및 서명 프로필에 관해서는 Apple이 Xcode를 통해 모든 계정에 **무료 개발자 서명 프로필**을 제공합니다. 앱을 생성하고 하나를 구성하세요. 그런 다음, `Settings``Privacy & Security`로 이동하여 **개발자 앱을 신뢰하도록 iPhone을 구성**하세요. `Developer Mode`를 클릭합니다.
재서명된 IPA로, 이제 장치에 설치하여 펜테스트를 진행할 시간입니다:
재서명된 IPA로 이제 장치에 설치하여 펜테스트를 진행할 시간입니다:
```bash
ideviceinstaller -i resigned.ipa -w
```
@ -61,7 +63,7 @@ ideviceinstaller -i resigned.ipa -w
### 개발자 모드 활성화 (iOS 16+)
iOS 16부터 Apple은 **개발자 모드**를 도입했습니다: `get_task_allow`를 포함하거나 개발 인증서로 서명된 모든 바이너리는 장치에서 개발자 모드가 활성화될 때까지 실행을 거부합니다. 이 플래그가 켜져 있지 않으면 Frida/LLDB를 연결할 수 없습니다.
iOS 16부터 Apple은 **개발자 모드**를 도입했습니다: `get_task_allow`를 포함하거나 개발 인증서로 서명된 이진 파일은 장치에서 개발자 모드가 활성화될 때까지 실행을 거부합니다. 이 플래그가 켜져 있지 않으면 Frida/LLDB를 연결할 수 없습니다.
1. **임의의** 개발자 서명 IPA를 전화기에 설치하거나 푸시합니다.
2. **설정 → 개인 정보 보호 및 보안 → 개발자 모드**로 이동하여 활성화합니다.
@ -75,7 +77,7 @@ iOS 16부터 Apple은 **개발자 모드**를 도입했습니다: `get_task_allo
| 도구 | 요구 사항 | 강점 | 제한 사항 |
|------|--------------|-----------|-------------|
| **AltStore 2 / SideStore** | 매 7일마다 무료 개발 프로필로 IPA를 재서명하는 macOS/Windows/Linux 동반자 | Wi-Fi를 통한 자동 재로드, iOS 17까지 작동 | 동일 네트워크에 있는 컴퓨터 필요, Apple에 의해 3개 앱 제한 |
| **AltStore 2 / SideStore** | 매 7일마다 무료 개발 프로필로 IPA를 재서명하는 macOS/Windows/Linux 동반자 | Wi-Fi를 통한 자동 재로드, iOS 17까지 작동 | 동일 네트워크에 있는 컴퓨터 필요, Apple에서 부과한 3개 앱 제한 |
| **TrollStore 1/2** | CoreTrust 버그에 취약한 iOS 14 15.4.1 장치 | *영구* 서명 (7일 제한 없음); 설치 후 컴퓨터 필요 없음 | iOS 15.5+에서 지원되지 않음 (버그 패치됨) |
현재 iOS 버전에서의 정기적인 펜테스트를 위해 Alt/Side-Store가 일반적으로 가장 실용적인 선택입니다.

View File

@ -69,15 +69,15 @@ Command: msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_version; set RHOS
```
### Recent Vulnerabilities (2022-2025)
* **CVE-2024-45698 D-Link Wi-Fi 6 routers (DIR-X4860)**: 내장된 Telnet 서비스는 하드코딩된 자격 증명을 수용하고 입력을 정리하지 않아, 포트 23에서 조작된 명령을 통해 인증되지 않은 원격 RCE를 루트로 허용합니다. 펌웨어 ≥ 1.04B05에서 수정됨.
* **CVE-2024-45698 D-Link Wi-Fi 6 routers (DIR-X4860)**: 내장된 Telnet 서비스는 하드코딩된 자격 증명을 수용하고 입력을 정리하지 않아, 포트 23에서 조작된 명령을 통해 루트로서 인증되지 않은 원격 RCE를 허용합니다. 펌웨어 ≥ 1.04B05에서 수정됨.
* **CVE-2023-40478 NETGEAR RAX30**: Telnet CLI `passwd` 명령에서 스택 기반 버퍼 오버플로우가 발생하여 인접한 공격자가 인증을 우회하고 루트로서 임의 코드를 실행할 수 있게 합니다.
* **CVE-2022-39028 GNU inetutils telnetd**: 두 바이트 시퀀스(`0xff 0xf7` / `0xff 0xf8`)가 NULL 포인터 역참조를 유발하여 `telnetd`를 충돌시킬 수 있으며, 여러 번의 충돌 후 지속적인 DoS를 초래합니다.
취약점 분류 중 이러한 CVE를 염두에 두십시오. 대상이 패치되지 않은 펌웨어 또는 레거시 inetutils Telnet 데몬을 실행 중이라면 코드 실행 또는 방해가 되는 DoS로의 직선 경로가 있을 수 있습니다.
취약점 분류 중 이러한 CVE를 염두에 두십시오대상이 패치되지 않은 펌웨어 또는 레거시 inetutils Telnet 데몬을 실행 중이라면 코드 실행 또는 방해가 되는 DoS로의 직선 경로가 있을 수 있습니다.
### Sniffing Credentials & Man-in-the-Middle
Telnet은 자격 증명을 포함한 모든 것을 **명확한 텍스트**로 전송합니다. 이를 캡처하는 두 가지 빠른 방법:
Telnet은 자격 증명을 포함한 모든 것을 **명확한 텍스트**로 전송합니다. 자격 증명을 캡처하는 두 가지 빠른 방법:
```bash
# Live capture with tcpdump (print ASCII)
sudo tcpdump -i eth0 -A 'tcp port 23 and not src host $(hostname -I | cut -d" " -f1)'
@ -85,7 +85,7 @@ sudo tcpdump -i eth0 -A 'tcp port 23 and not src host $(hostname -I | cut -d" "
# Wireshark display filter
tcp.port == 23 && (telnet.data || telnet.option)
```
활성 MITM의 경우, ARP 스푸핑(e.g. `arpspoof`/`ettercap`)을 동일한 스니핑 필터와 결합하여 스위치 네트워크에서 비밀번호를 수집합니다.
활성 MITM의 경우, ARP 스푸핑(예: `arpspoof`/`ettercap`)을 동일한 스니핑 필터와 결합하여 스위치 네트워크에서 비밀번호를 수집합니다.
### 자동화된 무차별 대입 / 비밀번호 스프레이링
```bash
@ -116,7 +116,7 @@ Metasploit에는 여러 유용한 모듈이 있습니다:
1. SSH를 선호하고 Telnet 서비스를 완전히 비활성화하세요.
2. Telnet이 필요한 경우 관리 VLAN에만 바인딩하고 ACL을 적용하며 데몬을 TCP 래퍼로 감싸세요 (`/etc/hosts.allow`).
3. 레거시 `telnetd` 구현을 `ssl-telnet` 또는 `telnetd-ssl`로 교체하여 전송 암호화를 추가하되, **이는 데이터 전송 중 보호만 제공하며 비밀번호 추측은 여전히 간단합니다**.
4. 포트 23으로의 아웃바운드 트래픽을 모니터링하세요; 타협은 종종 엄격한 HTTP 이그레스 필터를 우회하기 위해 Telnet을 통해 리버스 쉘을 생성합니다.
4. 포트 23으로의 아웃바운드 트래픽을 모니터링하세요; 타협은 종종 엄격한 HTTP 이gress 필터를 우회하기 위해 Telnet을 통해 리버스 쉘을 생성합니다.
## References

View File

@ -4,9 +4,9 @@
## 개요
LESS는 변수, 믹스인, 함수 및 강력한 `@import` 지시어를 추가하는 인기 있는 CSS 전처리기입니다. 컴파일 중에 LESS 엔진은 **`@import`** 문에서 참조된 리소스를 **가져와서** `(inline)` 옵션이 사용될 때 결과 CSS에 그 내용을 포함합니다.
LESS는 변수, 믹스인, 함수 및 강력한 `@import` 지시어를 추가하는 인기 있는 CSS 전처리기입니다. 컴파일 중에 LESS 엔진은 **`@import`** 문에서 참조된 리소스를 **가져와서** `(inline)` 옵션이 사용될 때 결과 CSS에 그 내용을 포함("인라인")합니다.
응용 프로그램이 **사용자 제어 입력**을 LESS 컴파일러에 의해 나중에 구문 분석되는 문자열에 연결할 때, 공격자는 **임의의 LESS 코드를 주입할 수 있습니다**. `@import (inline)`을 악용하여 공격자는 서버가 다음을 검색하도록 강제할 수 있습니다:
응용 프로그램이 **사용자 제어 입력**을 LESS 컴파일러에 의해 나중에 구문 분석되는 문자열에 연결할 때, 공격자는 **임의의 LESS 코드를 주입**할 수 있습니다. `@import (inline)`을 악용하여 공격자는 서버가 다음을 검색하도록 강제할 수 있습니다:
* `file://` 프로토콜을 통한 로컬 파일 (정보 유출 / 로컬 파일 포함).
* 내부 네트워크 또는 클라우드 메타데이터 서비스의 원격 리소스 (SSRF).
@ -50,13 +50,13 @@ sed -n 's/.*@@END@@\(.*\)/\1/p'
## Detection
* 동적으로 생성된 `.less` 또는 `.css` 응답에서 비정제 쿼리 매개변수를 찾으십시오.
* 코드 검토 중에 LESS 렌더 함수에 전달된 `"@media all { .preview { ... ${userInput} ... } }"`와 같은 구성을 검색하십시오.
* 코드 검토 중에 `"@media all { .preview { ... ${userInput} ... } }"`와 같은 구문이 LESS 렌더 함수에 전달되는지 검색하십시오.
* 익스플로잇 시도에는 종종 `@import`, `(inline)`, `file://`, `http://169.254.169.254` 등이 포함됩니다.
## Mitigations
* 신뢰할 수 없는 데이터를 LESS 컴파일러에 전달하지 마십시오.
* 동적 값이 필요한 경우, 적절하게 **이스케이프**/정하십시오 (예: 숫자 토큰으로 제한, 화이트리스트).
* 동적 값이 필요한 경우, 적절하게 **이스케이프**/정하십시오 (예: 숫자 토큰으로 제한, 화이트리스트).
* 가능할 경우 `(inline)` 임포트를 사용할 수 있는 기능을 비활성화하거나 허용된 프로토콜을 `https`로 제한하십시오.
* 종속성을 최신 상태로 유지하십시오 SugarCRM은 13.0.4 및 14.0.1 버전에서 이 문제를 패치했습니다.

View File

@ -2,10 +2,10 @@
{{#include ../../banners/hacktricks-training.md}}
인터넷에는 **기본/약한** 로그인 자격 증명으로 LDAP에 구성된 프린터의 위험성을 **강조하는** 여러 블로그가 있습니다. \
이는 공격자가 **프린터를 속여 악성 LDAP 서버에 인증하도록** 할 수 있기 때문입니다 (일반적으로 `nc -vv -l -p 389` 또는 `slapd -d 2`면 충분합니다) 그리고 프린터의 **자격 증명을 평문으로** 캡처할 수 있습니다.
인터넷에는 **기본/약한** 로그인 자격 증명으로 LDAP에 구성된 프린터의 위험성을 **강조하는 여러 블로그**가 있습니다. \
이는 공격자가 프린터를 **악성 LDAP 서버에 인증하도록 속일 수 있기 때문입니다** (일반적으로 `nc -vv -l -p 389` 또는 `slapd -d 2`면 충분합니다) 그리고 프린터의 **자격 증명을 평문으로 캡처할 수 있습니다**.
또한, 여러 프린터는 **사용자 이름이 포함된 로그**를 포함하거나 도메인 컨트롤러에서 **모든 사용자 이름을 다운로드**할 수 있습니다.
또한, 여러 프린터는 **사용자 이름이 포함된 로그**를 포함하거나 도메인 컨트롤러에서 **모든 사용자 이름을 다운로드할 수** 있습니다.
이 모든 **민감한 정보**와 일반적인 **보안 부족**은 프린터를 공격자에게 매우 흥미롭게 만듭니다.
@ -18,7 +18,7 @@
## 프린터 구성
- **위치**: LDAP 서버 목록은 일반적으로 웹 인터페이스에서 찾을 수 있습니다 (예: *Network ➜ LDAP Setting ➜ Setting Up LDAP*).
- **동작**: 많은 임베디드 웹 서버는 **자격 증명을 다시 입력하지 않고도** LDAP 서버 수정을 허용합니다 (사용성 기능 → 보안 위험).
- **동작**: 많은 임베디드 웹 서버는 **자격 증명을 다시 입력하지 않고도 LDAP 서버 수정을 허용합니다** (사용성 기능 → 보안 위험).
- **악용**: LDAP 서버 주소를 공격자가 제어하는 호스트로 리디렉션하고 *Test Connection* / *Address Book Sync* 버튼을 사용하여 프린터가 당신에게 바인딩하도록 강제합니다.
---
@ -32,7 +32,7 @@ sudo nc -k -v -l -p 389 # LDAPS → 636 (or 3269)
### 방법 2 전체 악성 LDAP 서버 (권장)
많은 장치가 인증하기 *전에* 익명 검색을 수행하기 때문에, 실제 LDAP 데몬을 설정하면 훨씬 더 신뢰할 수 있는 결과를 얻을 수 있습니다:
많은 장치가 인증하기 *전에* 익명 검색을 수행하기 때문에 실제 LDAP 데몬을 설정하면 훨씬 더 신뢰할 수 있는 결과를 얻을 수 있습니다:
```bash
# Debian/Ubuntu example
sudo apt install slapd ldap-utils
@ -43,7 +43,7 @@ slapd -d 2 -h "ldap:///" # only LDAP, no LDAPS
```
프린터가 조회를 수행할 때 디버그 출력에서 평문 자격 증명을 볼 수 있습니다.
> 💡 `impacket/examples/ldapd.py` (Python rogue LDAP) 또는 `Responder -w -r -f`를 사용하여 LDAP/SMB를 통해 NTLMv2 해시를 수집할 수 있습니다.
> 💡 `impacket/examples/ldapd.py` (Python rogue LDAP) 또는 `Responder -w -r -f`를 사용하여 LDAP/SMB를 통해 NTLMv2 해시를 수집할 수 있습니다.
---
## 최근 패스백 취약점 (2024-2025)
@ -52,12 +52,12 @@ slapd -d 2 -h "ldap:///" # only LDAP, no LDAPS
### Xerox VersaLink CVE-2024-12510 & CVE-2024-12511
Xerox VersaLink C70xx MFP의 펌웨어 ≤ 57.69.91는 인증된 관리자(또는 기본 자격 증명이 유지될 경우 누구나)가 다음을 수행할 수 있게 했습니다:
Xerox VersaLink C70xx MFP의 펌웨어 ≤ 57.69.91는 인증된 관리자(또는 기본 자격 증명이 남아 있는 경우 누구나)가 다음을 수행할 수 있게 했습니다:
* **CVE-2024-12510 LDAP 패스백**: LDAP 서버 주소를 변경하고 조회를 트리거하여 장치가 구성된 Windows 자격 증명을 공격자가 제어하는 호스트로 유출하게 합니다.
* **CVE-2024-12511 SMB/FTP 패스백**: *폴더로 스캔* 목적지를 통해 동일한 문제로 NetNTLMv2 또는 FTP 평문 자격 증명이 유출됩니다.
* **CVE-2024-12511 SMB/FTP 패스백**: *폴더로 스캔* 목적지를 통해 동일한 문제로 NetNTLMv2 또는 FTP 평문 자격 증명을 유출합니다.
간단한 리스너:
간단한 리스너는 다음과 같습니다:
```bash
sudo nc -k -v -l -p 389 # capture LDAP bind
```
@ -67,7 +67,7 @@ or a rogue SMB server (`impacket-smbserver`)는 자격 증명을 수집하기에
Canon은 수십 개의 레이저 및 MFP 제품군에서 **SMTP/LDAP 패스백** 취약점을 확인했습니다. 관리 액세스 권한이 있는 공격자는 서버 구성을 수정하고 LDAP **또는** SMTP에 저장된 자격 증명을 검색할 수 있습니다 (많은 조직이 스캔-투-메일을 허용하기 위해 특권 계정을 사용합니다).
제조업체의 지침은 명시적으로 다음을 권장합니다:
제조업체의 지침은 다음과 같이 명시적으로 권장합니다:
1. 가능한 한 빨리 패치된 펌웨어로 업데이트합니다.
2. 강력하고 고유한 관리자 비밀번호를 사용합니다.
@ -81,7 +81,7 @@ Canon은 수십 개의 레이저 및 MFP 제품군에서 **SMTP/LDAP 패스백**
| **PRET** (Printer Exploitation Toolkit) | PostScript/PJL/PCL 남용, 파일 시스템 접근, 기본 자격 증명 확인, *SNMP 발견* | `python pret.py 192.168.1.50 pjl` |
| **Praeda** | HTTP/HTTPS를 통해 구성 수집 (주소록 및 LDAP 자격 증명 포함) | `perl praeda.pl -t 192.168.1.50` |
| **Responder / ntlmrelayx** | SMB/FTP 패스백에서 NetNTLM 해시 캡처 및 중계 | `responder -I eth0 -wrf` |
| **impacket-ldapd.py** | 평문 바인드를 수신하기 위한 경량의 악성 LDAP 서비스 | `python ldapd.py -debug` |
| **impacket-ldapd.py** | 클리어 텍스트 바인드를 수신하기 위한 경량의 악성 LDAP 서비스 | `python ldapd.py -debug` |
---
## 강화 및 탐지
@ -91,7 +91,7 @@ Canon은 수십 개의 레이저 및 MFP 제품군에서 **SMTP/LDAP 패스백**
3. **관리 액세스 제한** 프린터 웹/IPP/SNMP 인터페이스를 관리 VLAN에 배치하거나 ACL/VPN 뒤에 두십시오.
4. **사용하지 않는 프로토콜 비활성화** FTP, Telnet, raw-9100, 구형 SSL 암호.
5. **감사 로깅 활성화** 일부 장치는 LDAP/SMTP 실패를 syslog할 수 있습니다; 예상치 못한 바인드를 상관관계합니다.
6. **비정상적인 출처에서 평문 LDAP 바인드를 모니터링**합니다 (프린터는 일반적으로 DC와만 통신해야 합니다).
6. **비정상적인 출처에서 클리어 텍스트 LDAP 바인드 모니터링** (프린터는 일반적으로 DC와만 통신해야 합니다).
7. **SNMPv3 또는 SNMP 비활성화** 커뮤니티 `public`은 종종 장치 및 LDAP 구성을 유출합니다.
---