偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

前言

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

[[353026]]

漏洞介紹

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

分析流程

首先我們通過ADB命令從手機中將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ù)進行判斷,主要有三種情況:

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


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

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

從上面三部分來看,無論分析第一種情況還是第二種,都可以到達證書安裝的位置,那我們主要分析的是第二種情況, 創(chuàng)建一個intent用于啟動CertInstaller activity,并將攜帶又證書內容得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ù)往下看對當前的環(huán)境進行校驗,其中keyguardManager.createConfirmDeviceCredentialIntent(null, null); 是檢查是否設置信任憑證。然后會調用到extractPkcs12OrInstall函數(shù)。

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


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


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

漏洞利用

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

下面看下代碼:

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

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


代碼中getTopPackage()是檢測當前運行的應用程序是哪一個,然后在線程中判斷如果是certInstaller應用的進程,就進行彈窗覆蓋掉系統(tǒng)的dialog,偽造個假的證書安裝界面,導致本地特權提升。


漏洞修復

下面是Google官方的修復方式。


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

總結

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

 

責任編輯:趙寧寧 來源: FreeBuf
相關推薦

2009-07-08 19:44:56

2020-02-04 09:53:05

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

2019-04-28 16:10:50

設計Redux前端

2022-07-15 13:01:13

Kotlin編程語言Java

2015-05-05 11:04:31

CoreOS自動化運維

2019-11-27 10:11:22

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

2017-09-06 15:54:14

2012-04-29 10:37:28

APP

2010-07-16 09:00:20

開源RedOffice紅旗2000

2010-01-03 20:52:27

2018-07-26 07:21:12

2024-12-10 00:00:10

MySQLJOIN算法

2013-12-11 21:48:38

OpenStack

2021-10-14 08:58:48

Java冒泡排序

2014-07-14 15:19:43

IT信息工程運維

2017-11-20 16:17:50

智慧城市

2012-05-28 10:01:19

2016-04-26 14:39:00

2010-06-07 10:44:09

2021-04-28 22:42:36

SaaS軟件技術
點贊
收藏

51CTO技術棧公眾號