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