漏洞赏金计划

核心提示两个月以前,我在ITsec公司开始了我大学最后一年的实习生涯。ITsec是一家全方位的信息安全评估公司,我的实习工作就是开发一个以供公司内部使用的安卓APP。通常,我在检查程序Bug时总是会把关注点放在Web层面,而忽视了安卓APP的安全问

两个月前,我开始了在ITsec的最后一次实习。ITsec是一家全方位的信息安全测评公司,我的实习工作是开发一款内部使用的Android APP。通常我在检查程序bug时总是把重点放在Web层面,而忽略了Android APP的安全问题。所以,经过一段时间对Android应用安全性的研究,我有所收获。我就简单写在这里和大家分享一下。

这里最直接的方法就是通过一些漏洞测试网站来了解,比如Hackerone和Bugcrowd,这些网站上有很多Android或者iOS的应用,需要在他们的项目中进行测试厂商标注的安全测试。测试的方法有很多。apk应用程序。在本文中,我将介绍如何利用这些厂商提供的apk文件找到涉案服务器,进一步扩大攻击测试面。

部署测试环境

当然,我们首先要构建测试环境。我这里用的操作系统是Fedora 27,因为我注意到和Windows相比,Fedora的速度大大提高,兼容性问题也相对较少。当然,作为一个安全小白,我现在是为MacBook Pro而战。

首先我们要搭建Android Studio,官方集成开发环境:

针对各种Android设备,Android Studio内置工具,可以快速开发生成相关的Android应用。这是一个优秀的代码编辑、调试和优化环境,可以即时构建/部署独特、可靠、高效的app应用,非常灵活。

具体安装步骤我就不重复了,有问题联系我就行。Android Studio内置了一个虚拟机或模拟器。我们可以用这个模拟的Android环境来测试。apk文件,这样我们就不需要额外买一部安卓手机来实测了。此外,该模拟环境还具有方便的系统恢复功能。虽然这种测试方式在模拟器和物理机之间有一些明显的优缺点,但暂时还是用模拟器做一些测试吧。

下面是一个无需启动Android Studio就可以运行模拟器的脚本:

# android.sh

#!/bin/bash

cd ~/Android/Sdk/tools 。/emulator-avd x1m-demo-av D1-无快照-加载

脚本会涉及到模拟器的一些初始设置,可以在Android Studio -> AVD Manager中完成。

此外,我们还需要一个java开发工具包。您可以在系统终端上使用java -version命令来检查您当前的java版本。如果没有,就只能安装了。我的Fedora系统中的安装命令如下:

sudonfinstalljava-1 . 8 . 0-open JDK-devel

就工具需求而言,我们会使用Java 7或更高版本的JRE 1.7环境,而且好像所有Linux发行版都默认安装了这个版本的运行环境。环境准备好了,就开始测试吧。

试验

测试Android应用不同于测试web应用,需要逆向工程、Java、API等方面的技能。如果你在这些方面没有经验,你可能会有麻烦。现在,我正在努力学习所有这些东西,所以在这里耐心尤为重要。可以通过一些用户指南和自述文件,尝试开发自己的移动应用app。这里,我们先来看看apk文件的反编译,以便在前期排查和漏洞挖掘中发现一些“简单”的问题。

我们需要一个反编译器,它可以用来转换一个。apk文件转换成原代码。在反编译的过程中,我们可以检查应用程序的输出,从中可以发现一些隐藏的字符串信息,比如API keys,甚至Web端的密码。

所需工具

我们需要一个反编译程序。反编译器试图转换。Apk文件转换为原始源代码。反编译后,我们可以检查输出以找到隐藏的字符串,比如API键,甚至一些web服务的凭证。这些工具是:

Jadx:这是一个Dex到Java文件的反编译器,也是我最喜欢的Android应用反编译器之一。使用起来非常简单,可以通过命令行和界面从Android Dex文件或apk文件生成源代码。

Apktool:这是一个可以用来逆向Android APP的工具。它可以将资源恢复到几乎原始的形式,并可以在一些修改后重建。因为文件结构工程、Apk构造等一些重复操作的自动执行功能,可以让APP的使用变得更加简单容易。

这两个工具都很不错。我个人比较喜欢用jadx,后续测试中也会用到。

APK下载器:可以用来直接从网页下载Google Play应用商店中的APK文件,省去了额外的步骤,只需要提交相应APP的URL下载地址即可。

开始测试。

让我们反编译一个。apk文件优先:

用Imgur官方安卓应用试试就知道了。可以正常下载。下载后,我们将使用jadx对其进行反编译:

./jadx -d ~/bugbounty/Imgur/ ~/bugbounty/Imgur/imgur_mobile_v4.0.1.6893.apk./jadx-d ~/bug bounty/Imgur/~/bug bounty/Imgur/Imgur _ mobile _ v 4 . 0 . 1 . 6893 . apk

我没有在里面插入一些标志。其实我也可以。有时候,当源代码非常混乱的时候,可以使用Jadx的一些选项来恢复大量可读的源代码。有关详细信息,请参考–-帮助选项描述。

如果我们在Jadx反编译之后去目标APP目录,可以发现它的apk文件已经被转换成源文件了。我们可以看到两个目录:资源和源代码。

资源:它包含所有静态文件,如AndroidManifest.xml和字符串。

来源:它包含了应用程序运行所需的所有开发代码和第三方代码。

让我们来看看这些静态文件。让我们从这个AndroidManifest.xml文件开始,它在每个Android应用程序中都起着重要的作用。在这个文件中,开发者确定了APP需要的各种权限,以及APP操作会产生的各种行为活动。AndroidManifest.xml一般位于/resources/androidManifest.xml。

AndroidManifest.xml清单

调试模式:这是开发人员通常会忽略的一个错误。他们经常忘记将Android: Debuggable = "true "设置为Android: Debuggable = "false "。为了安全起见,此标签应在应用程序发布前设置为false:

允许备份:如果您的应用程序在运行后将存储密码和信用卡等敏感数据,您可以将此设置为“false”:

外部存储:该功能是有权将数据复制到SD卡等外部载体上进行存储。这里,还需要知道存储的数据中是否有一些敏感信息:

权限:在Android APP的android:protectionLevel属性中,有四个权限值:正常、危险、签名和signatureOrSystem:

意图:即各种功能的具体执行目的,如用于发起动作、发送到广播接收机组件或与后台的服务通信等。:

在测试一款安卓APP时,我们往往需要检查以上几项的安全性。在前期检测阶段,我们要选择一个突破口,尤其是AndroidManifest.xml这里是一个很好的选择。

深度挖掘分析

此外,我还会看看Android应用程序的硬编码字符串。几乎所有可见的Android应用程序文本内容都存储在/values/strings.xml文件中。当然,如果幸运的话,我会发现一些硬编码的信息没有被编码。

一般来说,我们认为APP开发者不应该把一些敏感的信息保存在一些更编码的数据中。然而,也有例外。我多次通过这种strings.xml发现一些APP敏感信息。

Strings.xml可能包含一些API密钥、密码和其他有用的信息。今年3月,HackerOne的H1-202 CTF有一个标志涉及这种硬编码方法。

可以快速定位strings.xml文件,在任何编辑器中都能找到APP应用的/res/values/strings.xml。可以用ctrl+f查看相关信息,也可以直接用grep命令查找:

结束~

 
友情链接
鄂ICP备19019357号-22