hacktricks/mobile-pentesting/android-app-pentesting/README.md

47 KiB
Raw Blame History

Android 应用程序渗透测试

从零开始学习 AWS 黑客技术,成为专家 htARTEHackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

加入 HackenProof Discord 服务器,与经验丰富的黑客和赏金猎人交流!

黑客见解
参与深入探讨黑客的刺激和挑战的内容

实时黑客新闻
通过实时新闻和见解及时了解快节奏的黑客世界

最新公告
了解最新的赏金计划发布和重要平台更新

加入我们的 Discord,立即与顶尖黑客合作!

Android 应用程序基础知识

强烈建议阅读此页面,了解与 Android 安全相关的最重要部分以及 Android 应用程序中最危险的组件

{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}

ADBAndroid 调试桥)

这是连接到 Android 设备(模拟或实体)所需的主要工具。
ADB 允许从计算机通过USB网络控制设备。此实用程序使得可以双向复制文件,安装卸载应用程序,执行 shell 命令,备份数据,读取日志等功能。

查看以下ADB 命令列表,了解如何使用 adb。

Smali

有时修改应用程序代码以访问隐藏信息(也许是经过良好混淆的密码或标志)是很有趣的。然后,可能需要对 apk 进行反编译,修改代码并重新编译它。
在本教程中,您可以学习如何反编译 APK修改 Smali 代码并重新编译 APK以添加新功能。这在动态分析期间的多个测试中可能非常有用。因此,始终记住这种可能性

其他有趣的技巧

adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
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你应该使用反编译器查看Java代码。
在这里阅读有关不同可用反编译器的信息

寻找有趣的信息

仅仅查看APK的字符串,你就可以搜索密码URLs (https://github.com/ndelphit/apkurlgrep)API密钥,加密蓝牙UUID令牌以及任何有趣的内容... 甚至查找代码执行后门或身份验证后门(应用中硬编码的管理员凭据)。

Firebase

特别注意Firebase URL,并检查其是否配置不当。在这里了解有关Firebase是什么以及如何利用它的更多信息。

应用程序的基本理解 - Manifest.xmlstrings.xml

对应用程序的**Manifest.xmlstrings.xml**文件的检查可以揭示潜在的安全漏洞。可以使用反编译器访问这些文件或者将APK文件扩展名重命名为.zip然后解压缩它。

Manifest.xml中识别的漏洞包括:

  • 可调试应用程序在_Manifest.xml_文件中设置为可调试debuggable="true")的应用程序存在风险,因为它们允许可能导致利用的连接。要进一步了解如何利用可调试应用程序,请参考有关在设备上查找和利用可调试应用程序的教程。
  • 备份设置:对于处理敏感信息的应用程序,应明确设置android:allowBackup="false"属性以防止通过adb进行未经授权的数据备份特别是当启用了USB调试时。
  • 网络安全在_res/xml/_中的自定义网络安全配置android:networkSecurityConfig="@xml/network_security_config"可以指定安全详细信息如证书固定和HTTP流量设置。一个示例是允许特定域的HTTP流量。
  • 导出的活动和服务:在清单中识别导出的活动和服务可以突出显示可能被滥用的组件。在动态测试期间进行进一步分析可以揭示如何利用这些组件。
  • 内容提供程序和FileProviders暴露的内容提供程序可能允许未经授权访问或修改数据。还应仔细审查FileProviders的配置。
  • 广播接收器和URL方案这些组件可能被利用进行攻击特别要注意URL方案的管理方式以防止输入漏洞。
  • SDK版本minSdkVersiontargetSDKVersionmaxSdkVersion属性指示支持的Android版本强调不支持过时、易受攻击的Android版本的重要性。

strings.xml文件中可以发现诸如API密钥、自定义模式和其他开发者注释等敏感信息强调了对这些资源进行仔细审查的必要性。

Tapjacking

Tapjacking是一种攻击,其中启动一个恶意应用程序,并将其定位在受害者应用程序的顶部。一旦它明显遮挡了受害者应用程序,其用户界面被设计成以一种方式欺骗用户与其交互,同时将交互传递给受害者应用程序。
实际上,它使用户无法知道他们实际上是在受害者应用程序上执行操作

在以下找到更多信息:

{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}

任务劫持

将**launchMode设置为singleTask且未定义任何taskAffinity活动容易受到任务劫持的影响。这意味着,如果在真实应用程序之前安装并启动应用程序,则它可以劫持真实应用程序的任务**(因此用户将与恶意应用程序交互,以为自己在使用真实应用程序)。

在以下找到更多信息:

{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}

不安全的数据存储

内部存储

在Android中存储在内部存储中的文件设计为仅由创建它们的应用程序访问。这一安全措施由Android操作系统强制执行通常足以满足大多数应用程序的安全需求。然而开发人员有时会使用MODE_WORLD_READABLEMODE_WORLD_WRITABLE等模式,以允许文件在不同应用程序之间共享。然而,这些模式不限制其他应用程序(包括潜在恶意应用程序)访问这些文件。

  1. 静态分析:
  • 确保仔细审查对MODE_WORLD_READABLEMODE_WORLD_WRITABLE的使用。这些模式可能会使文件面临意外或未经授权的访问
  1. 动态分析:
  • 验证应用程序创建的文件设置的权限。特别是,检查是否有任何文件被设置为全球可读或可写。这可能构成重大安全风险,因为它将允许设备上安装的任何应用程序读取或修改这些文件,而不考虑其来源或意图。

外部存储

处理外部存储如SD卡上的文件时应采取一些预防措施

  1. 可访问性
  • 外部存储上的文件是全局可读和可写的。这意味着任何应用程序或用户都可以访问这些文件。
  1. 安全问题
  • 鉴于访问的便利性,建议不要在外部存储上存储敏感信息
  • 外部存储可以被移除或任何应用程序访问,使其不太安全。
  1. 处理来自外部存储的数据
  • 始终对从外部存储检索的数据执行输入验证。这是至关重要的,因为数据来自不受信任的来源。
  • 强烈建议不要在外部存储上存储可执行文件或类文件以进行动态加载。
  • 如果您的应用程序必须从外部存储检索可执行文件,请确保在动态加载之前对这些文件进行签名和加密验证。这一步对于维护应用程序的安全完整性至关重要。

外部存储可以在/storage/emulated/0/sdcard/mnt/sdcard访问

{% hint style="info" %} 从Android 4.4API 17开始SD卡具有目录结构限制应用程序对专门用于该应用程序的目录的访问。这可以防止恶意应用程序读取或写入另一个应用程序的文件。 {% endhint %}

明文存储的敏感数据

  • 共享首选项Android允许每个应用程序轻松保存xml文件在路径/data/data/<packagename>/shared_prefs/中,有时可能在该文件夹中找到明文存储的敏感信息。
  • 数据库Android允许每个应用程序轻松保存sqlite数据库在路径/data/data/<packagename>/databases/中,有时可能在该文件夹中找到明文存储的敏感信息。
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

破解密码

密钥管理流程不当

一些开发人员会将敏感数据保存在本地存储中,并使用在代码中硬编码/可预测的密钥对其进行加密。这样做是不应该的,因为一些逆向工程可能会使攻击者提取机密信息。

使用不安全和/或已弃用的算法

开发人员不应该使用已弃用的算法来执行授权检查存储发送数据。一些这些算法包括RC4、MD4、MD5、SHA1...例如,如果要使用哈希来存储密码,应该使用具有盐的哈希抗暴力攻击

其他检查

  • 建议对APK进行混淆,以增加逆向工程的难度。
  • 如果应用程序很敏感(如银行应用程序),应该执行自己的检查以查看手机是否已获取root权限,并相应地采取行动。
  • 如果应用程序很敏感(如银行应用程序),应该检查是否正在使用模拟器
  • 如果应用程序很敏感(如银行应用程序),应该在执行之前检查自身的完整性,以查看是否已被修改。
  • 使用APKiD来检查构建APK时使用了哪种编译器/打包程序/混淆器

React Native 应用程序

阅读以下页面了解如何轻松访问React应用程序的JavaScript代码

{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}

Xamarin 应用程序

阅读以下页面了解如何轻松访问Xamarin应用程序的C#代码:

{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}

超级打包应用程序

根据这篇博客文章,超级打包是一种将应用程序内容压缩到单个文件中的元算法。该博客讨论了创建一个可以解压这些应用程序的应用程序的可能性...以及一种更快的方法,即执行应用程序并从文件系统中收集解压后的文件

自动静态代码分析

工具mariana-trench能够通过扫描应用程序的代码来发现漏洞。该工具包含一系列已知源(指示工具用户控制的输入位置)、漏洞(指示工具危险位置,恶意用户输入可能造成损害)和规则。这些规则指示了源-漏洞组合,指示了漏洞。

有了这些知识,mariana-trench将审查代码并找出可能存在的漏洞

泄露的机密信息

应用程序可能包含内部的机密信息API密钥、密码、隐藏的URL、子域...),您可以使用诸如https://github.com/dwisiswant0/apkleaks之类的工具来发现。

绕过生物识别身份验证

{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}

其他有趣的功能

其他技巧

{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}


加入HackenProof Discord服务器,与经验丰富的黑客和赏金猎人交流!

黑客见解
参与深入探讨黑客活动的刺激和挑战

实时黑客新闻
通过实时新闻和见解及时了解快节奏的黑客世界

最新公告
随时了解最新的赏金任务发布和重要平台更新

加入我们的 Discord,立即与顶尖黑客合作!


动态分析

首先您需要一个环境可以在其中安装应用程序和所有环境主要是Burp CA证书、Drozer和Frida。因此极力推荐使用已获取root权限的设备模拟器或非模拟器

在线动态分析

您可以在https://appetize.io/创建一个免费账户。该平台允许您上传执行APK文件因此对于查看apk的行为非常有用。

您甚至可以在网络中查看应用程序的日志,并通过adb进行连接。

通过ADB连接您可以在模拟器中使用DrozerFrida

本地动态分析

使用模拟器

  • Android Studio(您可以创建x86arm设备,根据最新的x86版本支持ARM库无需使用速度较慢的arm模拟器
  • 了解如何在此页面中设置:

{% content-ref url="avd-android-virtual-device.md" %} avd-android-virtual-device.md {% endcontent-ref %}

  • Genymotion (免费版本:个人版您需要创建一个帐户。_建议下载带有_VirtualBox的版本,以避免潜在错误。)
  • Nox免费但不支持Frida或Drozer

{% hint style="info" %} 在任何平台上创建新模拟器时,请记住屏幕越大,模拟器运行速度越慢。因此,尽可能选择小屏幕。 {% endhint %}

要在Genymotion中安装谷歌服务(如应用商店),您需要单击以下图像中标记为红色的按钮:

此外请注意在Genymotion中的Android VM配置中,您可以选择桥接网络模式如果您将从具有工具的不同VM连接到Android VM则这将非常有用

使用物理设备

您需要激活调试选项,如果可以root它会更好:

  1. 进入设置
  2. (从Android 8.0开始) 选择系统
  3. 选择关于手机
  4. 连续点击版本号 7次。
  5. 返回,您将找到开发者选项

安装应用程序后,首先要做的事情是尝试并调查其功能,了解其工作原理,并熟悉它。
我建议使用MobSF动态分析 + pidcat进行初始动态分析这样我们就能在MobSF捕获大量有趣的数据的同时学习应用程序的工作方式,稍后可以查看这些数据。

非预期数据泄漏

日志记录

开发人员应谨慎公开调试信息,因为这可能导致敏感数据泄漏。推荐使用工具pidcatadb logcat来监视应用程序日志,以识别和保护敏感信息。Pidcat因其易用性和可读性而受到青睐。

{% hint style="warning" %} 请注意,从Android 4.0之后的版本开始,应用程序只能访问自己的日志。因此,应用程序无法访问其他应用程序的日志。
无论如何,仍建议不要记录敏感信息。 {% endhint %}

复制/粘贴缓存

Android的基于剪贴板的框架使应用程序能够实现复制粘贴功能,但存在风险,因为其他应用程序可以访问剪贴板,可能会暴露敏感数据。对于应用程序中的敏感部分(如信用卡详细信息),禁用复制/粘贴功能至关重要,以防止数据泄漏。

崩溃日志

如果应用程序崩溃并保存日志这些日志可以帮助攻击者特别是当无法对应用程序进行逆向工程时。为降低此风险请避免在崩溃时记录日志如果必须通过网络传输日志请确保通过SSL通道发送以确保安全性。

作为渗透测试人员,尝试查看这些日志

发送给第三方的分析数据

应用程序通常集成诸如Google Adsense之类的服务由于开发人员实施不当可能会意外泄漏敏感数据。为了识别潜在的数据泄漏,建议拦截应用程序的流量,检查是否向第三方服务发送了任何敏感信息。

SQLite数据库

大多数应用程序将使用内部SQLite数据库保存信息。在渗透测试期间,查看创建的数据库的名称以及所有保存的数据,因为您可能会发现敏感信息(这可能是一个漏洞)。
数据库应位于/data/data/the.package.name/databases,如/data/data/com.mwr.example.sieve/databases

如果数据库保存了机密信息并且已加密,但您可以在应用程序内找到密码,这仍然是一个漏洞

使用.tables列出表,使用.schema <table_name>列出表的列。

Drozer利用活动、内容提供程序和服务

来自Drozer文档Drozer允许您扮演Android应用程序的角色并与其他应用程序交互。它可以执行已安装应用程序可以执行的任何操作例如利用Android的进程间通信IPC机制并与底层操作系统交互。
Drozer是一个有用的工具可用于利用导出的活动、导出的服务和内容提供程序,您将在以下部分中了解更多信息。

利用导出的活动

阅读此内容以了解什么是Android活动。
还要记住,活动的代码从**onCreate**方法开始。

授权绕过

当活动被导出时,您可以从外部应用程序调用其屏幕。因此,如果具有敏感信息的活动被导出,您可以绕过****身份验证机制访问它

学习如何使用Drozer利用导出的活动。

您还可以通过adb启动导出的活动

  • 包名为com.example.demo
  • 导出的活动名为com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

注意MobSF 将检测在活动中使用 android:launchMode 作为 singleTask/singleInstance 为恶意,但由于 此处显然这只在旧版本API 版本 < 21上危险。

{% hint style="info" %} 请注意,授权绕过并不总是漏洞,这取决于绕过的方式以及暴露了哪些信息。 {% endhint %}

敏感信息泄露

活动也可以返回结果。如果您找到一个已导出且未受保护的活动调用 setResult 方法并返回敏感信息,那就存在敏感信息泄露。

点击劫持

如果未防止点击劫持,您可以滥用已导出的活动来使用户执行意外操作。有关 点击劫持是什么,请查看链接 获取更多信息。

利用内容提供程序 - 访问和操纵敏感信息

如果您想了解内容提供程序是什么,请阅读此内容。
内容提供程序基本上用于共享数据。如果应用程序有可用的内容提供程序,您可能能够从中提取敏感数据。还有测试可能的SQL 注入路径遍历也很有趣,因为它们可能存在漏洞。

学习如何使用 Drozer 利用内容提供程序。

利用服务

如果您想了解服务是什么,请阅读此内容。
请记住,服务的操作始于 onStartCommand 方法。

服务基本上是可以接收数据处理它并返回(或不返回)响应的东西。因此,如果应用程序正在导出某些服务,您应该检查代码以了解其功能,并动态测试以提取机密信息、绕过身份验证措施等...
学习如何使用 Drozer 利用服务。

利用广播接收器

如果您想了解广播接收器是什么,请阅读此内容。
请记住,广播接收器的操作始于 onReceive 方法。

广播接收器将等待某种类型的消息。根据接收器处理消息的方式,它可能存在漏洞。
学习如何使用 Drozer 利用广播接收器。

利用方案 / 深层链接

您可以手动查找深层链接,使用诸如 MobSF 这样的工具或类似 此工具 的脚本。
您可以使用 adb浏览器 打开已声明的 scheme

{% code overflow="wrap" %}

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

{% endcode %}

请注意,您可以省略包名称,手机将自动调用应该打开该链接的应用程序。

{% code overflow="wrap" %}

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- 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>

{% endcode %}

执行的代码

要找到在应用中执行的代码,请转到由深度链接调用的活动,并搜索函数**onNewIntent**。

敏感信息

每次找到一个深度链接请检查它是否通过URL参数接收敏感数据如密码因为任何其他应用程序都可能冒充深度链接并窃取这些数据!

路径中的参数

您还必须检查任何深度链接是否在URL路径中使用参数例如https://api.example.com/v1/users/{username},在这种情况下,您可以强制进行路径遍历,访问类似于:example://app/users?username=../../unwanted-endpoint%3fparam=value
请注意,如果您在应用程序中找到正确的端点,您可能会导致开放式重定向(如果路径的一部分用作域名)、账户接管如果您可以修改用户详细信息而无需CSRF令牌并且易受攻击的端点使用了正确的方法和任何其他漏洞。有关此内容的更多信息请点击这里

更多示例

一个关于链接的有趣的漏洞赏金报告/.well-known/assetlinks.json)。

传输层检查和验证失败

  • Android 应用程序通常未正确检查证书常见情况是这些应用程序忽略警告并接受自签名证书或者在某些情况下回退到使用HTTP连接。
  • SSL/TLS 握手期间的协商有时很薄弱使用不安全的密码套件。这种漏洞使连接容易受到中间人MITM攻击的影响允许攻击者解密数据。
  • 当应用程序使用安全通道进行身份验证,然后通过非安全通道进行其他交易时,私人信息泄霏是一个风险。这种方法未能保护敏感数据,如会话 cookie 或用户详细信息,免受恶意实体的拦截。

证书验证

我们将重点关注证书验证。必须验证服务器证书的完整性以增强安全性。这很关键,因为不安全的 TLS 配置和通过未加密通道传输敏感数据可能带来重大风险。有关验证服务器证书和解决漏洞的详细步骤,此资源提供了全面的指导。

SSL Pinning

SSL Pinning 是一种安全措施,应用程序会将服务器证书与应用程序内部存储的已知副本进行验证。这种方法对于防止 MITM 攻击至关重要。强烈建议为处理敏感信息的应用程序实施 SSL Pinning。

流量检查

要检查 HTTP 流量,必须安装代理工具的证书(例如 Burp。如果不安装此证书加密流量可能无法通过代理查看。有关安装自定义 CA 证书的指南,点击这里

针对API 级别 24 及以上的应用程序需要修改网络安全配置以接受代理的 CA 证书。这一步对于检查加密流量至关重要。有关修改网络安全配置的说明,请参考此教程

绕过 SSL Pinning

当实施 SSL Pinning 时,绕过它以检查 HTTPS 流量变得必要。有多种方法可用于此目的:

寻找常见 Web 漏洞

还重要的是在应用程序中寻找常见的 Web 漏洞。有关识别和缓解这些漏洞的详细信息超出了本摘要的范围,但在其他地方有广泛的覆盖。

Frida

Frida 是一个供开发人员、逆向工程师和安全研究人员使用的动态检测工具包。
您可以访问正在运行的应用程序并在运行时挂钩方法以更改行为、更改值、提取值、运行不同的代码...
如果您想对 Android 应用程序进行渗透测试,您需要了解如何使用 Frida。

Dump Memory - Fridump

检查应用程序是否在内存中存储不应该存储的敏感信息,如密码或助记词。

使用Fridump3可以倾倒应用程序的内存:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

这将在./dump文件夹中转储内存然后您可以使用类似以下方式进行grep

{% code overflow="wrap" %}

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

{% endcode %}

Keystore中的敏感数据

在Android中Keystore是存储敏感数据的最佳位置但是即使有足够的权限仍然可能访问它。由于应用程序倾向于在此处以明文形式存储敏感数据因此渗透测试应该以root用户或者有物理访问设备权限的人员身份检查它因为这些人可能能够窃取这些数据。

即使应用程序将数据存储在keystore中数据也应该是加密的。

要访问keystore中的数据您可以使用此Frida脚本https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

指纹/生物识别绕过

使用以下Frida脚本可能可以绕过Android应用程序可能正在执行的用于保护某些敏感区域的指纹认证:

{% code overflow="wrap" %}

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

背景图片

当你将一个应用程序放入后台时Android会存储该应用程序的快照,因此当应用程序恢复到前台时,它会在加载应用程序之前加载图像,使得应用程序看起来加载得更快。

然而,如果这个快照包含敏感信息,那么拥有快照访问权限的人可能会窃取这些信息(请注意,您需要 root 权限才能访问)。

这些快照通常存储在:/data/system_ce/0/snapshots

Android提供了一种方法来通过设置FLAG_SECURE布局参数来防止截屏。通过使用此标志,窗口内容被视为安全内容,防止其出现在截屏中或在非安全显示器上查看。

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android应用程序分析器

这个工具可以帮助您在动态分析过程中管理不同的工具:https://github.com/NotSoSecure/android_application_analyzer

Intent注入

开发人员经常创建代理组件如活动、服务和广播接收器用于处理这些Intent并将它们传递给诸如startActivity(...)sendBroadcast(...)等方法,这可能存在风险。

危险在于允许攻击者通过误导这些Intent来触发非导出的应用组件或访问敏感内容提供者。一个值得注意的例子是WebView组件通过Intent.parseUri(...)将URL转换为Intent对象然后执行它们可能导致恶意Intent注入。

主要要点

  • Intent注入类似于Web的开放重定向问题。
  • 利用涉及将Intent对象作为额外参数传递,可以重定向执行不安全的操作。
  • 它可以使非导出组件和内容提供者暴露给攻击者。
  • WebView的URL到Intent转换可以促成意外操作。

Android客户端注入和其他漏洞

您可能已经从Web了解到这种类型的漏洞。在Android应用程序中您必须特别注意以下漏洞

  • **SQL注入**在处理动态查询或内容提供者时,请确保使用参数化查询。
  • **JavaScript注入XSS**验证任何WebViews是否已禁用JavaScript和插件支持默认情况下已禁用更多信息请参见此处
  • **本地文件包含:**WebViews应禁用对文件系统的访问默认情况下已启用- (webview.getSettings().setAllowFileAccess(false);)更多信息请参见此处
  • **永久性cookie**在一些情况下当Android应用程序结束会话时cookie没有被撤销甚至可能被保存到磁盘上。
  • Cookie中的Secure标志

加入HackenProof Discord服务器,与经验丰富的黑客和赏金猎人交流!

黑客见解
参与深入探讨黑客活动的刺激和挑战的内容

实时黑客新闻
通过实时新闻和见解了解快节奏的黑客世界

最新公告
通过最新的赏金任务发布和重要平台更新保持信息灵通

加入我们的 Discord,立即与顶尖黑客合作!

自动分析

MobSF

静态分析

使用一个漂亮的基于Web的前端对应用程序进行漏洞评估。您还可以执行动态分析但需要准备好环境

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

注意MobSF可以分析Android(apk)、IOS(ipa)和Windows(apx)应用程序(Windows应用程序必须从安装了MobSF的Windows主机中进行分析)。
此外,如果您创建一个包含AndroidIOS应用程序源代码的ZIP文件转到应用程序的根文件夹选择所有内容并创建一个ZIP文件MobSF也可以分析它。

MobSF还允许您进行差异/比较分析,并集成VirusTotal您需要在_MobSF/settings.py_中设置您的API密钥并启用它VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE)。您还可以将VT_UPLOAD设置为False,然后将哈希而不是文件上传

使用MobSF进行辅助动态分析

MobSFAndroid中进行动态分析时也非常有帮助但在这种情况下您需要在主机上安装MobSF和genymotion虚拟机或Docker将无法工作注意:您需要先启动genymotion中的虚拟机然后再启动MobSF。
MobSF动态分析器可以:

  • 转储应用程序数据URL、日志、剪贴板、您制作的屏幕截图、由“导出活动测试器”制作的屏幕截图、电子邮件、SQLite数据库、XML文件和其他创建的文件。所有这些都是自动完成的除了屏幕截图您需要在需要屏幕截图时按下或者您需要按下“导出活动测试器”以获取所有导出活动的屏幕截图。
  • 捕获HTTPS流量
  • 使用Frida获取运行时信息

从Android 版本大于5开始,它将自动启动Frida并将全局代理设置为捕获流量。它只会捕获来自被测试应用程序的流量。

Frida

默认情况下它还将使用一些Frida脚本来绕过SSL绑定root检测调试器检测,以及监视有趣的API
MobSF还可以调用导出的活动,抓取它们的屏幕截图并为报告保存它们。

开始动态测试,请按下绿色按钮:“开始仪器化”。按下“Frida实时日志”以查看Frida脚本生成的日志实时API监视器”以查看所有挂钩方法的调用、传递的参数和返回值(在按下“开始仪器化”后会出现)。
MobSF还允许您加载自己的Frida脚本要将您的Friday脚本的结果发送到MobSF请使用函数send())。它还有几个预写脚本可供加载(您可以在MobSF/DynamicAnalyzer/tools/frida_scripts/others/中添加更多),只需选择它们,按下“加载”,然后按下“开始仪器化”(您将能够在“Frida实时日志”中看到该脚本的日志)。

此外您还有一些辅助的Frida功能

  • 枚举加载的类:它将打印所有加载的类
  • 捕获字符串:在使用应用程序时打印所有捕获的字符串(非常嘈杂)
  • 捕获字符串比较:可能非常有用。它将显示正在比较的两个字符串以及结果是True还是False。
  • 枚举类方法输入类名如“java.io.File”它将打印类的所有方法。
  • 搜索类模式:按模式搜索类
  • 跟踪类方法跟踪整个类查看该类的所有方法的输入和输出。请记住默认情况下MobSF跟踪几个有趣的Android Api方法。

选择要使用的辅助模块后,您需要按下“开始仪器化”,然后您将在“Frida实时日志”中看到所有输出。

Shell

Mobsf还为您提供了一个带有一些adb命令、MobSF命令和常见shell命令的shell位于动态分析页面底部。一些有趣的命令

help
shell ls
activities
exported_activities
services
receivers

HTTP工具

当捕获到http流量时您可以在“HTTP(S) Traffic”底部看到捕获流量的丑陋视图,或者在“Start HTTPTools”绿色按钮中看到更友好的视图。从第二个选项中,您可以将捕获的请求发送到诸如Burp或Owasp ZAP之类的代理
要这样做,启动Burp --> 关闭拦截 --> 在MobSB HTTPTools中选择请求 --> 按下“Send to Fuzzer” --> 选择代理地址 (http://127.0.0.1:8080\)。

完成与MobSF的动态分析后您可以按“Start Web API Fuzzer”来对http请求进行模糊测试并寻找漏洞。

{% hint style="info" %} 在使用MobSF进行动态分析后代理设置可能被错误配置您将无法从GUI中修复它们。您可以通过以下方式修复代理设置

adb shell settings put global http_proxy :0

{% endhint %}

使用 Inspeckage 进行辅助动态分析

您可以从 Inspeckage 获取该工具。
该工具将使用一些 Hooks 来让您了解在执行 动态分析 时应用程序中发生了什么。

Yaazhini

这是一个使用 GUI 执行 静态分析绝佳工具

Qark

该工具旨在查找几种 与安全相关的 Android 应用程序漏洞,无论是在 源代码 还是 打包的 APK 中。该工具还 能够创建一个可部署的“概念验证”APKADB 命令,以利用发现的一些漏洞(暴露的活动、意图、点击劫持等)。与 Drozer 一样,无需对测试设备进行 root。

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • 显示所有提取的文件,便于参考
  • 自动将APK文件反编译为Java和Smali格式
  • 分析AndroidManifest.xml以查找常见漏洞和行为
  • 针对常见漏洞和行为进行静态源代码分析
  • 设备信息
  • 以及更多
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER是一个命令行应用程序可在Windows、MacOS X和Linux中使用用于分析.apk文件以寻找漏洞。它通过解压APK并应用一系列规则来检测这些漏洞。

所有规则都集中在rules.json文件中,每个公司或测试人员都可以创建自己的规则来分析他们需要的内容。

下载页面下载最新的二进制文件。

super-analyzer {apk_file}

StaCoAn

StaCoAn是一个跨平台工具,可帮助开发人员、漏洞赏金猎人和道德黑客对移动应用程序进行静态代码分析

其概念是您将移动应用程序文件(.apk或.ipa文件拖放到StaCoAn应用程序上它将为您生成一个可视化和便携式报告。您可以调整设置和单词列表以获得定制体验。

下载最新版本

./stacoan

AndroBugs

AndroBugs Framework 是一个 Android 漏洞分析系统,帮助开发人员或黑客发现 Android 应用中潜在的安全漏洞。
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn 是一个工具,其主要目的是检测并警告用户有关 Android 应用程序可能存在的恶意行为。

检测是通过对应用程序的 Dalvik 字节码进行静态分析来实现的,该字节码表示为 Smali,使用 androguard 库。

该工具寻找**"坏"应用程序的常见行为**,例如:泄露电话标识符、拦截音频/视频流、修改 PIM 数据、执行任意代码...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA 是一个移动应用程序逆向工程和分析框架。它是一个工具汇集了常用的移动应用程序逆向工程和分析工具以帮助测试移动应用程序抵御OWASP移动安全威胁。其目标是使移动应用程序开发人员和安全专业人员更容易友好地执行此任务。

它能够:

Koodous

用于检测恶意软件:https://koodous.com/

代码混淆/反混淆

请注意,根据您用于混淆代码的服务和配置,秘密可能会或可能不会被混淆。

ProGuard

来自WikipediaProGuard 是一个开源命令行工具用于缩小、优化和混淆Java代码。它能够优化字节码检测并删除未使用的指令。ProGuard是自由软件根据GNU通用公共许可证第2版分发。

ProGuard作为Android SDK的一部分分发并在发布模式下构建应用程序时运行。

DexGuard

https://blog.lexfo.fr/dexguard.html找到逐步指南以对APK进行反混淆

来自该指南上次我们检查时Dexguard的操作模式是

  • 将资源作为InputStream加载
  • 将结果提供给继承自FilterInputStream的类以解密它
  • 进行一些无用的混淆以浪费逆向者的几分钟时间;
  • 将解密的结果提供给ZipInputStream以获取DEX文件
  • 最后使用loadDex方法将生成的DEX作为资源加载。

DeGuard

DeGuard 反转了Android混淆工具执行的混淆过程。这使得可以进行多种安全分析包括代码检查和预测库。

您可以将混淆的APK上传到他们的平台。

Simplify

它是一个通用的Android反混淆工具。 Simplify 虚拟执行应用程序以了解其行为,然后尝试优化代码,使其行为相同但更容易让人理解。每种优化类型都是简单且通用的,因此不管使用了什么具体类型的混淆,都不重要。

APKiD

APKiD提供有关APK是如何制作的的信息。它识别许多编译器打包工具混淆工具和其他奇怪的东西。这是Android的PEiD

手动

阅读此教程以学习一些关于如何反转自定义混淆的技巧

实验室

Androl4b

AndroL4b是一个基于ubuntu-mate的Android安全虚拟机包括来自不同安全极客和研究人员的最新框架、教程和实验室用于逆向工程和恶意软件分析。

参考资料

尚未尝试

加入HackenProof Discord服务器,与经验丰富的黑客和赏金猎人交流!

黑客见解
参与深入探讨黑客的刺激和挑战的内容

实时黑客新闻
通过实时新闻和见解了解快节奏的黑客世界

最新公告
通过最新的赏金计划发布和重要平台更新保持信息更新

加入我们的 Discord 并开始与顶尖黑客合作!