1.png

在任何环境下的移动端安全审计中,肯定都会涉及到拦截HTTPS流量。通过向Android应用添加自定义的CA,我们就可以轻松完成HTTPS流量拦截了。但是对于Android Nougat(Android 7),应用程序并不会轻易信任客户端证书,除非应用程序指定要使用这个证书。那么在这篇文章中,我们将跟大家介绍一个新的Magisk模块【MagiskTrustUserCerts】,这个模块可以自动将客户端证书添加到系统层信任的storage,而所有的应用程序默认会信任这种类型的证书,所以该模块正好满足我们的需要。

HTTPS拦截的基本方法

在Android平台上拦截HTTPS流量其实并不复杂,它只需要几步便可以实现:

1.   将Burp设置为我们的代理;

2.   访问http://burp

3.   将Burp证书以用户证书的形式安装;

4.   开始拦截流量

2.png

3.png

4.png

完成上述步骤之后,你就可以查看到所有从目标用户浏览器发送的HTTPS流量了。关于这部分内容,感兴趣的同学可以参考Portswigger的官方文档【参考文档】。

在此之前,上述的这种方法甚至还适用于桌面端应用程序的流量拦截,因为应用程序默认会信任所有安装的用户证书。如果你想防止应用程序的流量被拦截的话,你可以尝试使用证书绑定。证书绑定意味着每一个SSL通信连接的证书(服务器端)都需要跟本地存储的证书版本进行比对。如果服务器能够提供正确的身份凭证,连接才能够成功建立。这是一种非常好的安全功能,但是在开发人员的实现过程中却会存在各种各样的安全问题。

进入Android Nougat(Android 7)

从Android Nougat开始,应用程序默认不会信任用户证书。虽然开发人员可以通过配置应用程序AndroidManifest.xml文件的networkSecurityConfig属性来选择接受用户证书,不过默认情况下这些证书仍是不受信任的。

首先我们要做的就是对目标应用程序进行反编译、修改和重新编译,这部分可能需要你多花点时间了。如果应用程序采用了某些反编译保护机制的话,这就非常麻烦了,关于该技术的细节信息可以参考securestate.com给出的参考文档【传送门】。

另一种方法就是将用户证书添加到系统商店之中。系统商店位于/system/etc/security/cacerts路径下,其中包含了与已安装root证书相关的文件。

5.png

最简单的解决方案就是将用户证书文件(位于目录/data/misc/user/0/cacerts-added内)直接拷贝到这个文件夹内。如果系统是以r/w加载的话,我们就需要重新加载/system分区,然后使用一些root检测算法来检测修改是否成功。

使用Magisk

Magisk是一种“通用型的系统接口”,它可以在不对系统本身进行任何修改的情况下实现一些系统层功能。实际上,Magisk并不会对/system分区进行修改,而这对于安全审计活动来说是一种非常大的优势,因为我们不用再需要对设备进行root了。通过激活目标设备上的“Magisk Hide”功能,Magisk将完全对用户不可见。

Magisk还支持很多自定义的模块,而这类模块的制作也非常简单。为了让任意的用户证书被识别为系统证书,我们制作了一个简单的Magisk模块,并将其上传到了GitHub代码库中【GitHub传送门】。

该模块的实现逻辑如下:

1.   寻找已安装的用户证书;

2.   将它们添加到/system/etc/security/cacerts目录中;

安装完成之后,Magisk模块的内容将会被加载到/magisk/trustusercerts/。这个文件夹中包含有多种文件,但最重要的就是system目录。这个目录会自动跟真实的/system目录合并,但不会对/system分区进行修改和操作。这样一来,所有位于/magisk/trusteusercerts/etc/security/目录下的证书最终都会出现在/system/etc/security目录中。

模块的使用方法也非常简单,使用步骤如下所示:

1.   安装模块;

2.   通过常规方法安装证书;

3.   重启设备;

安装完成之后,证书将会出现在设备的系统信任商店之中,并且所有的应用程序默认都会信任该证书。

6.png

7.png

总结

当然了,如果应用程序实现了SSL绑定的话,那你还是没办法拦截到HTTPS流量,但是这个Magisk模块可以让Android Nougat应用按照之前Android平台的应用程序一样去运行。在提升该模块功能方面(在Magisk层禁用SSL绑定),如果你有任何意见或者建议的话,可以直接在本项目的GitHub主页上留言。

* 参考来源:nviso,FB小编Alpha_h4ck编译