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
275bedbf4b
commit
1bf3241f4d
@ -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)
|
||||
|
@ -13,20 +13,21 @@ android-applications-basics.md
|
||||
## ADB (Android 调试桥)
|
||||
|
||||
这是您连接到 Android 设备(模拟或物理)的主要工具。\
|
||||
**ADB** 允许从计算机通过 **USB** 或 **网络** 控制设备。此工具使 **双向复制** 文件、**安装** 和 **卸载** 应用程序、**执行** shell 命令、**备份** 数据、**读取** 日志等功能成为可能。
|
||||
**ADB** 允许从计算机通过 **USB** 或 **网络** 控制设备。此工具使 **文件的双向复制**、**应用程序的安装和卸载**、**执行** shell 命令、**备份** 数据、**读取** 日志等功能成为可能。
|
||||
|
||||
查看以下 [**ADB 命令**](adb-commands.md) 列表,以了解如何使用 adb。
|
||||
|
||||
## Smali
|
||||
|
||||
有时修改 **应用程序代码** 以访问 **隐藏信息**(可能是经过良好混淆的密码或标志)是很有趣的。然后,反编译 apk、修改代码并重新编译可能会很有趣。\
|
||||
[**在本教程中**,您可以 **学习如何反编译 APK、修改 Smali 代码并使用新功能重新编译 APK**](smali-changes.md)。这在 **动态分析期间的几项测试中可能非常有用**。因此,**始终记住这个可能性**。
|
||||
[**在本教程中**,您可以 **学习如何反编译 APK、修改 Smali 代码并使用新功能重新编译 APK**](smali-changes.md)。这在 **动态分析期间的多项测试中可能非常有用**。因此,**始终记住这个可能性**。
|
||||
|
||||
## 其他有趣的技巧
|
||||
|
||||
- [在 Play 商店中伪装您的位置](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku 特权 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)
|
||||
- 从设备提取 APK:
|
||||
```bash
|
||||
@ -60,21 +61,21 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
### 寻找有趣的信息
|
||||
|
||||
仅通过查看 APK 的**字符串**,您可以搜索**密码**、**URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**api** 密钥、**加密**、**蓝牙 UUID**、**令牌**以及任何有趣的内容……甚至寻找代码执行的**后门**或身份验证后门(硬编码的管理员凭据)。
|
||||
仅查看 APK 的**字符串**,您可以搜索**密码**、**URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**api** 密钥、**加密**、**蓝牙 UUID**、**令牌**以及任何有趣的内容……甚至查找代码执行的**后门**或身份验证后门(硬编码的管理员凭据)。
|
||||
|
||||
**Firebase**
|
||||
|
||||
特别注意**firebase URL**,并检查其是否配置不当。[有关 Firebase 的更多信息以及如何利用它,请点击这里。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
特别注意**firebase URLs**,检查其是否配置不当。[有关 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"`) 的应用程序存在风险,因为它们允许连接,可能导致被利用。有关如何利用可调试应用程序的进一步理解,请参考有关在设备上查找和利用可调试应用程序的教程。
|
||||
- **可调试应用程序**:在 _Manifest.xml_ 文件中设置为可调试(`debuggable="true"`)的应用程序存在风险,因为它们允许连接,可能导致被利用。有关如何利用可调试应用程序的进一步理解,请参考关于在设备上查找和利用可调试应用程序的教程。
|
||||
- **备份设置**:对于处理敏感信息的应用程序,`android:allowBackup="false"` 属性应明确设置,以防止通过 adb 进行未经授权的数据备份,尤其是在启用 USB 调试时。
|
||||
- **网络安全**:_res/xml/_ 中的自定义网络安全配置 (`android:networkSecurityConfig="@xml/network_security_config"`) 可以指定安全细节,如证书固定和 HTTP 流量设置。一个例子是允许特定域的 HTTP 流量。
|
||||
- **网络安全**:_res/xml/_ 中的自定义网络安全配置(`android:networkSecurityConfig="@xml/network_security_config"`)可以指定安全细节,如证书钉扎和 HTTP 流量设置。一个例子是允许特定域的 HTTP 流量。
|
||||
- **导出活动和服务**:在清单中识别导出活动和服务可以突出可能被滥用的组件。在动态测试期间的进一步分析可以揭示如何利用这些组件。
|
||||
- **内容提供者和文件提供者**:暴露的内容提供者可能允许未经授权访问或修改数据。文件提供者的配置也应仔细审查。
|
||||
- **广播接收器和 URL 方案**:这些组件可能被利用进行攻击,特别注意如何管理 URL 方案以防止输入漏洞。
|
||||
@ -84,8 +85,8 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** 是一种攻击,其中**恶意** **应用程序**被启动并**定位在受害者应用程序的顶部**。一旦它可见地遮挡了受害者应用程序,其用户界面被设计成欺骗用户与之互动,同时将互动传递给受害者应用程序。\
|
||||
实际上,它是**让用户无法知道他们实际上是在对受害者应用程序执行操作**。
|
||||
**Tapjacking** 是一种攻击,其中**恶意** **应用程序**被启动并**位于受害者应用程序的顶部**。一旦它可见地遮挡了受害者应用程序,其用户界面被设计成欺骗用户与之交互,同时将交互传递给受害者应用程序。\
|
||||
实际上,它是**让用户不知道他们实际上是在对受害者应用程序执行操作**。
|
||||
|
||||
在这里找到更多信息:
|
||||
|
||||
@ -95,7 +96,7 @@ tapjacking.md
|
||||
|
||||
### 任务劫持
|
||||
|
||||
一个**活动**的**`launchMode`** 设置为**`singleTask`**,且未定义任何 `taskAffinity`,则容易受到任务劫持。这意味着,如果在真实应用程序之前安装并启动了一个**应用程序**,它可能会**劫持真实应用程序的任务**(因此用户将与**恶意应用程序**互动,以为自己在使用真实应用程序)。
|
||||
一个**活动**如果**`launchMode`** 设置为 **`singleTask`** 且没有定义任何 `taskAffinity`,则容易受到任务劫持。这意味着,如果在真实应用程序之前安装并启动了一个**应用程序**,它可能会**劫持真实应用程序的任务**(因此用户将与**恶意应用程序**交互,以为自己在使用真实应用程序)。
|
||||
|
||||
更多信息在:
|
||||
|
||||
@ -107,7 +108,7 @@ 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` 的使用。这些模式**可能会暴露**文件给**意外或未经授权的访问**。
|
||||
@ -131,11 +132,11 @@ android-task-hijacking.md
|
||||
外部存储可以在 `/storage/emulated/0`、`/sdcard`、`/mnt/sdcard` 中访问。
|
||||
|
||||
> [!TIP]
|
||||
> 从 Android 4.4(**API 17**)开始,SD 卡具有一个目录结构,**限制应用程序访问特定于该应用程序的目录**。这防止恶意应用程序获得对其他应用程序文件的读写访问。
|
||||
> 从 Android 4.4(**API 17**)开始,SD 卡具有目录结构,这**限制了应用程序对特定于该应用程序的目录的访问**。这防止恶意应用程序获得对其他应用程序文件的读写访问。
|
||||
|
||||
**以明文存储的敏感数据**
|
||||
|
||||
- **共享偏好**:Android 允许每个应用程序轻松地在路径 `/data/data/<packagename>/shared_prefs/` 中保存 xml 文件,有时可以在该文件夹中找到明文的敏感信息。
|
||||
- **共享首选项**:Android 允许每个应用程序轻松地在路径 `/data/data/<packagename>/shared_prefs/` 中保存 xml 文件,有时可以在该文件夹中找到明文的敏感信息。
|
||||
- **数据库**:Android 允许每个应用程序轻松地在路径 `/data/data/<packagename>/databases/` 中保存 sqlite 数据库,有时可以在该文件夹中找到明文的敏感信息。
|
||||
|
||||
### TLS 破坏
|
||||
@ -147,7 +148,7 @@ android-task-hijacking.md
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
测试此项的一个好方法是尝试使用一些代理(如 Burp)捕获流量,而不在设备中授权 Burp CA。此外,您还可以使用 Burp 为不同的主机名生成证书并使用它。
|
||||
测试此项的一个好方法是尝试使用像 Burp 这样的代理捕获流量,而不在设备中授权 Burp CA。此外,您还可以使用 Burp 为不同的主机名生成证书并使用它。
|
||||
|
||||
### 破损的加密
|
||||
|
||||
@ -157,14 +158,14 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
|
||||
**使用不安全和/或过时的算法**
|
||||
|
||||
开发人员不应使用**过时的算法**来执行授权**检查**、**存储**或**发送**数据。这些算法包括:RC4、MD4、MD5、SHA1……如果**哈希**用于存储密码,例如,应该使用带盐的抗暴力破解**哈希**。
|
||||
开发人员不应使用 **过时的算法** 来执行授权 **检查**、**存储** 或 **发送** 数据。这些算法包括:RC4、MD4、MD5、SHA1……如果 **哈希** 用于存储密码,例如,应该使用带盐的抗暴力破解的哈希。
|
||||
|
||||
### 其他检查
|
||||
|
||||
- 建议**混淆 APK**,以增加攻击者的反向工程难度。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该执行**自己的检查以查看手机是否已被 root**,并采取相应措施。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该检查是否正在使用**模拟器**。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该**在执行之前检查自身的完整性**,以检查是否被修改。
|
||||
- 建议对 **APK 进行混淆**,以增加攻击者的反向工程难度。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该执行 **自己的检查以查看手机是否已被 root** 并采取相应措施。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该检查是否正在使用 **模拟器**。
|
||||
- 如果应用程序是敏感的(如银行应用),它应该 **在执行之前检查自身的完整性** 以确认是否被修改。
|
||||
- 使用 [**APKiD**](https://github.com/rednaga/APKiD) 检查构建 APK 时使用的编译器/打包器/混淆器
|
||||
|
||||
### React Native 应用程序
|
||||
@ -185,17 +186,17 @@ react-native-application.md
|
||||
|
||||
### 超级打包应用程序
|
||||
|
||||
根据这篇 [**博客文章**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/),超级打包是一种将应用程序内容压缩为单个文件的 Meta 算法。该博客讨论了创建一个可以解压这些类型应用程序的应用程序的可能性……以及一种更快的方法,即**执行应用程序并从文件系统中收集解压缩的文件**。
|
||||
根据这篇 [**博客文章**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/),超级打包是一种将应用程序内容压缩为单个文件的 Meta 算法。该博客讨论了创建一个可以解压这些类型应用程序的应用程序的可能性……以及一种更快的方法,即 **执行应用程序并从文件系统中收集解压缩的文件。**
|
||||
|
||||
### 自动化静态代码分析
|
||||
|
||||
工具 [**mariana-trench**](https://github.com/facebook/mariana-trench) 能够通过**扫描**应用程序的**代码**来发现**漏洞**。该工具包含一系列**已知源**(指示工具**用户控制的输入**的**位置**)、**汇**(指示工具**危险**的**位置**,恶意用户输入可能造成损害)和**规则**。这些规则指示**源-汇**的**组合**,表明存在漏洞。
|
||||
工具 [**mariana-trench**](https://github.com/facebook/mariana-trench) 能够通过 **扫描** 应用程序的 **代码** 来发现 **漏洞**。该工具包含一系列 **已知源**(指示工具 **用户控制的输入** 的 **位置**)、**汇**(指示工具 **危险** **位置**,恶意用户输入可能造成损害)和 **规则**。这些规则指示 **源-汇** 的 **组合**,表明存在漏洞。
|
||||
|
||||
通过这些知识,**mariana-trench 将审查代码并找到可能的漏洞**。
|
||||
|
||||
### 泄露的秘密
|
||||
|
||||
应用程序可能包含秘密(API 密钥、密码、隐藏的 URL、子域名……)在其中,您可能能够发现。您可以使用工具,例如 [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
应用程序可能包含秘密(API 密钥、密码、隐藏的 URL、子域名……)在其中,您可能能够发现。您可以使用工具如 [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
|
||||
### 绕过生物识别认证
|
||||
|
||||
@ -205,10 +206,10 @@ bypass-biometric-authentication-android.md
|
||||
|
||||
### 其他有趣的功能
|
||||
|
||||
- **代码执行**:`Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **发送短信**:`sendTextMessage, sendMultipartTestMessage`
|
||||
- **声明为 `native` 的本地函数**:`public native, System.loadLibrary, System.load`
|
||||
- [阅读此文以了解**如何反向工程本地函数**](reversing-native-libraries.md)
|
||||
- **代码执行**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **发送短信**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **声明为 `native` 的本地函数**: `public native, System.loadLibrary, System.load`
|
||||
- [阅读此文以了解 **如何反向工程本地函数**](reversing-native-libraries.md)
|
||||
|
||||
### **其他技巧**
|
||||
|
||||
@ -226,96 +227,96 @@ content-protocol.md
|
||||
|
||||
### 在线动态分析
|
||||
|
||||
您可以在 [https://appetize.io/](https://appetize.io) 创建一个**免费账户**。该平台允许您**上传**和**执行** APK,因此它对于查看 APK 的行为非常有用。
|
||||
您可以在 [https://appetize.io/](https://appetize.io) 创建一个 **免费账户**。该平台允许您 **上传** 和 **执行** APK,因此它对于查看 APK 的行为非常有用。
|
||||
|
||||
您甚至可以在网页上**查看应用程序的日志**并通过**adb**连接。
|
||||
您甚至可以在网页上 **查看应用程序的日志** 并通过 **adb** 连接。
|
||||
|
||||
.png>)
|
||||
|
||||
通过 ADB 连接,您可以在模拟器中使用**Drozer**和**Frida**。
|
||||
通过 ADB 连接,您可以在模拟器中使用 **Drozer** 和 **Frida**。
|
||||
|
||||
### 本地动态分析
|
||||
|
||||
#### 使用模拟器
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio)(您可以创建**x86**和**arm**设备,并且根据 [**此**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**最新的 x86** 版本**支持 ARM 库**,无需慢速的 arm 模拟器)。
|
||||
- [**Android Studio**](https://developer.android.com/studio)(您可以创建 **x86** 和 **arm** 设备,并且根据 [**此**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**最新的 x86** 版本 **支持 ARM 库**,无需慢速的 arm 模拟器)。
|
||||
- 学习如何在此页面上设置:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(免费版:**个人版,您需要创建一个账户。_建议**下载**带有_**VirtualBox**的版本,以避免潜在错误。_)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(免费版:**个人版,您需要创建一个账户。_建议 **下载** 带有 _**VirtualBox** 的版本,以避免潜在错误。_)
|
||||
- [**Nox**](https://es.bignox.com)(免费,但不支持 Frida 或 Drozer)。
|
||||
|
||||
> [!TIP]
|
||||
> 创建新模拟器时,请记住,屏幕越大,模拟器运行越慢。因此,如果可能,请选择小屏幕。
|
||||
|
||||
要在 Genymotion 中**安装 Google 服务**(如 AppStore),您需要单击以下图像中红色标记的按钮:
|
||||
要在 Genymotion 中 **安装 Google 服务**(如 AppStore),您需要单击以下图像中红色标记的按钮:
|
||||
|
||||
.png>)
|
||||
|
||||
此外,请注意在 Genymotion 的**Android VM 配置中**,您可以选择**桥接网络模式**(如果您将从不同的 VM 连接到 Android VM,这将非常有用)。
|
||||
此外,请注意在 **Genymotion 中的 Android VM 配置**中,您可以选择 **桥接网络模式**(如果您将从不同的 VM 连接到 Android VM,这将非常有用)。
|
||||
|
||||
#### 使用物理设备
|
||||
|
||||
您需要激活**调试**选项,如果您能**root**它,那就更好了:
|
||||
您需要激活 **调试** 选项,如果您能 **root** 它,那就更好了:
|
||||
|
||||
1. **设置**。
|
||||
2. (从 Android 8.0 开始)选择**系统**。
|
||||
3. 选择**关于手机**。
|
||||
4. 按**构建号** 7 次。
|
||||
5. 返回,您将找到**开发者选项**。
|
||||
2. (从 Android 8.0 开始)选择 **系统**。
|
||||
3. 选择 **关于手机**。
|
||||
4. 按 **构建号** 7 次。
|
||||
5. 返回,您将找到 **开发者选项**。
|
||||
|
||||
> 一旦您安装了应用程序,您首先应该尝试它并调查它的功能、工作原理,并与之熟悉。\
|
||||
> 我建议使用 MobSF 动态分析 + pidcat 进行此初步动态分析,这样我们就可以在 MobSF **捕获**大量**有趣的**数据时**了解应用程序的工作原理**,您可以稍后查看这些数据。
|
||||
> 我建议使用 MobSF 动态分析 + pidcat 进行此初步动态分析,这样我们就可以在 MobSF **捕获** 大量 **有趣的** **数据** 供您稍后查看的同时 **了解应用程序的工作原理**。
|
||||
|
||||
### 意外数据泄露
|
||||
|
||||
**日志记录**
|
||||
|
||||
开发人员应谨慎公开**调试信息**,因为这可能导致敏感数据泄露。建议使用工具 [**pidcat**](https://github.com/JakeWharton/pidcat) 和 `adb logcat` 监控应用程序日志,以识别和保护敏感信息。**Pidcat**因其易用性和可读性而受到青睐。
|
||||
开发人员应谨慎公开 **调试信息**,因为这可能导致敏感数据泄露。建议使用工具 [**pidcat**](https://github.com/JakeWharton/pidcat) 和 `adb logcat` 来监控应用程序日志,以识别和保护敏感信息。**Pidcat** 因其易用性和可读性而受到青睐。
|
||||
|
||||
> [!WARNING]
|
||||
> 请注意,从**Android 4.0 及更高版本**开始,**应用程序只能访问自己的日志**。因此,应用程序无法访问其他应用的日志。\
|
||||
> 无论如何,仍然建议**不要记录敏感信息**。
|
||||
> 请注意,从 **Android 4.0 及更高版本** 开始,**应用程序只能访问自己的日志**。因此,应用程序无法访问其他应用的日志。\
|
||||
> 无论如何,仍然建议 **不要记录敏感信息**。
|
||||
|
||||
**复制/粘贴缓冲区缓存**
|
||||
|
||||
Android 的**基于剪贴板**的框架使应用程序能够实现复制粘贴功能,但也带来了风险,因为**其他应用程序**可以**访问**剪贴板,可能会暴露敏感数据。对于应用程序的敏感部分(如信用卡详细信息),至关重要的是**禁用复制/粘贴**功能,以防止数据泄露。
|
||||
Android 的 **基于剪贴板** 的框架使应用程序能够实现复制粘贴功能,但也带来了风险,因为 **其他应用程序** 可以 **访问** 剪贴板,可能会暴露敏感数据。对于应用程序的敏感部分(如信用卡详细信息),至关重要的是 **禁用复制/粘贴** 功能,以防止数据泄露。
|
||||
|
||||
**崩溃日志**
|
||||
|
||||
如果应用程序**崩溃**并**保存日志**,这些日志可能会帮助攻击者,特别是当应用程序无法被反向工程时。为了降低此风险,避免在崩溃时记录日志,如果必须通过网络传输日志,请确保通过 SSL 通道发送以确保安全。
|
||||
如果应用程序 **崩溃** 并 **保存日志**,这些日志可能会帮助攻击者,特别是当应用程序无法被反向工程时。为了降低此风险,避免在崩溃时记录日志,如果必须通过网络传输日志,请确保通过 SSL 通道发送以确保安全。
|
||||
|
||||
作为渗透测试人员,**请查看这些日志**。
|
||||
作为渗透测试者,**请查看这些日志**。
|
||||
|
||||
**发送给第三方的分析数据**
|
||||
|
||||
应用程序通常集成像 Google Adsense 这样的服务,由于开发人员的不当实现,可能会**泄露敏感数据**。为了识别潜在的数据泄露,建议**拦截应用程序的流量**并检查是否有任何敏感信息被发送到第三方服务。
|
||||
应用程序通常集成像 Google Adsense 这样的服务,这可能由于开发人员的不当实现而 **泄露敏感数据**。为了识别潜在的数据泄露,建议 **拦截应用程序的流量** 并检查是否有任何敏感信息被发送到第三方服务。
|
||||
|
||||
### SQLite 数据库
|
||||
|
||||
大多数应用程序将使用**内部 SQLite 数据库**来保存信息。在渗透测试期间,请**查看**创建的**数据库**、**表**和**列**的名称以及所有保存的**数据**,因为您可能会发现**敏感信息**(这将是一个漏洞)。\
|
||||
大多数应用程序将使用 **内部 SQLite 数据库** 来保存信息。在渗透测试期间,请 **查看** 创建的 **数据库**、**表** 和 **列** 的名称以及所有保存的 **数据**,因为您可能会发现 **敏感信息**(这将是一个漏洞)。\
|
||||
数据库应位于 `/data/data/the.package.name/databases`,如 `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
如果数据库保存机密信息并且**加密**,但您可以在应用程序中**找到****密码**,这仍然是一个**漏洞**。
|
||||
如果数据库保存机密信息并且 **加密** 但您可以在应用程序中 **找到** **密码**,这仍然是一个 **漏洞**。
|
||||
|
||||
使用 `.tables` 枚举表,使用 `.schema <table_name>` 枚举表的列。
|
||||
|
||||
### Drozer(利用活动、内容提供者和服务)
|
||||
|
||||
来自 [Drozer 文档](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf):**Drozer** 允许您**假设 Android 应用程序的角色**并与其他应用程序交互。它可以做**任何已安装应用程序可以做的事情**,例如利用 Android 的进程间通信(IPC)机制并与底层操作系统交互。\
|
||||
Drozer 是一个有用的工具,可以**利用导出活动、导出服务和内容提供者**,正如您将在以下部分中学习的那样。
|
||||
来自 [Drozer 文档](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf):**Drozer** 允许您 **假设 Android 应用程序的角色** 并与其他应用程序交互。它可以做 **任何已安装应用程序可以做的事情**,例如利用 Android 的进程间通信(IPC)机制并与底层操作系统交互。\
|
||||
Drozer 是一个有用的工具,可以 **利用导出活动、导出服务和内容提供者**,正如您将在以下部分中学习的那样。
|
||||
|
||||
### 利用导出活动
|
||||
|
||||
[**如果您想刷新 Android 活动的概念,请阅读此文。**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
还要记住,活动的代码从**`onCreate`** 方法开始。
|
||||
还要记住,活动的代码从 **`onCreate`** 方法开始。
|
||||
|
||||
**授权绕过**
|
||||
|
||||
当活动被导出时,您可以从外部应用程序调用其屏幕。因此,如果导出了包含**敏感信息**的活动,您可以**绕过**访问它的**身份验证**机制。
|
||||
当一个活动被导出时,您可以从外部应用程序调用其界面。因此,如果一个包含 **敏感信息** 的活动被 **导出**,您可以 **绕过** **身份验证** 机制 **以访问它**。
|
||||
|
||||
[**了解如何使用 Drozer 利用导出活动。**](drozer-tutorial/index.html#activities)
|
||||
|
||||
@ -337,14 +338,14 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
如果未防止tapjacking,您可能会滥用导出的活动使**用户执行意外操作**。有关[**tapjacking是什么的更多信息,请查看链接**](#tapjacking)。
|
||||
如果未防止tapjacking,您可能会滥用导出活动使**用户执行意外操作**。有关[**tapjacking是什么的更多信息,请查看链接**](#tapjacking)。
|
||||
|
||||
### 利用内容提供者 - 访问和操纵敏感信息
|
||||
|
||||
[**如果您想刷新内容提供者是什么,请阅读此内容。**](android-applications-basics.md#content-provider)\
|
||||
内容提供者基本上用于**共享数据**。如果一个应用程序有可用的内容提供者,您可能能够**提取敏感**数据。测试可能的**SQL注入**和**路径遍历**也很有趣,因为它们可能存在漏洞。
|
||||
|
||||
[**学习如何使用Drozer利用内容提供者。**](drozer-tutorial/index.html#content-providers)
|
||||
[**了解如何使用Drozer利用内容提供者。**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **利用服务**
|
||||
|
||||
@ -352,7 +353,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
请记住,服务的操作始于方法`onStartCommand`。
|
||||
|
||||
服务基本上是可以**接收数据**、**处理**它并**返回**(或不返回)响应的东西。因此,如果一个应用程序导出了一些服务,您应该**检查**代码以了解它在做什么,并**动态**测试以提取机密信息、绕过身份验证措施...\
|
||||
[**学习如何使用Drozer利用服务。**](drozer-tutorial/index.html#services)
|
||||
[**了解如何使用Drozer利用服务。**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **利用广播接收器**
|
||||
|
||||
@ -360,7 +361,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
请记住,广播接收器的操作始于方法`onReceive`。
|
||||
|
||||
广播接收器将等待某种类型的消息。根据接收器如何处理消息,它可能会存在漏洞。\
|
||||
[**学习如何使用Drozer利用广播接收器。**](#exploiting-broadcast-receivers)
|
||||
[**了解如何使用Drozer利用广播接收器。**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **利用方案/深度链接**
|
||||
|
||||
@ -419,13 +420,13 @@ SSL 钉扎是一种安全措施,应用程序将服务器的证书与存储在
|
||||
|
||||
#### 绕过 SSL 钉扎
|
||||
|
||||
当实施 SSL 钉扎时,绕过它成为检查 HTTPS 流量的必要条件。为此有多种方法可用:
|
||||
当实施 SSL 钉扎时,绕过它变得必要以检查 HTTPS 流量。为此有多种方法可用:
|
||||
|
||||
- 自动**修改** **apk**以**绕过** SSL 钉扎,使用[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)。此选项的最大优点是,您无需 root 权限即可绕过 SSL 钉扎,但您需要删除应用程序并重新安装新版本,这并不总是有效。
|
||||
- 自动**修改** **apk**以**绕过** SSLPinning,使用[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)。此选项的最大优点是,您无需 root 权限即可绕过 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/)
|
||||
- 您还可以尝试使用[**objection**](frida-tutorial/objection-tutorial.md)**自动绕过 SSL 钉扎**:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- 您还可以尝试使用**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)
|
||||
- 如果您仍然认为有一些流量没有被捕获,您可以尝试**使用 iptables 将流量转发到 burp**。阅读此博客:[https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### 寻找常见的网络漏洞
|
||||
|
||||
@ -438,7 +439,7 @@ SSL 钉扎是一种安全措施,应用程序将服务器的证书与存储在
|
||||
如果您想对 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)
|
||||
- 一些与 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)
|
||||
- 您可以在这里找到一些很棒的 Frida 脚本:[**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- 尝试通过加载 Frida 绕过反调试/反 Frida 机制,如在[https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)中所示(工具[linjector](https://github.com/erfur/linjector-rs))
|
||||
@ -478,19 +479,19 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **背景图像**
|
||||
|
||||
当您将应用程序置于后台时,Android 会存储应用程序的 **快照**,这样当它恢复到前台时,它会在应用程序之前开始加载图像,因此看起来应用程序加载得更快。
|
||||
当您将应用程序置于后台时,Android 会存储应用程序的 **快照**,因此当它恢复到前台时,它会在应用程序之前开始加载图像,看起来像是应用程序加载得更快。
|
||||
|
||||
然而,如果这个快照包含 **敏感信息**,那么有权限访问快照的人可能会 **窃取这些信息**(请注意,您需要 root 权限才能访问它)。
|
||||
|
||||
快照通常存储在: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android 提供了一种方法来 **通过设置 FLAG_SECURE** 布局参数来防止截图捕获。使用此标志后,窗口内容被视为安全,防止其出现在截图中或在不安全的显示器上查看。
|
||||
Android 提供了一种方法来 **通过设置 FLAG_SECURE** 布局参数来防止屏幕截图的捕获。使用此标志后,窗口内容被视为安全,防止其出现在屏幕截图中或在不安全的显示器上查看。
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
### **Android 应用分析器**
|
||||
|
||||
此工具可以帮助您在动态分析过程中管理不同的工具:[https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
此工具可以帮助您在动态分析期间管理不同的工具:[https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
|
||||
### 意图注入
|
||||
|
||||
@ -512,7 +513,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
- **SQL 注入:** 在处理动态查询或内容提供者时,确保使用参数化查询。
|
||||
- **JavaScript 注入 (XSS):** 验证任何 WebViews 的 JavaScript 和插件支持是否已禁用(默认情况下禁用)。 [更多信息在这里](webview-attacks.md#javascript-enabled)。
|
||||
- **本地文件包含:** WebViews 应禁用对文件系统的访问(默认情况下启用) - `(webview.getSettings().setAllowFileAccess(false);)`。 [更多信息在这里](webview-attacks.md#javascript-enabled)。
|
||||
- **持久性 Cookie:** 在多个情况下,当 Android 应用结束会话时,Cookie 并未被撤销,甚至可能被保存到磁盘。
|
||||
- **持久性 Cookie:** 在多个情况下,当 Android 应用结束会话时,Cookie 不会被撤销,甚至可能被保存到磁盘。
|
||||
- [**Cookie 中的安全标志**](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
@ -533,7 +534,7 @@ 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**(您需要在 _MobSF/settings.py_ 中设置您的 API 密钥并启用它:`VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。您还可以将 `VT_UPLOAD` 设置为 `False`,这样 **hash** 将被 **上传** 而不是文件。
|
||||
MobSF 还允许您进行 **diff/比较** 分析并集成 **VirusTotal**(您需要在 _MobSF/settings.py_ 中设置您的 API 密钥并启用它:`VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。您还可以将 `VT_UPLOAD` 设置为 `False`,这样 **hash** 将被 **上传** 而不是文件。
|
||||
|
||||
### 使用 MobSF 进行辅助动态分析
|
||||
|
||||
@ -563,7 +564,7 @@ MobSF 还允许您加载自己的 **Frida 脚本**(要将您的 Frida 脚本
|
||||
- **捕获字符串比较**:可能非常有用。它将 **显示正在比较的两个字符串** 以及结果是 True 还是 False。
|
||||
- **枚举类方法**:输入类名(如 "java.io.File"),它将打印该类的所有方法。
|
||||
- **搜索类模式**:按模式搜索类
|
||||
- **跟踪类方法**:**跟踪** 一个 **整个类**(查看该类所有方法的输入和输出)。请记住,默认情况下 MobSF 跟踪多个有趣的 Android API 方法。
|
||||
- **跟踪类方法**:**跟踪** 一个 **整个类**(查看该类所有方法的输入和输出)。请记住,默认情况下 MobSF 跟踪几个有趣的 Android API 方法。
|
||||
|
||||
一旦您选择了要使用的辅助模块,您需要按“**开始仪器化**”,您将看到所有输出在“**Frida 实时日志**”中。
|
||||
|
||||
@ -580,8 +581,8 @@ receivers
|
||||
```
|
||||
**HTTP工具**
|
||||
|
||||
当http流量被捕获时,您可以在“**HTTP(S) Traffic**”底部看到捕获流量的丑陋视图,或者在“**Start HTTPTools**”绿色按钮中看到更好的视图。从第二个选项中,您可以**发送**捕获的**请求**到像Burp或Owasp ZAP这样的**代理**。\
|
||||
要做到这一点,_打开Burp -->_ _关闭拦截 --> 在MobSB HTTPTools中选择请求_ --> 按下“**Send to Fuzzer**” --> _选择代理地址_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。
|
||||
当http流量被捕获时,您可以在“**HTTP(S) Traffic**”底部看到捕获流量的丑陋视图,或在“**Start HTTPTools**”绿色按钮中看到更好的视图。从第二个选项中,您可以**发送** **捕获的请求**到**代理**,如Burp或Owasp ZAP。\
|
||||
为此,_打开Burp -->_ _关闭拦截 --> 在MobSB HTTPTools中选择请求_ --> 按下“**Send to Fuzzer**” --> _选择代理地址_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。
|
||||
|
||||
完成MobSF的动态分析后,您可以按“**Start Web API Fuzzer**”来**模糊http请求**并寻找漏洞。
|
||||
|
||||
@ -667,7 +668,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** 是一个 **M**obile **A**pplication **R**everse engineering 和 **A**nalysis Framework。它是一个将常用的移动应用程序逆向工程和分析工具整合在一起的工具,旨在帮助测试移动应用程序以应对 OWASP 移动安全威胁。其目标是使这一任务对移动应用程序开发者和安全专业人员更加简单和友好。
|
||||
|
||||
它能够:
|
||||
|
||||
@ -688,7 +689,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
来自 [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** 是一个开源命令行工具,用于缩小、优化和混淆 Java 代码。它能够优化字节码,并检测和删除未使用的指令。ProGuard 是免费软件,按照 GNU 通用公共许可证第 2 版分发。
|
||||
来自 [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** 是一个开源命令行工具,用于缩小、优化和混淆 Java 代码。它能够优化字节码,并检测和删除未使用的指令。ProGuard 是自由软件,按照 GNU 通用公共许可证第 2 版分发。
|
||||
|
||||
ProGuard 作为 Android SDK 的一部分分发,并在以发布模式构建应用程序时运行。
|
||||
|
||||
@ -701,18 +702,18 @@ ProGuard 作为 Android SDK 的一部分分发,并在以发布模式构建应
|
||||
- 将资源加载为 InputStream;
|
||||
- 将结果传递给继承自 FilterInputStream 的类以进行解密;
|
||||
- 进行一些无用的混淆,以浪费反向工程师几分钟的时间;
|
||||
- 将解密的结果传递给 ZipInputStream 以获取 DEX 文件;
|
||||
- 最后使用 `loadDex` 方法将结果 DEX 作为资源加载。
|
||||
- 将解密后的结果传递给 ZipInputStream 以获取 DEX 文件;
|
||||
- 最后使用 `loadDex` 方法将结果 DEX 加载为资源。
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard 逆转 Android 混淆工具执行的混淆过程。这使得进行多种安全分析成为可能,包括代码检查和预测库。**
|
||||
**DeGuard 逆转了 Android 混淆工具执行的混淆过程。这使得进行多种安全分析成为可能,包括代码检查和预测库。**
|
||||
|
||||
您可以将混淆的 APK 上传到他们的平台。
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
这是一个 LLM 工具,用于查找 Android 应用程序中的潜在安全漏洞并去混淆 Android 应用程序代码。使用 Google 的 Gemini 公共 API。
|
||||
这是一个 LLM 工具,用于查找 Android 应用中的潜在安全漏洞并去混淆 Android 应用代码。使用 Google 的 Gemini 公共 API。
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
@ -724,7 +725,7 @@ APKiD 提供有关 **APK 是如何制作的** 信息。它识别许多 **编译
|
||||
|
||||
### 手动
|
||||
|
||||
[阅读本教程以了解一些关于 **如何逆向自定义混淆** 的技巧](manual-deobfuscation.md)
|
||||
[阅读本教程以学习一些关于 **如何逆向自定义混淆** 的技巧](manual-deobfuscation.md)
|
||||
|
||||
## 实验室
|
||||
|
||||
|
@ -0,0 +1,145 @@
|
||||
# Android Accessibility Service Abuse
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## 概述
|
||||
|
||||
`AccessibilityService` 的创建是为了帮助残疾用户与 Android 设备进行交互。不幸的是,同样的 **强大自动化 API**(全局导航、文本输入、手势分发、覆盖窗口……)可以被恶意软件武器化,以在 _无需 root 权限_ 的情况下获得 **完全远程控制** 手机的能力。
|
||||
|
||||
现代 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);
|
||||
```
|
||||
受害者在假表单中输入凭据,而后台应用接收相同的手势——从未显示可疑的“在其他应用上绘制”提示。
|
||||
|
||||
> 详细示例:*Accessibility Overlay Phishing*部分在Tapjacking页面内。
|
||||
|
||||
### 2. 设备内欺诈自动化
|
||||
恶意软件家族如**PlayPraetor**维护一个持久的WebSocket通道,操作员可以发出高级命令(`init`,`update`,`alert_arr`,`report_list`,……)。该服务将这些命令转换为上述低级手势,实现实时未经授权的交易,轻松绕过与该设备相关的多因素身份验证。
|
||||
|
||||
### 3. 屏幕流媒体与监控
|
||||
通过将**MediaProjection API**与RTMP客户端库结合,RAT可以将实时帧缓冲区广播到`rtmp://<c2>:1935/live/<device_id>`,使对手在Accessibility引擎驱动UI时获得完美的情境意识。
|
||||
|
||||
---
|
||||
|
||||
## PlayPraetor – 命令与控制工作流程
|
||||
|
||||
1. **HTTP(S) 心跳** – 遍历硬编码列表,直到一个域以活动C2响应`POST /app/searchPackageName`。
|
||||
2. **WebSocket (端口 8282)** – 双向JSON命令:
|
||||
* `update` – 推送新配置/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’s evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
|
||||
* [Android accessibility documentation – Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -4,12 +4,12 @@
|
||||
|
||||
## **基本信息**
|
||||
|
||||
**Tapjacking** 是一种攻击,其中 **恶意** **应用程序** 被启动并 **定位在受害者应用程序的顶部**。一旦它明显遮挡了受害者应用程序,其用户界面被设计成欺骗用户与之互动,同时将互动传递给受害者应用程序。\
|
||||
**Tapjacking** 是一种攻击,其中 **恶意** **应用程序** 被启动并 **定位在受害者应用程序的顶部**。一旦它明显遮挡了受害者应用程序,其用户界面被设计成能够欺骗用户与之互动,同时将互动传递给受害者应用程序。\
|
||||
实际上,它是 **让用户无法知道他们实际上是在对受害者应用程序执行操作**。
|
||||
|
||||
### 检测
|
||||
|
||||
为了检测易受此攻击的应用程序,您应该在 Android 清单中搜索 **导出活动**(请注意,带有意图过滤器的活动默认情况下会自动导出)。一旦找到导出活动,**检查它们是否需要任何权限**。这是因为 **恶意应用程序也需要该权限**。
|
||||
为了检测易受此攻击的应用程序,您应该在 Android 清单中搜索 **导出活动**(请注意,带有 intent-filter 的活动默认情况下会自动导出)。一旦找到导出活动,**检查它们是否需要任何权限**。这是因为 **恶意应用程序也需要该权限**。
|
||||
|
||||
您还可以检查应用程序的最低 SDK 版本,检查 **`android:minSdkVersion`** 在 **`AndroidManifest.xml`** 文件中的值。如果该值 **低于 30**,则该应用程序易受 Tapjacking 攻击。
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
如果 **`android:filterTouchesWhenObscured`** 设置为 **`true`**,则当视图的窗口被另一个可见窗口遮挡时,`View` 将不会接收触摸。
|
||||
如果 **`android:filterTouchesWhenObscured`** 设置为 **`true`**,则当视图的窗口被另一个可见窗口遮挡时,`View` 将不会接收触摸事件。
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
@ -41,7 +41,7 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
最新的 **Android 应用程序** 执行 Tapjacking 攻击(+ 在被攻击应用程序的导出活动之前调用)可以在此找到: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)。
|
||||
|
||||
请遵循 **README 指示使用它**。
|
||||
请遵循 **README 指示使用**。
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
@ -50,13 +50,13 @@ android:filterTouchesWhenObscured="true">
|
||||
### Qark
|
||||
|
||||
> [!CAUTION]
|
||||
> 看起来这个项目现在不再维护,这个功能不再正常工作
|
||||
> 看起来这个项目现在不再维护,这个功能也不再正常工作
|
||||
|
||||
你可以使用 [**qark**](https://github.com/linkedin/qark) 和 `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` 参数来创建一个恶意应用程序,以测试可能的 **Tapjacking** 漏洞。\
|
||||
|
||||
缓解措施相对简单,因为开发者可以选择在视图被另一个视图覆盖时不接收触摸事件。使用 [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。当启用时,框架将丢弃在视图的窗口被另一个可见窗口遮挡时接收到的触摸。因此,当吐司、对话框或其他窗口出现在视图的窗口上方时,视图将不会接收到触摸。
|
||||
|
||||
@ -67,7 +67,7 @@ android:filterTouchesWhenObscured="true">
|
||||
除了经典的 Tapjacking,现代 Android 银行恶意软件家族(例如 **ToxicPanda**、BrasDex、Sova 等)滥用 **可访问性服务** 在合法应用程序上方放置全屏 WebView **覆盖**,同时仍然能够 **转发用户输入** 到下面的视图。这大大增加了可信度,并允许攻击者窃取凭据、一次性密码或甚至自动化欺诈交易。
|
||||
|
||||
### 工作原理
|
||||
1. 恶意 APK 请求高度敏感的 `BIND_ACCESSIBILITY_SERVICE` 权限,通常将请求隐藏在假冒的 Google/Chrome/PDF 查看器对话框后面。
|
||||
1. 恶意 APK 请求高度敏感的 `BIND_ACCESSIBILITY_SERVICE` 权限,通常将请求隐藏在虚假的 Google/Chrome/PDF 查看器对话框后面。
|
||||
2. 一旦用户启用该服务,恶意软件程序会以编程方式模拟授予额外危险权限所需的点击(`READ_SMS`、`SYSTEM_ALERT_WINDOW`、`REQUEST_INSTALL_PACKAGES` 等)。
|
||||
3. 一个 **WebView** 被膨胀并使用 **`TYPE_ACCESSIBILITY_OVERLAY`** 窗口类型添加到窗口管理器中。覆盖可以完全不透明或半透明,并可以标记为 *“透过”*,以便原始触摸仍然传递到后台活动(因此交易确实发生,而受害者只看到钓鱼表单)。
|
||||
```java
|
||||
@ -86,21 +86,27 @@ PixelFormat.TRANSLUCENT);
|
||||
wm.addView(phishingView, lp);
|
||||
```
|
||||
### 银行木马的典型工作流程
|
||||
* 查询已安装的应用程序 (`QUERY_ALL_PACKAGES`),以确定当前打开的是哪个银行/钱包应用。
|
||||
* 查询已安装的包 (`QUERY_ALL_PACKAGES`),以确定当前打开的是哪个银行/钱包应用。
|
||||
* 从 C2 下载一个完美模仿该特定应用的 **HTML/JS 覆盖模板**(徽标、颜色、国际化字符串等)。
|
||||
* 显示覆盖,收集凭据/PIN/图案。
|
||||
* 使用 **无障碍 API** (`performGlobalAction`, `GestureDescription`) 在后台自动进行转账。
|
||||
|
||||
### 检测与缓解
|
||||
* 使用 `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE` 审计已安装应用程序的列表。
|
||||
* 使用 `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE` 审计已安装应用的列表。
|
||||
* 从应用程序端(银行/钱包):
|
||||
- 在敏感视图上启用 **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`**(Android 14+),以阻止非 Play 商店服务。
|
||||
- 结合使用 `setFilterTouchesWhenObscured(true)` 和 `FLAG_SECURE`。
|
||||
* 系统加固:
|
||||
- 禁用 *来自未知来源的安装* 和 *不受信任应用的无障碍功能*。
|
||||
- 强制使用 PlayProtect 和保持设备更新。
|
||||
- 强制执行 PlayProtect 和保持设备更新。
|
||||
|
||||
## 参考
|
||||
有关利用无障碍服务进行完全远程设备控制的更多详细信息(例如 PlayPraetor、SpyNote 等),请参见:
|
||||
|
||||
{{#ref}}
|
||||
accessibility-services-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
## 参考文献
|
||||
* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user