hacktricks/mobile-pentesting/android-app-pentesting
2024-02-05 02:56:36 +00:00
..
drozer-tutorial Translated ['mobile-pentesting/android-app-pentesting/drozer-tutorial/RE 2023-08-27 20:07:13 +00:00
frida-tutorial Translated ['mobile-pentesting/android-app-pentesting/frida-tutorial/REA 2024-01-13 22:21:57 +00:00
adb-commands.md Translated ['linux-unix/privilege-escalation/docker-breakout.md', 'linux 2024-01-06 23:36:06 +00:00
android-applications-basics.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-01-05 11:51:55 +00:00
android-burp-suite-settings.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2023-09-28 19:47:23 +00:00
android-task-hijacking.md Translated ['generic-methodologies-and-resources/exfiltration.md', 'gene 2023-09-03 01:34:43 +00:00
apk-decompilers.md Translated to Chinese 2023-08-03 19:12:22 +00:00
avd-android-virtual-device.md Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil 2023-10-05 10:14:09 +00:00
bypass-biometric-authentication-android.md Translated ['forensics/basic-forensic-methodology/windows-forensics/READ 2024-02-03 16:02:37 +00:00
content-protocol.md Translated ['linux-unix/privilege-escalation/docker-breakout.md', 'linux 2024-01-06 23:36:06 +00:00
exploiting-a-debuggeable-applciation.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-02-03 16:56:23 +00:00
google-ctf-2018-shall-we-play-a-game.md Translated to Chinese 2023-08-03 19:12:22 +00:00
inspeckage-tutorial.md Translated ['linux-unix/privilege-escalation/docker-breakout.md', 'linux 2024-01-06 23:36:06 +00:00
install-burp-certificate.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-01-10 06:29:36 +00:00
intent-injection.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:56:36 +00:00
make-apk-accept-ca-certificate.md Translated ['linux-unix/privilege-escalation/docker-breakout.md', 'linux 2024-01-06 23:36:06 +00:00
manual-deobfuscation.md Translated ['forensics/basic-forensic-methodology/windows-forensics/READ 2024-02-03 16:02:37 +00:00
react-native-application.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-02-03 16:56:23 +00:00
README.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:56:36 +00:00
reversing-native-libraries.md Translated ['mobile-pentesting/android-app-pentesting/reversing-native-l 2023-12-24 18:22:05 +00:00
smali-changes.md Translated ['mobile-pentesting/android-app-pentesting/smali-changes.md'] 2023-10-11 21:33:30 +00:00
spoofing-your-location-in-play-store.md Translated ['mobile-pentesting/android-app-pentesting/spoofing-your-loca 2024-01-12 09:01:50 +00:00
tapjacking.md Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil 2023-08-25 14:04:31 +00:00
webview-attacks.md Translated ['linux-hardening/privilege-escalation/docker-security/docker 2023-12-19 21:55:08 +00:00

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 设备(模拟或实体)所需的主要工具。
它允许您通过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.xml_。你也可以将apk文件扩展名重命名为.zip解压它。
通过阅读清单,你可以发现漏洞

  • 首先,检查应用程序是否可以调试。生产APK不应该是这样的否则其他人将能够连接到它。你可以在清单中查找属性debuggable="true"来检查应用程序是否可以调试。示例:<application theme="@2131296387" debuggable="true"
  • 在这里学习如何找到手机中可以调试的应用程序并利用它们
  • 备份android:allowBackup属性定义了用户启用USB调试后是否可以备份和恢复应用程序数据。如果备份标志设置为true它允许攻击者通过adb备份应用程序数据即使设备未root。因此处理和存储敏感信息如卡片详细信息、密码等的应用程序应该将此设置明确设置为false,因为默认情况下它设置为true以防止此类风险。
  • <application android:allowBackup="false"
  • NetworkSecurity 应用程序的网络安全可以使用**android:networkSecurityConfig="@xml/network_security_config"**覆盖默认值。可以在_res/xml_中放置一个名为该名称的文件。此文件将配置重要的安全设置如证书固定或是否允许HTTP流量。你可以在这里阅读更多关于可以配置的所有内容的信息但请检查这个关于如何为某些域配置HTTP流量的示例
  • <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>
  • 导出的活动:检查清单中导出的活动,因为这可能很危险。在动态分析中,将解释如何滥用此行为
  • 内容提供程序:如果导出的提供程序被公开,你可能能够访问/修改有趣的信息。在动态分析中,你将学习如何滥用它们
  • 检查FileProviders配置,其中包含属性android:name="android.support.FILE_PROVIDER_PATHS"阅读这里了解更多关于FileProviders的信息
  • 公开的服务:根据服务在内部执行的操作,可能会利用漏洞。在动态分析中,你将学习如何滥用它们
  • 广播接收器你将学习如何可能滥用它们在动态分析中。
  • URL方案:阅读管理模式的活动代码,并查找管理用户输入的漏洞。有关URL方案是什么的更多信息请点击这里
  • minSdkVersiontargetSDKVersionmaxSdkVersion它们指示应用程序将在哪些Android版本上运行。重要的是要记住它们因为从安全角度来看支持旧版本将允许已知的易受攻击的Android版本运行它。

通过阅读resources.arsc/strings.xml,你可以找到一些有趣的信息

  • API密钥
  • 自定义模式
  • 开发人员在此文件中保存的其他有趣信息

点击劫持

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

在这里查找更多信息:

{% 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会捕获许多您稍后可以查看的有趣数据

非预期数据泄露

日志记录

开发人员经常会在公开留下调试信息。因此,具有READ_LOGS权限的任何应用程序都可以访问这些日志,并可以通过这种方式获取敏感信息。
在应用程序中导航时,请使用pidcat(推荐,更易于使用和阅读)或adb logcat来阅读生成的日志,并查找敏感信息

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

复制/粘贴缓存

Android提供了基于剪贴板的框架以在Android应用程序中提供复制/粘贴功能。但是,当一些其他应用程序可以访问包含一些敏感数据的剪贴板时,这会产生严重问题。应该禁用敏感部分的复制/粘贴功能。例如,禁用复制信用卡详细信息。

崩溃日志

如果应用程序在运行时崩溃并将日志保存在某个位置则这些日志可能对攻击者有所帮助特别是在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允许您扮演Android应用程序的角色并与其他应用程序进行交互。它可以执行任何已安装应用程序可以执行的操作例如利用Android的进程间通信IPC机制并与底层操作系统进行交互。来自Drozer指南
Drozer是一个有用的工具可用于利用导出的活动、导出的服务和内容提供程序,您将在以下部分中了解更多信息。

利用导出的活动

如果您想回顾一下什么是Android活动请阅读此内容。
还要记住,活动的代码从onCreate方法开始。

授权绕过

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

您还可以从adb启动导出的活动

  • PackageName为com.example.demo
  • 导出的ActivityName为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>

执行的代码

要找到在应用程序中执行的代码,请转到由深度链接调用的活动,并搜索名为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握手但使用易受中间人攻击的不安全密码套件。因此任何攻击者都可以轻松解密该连接。
  • 隐私信息泄露: 大多数情况下应用程序会通过安全通道进行身份验证但所有其他连接都通过非安全通道。这不会增加应用程序的安全性因为其他敏感数据如会话cookie或用户数据可能会被恶意用户拦截。

从所呈现的3种情况中我们将讨论如何验证证书的身份。其他两种情况取决于服务器的TLS配置以及应用程序是否发送未加密的数据。渗透测试人员应该自行检查服务器的TLS配置此处)并检测是否通过未加密/易受攻击的通道发送了任何机密信息
有关如何发现和修复这类漏洞的更多信息,请参阅此处

SSL Pinning

默认情况下在进行SSL连接时客户端Android应用程序会检查服务器的证书是否具有可验证的信任链直到受信任证书并且是否与请求的主机名匹配。这导致中间人攻击MITM的问题。
在证书固定中Android应用程序本身包含服务器的证书只有在呈现相同证书时才传输数据。
建议在将发送敏感信息的站点上
应用SSL Pinning

检查HTTP流量

首先,您应该(必须)安装您将要使用的代理工具的证书可能是Burp。如果您不安装代理工具的CA证书您可能无法在代理中看到加密流量。
阅读此指南以了解如何在虚拟机上安装自定义CA证书

针对API级别24+的应用程序仅安装Burp CA证书在设备上是不够的。要绕过此新保护您需要修改网络安全配置文件。因此您可以修改此文件以授权您的CA证书或者您可以阅读此页面以了解如何强制应用程序再次接受设备中安装的所有证书

SSL Pinning

我们已经在前面的两段讨论了SSL Pinning是什么。当它在应用程序中实施时您需要绕过它以检查HTTPS流量否则您将无法看到它。
这里我将介绍一些我用来绕过此保护的选项:

常见Web漏洞

请注意在此步骤中您应该查找常见的Web漏洞。关于Web漏洞的大量信息可以在本书中找到因此我在这里不会提及它们。

Frida

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

学习如何使用FridaFrida教程
一些用于与Frida执行操作的“GUI”https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
基于Frida的其他抽象https://github.com/sensepost/objectionhttps://github.com/dpnishant/appmon
您可以在此处找到一些出色的Frida脚本https://codeshare.frida.re/

转储内存 - 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>

{% endcode %}

背景图片

当您将应用程序置于后台时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注入

这种漏洞类似于Web安全中的开放重定向。由于Intent类是Parcelable属于该类的对象可以作为额外数据传递给另一个Intent对象。
许多开发人员利用这个特性创建代理组件(活动、广播接收器和服务),将嵌入的Intent传递给危险方法,如startActivity(...)sendBroadcast(...)等。
这是危险的,因为攻击者可以强制应用启动一个无法直接从另一个应用程序启动的非导出组件,或者授予攻击者访问其内容提供程序的权限。**WebView有时也会将URL从字符串更改为Intent**对象,使用Intent.parseUri(...)方法,并将其传递给startActivity(...)

Android客户端注入和其他漏洞

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

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

加入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,让您了解在执行 动态分析 时应用程序中发生了什么。

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

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以查找常见漏洞和行为
  • 针对常见漏洞和行为进行静态源代码分析
  • 设备信息
  • 意图
  • 命令执行
  • SQLite 引用
  • 日志引用
  • 内容提供程序
  • 广播接收器
  • 服务引用
  • 文件引用
  • 加密引用
  • 硬编码的秘密
  • URL
  • 网络连接
  • SSL 引用
  • WebView 引用
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

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

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

来源:https://en.wikipedia.org/wiki/ProGuard_(software)

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安全虚拟机包括来自不同安全极客和研究人员的最新框架、教程和实验室用于逆向工程和恶意软件分析。

OWASP

{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}

Git Repos

https://github.com/riddhi-shree/nullCommunity/tree/master/Android
https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec

参考资料

欲了解更多信息,请访问:

测试

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

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

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

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

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