APP 安全測(cè)試項(xiàng)總結(jié)
共 4559字,需瀏覽 10分鐘
·
2024-04-29 08:20
一、安裝包測(cè)試
1.1、關(guān)于反編譯
目的是為了保護(hù)公司的知識(shí)產(chǎn)權(quán)和安全方面的考慮等,一些程序開發(fā)人員會(huì)在源碼中硬編碼一些敏感信息,如密碼。而且若程序內(nèi)部一些設(shè)計(jì)欠佳的邏輯,也可能隱含漏洞,一旦源碼泄漏,安全隱患巨大。
為了避免這些問(wèn)題,除了代碼審核外,通常開發(fā)的做法是對(duì)代碼進(jìn)行混淆,混淆后源代碼通過(guò)反軟件生成的源代碼是很難讀懂的,測(cè)試中,我們可以直接使用反編譯工具(dex2jar和jd-gui工具)查看源代碼,判斷是否進(jìn)行了代碼混淆,包括顯而易見的敏感信息。
1.2、關(guān)于簽名
這點(diǎn)IOS可以不用考慮,因?yàn)锳PP stroe都會(huì)校驗(yàn)。但Android沒有此類權(quán)威檢查,我們要在發(fā)布前校驗(yàn)一下簽名使用的key是否正確,以防被惡意第三方應(yīng)用覆蓋安裝等??墒褂孟铝忻顧z查:
jarsigner -verify -verbose -certs apk包路徑
若結(jié)果為“jar 已驗(yàn)證”,說(shuō)明簽名校驗(yàn)成功。
1.3、完整性校驗(yàn)
為確保安裝包不會(huì)在測(cè)試完成到最終交付過(guò)程中因?yàn)橹阏咧簡(jiǎn)栴}發(fā)生文件損壞,需要對(duì)安裝包進(jìn)行完整性校驗(yàn),通常做法是檢查文件的md5值,而且一般可以通過(guò)自動(dòng)化做校驗(yàn)。
1.4、權(quán)限設(shè)置檢查
一般用戶對(duì)自己的隱私問(wèn)題十 分敏感,因此,我們需要對(duì)APP申請(qǐng)某些特定權(quán)限的必要性進(jìn)行檢查,如訪問(wèn)通訊錄等。對(duì)于沒有必要的權(quán)限,一般都建議開發(fā) 直接支除。
Android:直接檢查manifest文件來(lái)讀取應(yīng)用所需要的全部權(quán)限,并結(jié)合需求進(jìn)行校驗(yàn)此權(quán)限是否為必須的。manifest文件的修改也需要關(guān)注,在增加新權(quán)限前需要進(jìn)行評(píng)估。
IOS:沒有類似manifest文件來(lái)查看,IOS的用戶權(quán)限只有在用戶使用APP到了需要使用的權(quán)限時(shí),系統(tǒng)才會(huì)彈出提示框,提示用戶當(dāng)前APP需要訪問(wèn)照片、聯(lián)系人列表等組件。我們可以掃描代碼來(lái)查看項(xiàng)目工程中有哪些權(quán)限設(shè)置。通過(guò)搜索關(guān)鍵類名,如通訊錄一般需要訪問(wèn)ABAddressBookRef,照片是UIImagePickerController等。如果是純黑盒測(cè)試,則必須覆蓋到所有代碼路徑才能保證沒有遺漏,也可使用代碼覆蓋率測(cè)試判斷是否覆蓋。
二、敏感信息測(cè)試
數(shù)據(jù)庫(kù)是否存儲(chǔ)敏感信息,某些應(yīng)用會(huì)把cookie類數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中,一旦此數(shù)據(jù)被他人獲取,可能造成用戶賬戶被盜用等嚴(yán)重問(wèn)題,測(cè)試中在跑完一個(gè)包含數(shù)據(jù)庫(kù)操作的測(cè)試用例后,我們可以直接查看數(shù)據(jù)庫(kù)里的數(shù)據(jù),觀察是否有敏感信息存儲(chǔ)在內(nèi)。一般來(lái)說(shuō)這些敏感信息需要用戶進(jìn)行注銷操作后刪除。如果是cookie類數(shù)據(jù),建議設(shè)置合理的過(guò)期時(shí)間。
日志是否存在敏感信息,一般開發(fā)在寫程序的過(guò)程中會(huì)加入日志幫助高度,所有可能會(huì)寫入一些敏感信息,通常APP的發(fā)布版不會(huì)使用日志,但也不排除特殊情況。
配置文件是否存在敏感信息,與日志類似,我們需要檢查配置文件中是否包含敏感信息。
三、軟鍵盤劫持
如果用戶安裝了第三方鍵盤,可能存在劫持情況,對(duì)此,我們?cè)谝恍┨貏e敏感的輸入地方可以做檢查,例如金融類APP登錄界面的用戶名密碼輸入框等,看是否支持第三方輸入法,一般建議使用應(yīng)用內(nèi)的軟鍵盤。
四、賬戶安全
4.1、密碼是否明文存儲(chǔ)在后臺(tái)數(shù)據(jù)庫(kù),在評(píng)審和測(cè)試中需要關(guān)注密碼的存儲(chǔ)。
4.2、密碼傳輸是否加密,測(cè)試中我們需要查看密碼是否被 明文傳輸,如果是HTTP接口,我們可以使用FIddler等工具直接查看。
4.3、賬戶鎖定策略。對(duì)于 用戶輸入錯(cuò)誤密碼次數(shù)過(guò)多的情況,是否會(huì)將賬戶臨時(shí)鎖定,避免被暴力破解,
4.4、同時(shí)會(huì)話情況。一些應(yīng)用對(duì)同時(shí)會(huì)話會(huì)有通知功能,這樣至少可以讓用戶知識(shí)他的賬戶可能已經(jīng)被泄漏了。在一定程度上能免提升用戶體驗(yàn)。
4.5、注銷機(jī)制。在客戶端注銷后,我們需要驗(yàn)證任何的來(lái)自該用戶的,需要身份驗(yàn)證的接口調(diào)用都不能成功。
五、數(shù)據(jù)通信安全
5.1、關(guān)鍵數(shù)據(jù)是否散列或加密。密碼在傳輸中必須是加密的,其他敏感信息傳輸前也需要進(jìn)行散列或者加加密,以免被中間節(jié)點(diǎn)獲取并惡意利用。
5.2、關(guān)鍵連接是否使用安全通信,例如HTTPS。在獲知接口設(shè)計(jì)后我們需要評(píng)估是否其中內(nèi)容包含敏感信息,如果未使用安全通信,需要知會(huì)開發(fā)修改。?
5.3、是否對(duì)數(shù)字證書合法性進(jìn)行驗(yàn)證。即便使用了安全通信,例如HTTPS,我們也需要在客戶端代碼中對(duì)服務(wù)端證書進(jìn)行合法性校驗(yàn)。測(cè)試中可以使用Fiddler工具模擬中間人攻擊方法。如果客戶端對(duì)于Fiddler證書沒有校驗(yàn)而能正常調(diào)用,則存在安全隱患。
5.4、是否校驗(yàn)數(shù)據(jù)合法性。在一些情況下,我們需要有方法來(lái)確保服務(wù)端下發(fā)的明文數(shù)據(jù)不被篡改。通常開發(fā)側(cè)的實(shí)現(xiàn)方式是對(duì)數(shù)據(jù)進(jìn)行數(shù)字簽名并在客戶端進(jìn)行校驗(yàn)。我們可以模擬后臺(tái)返回進(jìn)行相關(guān)的測(cè)試工作。此外,對(duì)于其他一些客戶端未進(jìn)行數(shù)據(jù)校驗(yàn)的接口,我們也需要有意識(shí)地思考如果不進(jìn)行校驗(yàn)是否會(huì)產(chǎn)生問(wèn)題,并通過(guò)模擬后臺(tái)返回驗(yàn)證。
六、組件安全測(cè)試
這里主要是指Android平臺(tái)各個(gè)組件是否能被 外部應(yīng)用惡意調(diào)用從而帶來(lái)一些安全問(wèn)題。包括Activity、Service、ContentProvider、Broadcast等等。采用的測(cè)試方法是通過(guò)使用drozer工具結(jié)合查看代碼的方式,具體使用方法可查看官方文檔。
七、服務(wù)端接口測(cè)試
主要關(guān)注服務(wù)端接口是否存在以下問(wèn)題
7.1、SQL注入
7.2、XSS跨站腳本攻擊
7.3、CSRF跨站請(qǐng)求偽造
7.4、越權(quán)訪問(wèn)
除了上述服務(wù)端問(wèn)題外,我們還需要結(jié)合實(shí)際的需求,設(shè)計(jì)和代碼,分析是否需求或設(shè)計(jì)本身就會(huì)帶來(lái)安全問(wèn)題。
舉個(gè)例子:如一個(gè)購(gòu)物的應(yīng)用,下單地的流程包含兩個(gè)接口,接口A返回訂單詳情,其中包括訂單號(hào)碼和金額總價(jià)。調(diào)用接口A后用戶在客戶端看到一個(gè)訂單頁(yè)面。用戶點(diǎn)擊提交后調(diào)用接口B,客戶端傳給接口B的參數(shù)為接口A返回的訂單號(hào)碼和金額總價(jià),接口B的后臺(tái)根據(jù)傳給接口B的金額總價(jià)從用戶賬戶中扣款,扣款成功后即根據(jù)訂單號(hào)碼發(fā)貨。
這一設(shè)計(jì)有什么問(wèn)題呢?那就是接口B完全信任了客戶端傳入的金額總價(jià)而未做校驗(yàn)。惡意用戶可以直接調(diào)用接口B,傳入偽造的金額和真實(shí)訂單號(hào),這樣就能以便宜的價(jià)格購(gòu)物。
附錄
1.軟件權(quán)限
1)扣費(fèi)風(fēng)險(xiǎn):包括短信、撥打電話、連接網(wǎng)絡(luò)等。
2)隱私泄露風(fēng)險(xiǎn):包括訪問(wèn)手機(jī)信息、訪問(wèn)聯(lián)系人信息等。
3)對(duì)App的輸入有效性校驗(yàn)、認(rèn)證、授權(quán)、數(shù)據(jù)加密等方面進(jìn)行檢測(cè)
4)限制/允許使用手機(jī)功能接入互聯(lián)網(wǎng)
5)限制/允許使用手機(jī)發(fā)送接收信息功能
6)限制或使用本地連接
7)限制/允許使用手機(jī)拍照或錄音
8)限制/允許使用手機(jī)讀取用戶數(shù)據(jù)
9)限制/允許使用手機(jī)寫入用戶數(shù)據(jù)
10)限制/允許應(yīng)用程序來(lái)注冊(cè)自動(dòng)啟動(dòng)應(yīng)用程序
2.數(shù)據(jù)安全性
1)當(dāng)將密碼或其它的敏感數(shù)據(jù)輸入到應(yīng)用程序時(shí),其不會(huì)被存儲(chǔ)在設(shè)備中,同時(shí)密碼也不會(huì)被解碼。
2)輸入的密碼將不以明文形式進(jìn)行顯示。
3)密碼、信用卡明細(xì)或其他的敏感數(shù)據(jù)將不被存儲(chǔ)在它們預(yù)輸入的位置上。
4)不同的應(yīng)用程序的個(gè)人身份證或密碼長(zhǎng)度必須至少在4-8個(gè)數(shù)字長(zhǎng)度之間。
5)當(dāng)應(yīng)用程序處理信用卡明細(xì)或其它的敏感數(shù)據(jù)時(shí),不以明文形式將數(shù)據(jù)寫到其他單獨(dú)的文件或者臨時(shí)文件中。以防止應(yīng)用程序異常終止而又沒有刪除它的臨時(shí)文件,文件可能遭受入侵者的襲擊,然后讀取這些數(shù)據(jù)信息。
6)黨建敏感數(shù)據(jù)輸入到應(yīng)用程序時(shí),其不會(huì)被存儲(chǔ)在設(shè)備中。
7)應(yīng)用程序應(yīng)考慮或者虛擬機(jī)器產(chǎn)生的用戶提示信息或安全警告
8)應(yīng)用程序不能忽略系統(tǒng)或者虛擬機(jī)器產(chǎn)生的用戶提示信息或安全警告,更不能在安全警告顯示前,利用顯示誤導(dǎo)信息欺騙用戶,應(yīng)用程序不應(yīng)該模擬進(jìn)行安全警告誤導(dǎo)用戶。
9)在數(shù)據(jù)刪除之前,應(yīng)用程序應(yīng)當(dāng)通知用戶或者應(yīng)用程序提供一個(gè)“取消”命令的操作。
10)應(yīng)用程序應(yīng)當(dāng)能夠處理當(dāng)不允許應(yīng)用軟件連接到個(gè)人信息管理的情況。
11)當(dāng)進(jìn)行讀或?qū)懹脩粜畔⒉僮鲿r(shí),應(yīng)用程序?qū)?huì)向用戶發(fā)送一個(gè)操作錯(cuò)誤的提示信息。
12)在沒有用戶明確許可的前提下不損壞刪除個(gè)人信息管理應(yīng)用程序中的任何內(nèi)容。
13)如果數(shù)據(jù)庫(kù)中重要的數(shù)據(jù)正要被重寫,應(yīng)及時(shí)告知用戶。
14)能合理的處理出現(xiàn)的錯(cuò)誤。
15)意外情況下應(yīng)提示用戶。
3.通訊安全性
1)在運(yùn)行軟件過(guò)程中,如果有來(lái)電、SMS、藍(lán)牙等通訊或充電時(shí),是否能暫停程序,優(yōu)先處理通信,并在處理完畢后能正?;謴?fù)軟件,繼續(xù)其原來(lái)的功能。
2)當(dāng)創(chuàng)立連接時(shí),應(yīng)用程序能夠處理因?yàn)榫W(wǎng)絡(luò)連接中斷,進(jìn)而告訴用戶連接中斷的情況。
3)應(yīng)能處理通訊延時(shí)或中斷。
4)應(yīng)用程序?qū)⒈3止ぷ鞯酵ㄓ嵆瑫r(shí),進(jìn)而給用戶一個(gè)錯(cuò)誤信息指示有鏈接錯(cuò)誤。
5)應(yīng)能處理網(wǎng)絡(luò)異常和及時(shí)將異常情況通報(bào)用戶。
6)應(yīng)用程序關(guān)閉網(wǎng)絡(luò)連接不再使用時(shí)應(yīng)及時(shí)關(guān)閉,斷開。
4.人機(jī)接口安全測(cè)試
1)返回菜單應(yīng)總保持可用。
2)命令有優(yōu)先權(quán)順序。
3)聲音的設(shè)置不影響使用程序的功能。
4)應(yīng)用程序必須能夠處理不可預(yù)知的用戶操作,例如錯(cuò)誤的操作和同時(shí)按下多個(gè)鍵。
如果覺得有用,就請(qǐng)關(guān)注、點(diǎn)贊、在看、分享到朋友圈吧!
推薦閱讀:
END
長(zhǎng)按二維碼/微信掃碼 添加作者
