引言
最先让我们来知晓下证书覆盖安裝漏洞,此漏洞是2020年Google官方网发布的漏洞之一,其序号为CVE-2020-0015,这一漏洞关键产生因素是因为当地安裝证书被覆盖所产生的权利提高漏洞,在原文中我能从反向的视角去分析证书的安裝步骤,分析漏洞存有的部位及其产生的缘故。在分析全过程时会把代码开展截屏,尽量覆盖在其中的全部重要代码,防止文中读者在阅读文章全过程中再去反汇编查询代码。
漏洞详细介绍
证书覆盖安裝漏洞关键反映在统导进证书的情况下,而导进证书这一部分作用是由系统软件中的CertInstaller.apk开展进行。而在使用中并没有做安全系数校检,造成导进证书页面可以被覆盖,因为证书安裝是由系统应用进行的,因此当安裝页面被覆盖后,就突破上篮的到达了权利提高的目地。依据官方网表明该漏洞是存有全系统版本中的,而官方网只修补了Android-8.0、Android-8.1、Android-9、 Android-10系统版本,下边根据代码分析此漏洞产生的缘故。
分析步骤
最先让我们根据ADB指令从手机上里将CertInstaller.apk文件获取到当地,CertInstaller.apk在系统软件中的/system/app/CertInstaller/文件目录下。取得APK文档后大家再应用jadx、jeb等专用工具反汇编APK文档。那麼咱们就根据ADB指令将/system/app/CertInstaller/CertInstaller.apk拷到当地,应用jadx、jeb等反编译软件将apk反编译。
最先大家先了解下反汇编后的AndroidManifest.xml文件。
从AndroidManifest.xml文件能看出去关键通道在CertInstallerMain中,由于是activity,因此大家从onCreate函数逐渐分析:
代码部位:com/android/certinstaller/CertInstallerMain.java
从上边代码中能够看见,最先获得intent目标并对在其中带上的信息开展分辨,关键有三种状况:
intent未带上一切数据信息,或是从sdcard上挑选证书文档实现安裝,也就是在系统配置中挑选从储存设备安裝证书,如下图:
Intent带上了证书內容,就立即建立Intent 运行CertInstaller开展证书安裝,例如:
根据action 例举出已安裝的证书目录
从以上三一部分看来,无论分析第一种状况或是第二种,都能够抵达证书安裝的部位,那大家关键分析的是第二种状况, 建立一个intent用以运行CertInstaller activity,并将带上又证书內容得Intent以主要参数得方式传送以往。
下边继续看:
代码部位:com/android/certinstaller/CertInstaller.java
从代码能看出去证书安裝全过程基本上全是取决于CredentialHelper 类进行的,最先掉用createCredentialHelper函数公式建立了一个CredentialHelper 案例,
从上边代码能看出去,在建立CredentialHelper 案例的与此同时,还干了证书分析实际操作,这儿关键看parseCert(byte[] bytes)函数公式,在其中依据证书的差异会将证书缓存文件到mCaCerts或mUserCert目录中。随后再次分析CertInstaller的OnCreate函数,继续往下看对当今的条件开展校检,在其中keyguardManager.createConfirmDeviceCredentialIntent(null, null); 是查验是不是设定信赖凭据。随后会启用到extractPkcs12OrInstall函数公式。
PKCS12文档一般由密码设置,因此必须弹出来一个登陆密码文本框,用以输入支付密码。而一切正常抓包软件设置代理证书或是安裝CA证书的过程中便会来到 else里边。再次分析代码。
在这儿能够看见InstallOthersAction中的run方式具体便是启用的CertInstaller.installOther函数公式;
这能够看见是安裝证书以前先干了一个校检,坚查是不是有CA证书,或是私有化与客户证书,随后会启用nameCredential()函数公式,会启用showDialog()弹框安裝证书。这也就是漏洞造成的部位。而漏洞产生的因素是在弹框的地方由于沒有系统对的dialog弹框开展安全防护,造成dialog可以遭劫持覆盖,这也是该漏洞的具体形成原因。
漏洞运用
因为机器设备自然环境缘故,只在低版检测,未在恢复后的高版本号手机上开展检测。
下边看下代码:
这儿为了更好地便捷立即建立了一个进程开展监视,还可以在service中完成。
为进程建立runnabl每日任务,分辨现阶段运作的应用包名,假如为com.android.certinstaller,则运行一个掩藏好的activity页面开展覆盖,这一activity页面设定为dialog表明。
代码中getTopPackage()是检查现阶段运作的应用软件是哪一个,随后在进程中分辨如果是certInstaller运用的过程,就开展弹框覆盖掉系统软件的dialog,仿冒个假的证书安裝页面,造成当地权利提高。
漏洞修补
下边是Google官方网的修补方法。
从上面能够看见在CertInstaller.java代码的onCreate方式中增加了一个系统属性” SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS”,加上此特性的目标便是屏蔽别的APP的悬浮球,防止系统界面木马程序开展覆盖,那样就修补了该漏洞存有的风险性,现阶段官方网只在Android8-Android10一键重装了此漏洞。
汇总
这一漏洞实质上便是挟持的漏洞,仅仅与常用的挟持有差别,基本的挟持是对于非系统应用,而证书覆盖安裝漏洞是对于系统应用的漏洞。在恢复后的系統上,假如木马程序装扮成系统应用,仍然可以对证书安裝开展覆盖,漏洞依然存有。