Skip to content

Latest commit

 

History

History
582 lines (360 loc) · 36.8 KB

File metadata and controls

582 lines (360 loc) · 36.8 KB

四、Android 应用攻击概述

本章概述了 Android 的攻击面。我们将讨论对 Android 应用、设备和应用架构中其他组件的可能攻击。本质上,我们将为通过网络与数据库通信的传统应用构建一个简单的威胁模型。为了了解渗透测试期间要测试什么,必须了解应用可能遇到的威胁。本章是一个高级概述,包含较少的技术细节。

本章涵盖以下主题:

  • 安卓应用简介
  • 移动应用的威胁建模
  • OWASP 移动十大漏洞概述
  • Android 应用评估自动化工具简介

对手机的攻击可分为多种类型,如利用内核中的漏洞、攻击易受攻击的应用、诱骗用户下载并运行恶意软件从而从设备窃取个人数据、在设备上运行配置错误的服务等。虽然我们有多种针对 Android 的攻击,但本章主要关注应用级别的攻击。我们将讨论测试和保护移动应用的各种标准和指南。本章作为本书后续章节的基线。

安卓应用介绍

Android 应用根据其利用方式大致分为三种类型:

  • 基于 Web 的应用
  • 本地应用
  • 混合应用

基于 Web 的应用

一款移动网络应用,正是它所说的,一款使用 JavaScript 或 HTML5 等网络技术利用的应用,提供交互、导航或定制功能。它们在移动设备的 web 浏览器中运行,并通过从后端服务器请求网页来呈现。将同一应用用作普通浏览器呈现的应用和应用并不少见,因为它提供了不重复利用工作的好处。

本地应用

与基于网络的应用不同,本地移动应用提供快速性能和高可靠性。它们提供了快速的响应时间,因为整个应用都不是从服务器获取的,它可以利用 Android 提供的本机支持的快速性。此外,用户可以在没有互联网连接的情况下使用某些应用。然而,使用本机技术利用的应用不是独立于平台的,并且与一个特定的移动平台相关联,因此企业正在寻找能够避免跨移动平台重复工作的解决方案。

混合应用

混合应用试图兼收并蓄,即本机应用和 Web 应用,像本机应用一样在设备上运行,并使用 Web 技术(HTML5、CSS 和 JavaScript)编写。混合应用在本机容器中运行,并利用设备的浏览器引擎(而不是浏览器)呈现 HTML 并在本地处理 JavaScript。web 到本机抽象层允许访问在移动 web 应用(如加速计、摄像头和本地存储)中无法访问的设备功能。通常,这些类型的应用是使用 PhoneGap、React Native 等框架利用的,但是,组织也创建自己的容器并不少见。

了解应用的攻击面

当利用一个应用时,我们需要考虑在应用体系结构的每一层强制执行安全控制。

移动应用架构

社交网络、银行和娱乐等移动应用包含大量需要互联网通信的功能,因此当今大多数移动应用都具有典型的客户端-服务器架构,如下图所示。当了解这些应用的攻击面时,需要考虑应用的所有可能性,包括客户端应用、API 后端、服务器相关漏洞和数据库。这些地方的入口点可能会对整个应用/其数据造成威胁。为了进行说明,假设我们有一个 Android 应用使用后端 API 连接到其服务器,而后端 API 又与其数据库交互:

Mobile application architecture

建议在利用软件时遵循安全 SDLC 过程。许多组织都采用这种 SDLC 方法来在软件利用生命周期过程的每个阶段实现安全性。

安全软件利用生命周期SDLC是一种帮助组织从 SDLC 过程开始就在其产品中构建安全性的方法,而不是事后思考。采用 SDLC 可减少维护周期内修复问题的工作量,从而增加利润。

正如我们从 Microsoft SDL 流程文档的下图中所看到的,SDLC 的每个阶段都至少涉及一个安全活动,这将有助于保护应用。每个组织在 SDLC 中嵌入安全性方面都是不同的,它们的成熟度也不同,但是,对于考虑采用这种方法的组织来说,以下可能是一个良好的开端:

  • 威胁建模:通过定义资产、资产提供的价值以及可能有兴趣攻击资产的潜在威胁参与者,识别应用面临的威胁。理想情况下,威胁建模需要在应用的设计阶段完成。

  • 静态分析:在实现阶段,建议每个发布周期至少对源代码进行一次静态分析。这为涉众提供了风险概述,他们可以接受风险,也可以在应用投入生产之前要求利用团队解决问题。

  • Dynamic Analysis: Dynamic analysis is done during the Verification phase of the SDLC process. Dynamic analysis is a technique to find issues while the application is running. It can help organizations in knowing the security posture of their applications before deployment. We will cover more of what Dynamic analysis entails and how it can be done in the next few chapters.

    Mobile application architecture

让我们探讨一下移动应用的一些常见威胁,这些威胁必须在移动应用的设计阶段加以解决。假设攻击者可以物理访问设备和应用二进制文件。

客户端的威胁

  • 应用数据静止:随着移动应用的引入,在客户端存储数据的概念被大量采用。许多移动应用在设备上存储敏感数据而不进行任何加密。这是移动应用的主要问题之一。这些数据可能是敏感的、机密的和私有的。设备上的数据可以通过多种不同的方式进行利用。拥有设备物理访问权限的攻击者几乎无需任何操作即可访问此数据。如果设备已根目录/越狱,恶意应用可能会访问此数据。务必确保应用不会在设备上存储敏感数据,如用户名、密码、身份验证令牌、信用卡号码等。如果无法避免,则需要对其进行加密并使其远离攻击者的控制。我们将在第 5 章数据存储及其安全中探讨更多关于不安全数据存储漏洞的详细信息。
  • 传输中的应用数据:与后端通信的移动应用高度暴露于针对传输中数据的攻击。对于终端用户来说,在咖啡店和机场加入公共可用的网络是非常普遍的,攻击者可以坐在这里,使用诸如 BIP 代理、MITM 代理、SSL OUTT3、MITM ORD T4(短于 ALE T5 人中间 T6 的 T7 攻击)代理等工具窃听数据。随着智能手机应用的引入,这种攻击的可利用性变得非常容易,因为无论我们走到哪里,手机都会跟着我们。
  • 代码中的漏洞:在利用移动应用时,如果没有考虑安全控制,可能会受到各种攻击。应用中的这些编码错误可能导致应用中存在严重漏洞,进而影响用户/应用数据。此类错误的示例包括:导出的内容提供者、导出的活动、客户端注入等等。攻击场景包括,对设备具有物理访问权限的攻击者可能获得对其他用户会话的访问权限。由于编码错误而暴露数据时,位于同一设备上的恶意应用可以读取其他应用的内容。有权访问二进制文件的攻击者可以反编译应用并查看源代码中的硬编码凭据。
  • 应用中的数据泄漏:这是几乎所有平台的移动应用中的另一个问题。应用可能会无意中将敏感数据泄漏给攻击者。这需要利用人员特别注意。他在利用阶段用于日志记录的代码必须删除,并且他必须确保没有数据容易泄漏。关注这一点的主要原因是应用沙箱不适用于此类中的某些攻击。如果用户从应用复制一些敏感数据,如安全应答,则这些数据将被放置在设备剪贴板上,该剪贴板位于应用沙箱之外。位于同一设备上的任何其他应用都可以在不知道第一个应用的情况下读取复制的数据。
  • To.T0.平台特定问题:Ty1 T2:当设计用于移动应用的威胁模型时,重要的是考虑与该应用将运行的平台相关的威胁。让我们考虑一个 Android 的例子,为 Android 平台利用的本地应用可以很容易地逆向工程,并且 java 源代码可以很容易地查看。它允许攻击者查看源代码以及代码中硬编码的任何敏感数据。还可以修改应用中的代码并重新编译,然后在第三方市场分发应用。如果应用本质上是敏感的,或者是付费应用,则必须考虑执行完整性检查。尽管上述问题在像 iOS 这样的平台上相对不太有效,但如果设备越狱,它也有自己的特定于平台的问题。

后端威胁

Web 服务几乎类似于 Web 应用。web 服务可能会受到普通 web 应用可能具有的所有常见漏洞的影响。在为移动应用利用 API 时,必须牢记这一点。我们在 API 中看到的一些常见问题如下所示:

  • 身份验证/授权:在利用后端 API 时,构建自定义身份验证非常常见。可能存在与身份验证/授权相关的漏洞。
  • 会话管理:移动平台中的会话管理通常使用身份验证令牌完成。当用户第一次登录时,他将获得一个身份验证令牌,该令牌将用于会话的其余部分。如果此身份验证令牌在销毁之前未得到适当保护,则可能导致攻击。在客户端而不是服务器端终止会话是移动应用中常见的另一个问题。
  • 输入验证:输入验证是我们在应用中常见的已知问题。如果未实施输入验证控制,则可能存在 SQL 注入、命令注入和跨站点脚本漏洞。
  • 错误处理不当:错误对攻击者具有吸引力。如果错误处理未正确完成,并且 API 正在抛出特定于精心编制的请求的数据库/服务器错误,则有可能使用这些错误进行攻击。
  • 弱加密:加密是利用人员在利用过程中犯错误的另一个领域。虽然每个平台都支持以加密方式保护数据的正确实现,但密钥管理是客户端的一个主要问题。同样,后端的数据存储需要安全存储。
  • 对数据库的攻击:同样重要的是注意,攻击者可能会直接获得对数据库的未经授权的访问。例如,如果数据库控制台(如 phpMyAdmin)没有使用强凭据进行保护,则攻击者有可能获得对该控制台的未经授权的访问。另一个例子是访问未经身份验证的 MongoDB 控制台,因为 MongoDB 的默认安装不需要任何身份验证即可访问其控制台。

测试和保护移动应用的指南

有多个组织提供测试和保护移动应用的指南。最常见的包括 OWASP 移动前 10 名和 Veracode 移动应用前 10 名。此外,谷歌自身也提供了一些指导方针,说明如何通过举例说明不应做什么来保护 Android 应用。了解这些指南对于理解渗透测试期间要查找的内容非常重要。

让我们简要了解一下 OWASP Mobile 前 10 个漏洞。

OWASP 十大移动风险(2014)

下图显示了 OWASP 十大移动风险,这是 2014 年发布的十大移动应用漏洞列表。这是撰写本书时的最新列表:

OWASP Top 10 Mobile Risks (2014)

以下是前 10 个漏洞,我们将在以下章节中对每一个漏洞进行更深入的研究:

  • M1:弱服务器端控制
  • M2:不安全的数据存储
  • M3:传输层保护不足
  • M4:意外数据泄漏
  • M5:授权和身份验证较差
  • M6:破译的密码
  • M7:客户端注入
  • M8:通过不受信任的输入进行安全决策
  • M9:不正确的会话处理
  • M10:缺少二进制保护

让我们看看这些章节中的每一部分都讨论了什么。

M1:服务器端控件弱

弱服务器端控制谈论对应用后端的攻击。今天的大多数应用都使用 Internet 连接,它们使用 REST 或 SOAP API 与后端服务器通信。与传统 web 服务器和 web 应用相关的安全原则将保持不变,因为我们只是使用不同的前端(移动客户端),后端仍然相同。典型的攻击向量包括找出暴露的 API 中的入口点,并针对各种漏洞对其进行模糊化,利用配置错误的服务器,等等。几乎所有传统的 OWASP 前 10 个漏洞都适用于此部分。

M2:数据存储不安全

利用人员假设攻击者无法访问存储在设备文件系统中的数据。基于这种假设,利用人员通常使用共享首选项或 SQLite 数据库等概念将敏感数据(如用户名、身份验证令牌、密码、PIN)和个人信息(如 DOB 和地址)存储在设备的文件系统上。有多种方法可以访问本地存储在设备上的数据。常见的技术是根设备并访问数据,使用基于备份的攻击等等。我们将在下一章讨论这些利用技术。

M3:传输层保护不足

如上图所示,传输层保护不足位于第三位。与 Web 应用类似,移动应用可能通过不安全的网络传输敏感信息,从而导致严重的攻击。在咖啡店和机场,访问开放式 Wi-Fi 非常常见,恶意攻击者实际上可以执行 MITM 攻击,从网络上的用户那里窃取敏感数据。

测试移动应用时,可能会出现应用通过网络传递凭据或会话令牌的情况。因此,分析应用流量以查看其是否在网络上传递敏感信息始终是一个好主意。还有另一个重要场景,大多数应用都易受攻击。如果应用通过 HTTPS 执行身份验证并通过 HTTP 发送身份验证 Cookie,则该应用易受攻击,因为攻击者可以轻松获得通过 HTTP 传递的身份验证 Cookie,并且这些 Cookie 与登录应用的用户名和密码一样强大。缺乏证书验证和弱握手协商也是传输层安全的常见问题。

M4:意外数据泄漏

当应用处理作为用户或任何其他来源输入的敏感信息时,可能会导致将该数据放在设备中不安全的位置。在同一设备上运行的其他恶意应用可能会访问此不安全位置,从而使设备处于严重的风险状态。代码容易受到严重攻击,因为利用这些侧通道数据泄漏漏洞非常容易。攻击者只需编写一小段代码即可访问敏感信息的存储位置。我们甚至可以使用 adb 等工具访问这些位置。

以下是可能存在意外数据泄漏缺陷的示例场景列表:

  • 泄露内容提供商
  • 复制/粘贴缓冲区缓存
  • 登录中
  • URL 缓存
  • 浏览器 cookie 对象
  • 发送给第三方的分析数据

M5:授权和身份验证不好

移动应用以及设备的可用性因素与传统 web 应用和笔记本电脑的可用性因素不同。由于移动设备的输入形式因素,通常需要短 PIN 码和密码。由于可用性要求,移动应用的身份验证要求可能与传统的 web 身份验证方案大不相同。如果没有强制控制来防止此类攻击,攻击者很容易在应用中强行使用这些较短的 PIN。我们可以通过向服务器发送恶意请求并查看这些请求是否得到服务,尝试访问应用的更多特权功能,从而测试糟糕的授权方案。

M6:密码破解

当应用利用人员希望在其应用中利用加密时,就会出现破译密码攻击。由于各种原因,Android 应用中可能会引入破坏的加密。OWASP Mobile Top 10 项目中提到的两个主要原因如下:

  • Using a weak algorithm for encryption/decryption:

    这包括使用具有明显弱点或不足以满足现代安全要求(如 DES、3DES 等)的算法

  • Using a strong encryption algorithm but implementing it in an insecure way:

    这包括在本地数据库文件中存储密钥,在源代码中对密钥进行硬编码,等等

M7:客户端注入

客户端注入导致通过移动 app 在移动设备上执行恶意代码。通常,该恶意代码以数据的形式提供,威胁代理通过多种不同方式将数据输入到移动应用。

以下是 Android 应用中客户端注入攻击的一些示例:

  • webview 中的注入
  • 用于 SQLite 数据库的原始 SQL 语句中的传统 SQL 注入
  • 内容提供者中的 SQL 注入
  • 内容提供者中的路径遍历

M8:通过不可信输入的安全决策

利用人员应始终假设未经授权的方可以提供格式错误的输入,以滥用应用的敏感功能。特别是在 Android 中,攻击者可以拦截调用(IPC 或 web 服务调用)并篡改此类敏感参数。此类功能的弱实现会导致应用的不当行为,甚至会向攻击者授予更高级别的权限。一个例子是使用格式错误的意图调用敏感活动。

M9:会话处理不当

移动应用使用 SOAP 或 REST 等协议连接到服务。这些协议是无状态的。当移动客户端应用与这些协议一起使用时,客户端在身份验证后从服务器获得令牌。服务器生成的令牌现在将在用户会话期间使用。OWASP 的不当会话处理涉及攻击和保护这些会话。移动应用中经常出现的一个常见问题是在客户端而不是服务器端使令牌无效。通常,应用接收到的令牌将使用共享首选项或 SQLite 数据库放置在客户机的文件系统上。获得该令牌访问权限的恶意用户,如果该令牌在服务器端未正确失效,则可以随时使用该令牌。其他可能的场景包括会话超时、弱令牌创建和过期令牌。

M10:缺少二进制保护

逆向工程是大多数 Android 应用中最常见的问题之一。攻击者在获取应用二进制文件时首先执行的步骤之一是反编译或反汇编应用。这使他们能够查看硬编码的秘密,发现漏洞,甚至通过重新打包分解的应用来修改应用的功能。虽然混淆源代码并不难,但大多数应用似乎都不这么做。当代码没有被混淆时,攻击者所需要的只是一个很好的工具,如 apktool 或 dex2jar 来完成工作。一些应用检查根设备。也可以通过反转应用或通过挂钩操作应用流来绕过此类检查。

参考:

https://www.owasp.org/index.php/Projects/OWASP_Mobile_Security_Project_-_Top_Ten_Mobile_Risks

自动化工具

这本书更多地关注概念而不是工具。然而,自动化工具通常在渗透测试期间为我们节省一些时间。以下是一些最常见的自动化工具,可用于自动评估 Android 应用。

Drozer 和 Quark 是两种不同的工具,在 Android 应用评估过程中可能会派上用场。

我们将讨论许多技术,例如挂接到应用进程并执行运行时操作、反向工程、手动发现和利用漏洞等。不过,本节重点介绍如何使用 Drozer 和 Quark 等自动化工具开始评估。

Drozer

Drozer 是 MWR 实验室利用的 Android 安全评估框架。在撰写本书时,Drozer 是 Android 安全评估的最佳工具之一。根据他们的官方文档,“Drozer 允许您扮演 Android 应用的角色,并通过 Android 的进程间通信IPC机制)和底层操作系统与其他应用交互”。

在处理 Web 世界中的大多数自动化安全评估工具时,我们需要提供目标应用的详细信息,去喝杯咖啡,然后回来获取报告。与常规自动扫描仪不同,Drozer 本质上是交互式的。要使用 Drozer 执行安全评估,用户必须在其工作站的控制台上运行命令。Drozer 将它们发送给设备上的代理以执行相关任务。

Drozer 安装说明见第 1 章搭建实验室

首先,启动 Drozer 终端,如下所示:

Drozer

使用 Drozer 进行 Android 安全评估

本节简要介绍了如何使用 Drozer 进行安全评估。我们将举例说明如何利用导出的易受攻击的活动。在本书后面,我们将在不使用 Drozer 的情况下详细讨论这些漏洞。

我们可以在真实的设备或模拟器中安装该应用。在我的例子中,我使用了一个模拟器来进行这个演示。

安装 testapp.apk

让我们使用以下命令安装 testapp 应用:

Installing testapp.apk

我们在本例中使用的 testapp.apk有一个导出的活动。导出时的活动可以由设备上运行的任何其他应用启动。那么,让我们看看如何使用 Drozer 对这个应用进行安全评估。

以下是 Drozer 中可用的一些有用命令。

列出所有模块

dz> list

上面的命令显示了当前会话中可执行的所有 Drozer 模块的列表:

Listing out all the modules

上一个屏幕截图显示了可以使用的模块列表(为简洁起见,输出被截断)。

正在检索包信息

要列出安装在仿真器上的所有软件包,请运行以下命令:

dz> run app.package.list

Retrieving package information

前面的输出被截断。

现在,为了计算特定应用的包名,我们可以使用我们要查找的字符串指定标志-f

dz> run app.package.list –f [string to be searched]

Retrieving package information

正如我们在上一个屏幕截图中看到的,我们的目标应用如下所示:

com.isi.testapp

要查看有关包的一些基本信息,可以运行以下命令:

dz> run app.package.info –a [package name]

就我们而言:

dz> run app.package.info –a com.isi.testapp

Retrieving package information

我们可以看到很多关于这个应用的信息。前面的输出显示了应用数据在文件系统中的位置、APK 路径、是否有任何共享用户 ID 等。

识别攻击面

本节是使用 Drozer 时最有趣的部分之一。我们可以通过单个命令识别目标应用的攻击面。它给出了诸如导出的应用组件、应用是否可调试等详细信息。

让我们继续寻找testapp.apk的攻击面。以下命令是用于查找特定包的攻击面的语法:

dz> run app.package.attacksurface [package name]

在我们的testapp.apk案例中,命令如下所示:

dz> run app.package.attacksurface com.isi.testapp

Identifying the attack surface

正如我们在前面的屏幕截图中所看到的,testapp 应用有两个活动,它们被导出。现在,我们的工作是找到出口活动的名称,以及它们是否具有敏感性。我们可以使用现有的 Drozer 模块进一步利用它。这个应用也是可调试的,这意味着我们可以在进程上附加一个调试器,单步执行每一条指令,甚至在应用进程的上下文中执行任意代码。

使用 Drozer 识别和利用 Android 应用漏洞

现在,让我们来研究上一节中得到的结果,在上一节中,我们试图确定目标应用的攻击面。

对出口活动的攻击

本节重点关注深入testapp.apk以识别和利用其漏洞。

从上一节中,我们已经知道此应用具有导出的活动。要识别当前包中现有活动的名称,让我们继续执行以下命令:

dz> run app.activity.info -a [package name]

就我们而言:

dz> run app.activity.info -a com.isi.testapp

Attacks on exported activities

在前面的屏幕截图中,我们可以看到目标应用中的活动列表。 com.isi.testapp.MainActivity显然是主屏幕,为了启动,应该导出主屏幕。com.isi.testapp.Welcome看起来像是登录屏幕后面的活动名称。那么,让我们尝试使用 Drozer 启动它:

dz> run app.activity.start --component [package name] [component name]

就我们而言,它是:

dz> run app.activity.start –component com.isi.testapp com.isi.testapp.Welcome

Attacks on exported activities

前面的命令在后台制定适当的意图,以便启动活动。这类似于使用 activity manager 工具启动活动,我们在上一节中讨论了这一点。以下屏幕截图显示了 Drozer 启动的屏幕:

Attacks on exported activities

很明显,为了登录到应用,我们绕过了身份验证。

这里有什么问题?

如前所述,活动组件的android:exported值在AndroidManifest.xml文件中设置为true

What is the problem here?

本节向读者简要介绍使用 Drozer 进行 Android 应用渗透测试。在后面的章节中,我们将使用 Drozer 看到更复杂的漏洞及其利用。

QARK(快速安卓审查工具包)

根据 QARK 的官方主页,QARK 的核心是一个静态代码分析工具,旨在识别基于 Java 的 Android 应用的潜在安全漏洞和关注点。QARK 旨在以社区为基础,面向所有人,免费使用。QARK 教育利用者和信息安全人员有关 Android 应用安全的潜在风险,提供问题的清晰描述和权威参考来源的链接。QARK 还试图提供动态生成的 ADB(Android 调试桥)命令,以帮助验证其检测到的潜在漏洞。它甚至会以随时可用的 APK 的形式动态创建一个定制的测试应用,该应用专门设计用于在可能的情况下演示它发现的潜在问题”。

QARK 安装说明见第一章搭建实验室

本节介绍如何使用 QARK 执行 Android 应用评估。

QARK 在两种模式下工作:

  • 交互模式
  • 无缝模式

交互模式使用户可以逐个交互选择选项。而无缝模式允许我们用一个命令完成整个工作。

在交互模式下运行 QARK

导航到 QARK 目录并键入以下命令:

python qark.py

这将启动交互式 QARK 控制台,如下所示:

Running QARK in interactive mode

我们可以根据需要扫描的内容在 APK 和源代码之间进行选择。我将使用 APK 选项,它允许我们看到 QARK 在反编译 APK 文件方面的威力。选择 APK 选项**【1】**后,我们需要在电脑上提供 APK 文件的路径或从设备中提取现有 APK。让我们从 PC 中选择 APK 文件位置。在我的情况下,我将给出 APK 文件的路径(testapp.apk

Running QARK in interactive mode

在提供目标 APK 文件的路径后,将按如下方式提取AndroidManifest.xml文件:

Running QARK in interactive mode

我们可以通过选择上面的y来检查提取的Manifest文件:

Running QARK in interactive mode

QARK 首先显示清单文件并等待用户继续。按输入开始分析清单文件,如下所示:

Running QARK in interactive mode

正如我们在前面的屏幕截图中所看到的,QARK 发现了几个问题,其中一个是由于android:debuggable值设置为true而导致的潜在漏洞。QARK 还提供了一个警告,上面显示的活动已导出。

完成清单文件分析后,QARK 开始反编译,这是源代码分析所必需的。按下回车键,我们可以按如下方式开始反编译过程:

Running QARK in interactive mode

出于某种原因,如果这个反编译过程需要很多时间,我们可以按C继续分析反编译过程中提取的任何代码。QARK 使用各种工具来执行反编译过程。

反编译完成后,我们可以按回车继续进行源代码分析:

Running QARK in interactive mode

让我们开始源代码分析:

Running QARK in interactive mode

正如我们在前面的截图中所看到的,源代码分析已经开始识别代码中的漏洞。这将在屏幕上提供一个冗长的输出,其中包含所有可能的结果。情况如下:

====================================================================================================
INFO - This class is exported from a manifest item: MainActivity
INFO - Checking this file for vulns: /Users/srini0x00/Downloads/testapp/classes_dex2jar/com/isi/testapp/MainActivity.java
entries: 
onCreate
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
====================================================================================================
INFO - This class is exported from a manifest item: Welcome
INFO - Checking this file for vulns: /Users/srini0x00/Downloads/testapp/classes_dex2jar/com/isi/testapp/Welcome.java
entries: 
onCreate
INFO - No custom imports to investigate. The method is assumed to be in the standard libraries
ISSUES - CRYPTO ISSUES
INFO -  No issues to report
ISSUES - BROADCAST ISSUES
INFO -  No issues to report
ISSUES - CERTIFICATE VALIDATION ISSUES
INFO -  No issues to report
ISSUES - PENDING INTENT ISSUES
POTENTIAL VULNERABILITY - Implicit Intent: localIntent used to create instance of PendingIntent. A malicious application could potentially intercept, redirect and/or modify (in a limited manner) this Intent. Pending Intents retain the UID of your application and all related permissions, allowing another application to act as yours.  File: /Users/srini0x00/Downloads/testapp/classes_dex2jar/android/support/v4/app/TaskStackBuilder.java More details: https://www.securecoding.cert.org/confluence/display/android/DRD21-J.+Always+pass+explicit+intents+to+a+PendingIntent
ISSUES - FILE PERMISSION ISSUES
INFO -  No issues to report
ISSUES - WEB-VIEW ISSUES
INFO - FOUND 0 WEBVIEWS:
WARNING - Please use the exploit APK to manually test for TapJacking until we have a chance to complete this module. The impact should be verified manually anyway, so have fun...
INFO - Content Providers appear to be in use, locating...
INFO - FOUND 0 CONTENTPROVIDERS:
ISSUES - ADB EXPLOIT COMMANDS
INFO - Until we perfect this, for manually testing, run the following command to see all the options and their meanings: adb shell am. Make sure to update qark frequently to get all the enhancements! You'll also find some good examples here: http://xgouchet.fr/android/index.php?article42/launch-intents-using-adb
==>EXPORTED ACTIVITIES: 
1com.isi.testapp.MainActivity
adb shell am start -a "android.intent.action.MAIN" -n "com.isi.testapp/com.isi.testapp.MainActivity"
2com.isi.testapp.Welcome
adb shell am start -n "com.isi.testapp/com.isi.testapp.Welcome"

To view any sticky broadcasts on the device:
adb shell dumpsys activity| grep sticky

INFO - Support for other component types and dynamically adding extras is in the works, please check for updates

扫描后,QARK 将显示以下屏幕。这是其独特的功能之一,允许我们通过选择选项**[1]**来创建 POC 应用:

Running QARK in interactive mode

此外,它还提供了一些 adb 命令来利用已识别的问题。QARK 的另一个好特性是它能够提供好的报告。

报告

正如我们在上一个屏幕截图中所看到的,QARK 生成了一个名为report.html的报告。我们可以导航到上一个屏幕截图中提供的路径并打开一个report.html文件以查看报告。

QARK 报告简单明了。

以下屏幕截图显示了仪表板下 QARK 调查结果的概述:

Reporting

让我们首先检查清单文件中报告的漏洞:

Reporting

正如我们所看到的,已识别出两个漏洞。除了漏洞信息外,还提供了一些参考资料,以帮助了解漏洞及其风险。

下一个选项卡存在与应用组件相关的漏洞:

Reporting

正如我们在前面的屏幕截图中所看到的,QARK 已经确定了两个导出的活动。需要手动验证,以确定它们是否真的是对应用构成风险的漏洞。为此,我们需要创建一个恶意应用或使用一些 adb 命令。QARK 在其报告中提供这些 adb 命令,如下所示:

Reporting

我们可以在设备/模拟器上安装目标应用,并在 PC 上运行这些命令。

在无缝模式下运行 QARK:

以下命令可用于在无缝模式下运行 QARK:

$ python qark.py --source 1 --pathtoapk ../testapp.apk --exploit 1 --install 1

这将与我们在上一次会话中查找漏洞的过程相同,但是这次没有用户干预。

如果您在构建 POC 应用时遇到错误,请将–exploit值设置为0

如果您不想将其安装在设备上,请将–install值设置为0

如下所示:

python qark.py --source 1 --pathtoapk ../testapp.apk --exploit 0 --install 0

这将只执行评估,并向您提供一份不带 POC 应用的报告,如下所示:

INFO - Initializing...
INFO - Identified Android SDK installation from a previous run.
INFO - Initializing QARK

INFO - Unpacking /Users/srini0x00/Downloads/testapp.apk
INFO - Zipfile: <zipfile.ZipFile object at 0x104ba0810>
INFO - Extracted APK to /Users/srini0x00/Downloads/testapp/
INFO - Finding AndroidManifest.xml in /Users/srini0x00/Downloads/testapp
INFO - AndroidManifest.xml found
INFO - <?xml version="1.0" ?><manifest android:versionCode="1" android:versionName="1.0" package="com.isi.testapp" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18">
</uses-sdk>
<application android:allowBackup="true" android:debuggable="true" android:icon="@7F020000" android:label="@7F050000" android:theme="@7F060001">
<activity android:label="@7F050000" android:name="com.isi.testapp.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN">
</action>
<category android:name="android.intent.category.LAUNCHER">
</category>
</intent-filter>
</activity>
<activity android:exported="true" android:name="com.isi.testapp.Welcome">
</activity>
</application>
</manifest>
INFO - Determined minimum SDK version to be:8
WARNING - Logs are world readable on pre-4.1 devices. A malicious app could potentially retrieve sensitive data from the logs.
ISSUES - APP COMPONENT ATTACK SURFACE
WARNING - Backups enabled: Potential for data theft via local attacks via adb backup, if the device has USB debugging enabled (not common). More info: http://developer.android.com/reference/android/R.attr.html#allowBackup
POTENTIAL VULNERABILITY - The android:debuggable flag is manually set to true in the AndroidManifest.xml. This will cause your application to be debuggable in production builds and can result in data leakage and other security issues. It is not necessary to set the android:debuggable flag in the manifest, it will be set appropriately automatically by the tools. More info: http://developer.android.com/guide/topics/manifest/application-element.html#debug
.
.
.
.
.
.

==>EXPORTED ACTIVITIES: 
1com.isi.testapp.MainActivity
adb shell am start -a "android.intent.action.MAIN" -n "com.isi.testapp/com.isi.testapp.MainActivity"
2com.isi.testapp.Welcome
adb shell am start -n "com.isi.testapp/com.isi.testapp.Welcome"

To view any sticky broadcasts on the device:
adb shell dumpsys activity| grep sticky

INFO - Support for other component types and dynamically adding extras is in the works, please check for updates
An html report of the findings is located in : /Users/srini0x00/Downloads/qark-master/report/report.html
Goodbye!

毫无疑问,QARK 是 Android SCA 的最佳工具之一,可免费使用。有一些功能缺失,如提供 adb 命令以查询内容提供商、利用注入漏洞、识别不安全的数据存储漏洞等。根据他们的 GitHub 页面,其中一些功能将在即将发布的版本中提供。QARK 的 GitHub 页面:

https://github.com/linkedin/qark

总结

本章通过解释 OWASP mobile top 10 列表中列出的常见漏洞,概述了 Android 应用攻击。我们还引入了 Drozer 和 QARK 等自动化工具。虽然本章是对这些工具的基本介绍,但我们将在本书后面部分对它们进行更多的探讨。

在下一章中,我们将讨论 Android 应用中的不安全数据存储漏洞。