中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、桂陽(yáng)ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的桂陽(yáng)網(wǎng)站制作公司

0x00背景介紹


2017年7月31日 GuardSquare向Google報(bào)告了一個(gè)簽名漏洞并于當(dāng)天收到確認(rèn)。Google本月修復(fù)了該漏洞,編號(hào)CVE-2017-13156。

經(jīng)過(guò)360CERT分析確認(rèn),該問(wèn)題確實(shí)存在,影響較為嚴(yán)重。攻擊者可以繞過(guò)簽名驗(yàn)證機(jī)制構(gòu)造惡意程序更新原有的程序。

0x01 事件概述


該漏洞產(chǎn)生的根源在于將DEX文件和APK文件拼接之后校驗(yàn)簽名時(shí)只校驗(yàn)了文件的APK部分,而虛擬機(jī)執(zhí)行時(shí)卻執(zhí)行了文件的DEX部分,導(dǎo)致了漏洞的發(fā)生。由于這種同時(shí)為APK文件和DEX文件的二元性,聯(lián)想到羅馬的二元之神Janus,將該漏洞命名為Janus漏洞。

0x02 事件影響


影響Android5.0-8.0的各個(gè)版本和使用安卓V1簽名的APK文件。

0x03 事件詳情


1.     技術(shù)細(xì)節(jié)

Android支持兩種應(yīng)用簽名方案,一種是基于JAR簽名的方案(v1方案),另一種是Android Nougat(7.0)中引入的APK簽名方案v2(v2方案)。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

v1簽名不保護(hù)APK的某些部分,例如ZIP元數(shù)據(jù)。APK驗(yàn)證程序需要處理大量不可信(尚未經(jīng)過(guò)驗(yàn)證)的數(shù)據(jù)結(jié)構(gòu),然后會(huì)舍棄不受簽名保護(hù)的數(shù)據(jù)。這會(huì)導(dǎo)致相當(dāng)大的受攻擊面。此外,APK 驗(yàn)證程序必須解壓所有已壓縮的條目,而這需要花費(fèi)更多時(shí)間和內(nèi)存。為了解決這些問(wèn)題,Android7.0中引入了APK簽名方案v2。在驗(yàn)證期間,v2方案會(huì)將APK文件視為 Blob,并對(duì)整個(gè)文件進(jìn)行簽名檢查。對(duì)APK進(jìn)行的任何修改(包括對(duì)ZIP元數(shù)據(jù)進(jìn)行的修改)都會(huì)使 APK 簽名作廢。這種形式的APK驗(yàn)證不僅速度要快得多,而且能夠發(fā)現(xiàn)更多種未經(jīng)授權(quán)的修改。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析        如果開發(fā)者只勾選V1簽名不會(huì)有什么影響,但是在7.0上不會(huì)使用更安全的V2簽名驗(yàn)證方式;只勾選V2簽名7.0以下無(wú)法正常安裝,7.0以上則使用了V2的方式驗(yàn)證;同時(shí)勾選V1和V2則所有機(jī)型都沒(méi)問(wèn)題。此次出現(xiàn)問(wèn)題的是V1簽名方案。簡(jiǎn)單地說(shuō),把修改過(guò)的dex文件附加到V1簽名的apk文件之前構(gòu)造一個(gè)新的文件,V1方案只校驗(yàn)了新文件的apk部分,而執(zhí)行時(shí)虛擬機(jī)根據(jù)magic header只執(zhí)行了新文件的dex部分。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

         我們來(lái)看一下已經(jīng)公布的POC (https://github.com/V-E-O/PoC/tree/master/CVE-2017-13156)的原理。janus.py接受dex文件和apk文件作為輸入,組合起來(lái)輸出。

         讀取dex文件:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

讀取apk文件:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

      Apk其實(shí)就是一個(gè)zip。簡(jiǎn)單地說(shuō)zip文件格式由文件數(shù)據(jù)區(qū)、中央目錄結(jié)構(gòu)和中央目錄結(jié)束節(jié)組成。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

其中中央目錄結(jié)束節(jié)有一個(gè)字段保存了中央目錄結(jié)構(gòu)的偏移。代碼中搜索中央目錄結(jié)束節(jié)的固定結(jié)束標(biāo)記x06054b50定位到中央目錄結(jié)構(gòu)的偏移,將其加上dex文件的大小,因?yàn)槲覀円裠ex文件插到apk前面。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

      接下來(lái)依次更新中央目錄結(jié)構(gòu)數(shù)組中的deHeaderOffset字段也就是本地文件頭的相對(duì)位移字段。通過(guò)deHeaderOffset字段可以直接獲取到對(duì)應(yīng)文件的文件數(shù)據(jù)區(qū)結(jié)構(gòu)的文件偏移,就可以直接獲取到對(duì)應(yīng)文件的壓縮數(shù)據(jù)了。同樣也是因?yàn)閐ex文件插在前面了所以直接加上dex文件的大小。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

最后更新dex部分的file_size字段為整個(gè)dex+apk的大小,使用alder32算法和SHA1算法更新checksum和signature字段。

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

下面做一個(gè)非常簡(jiǎn)單的測(cè)試。

在APK文件中寫一個(gè)彈出Hello的toast,同時(shí)采用V1簽名方案簽名:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

安裝到手機(jī)上:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

將編譯好的apk解壓得到dex文件,baksmali.jar反編譯dex文件得到smali代碼,將hello隨便改成另外一個(gè)字符串:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

用smali.jar回編譯成dex文件,使用提供的腳本把dex文件和原來(lái)的apk打包生成out.apk:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

安裝到手機(jī)上成功通過(guò)了簽名校驗(yàn)并且執(zhí)行了修改的dex中的代碼:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

在我android8.0沒(méi)有打補(bǔ)丁的手機(jī)上如果采用了V2簽名方案不受該漏洞影響,更新不了原來(lái)正常的程序:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

2.     補(bǔ)丁分析

補(bǔ)丁非常簡(jiǎn)單,強(qiáng)制校驗(yàn)了zip的frSignature:

如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析

0x04 修復(fù)建議


1、開發(fā)者在開發(fā)應(yīng)用程序時(shí)勾選V2簽名方案

2、各廠商應(yīng)及時(shí)發(fā)布補(bǔ)丁,確保用戶盡快更新系統(tǒng)

3、用戶應(yīng)在正規(guī)的應(yīng)用市場(chǎng)下載程序

上述就是小編為大家分享的如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:如何進(jìn)行Janus安卓簽名漏洞預(yù)警分析
當(dāng)前路徑:http://m.rwnh.cn/article12/jipidc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站策劃、虛擬主機(jī)、網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
喜德县| 泰州市| 连山| 平罗县| 股票| 湖州市| 抚顺县| 长岭县| 永康市| 临澧县| 洞头县| 阿拉善右旗| 东乌| 界首市| 班戈县| 通河县| 千阳县| 陈巴尔虎旗| 襄垣县| 正蓝旗| 绥江县| 禹州市| 洪洞县| 宁强县| 大姚县| 都匀市| 秭归县| 宜宾市| 满城县| 岢岚县| 婺源县| 黑河市| 巫溪县| 龙岩市| 德格县| 四会市| 休宁县| 若尔盖县| 泊头市| 民和| 澎湖县|