导语:移动平台提供了很多服务,从身份验证到安全数据存储再到安全网络通信。但是,如果平台的某些功能使用不当,可能会导致数据泄露,允许不信任主机连接等问题。本文我们总结了一些安卓的checklist。

前不久为大家介绍了安卓应用程序渗透测试checklist的第一部分,今天与大家分享第二部分。

M6—不安全的授权

为了测试设计存在问题的授权方案,测试员可以尝试对移动app发起二进制攻击,在app处于离线模式下执行只有高级权限用户才能执行的功能,看看是否能成功。

测试员可以尝试在向后端服务器发起敏感功能的POST/GET请求中使用低权限的session来执行高权限的功能。

授权方案设计存在缺陷或者缺失,让攻击者能够使用通过app身份验证的低权限用户执行他们原本无权执行的功能。

手机有一个需求就是要保证离线时的可用性,所以授权通常是在移动设备本地完成的,而不是通过远程服务器,如此一来,授权问题就更加容易遭受攻击。

如果授权被绕过,依据所执行的高权限的功能,可能会产生严重而广泛的影响。例如,能够执行远程或本地管理员的权限,那危害可就大了,可以直接破坏系统,当然,获取敏感信息也就不在话下了。

以下是一些检查项及其描述:

2.png

M7—客户端代码质量问题

客户端代码注入导致可以通过手机app在移动设备上执行恶意代码。

查找app是否存在注入最好的方法是检查输入源,检查用户输入是否进行了输入验证,是否做了防代码注入。检查源码是查看app是否正确处理数据最快最准确的方式。

另请阅读:最重要的安卓安全渗透测试工具清单

代码审计工具可以帮助安全分析师使用解释器的方法并通过应用程序追踪数据流。手工测试人员也可以通过精心构造exp来发现漏洞。

由于手机app中的数据来源有很多,所以列举出它们的目的十分重要。总的来说,移动设备上的代码注入攻击包括下面几种:

设备上的数据:

SQL注入:

SQlite容易遭受注入攻击,就跟web应用一样。SQlite是很多手机中的默认存储机制。如果你的应用中包含多个用户或付费的内容时,通过SQL注入漏洞是可以查看到所有用户数据的,威胁非常之大。

本地文件包含(LFI):

移动设备上的文件处理也会导致数据泄露,不过它只能读取你的应用程序目录中能够查看的文件。

手机用户会话:

JavaScript注入(比如XSS)。手机浏览器也会有JavaScript注入漏洞。通常情况下,手机浏览器可以访问手机app的cookies,这可能会导致会话窃取。

应用程序接口和函数:

一些应用程序接口和语言函数能够接受数据,并且可以进行模糊测试导致程序崩溃。由于手机平台的代码是进行托管的,所以这些漏洞一般不会造成溢出,但是有几个漏洞已经被用作exp来攻击经过root和越狱过的设备。

二进制代码:

手机恶意软件或其他恶意软件能够执行针对表示层(HTML,JavaScript,CSS)的二进制攻击,或者是对手机app可执行文件底层的二进制文件进行攻击。这些代码注入是在运行时通过手机app的框架或者二进制文件本身来执行的。

下表是一些检查项及其描述:

11.png

M8—代码篡改

篡改检测是手机app中使用的一种预防措施,有些第三方会未经过你的同意就重新编译代码并在他们的商店中发布app,而代码篡改检测措施就是防止他们这种行为的。

检测安卓app代码篡改和降低风险,需要做到以下两点:

· 检查app是否重命名

· 检查app是否未经过你的同意进行发布

111.png

M9—逆向

要从源码对apk文件进行逆向,你需要执行下面几点:

· 分离apk文件

· 提取java类

· 反编译java源码

· 检查APK内容

222.png

M10—额外的功能

这类漏洞主要是关于会话处理,很多的会话处理方法并不安全。会话处理不恰当导致的结果跟糟糕的身份验证结果一样。一旦认证成功并且得到了一个session,这个session就允许你访问移动app。移动app代码必须非常小心的保护用户的会话,就像身份验证机制一样。

以下是几个会话处理不当的例子:

· 后端没有及时终止会话

· 缺乏足够的超时保护

· 没有正确重置cookies

· 不安全的token生成

后端没有及时终止会话

很多开发者并没有在服务器端终止会话,而是在手机app中进行终止。这就给攻击者打开了攻击的大门,他们可以使用HTTP控制工具来发起攻击。确保所有的会话终止事件都是在服务器端执行的,而不仅仅是在手机app中。

缺乏足够的超时保护

你开发的任何手机app在后台组件中都必须有足够的超时保护。这能够防止图谋不轨的未授权用户获取当前会话并伪装成那个用户进行访问。

根据应用程序的敏感程度和风险程度,合理的超时保护时间也各不相同,可以参考下面的超时保护时间:

· 安全性高的应用程序设置为15分钟

· 安全性中等的应用程序设置为30分钟

· 安全性较低的应用程序设置为1小时

随着用户与手机app交互越来越频繁,移动app的会话超时也变得越来越长。通常,用户在使用手机app时,同时也会做很多其他事情。

与传统的web应用相比,人们与移动app的交互往往是断断续续的,不可预测的,且持续的时间更长。从某种程度上来说,由于交互时间的间隔变长了,所以会话超时时间更长也就合情合理了。

然而,如果会话处理不当的话,随着超时时间的加长,风险也会随之增加。不过这种风险的提升也会让人们意识到问题的存在,从而采取措施来确保会话得到正确的处理。

无法正确重置Cookies

会话管理的另一个问题是当身份验证状态发生改变时,无法正确的重置cookies。身份验证状态改变包括以下这些事件:

· 从匿名用户切换到登陆用户

· 从任何登陆用户切换到另一个登陆用户

· 从普通用户切换到特权用户

· 会话超时

对于这些事件来说,在服务器端终止会话而且不再接受前一个会话的cookies是至关重要的。最理想的情况是,你的应用程序能够检测到前面提到的任何cookies的使用,并将其报告给相应的安全团队。

不安全的令牌生成

除了在关键应用程序事件期间从服务器端终止tokens之外,还必须正确的生成令牌。跟加密算法一样,开发者应该使用体系成熟而且是行业标准的方法来生成tokens。tokens必须要足够长,足够复杂,且具有伪随机性,这样才不会被轻易猜测到。

以下是一些检查项及其对应的描述:

1212.png

本系列教程到这里就结束了,希望大家能够享受安卓渗透测试的乐趣!

源链接

Hacking more

...