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

Android安全開(kāi)發(fā)之淺談密鑰硬編碼

安全 移動(dòng)安全 數(shù)據(jù)安全
信息安全的基礎(chǔ)在于密碼學(xué),而常用的密碼學(xué)算法都是公開(kāi)的,加密內(nèi)容的保密依靠的是密鑰的保密,密鑰如果泄露,對(duì)于對(duì)稱(chēng)密碼算法,根據(jù)用到的密鑰算法和加密后的密文,很容易得到加密前的明文;對(duì)于非對(duì)稱(chēng)密碼算法或者簽名算法,根據(jù)密鑰和要加密的明文,很容易獲得計(jì)算出簽名值,從而偽造簽名。

0x00 簡(jiǎn)介

在阿里聚安全的漏洞掃描器中和人工APP安全審計(jì)中,經(jīng)常發(fā)現(xiàn)有開(kāi)發(fā)者將密鑰硬編碼在Java代碼、文件中,這樣做會(huì)引起很大風(fēng)險(xiǎn)。信息安全的基礎(chǔ)在于密碼學(xué),而常用的密碼學(xué)算法都是公開(kāi)的,加密內(nèi)容的保密依靠的是密鑰的保密,密鑰如果泄露,對(duì)于對(duì)稱(chēng)密碼算法,根據(jù)用到的密鑰算法和加密后的密文,很容易得到加密前的明文;對(duì)于非對(duì)稱(chēng)密碼算法或者簽名算法,根據(jù)密鑰和要加密的明文,很容易獲得計(jì)算出簽名值,從而偽造簽名。

0x01 風(fēng)險(xiǎn)案例

密鑰硬編碼在代碼中,而根據(jù)密鑰的用途不同,這導(dǎo)致了不同的安全風(fēng)險(xiǎn),有的導(dǎo)致加密數(shù)據(jù)被破解,數(shù)據(jù)不再保密,有的導(dǎo)致和服務(wù)器通信的加簽被破解,引發(fā)各種血案,以下借用烏云上已公布的幾個(gè)APP漏洞來(lái)講講。

1.1 某互聯(lián)網(wǎng)金融APP加密算法被破解導(dǎo)致敏感信息泄露

某P2P應(yīng)用客戶(hù)端,用來(lái)加密數(shù)據(jù)的DES算法的密鑰硬編碼在Java代碼中,而DES算法是對(duì)稱(chēng)密碼算法,既加密密鑰和解密密鑰相同。

反編譯APP,發(fā)現(xiàn)DES算法:

 

 

發(fā)現(xiàn)DES算法的密鑰,硬編碼為“yrdAppKe”,用來(lái)加密手勢(shì)密碼:

 

 

將手勢(shì)密碼用DES加密后存放在本地LocusPassWordView.xml文件中:

 

 

知道了密文和加密算法以及密鑰,通過(guò)解密操作,可以從文件中恢復(fù)出原始的手勢(shì)密碼。或者使用新的生成新的手勢(shì)密碼

而與服務(wù)器通信時(shí)接口中的Jason字段也用了DES算法和密鑰硬編碼為“yRdappKY”:

 

 

 

 

和服務(wù)器通信采用http傳輸,沒(méi)有使用https來(lái)加密通信,如果采用中間人攻擊或者路由器鏡像,獲得流量數(shù)據(jù),可以破解出用戶(hù)的通信內(nèi)容。

1.2 某租車(chē)APP加密算法被破解導(dǎo)致一些列風(fēng)險(xiǎn)

某租車(chē)APP與服務(wù)器通信的接口采用http傳輸數(shù)據(jù),并且有對(duì)傳輸?shù)牟糠謪?shù)進(jìn)行了加密,加密算法采用AES,但是密鑰硬編碼在java代碼中為“shenzhoucar123123”,可被逆向分析出來(lái),導(dǎo)致偽造請(qǐng)求,結(jié)合服務(wù)器端的漏洞,引起越權(quán)訪問(wèn)的風(fēng)險(xiǎn),如越權(quán)查看其它用戶(hù)的訂單等。

和服務(wù)器通信時(shí)的數(shù)據(jù)為:

 

 

q字段是加密后的內(nèi)容。逆向APP,從登錄Activity入手:

 

 

分析登錄流程:v1是用戶(hù)名,v2是密碼,v3是PushId,在用戶(hù)名和密碼不為空并且長(zhǎng)度不小于11情況下,執(zhí)行LoginOperate相關(guān)操作,追蹤LoginOperate的實(shí)現(xiàn),發(fā)現(xiàn)繼承自BaseOperate,繼續(xù)追蹤BaseOperate的實(shí)現(xiàn):

 

 

在BaseOperate的initUrl()方法中,找到了APP是怎么生成請(qǐng)求數(shù)據(jù)的:

 

 

繼續(xù)追蹤上圖中的initJsonUrl()方法,發(fā)現(xiàn)其調(diào)用了AES加密:

 

 

繼續(xù)追蹤aes.onEncrypt()函數(shù):

 

 

在onEncrypt()函數(shù)中調(diào)用了encrypt()函數(shù)用來(lái)加密數(shù)據(jù),追蹤encrypt()函數(shù)的實(shí)現(xiàn),發(fā)現(xiàn)其使用AES算法,并且密鑰硬編碼在java代碼中為“shenzhoucar123123”

 

 

到現(xiàn)在請(qǐng)求中的數(shù)據(jù)加密如何實(shí)現(xiàn)的就清晰了,另外由于服務(wù)器權(quán)限控制不嚴(yán),就可以構(gòu)造訂單id的請(qǐng)求,達(dá)到越權(quán)訪問(wèn)到其他用戶(hù)的訂單。

構(gòu)造{“id”:”11468061”}的請(qǐng)求:

 

 

其中uid設(shè)置為你自己的uid即可,可以成功看到其他人的訂單:

 

 

攻擊者完全可以做到使用其他腳本重新實(shí)現(xiàn)相同的加密功能并拼接出各個(gè)接口請(qǐng)求,批量的刷取訂單信息和用戶(hù)其他信息。

1.3 某酒店APP加簽算法被破解導(dǎo)致一系列風(fēng)險(xiǎn)

某酒店APP和服務(wù)器通信時(shí)接口采用http通信,數(shù)據(jù)進(jìn)行了加密,并且對(duì)傳輸參數(shù)進(jìn)行簽名,在服務(wù)器端校驗(yàn)簽名,以檢查傳輸?shù)臄?shù)據(jù)是否被篡改,但是加簽算法和密鑰被逆向分析,可導(dǎo)致加簽機(jī)制失效,攻擊者可任意偽造請(qǐng)求包,若結(jié)合服務(wù)器端的權(quán)限控制有漏洞,則可引發(fā)越權(quán)風(fēng)險(xiǎn)等。

APP和服務(wù)器通信的原始包如下圖,可以看到有加簽字段sign:

 

 

逆向APP定位到加密算法的邏輯代碼,com.htinns.biz.HttpUtils.class,其實(shí)現(xiàn)邏輯為:

 

 

原始數(shù)據(jù)是unSignData,使用RC4算法加密,密鑰為KEY變量所代表的值,加密后的數(shù)據(jù)為signData,傳輸?shù)臄?shù)據(jù)時(shí)的data字段為signData。

加簽字段signd的生成方法是用unsignData拼接時(shí)間戳time和resultkey,然后做md5,再進(jìn)行base64編碼。時(shí)間戳保證了每次請(qǐng)求包都不一樣。

sendSign()算法是用c或c++寫(xiě)的,放入了so庫(kù),其他重要算法都是用java寫(xiě)的。

可以使用IDA逆向分析so庫(kù),找到sendSign()方法

 

 

而烏云漏洞提交者采用的是分析sign和getSign(sign)的數(shù)據(jù),做一個(gè)算法破解字典。其實(shí)還有種方法直接調(diào)用此so庫(kù),來(lái)生成字典。

簽名破解以后,就可以構(gòu)造發(fā)送給服務(wù)器的數(shù)據(jù)包進(jìn)行其他方面的安全測(cè)試,比如越權(quán)、重置密碼等。

0x02 阿里聚安全開(kāi)發(fā)建議

通過(guò)以上案例,并總結(jié)下自己平時(shí)發(fā)現(xiàn)密鑰硬編碼的主要形式有:

1、密鑰直接明文存在sharedprefs文件中,這是最不安全的。

2、密鑰直接硬編碼在Java代碼中,這很不安全,dex文件很容易被逆向成java代碼。

3、將密鑰分成不同的幾段,有的存儲(chǔ)在文件中、有的存儲(chǔ)在代碼中,最后將他們拼接起來(lái),可以將整個(gè)操作寫(xiě)的很復(fù)雜,這因?yàn)檫€是在java層,逆向者只要花點(diǎn)時(shí)間,也很容易被逆向。

4、用ndk開(kāi)發(fā),將密鑰放在so文件,加密解密操作都在so文件里,這從一定程度上提高了的安全性,擋住了一些逆向者,但是有經(jīng)驗(yàn)的逆向者還是會(huì)使用IDA破解的。

5、在so文件中不存儲(chǔ)密鑰,so文件中對(duì)密鑰進(jìn)行加解密操作,將密鑰加密后的密鑰命名為其他普通文件,存放在assets目錄下或者其他目錄下,接著在so文件里面添加無(wú)關(guān)代碼(花指令),雖然可以增加靜態(tài)分析難度,但是可以使用動(dòng)態(tài)調(diào)式的方法,追蹤加密解密函數(shù),也可以查找到密鑰內(nèi)容。

保證密鑰的安全確是件難事,涉及到密鑰分發(fā),存儲(chǔ),失效回收,APP防反編譯和防調(diào)試,還有風(fēng)險(xiǎn)評(píng)估??梢哉f(shuō)在設(shè)備上安全存儲(chǔ)密鑰這個(gè)基本無(wú)解,只能選擇增大攻擊者的逆向成本,讓攻擊者知難而退。而要是普通開(kāi)發(fā)者的話,做妥善保護(hù)密鑰這些事情這需要耗費(fèi)很大的心血。

產(chǎn)品設(shè)計(jì)者或者開(kāi)發(fā)者要明白自己的密鑰是做什么用的,重要程度怎么樣,密鑰被逆向出來(lái)會(huì)造成什么風(fēng)險(xiǎn),通過(guò)評(píng)估APP應(yīng)用的重要程度來(lái)選擇相應(yīng)的技術(shù)方案。

參考

p2p宜人貸app幾種安全問(wèn)題

神州租車(chē)APP客戶(hù)端設(shè)計(jì)缺陷導(dǎo)致的一系列安全問(wèn)題(算法破解/權(quán)限遍歷等)

講解一步步逆向破解華住酒店集團(tuán)官網(wǎng)APP的http包加密算法以及一系列漏洞打包

http://jaq.alibaba.com/safety?spm=a313e.7837752.1000001.1.zwCPfa

https://www.zhihu.com/question/35136485/answer/84491440

責(zé)任編輯:藍(lán)雨淚 來(lái)源: 烏云知識(shí)庫(kù)
相關(guān)推薦

2016-10-24 14:04:24

2017-02-08 08:44:56

2016-10-24 14:23:14

2020-04-17 13:27:05

安全開(kāi)發(fā)網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2012-04-24 09:58:26

2019-06-06 12:11:42

2020-05-07 09:52:03

密鑰KMS信息安全

2024-11-07 12:14:36

2013-05-21 11:24:07

Android游戲開(kāi)發(fā)Sensor重力感應(yīng)

2013-12-17 14:07:37

2014-02-21 13:02:44

2014-02-11 13:49:00

2014-11-19 10:08:47

2019-02-14 13:21:31

2009-10-29 10:27:21

2020-08-30 14:34:42

Java語(yǔ)言安全編碼web安全

2023-11-08 07:17:08

2016-03-10 11:48:41

2013-07-08 14:12:54

安全開(kāi)發(fā)百年編程編程語(yǔ)言

2015-10-28 13:33:25

思科Lancope收購(gòu)
點(diǎn)贊
收藏

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