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-wifi/ena
This commit is contained in:
parent
d7aca45712
commit
53aee4a591
@ -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
BIN
src/images/discount.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 186 KiB |
@ -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**"에서 볼 수 있습니다).
|
||||
|
||||
.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로 정적 분석을 수행하기 위한 훌륭한 도구**입니다.
|
||||
|
||||
.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
|
||||
|
||||
.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
|
||||
|
||||
|
@ -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}}
|
||||
|
@ -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가 일반적으로 가장 실용적인 선택입니다.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 버전에서 이 문제를 패치했습니다.
|
||||
|
||||
|
@ -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 구성을 유출합니다.
|
||||
|
||||
---
|
||||
|
Loading…
x
Reference in New Issue
Block a user