自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從逆向角度看證書覆蓋安裝漏洞

安全 漏洞
在文中我會從逆向的角度去分析證書的安裝流程,分析漏洞存在的位置以及形成的原因。

前言

首先我們來了解下證書覆蓋安裝漏洞,此漏洞是2020年Google官方公布的漏洞之一,其編號為CVE-2020-0015,這個漏洞主要形成原因是由于本地安裝證書被覆蓋所造成的特權(quán)提升漏洞,在文中我會從逆向的角度去分析證書的安裝流程,分析漏洞存在的位置以及形成的原因。在分析過程中會把代碼進(jìn)行截圖,盡可能覆蓋其中的所有關(guān)鍵代碼,避免本文閱讀者在閱讀過程中再去反編譯查看代碼。

[[353026]]

漏洞介紹

證書覆蓋安裝漏洞主要體現(xiàn)在統(tǒng)導(dǎo)入證書的時候,而導(dǎo)入證書這部分功能是由系統(tǒng)中的CertInstaller.apk進(jìn)行完成。而在用中并未做安全性校驗,導(dǎo)致導(dǎo)入證書界面可以被覆蓋,由于證書安裝是由系統(tǒng)應(yīng)用完成的,所以當(dāng)安裝界面被覆蓋后,就變向的達(dá)到了特權(quán)提升的目的。根據(jù)官方說明該漏洞是存在全系統(tǒng)版本中的,而官方只修復(fù)了Android-8.0、Android-8.1、Android-9、 Android-10系統(tǒng)版本,下面通過代碼分析此漏洞形成的原因。

分析流程

首先我們通過ADB命令從手機(jī)中將CertInstaller.apk文件提取到本地,CertInstaller.apk在系統(tǒng)中的/system/app/CertInstaller/目錄下。拿到APK文件后我們再使用jadx、jeb等工具反編譯APK文件。那么我們就通過ADB命令將/system/app/CertInstaller/CertInstaller.apk拷貝到本地,使用jadx、jeb等反編譯工具將apk反編譯。

首先我們先看下反編譯后的AndroidManifest.xml文件。


從AndroidManifest.xml文件可以看出來主要入口在CertInstallerMain中,因為是activity,所以我們從onCreate函數(shù)開始分析:

代碼位置:com/android/certinstaller/CertInstallerMain.java


從上面代碼中可以看到,首先獲取intent對象并對其中攜帶的數(shù)據(jù)進(jìn)行判斷,主要有三種情況:

intent未攜帶任何數(shù)據(jù),或者從sdcard上選擇證書文件進(jìn)行安裝,也就是在系統(tǒng)設(shè)置中選擇從存儲設(shè)備安裝證書,如下圖:


Intent攜帶了證書內(nèi)容,就直接創(chuàng)建Intent 啟動CertInstaller進(jìn)行證書安裝,例如:

通過action 列舉出已安裝的證書列表

從上面三部分來看,無論分析第一種情況還是第二種,都可以到達(dá)證書安裝的位置,那我們主要分析的是第二種情況, 創(chuàng)建一個intent用于啟動CertInstaller activity,并將攜帶又證書內(nèi)容得Intent以參數(shù)得形式傳遞過去。

下面繼續(xù)看:

代碼位置:com/android/certinstaller/CertInstaller.java

 

從代碼可以看出來證書安裝過程基本都是依賴于CredentialHelper 類完成的,首先掉用createCredentialHelper函數(shù)創(chuàng)建了一個CredentialHelper 實例,

從上面代碼可以看出來,在創(chuàng)建CredentialHelper 實例的同時,還做了證書解析操作,這里主要看parseCert(byte[] bytes)函數(shù),其中根據(jù)證書的不同會將證書緩存到mCaCerts或mUserCert列表中。然后繼續(xù)分析CertInstaller的OnCreate函數(shù),繼續(xù)往下看對當(dāng)前的環(huán)境進(jìn)行校驗,其中keyguardManager.createConfirmDeviceCredentialIntent(null, null); 是檢查是否設(shè)置信任憑證。然后會調(diào)用到extractPkcs12OrInstall函數(shù)。

PKCS12文件一般由密碼保護(hù),所以需要彈出一個密碼輸入框,用于輸入密碼。而正常抓包設(shè)置代理證書或者安裝CA證書的時候就會走到 else里面。繼續(xù)分析代碼。


在這里可以看到InstallOthersAction中的run方法實際就是調(diào)用的CertInstaller.installOther函數(shù);


這可以看到是安裝證書之前先做了一個校驗,堅查是否有CA證書,或者私有與用戶證書,然后會調(diào)用nameCredential()函數(shù),會調(diào)用showDialog()彈窗安裝證書。這也就是漏洞產(chǎn)生的位置。而漏洞形成的原因就是在彈窗的位置因為沒有對系統(tǒng)的dialog彈窗進(jìn)行安全防護(hù),導(dǎo)致dialog可以被劫持覆蓋,這也是該漏洞的主要成因。

漏洞利用

由于設(shè)備環(huán)境原因,只在低版本測試,未在修復(fù)后的高版本手機(jī)進(jìn)行測試。

下面看下代碼:

這里為了方便直接創(chuàng)建了一個線程進(jìn)行監(jiān)聽,也可以在service中實現(xiàn)。

為線程創(chuàng)建runnabl任務(wù),判斷當(dāng)前運行的應(yīng)用包名,如果為com.android.certinstaller,則啟動一個偽裝好的activity界面進(jìn)行覆蓋,這個activity界面設(shè)置為dialog顯示。


代碼中g(shù)etTopPackage()是檢測當(dāng)前運行的應(yīng)用程序是哪一個,然后在線程中判斷如果是certInstaller應(yīng)用的進(jìn)程,就進(jìn)行彈窗覆蓋掉系統(tǒng)的dialog,偽造個假的證書安裝界面,導(dǎo)致本地特權(quán)提升。


漏洞修復(fù)

下面是Google官方的修復(fù)方式。


從上圖可以看到在CertInstaller.java代碼的onCreate方法中添加了一個系統(tǒng)屬性” SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS”,添加此屬性的目的就是屏蔽掉其他APP的懸浮窗,避免系統(tǒng)界面惡意程序進(jìn)行覆蓋,這樣就修復(fù)了該漏洞存在的風(fēng)險,目前官方只在Android8-Android10系統(tǒng)修復(fù)了此漏洞。

總結(jié)

這個漏洞本質(zhì)上就是劫持的漏洞,只是與常規(guī)的劫持有區(qū)別,常規(guī)的劫持是針對非系統(tǒng)應(yīng)用,而證書覆蓋安裝漏洞是針對系統(tǒng)應(yīng)用的漏洞。在修復(fù)后的系統(tǒng)上,如果惡意程序偽裝成系統(tǒng)應(yīng)用,依然可以對證書安裝進(jìn)行覆蓋,漏洞仍然存在。

 

責(zé)任編輯:趙寧寧 來源: FreeBuf
相關(guān)推薦

2009-07-08 19:44:56

2020-02-04 09:53:05

數(shù)據(jù)安全數(shù)據(jù)泄漏信息安全

2019-04-28 16:10:50

設(shè)計Redux前端

2015-05-05 11:04:31

CoreOS自動化運維

2022-07-15 13:01:13

Kotlin編程語言Java

2019-11-27 10:11:22

勒索病毒網(wǎng)絡(luò)安全

2012-04-29 10:37:28

APP

2017-09-06 15:54:14

2010-07-16 09:00:20

開源RedOffice紅旗2000

2010-01-03 20:52:27

2018-07-26 07:21:12

2013-12-11 21:48:38

OpenStack

2014-07-14 15:19:43

IT信息工程運維

2021-10-14 08:58:48

Java冒泡排序

2024-12-10 00:00:10

MySQLJOIN算法

2017-11-20 16:17:50

智慧城市

2021-04-28 22:42:36

SaaS軟件技術(shù)

2010-06-07 10:44:09

2016-04-26 14:39:00

2012-05-28 10:01:19

點贊
收藏

51CTO技術(shù)棧公眾號