送你的圣誕收藏夾-Android安全性清單
Android開發(fā)者會感到困惑,因為從安全角度出發(fā)他們并不清楚什么樣的做法才是最好的,這樣一種情況并不讓人覺得奇怪。已知有太多的安全性清單列表,但你很難弄清楚哪些才是最重要的。
下面是我們將要了解的一些主要的清單列表。
PCI移動支付受理安全指南。
Google Security。
HIPAA Secure。
2014年OWASP移動風(fēng)險Top 10。
Forrester Research發(fā)布的在移動應(yīng)用開發(fā)中非技術(shù)性安全問題的Top 10。
每一個安全性清單列表都有其各自的價值,但其中最為突出的是OWASP Top 10。不管怎樣,我們都對這些清單做一個簡要的介紹。
1. PCI移動支付受理安全指南
PCI指的是支付卡行業(yè)安全標(biāo)準(zhǔn)委員會,該組織是在2006年由信用卡行業(yè)建立的,用于負(fù)責(zé)在線支付或者其他支付方式的安全性問題。因此,這個清單的重點放在移動設(shè)備中信用卡支付的安全性上。這個清單并沒有為Android指定單獨的內(nèi)容,它也可以用在iOS或者Windows Phone手機上。
這里必須要指出的是,PCI移動支付受理安全指南只是指導(dǎo)性的,而非強制性的,所以,如果你沒有滿足這些規(guī)范,也不會受到處罰。以下是2012年9月發(fā)布的清單。
(1)防止在移動設(shè)備中輸入賬戶數(shù)據(jù)時被竊聽。
(2)防止賬戶數(shù)據(jù)在移動設(shè)備中處理和存儲時被破解。
(3)防止移動設(shè)備向外傳輸時賬戶數(shù)據(jù)被竊聽。
(4)阻止邏輯上未授權(quán)的設(shè)備訪問。
(5)建立服務(wù)器端的控制并且報告未經(jīng)授權(quán)的訪問。
(6)阻止權(quán)限的提升。
(7)有能力遠(yuǎn)程禁用支付應(yīng)用。
(8)可以檢測到設(shè)備被盜或者丟失。
(9)強化支持系統(tǒng)。
(10)優(yōu)先選擇在線交易。
(11)遵循安全編碼、設(shè)計、測試標(biāo)準(zhǔn)。
(12)防范已知的漏洞。
(13)防止移動設(shè)備使用未經(jīng)授權(quán)的應(yīng)用程序。
(14)保護(hù)移動設(shè)備使其免受惡意軟件入侵。
(15)保護(hù)移動設(shè)備使其免受未經(jīng)授權(quán)的附加裝置入侵。
(16)設(shè)計實現(xiàn)和使用程序的指導(dǎo)性內(nèi)容。
(17)提供安全的商家收據(jù)。
(18)提供一個安全狀態(tài)的指示。
這個清單最主要的觀點就是確保在信用卡數(shù)據(jù)被輸入到設(shè)備上以及它被傳輸?shù)椒?wù)器上時你都對其進(jìn)行了加密。
2. Google Security
Google并沒有提供類似的Top 10的清單列表,但卻有一個安全最佳實踐的培訓(xùn)資料,我們列舉在下面。跟之前的清單不一樣的是,它是由Google提供的,也就不奇怪這個清單是專門針對Android的了。
(1)避免通過MODEWORLD_WRITEABLE或者M(jìn)ODE_WORLD?READABLE模式打開文件,因為這樣其他應(yīng)用程序也可以讀取這些文件。
(2)不要將敏感信息存儲在外部存儲器當(dāng)中,因為別人可以在SD卡上查看到不受任何保護(hù)的數(shù)據(jù)。
(3)如果你不打算讓其他應(yīng)用程序訪問你的ContentProvider,那么就在應(yīng)用的manifest文件給這些ContentProvider加上android:exported=false屬性。
(4)將你應(yīng)用請求的權(quán)限減到最少,不要申請你不需要的權(quán)限。
(5)在服務(wù)器上能夠使用HTTPS的地方都使用HTTPS,而不使用HTTP。
(6)使用Google Cloud Messaging(GCM)和IP網(wǎng)絡(luò)從Web服務(wù)器發(fā)送數(shù)據(jù)消息給用戶設(shè)備上你的那個應(yīng)用。
(7)使用SQL參數(shù)化查詢防止SQL注入。
(8)如果你能避免存儲或者傳輸數(shù)據(jù),那么就不要存儲或者傳輸數(shù)據(jù)。
(9)為了避免XSS攻擊,不要在WebView中直接使用JavaScript,不要調(diào)用setJavaScriptEnabled()方法。
(10)使用已經(jīng)存在的加密算法,不要自己去寫一個,使用SecureRandom這種安全的隨機數(shù)生成器來初始化加密密鑰。
(11)如果你為了重復(fù)使用需要存儲一個密鑰,那么使用像KeyStore這種提供長期存儲和獲取加密密鑰的機制。
(12)如果broadcast intent中的數(shù)據(jù)比較敏感,你需要考慮為這個broadcast intent設(shè)置一個權(quán)限,確保惡意應(yīng)用在沒有這個相應(yīng)權(quán)限的情況下不能注冊一個receiver來接收broadcast當(dāng)中的那些數(shù)據(jù)。
(13)Binder或者M(jìn)essenger是Android中RPC(遠(yuǎn)程過程調(diào)用)形式的IPC(進(jìn)程間通信)的優(yōu)先選擇。
(14)不要從你的應(yīng)用APK之外加載代碼。
(15)出于緩存溢出的考慮避免使用native代碼。
從目前來看,其中的一些條目,比如用MODE_WORLD_READABLE打開文件,沒有Eclipse或者Android Studio提示的話是很難注意到的。當(dāng)在你的Android項目上使用lint時,所有像MODE_WORLD_READABLE這樣的問題以及更多的細(xì)節(jié)都會有所提示。我們在貫穿本書的過程中會看到更多這些問題的細(xì)節(jié)。
3. HIPAA Secure
在美國,移動安全在醫(yī)療領(lǐng)域深受HIPAA影響,HIPAA指的是醫(yī)療保險電子數(shù)據(jù)交換法案。其他的國家或地區(qū)也有類似的法案。符合HIPAA安全規(guī)范意味著你沒有泄露任何受保護(hù)的健康信息。這里要提示的是HIPAA并沒有跟上移動領(lǐng)域的快速發(fā)展。除了計算機不再固定在辦公室桌面上這種問題之外,通過一些常識,我們可以判斷哪些場景是可以使用HIPAA中的一些原則的。
HealthIT.gov網(wǎng)站提供了一個安全風(fēng)險評估工具,你可以從這里開始來確定你的應(yīng)用是否符合HIPAA規(guī)范。你可以在www.healthit.gov/providers-professionals/security-risk-assessment-tool獲取到這個工具,工具分為3個部分,行政、技術(shù)和物理的保護(hù)措施。表1列出的T1到T45是其中的技術(shù)保護(hù)措施,我們加粗顯示了從Android角度看也比較有用的措施。這些保護(hù)措施被分成Standard(標(biāo)準(zhǔn)的)、Required(必須的)、Addressable(需處理的)3類。Standard和Required是要全部實現(xiàn)的。按HIPAA文檔的說法Addressable跟Alternative(可用別的方案替代)是類似的一個意思,所以對于Addressable類型的措施要求是否要完全實現(xiàn)還有一些爭議。但是,如果它適用于你的情況,那么就應(yīng)該被實現(xiàn)。
表1 SRA風(fēng)險評估工具—技術(shù)部分
T1
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程讓保護(hù)措施限制人們和軟件程序只能訪問到符合他們角色的電子健康信息(Electronic protected health information,ePHI)
T2
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程基于人們和軟件程序的角色賦予他們合適的權(quán)限
T3
標(biāo)準(zhǔn)的
你的實踐是否分析了使用應(yīng)用的全體員工和服務(wù)提供商的活動識別出各自需要訪問受保護(hù)的ePHI的范圍
T4
標(biāo)準(zhǔn)的
你的實踐是否區(qū)分了控制訪問的信息系統(tǒng)和電子設(shè)備的安全設(shè)置
T5
必須的
你的實踐是否有相關(guān)的策略和流程為每一個授權(quán)用戶賦予唯一標(biāo)示符
T6
必須的
你的實踐是否要求每個授權(quán)用戶在訪問ePHI之前都要輸入為其分配的用戶標(biāo)識符
T7
必須的
你的實踐是否有相關(guān)的策略和流程允許緊急情況下訪問ePHI
T8
必須的
你的實踐是怎么定義緊急情況并且如何區(qū)分各種可能發(fā)生的緊急情況的
T9
必須的
你的實踐是否有相關(guān)的政策和流程來為ePHI建立一個一模一樣的拷貝作為備份
T10
必須的
你的實踐是否通過將副本存儲在磁盤、磁帶或者像云存儲那樣的虛擬存儲來備份ePHI
T11
必須的
你的實踐是否有備份的信息系統(tǒng)以便可以在發(fā)生緊急情況或者主系統(tǒng)不可用的時候?qū)PHI進(jìn)行訪問
T12
必須的
你的實踐是否有能力在出現(xiàn)災(zāi)難性事件時激活這個信息系統(tǒng)的緊急訪問
T13
必須的
在有需要的時候,你的實踐是否有相關(guān)的策略和流程來區(qū)分出負(fù)責(zé)啟用緊急訪問設(shè)置的這類角色
T14
必須的
你的實踐是否指定了一名員工,讓其可以激活你信息系統(tǒng)的緊急訪問設(shè)置
T15
必須的
當(dāng)評估緊急狀況下繼續(xù)訪問ePHI和其他健康記錄的能力時,你的實踐是否進(jìn)行了測試訪問
T16
必須的
你的實踐是否能夠有效地從緊急狀態(tài)下恢復(fù),繼續(xù)正常的操作和訪問ePHI
T17
需處理的
你的實踐是否有相關(guān)的策略和流程在預(yù)先設(shè)定的不活動周期時間之后自動注銷授權(quán)用戶的session
T18
需處理的
你的實踐是否有責(zé)任人了解其信息系統(tǒng)和電子設(shè)備的自動登出設(shè)置
T19
需處理的
你的實踐是否啟用了自動登出,在預(yù)先設(shè)定的用戶不活動周期之后終止電子會話
T20
需處理的
你的實踐是否有相關(guān)的策略和流程來實現(xiàn)ePHI加密和解密的機制
T21
需處理的
你的實踐是否了解信息系統(tǒng)和電子設(shè)備的加密能力
T22
需處理的
你的實踐是否通過加密解密來阻止未授權(quán)用戶的訪問,以此控制對eHPI和其他健康信息的訪問
T23
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程來識別記錄或檢查信息系統(tǒng)活動的硬件、軟件或者程序的機制
T24
標(biāo)準(zhǔn)的
你的實踐是否能夠區(qū)分創(chuàng)建、存儲和傳輸ePHI的這些活動以及支持這些業(yè)務(wù)流程的信息系統(tǒng)
T25
標(biāo)準(zhǔn)的
你的實踐是否基于風(fēng)險分析,把創(chuàng)建、傳輸或者存儲ePHI的活動和信息系統(tǒng)分成高中低3個風(fēng)險級別
T26
標(biāo)準(zhǔn)的
在識別跟蹤的活動時,你的實踐是否使用風(fēng)險分析中的評估來幫助決定其被審查的頻率和范圍
T27
標(biāo)準(zhǔn)的
你的實踐是否有用來監(jiān)控、記錄、檢查信息系統(tǒng)活動的審查控制機制
T28
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程來創(chuàng)建、保留和分發(fā)審查報告給相應(yīng)的員工做檢查
T29
標(biāo)準(zhǔn)的
你的實踐是否生成了審查報告并分發(fā)給相應(yīng)的人做檢查
T30
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程來確定出于審查目的的保留條件
T31
標(biāo)準(zhǔn)的
你的實踐是否保留了應(yīng)用審查/訪問記錄的副本
T32
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程來保護(hù)ePHI不受未授權(quán)的修改和銷毀
T33
需處理的
你的實踐是否有相關(guān)的機制來證實ePHI未被未授權(quán)的方式更改、修改或者破壞
T34
必須的
你的實踐是否有相關(guān)的政策和流程來核實尋求ePHI訪問的人或者實體是他們聲明的那個人或者實體
T35
必須的
你的實踐是否了解信息系統(tǒng)和電子設(shè)備的驗證能力,確保唯一標(biāo)識的用戶的確是他所聲明的那個
T36
必須的
你的實踐是否使用風(fēng)險分析的評估來選擇相應(yīng)的驗證機制
T37
必須的
你的實踐是否保護(hù)了包含訪問控制記錄的文檔(授權(quán)用戶和密碼的清單)的機密性
T38
標(biāo)準(zhǔn)的
你的實踐是否有相關(guān)的策略和流程來保護(hù)ePHI在電子網(wǎng)絡(luò)上傳輸時不受未授權(quán)的訪問
T39
標(biāo)準(zhǔn)的
你的實踐是否實施保護(hù)措施來保證ePHI在路由去接收者的途中不被訪問
T40
需處理的
你的實踐是否了解加密ePHI從一端發(fā)送至另一端這個加密的能力有多少
T41
需處理的
你的實踐是否采取了步驟來降低ePHI在通過電子傳輸時被竊聽或者修改的風(fēng)險
T42
需處理的
你的實踐是否實現(xiàn)了加密作為保護(hù)措施來確保ePHI從一端傳輸至另一端的時候沒有被破解
T44
需處理的
你的實踐是否有相關(guān)的策略和流程在認(rèn)為合理和適當(dāng)?shù)臅r候?qū)PHI進(jìn)行加密
T45
需處理的
當(dāng)進(jìn)行風(fēng)險分析時,你的實踐是否考慮到為確保ePHI的完整性在其存儲或者傳輸?shù)臅r候不被訪問或者修改所做的加密的價值
安全性不僅是指應(yīng)用安全,它也指當(dāng)應(yīng)用被破解時你用什么來通知人們,以及找出被破解的內(nèi)容并做出報告。大多數(shù)移動開發(fā)甚至都沒在這個移動安全的級別上做出深入思考,移動安全目前還只是包含極少數(shù)或者說根本沒有監(jiān)控用戶是如何訪問應(yīng)用信息的。
SRA工具包含了比這個表多得多的信息,是一個很有用的資源。
我們將在書中介紹HIPAA的一些細(xì)節(jié)。
4. OWASP移動風(fēng)險Top 10
2014年OWASP移動風(fēng)險Top 10所示如下,并在接下來的段落中做了進(jìn)一步解釋。
M1:薄弱的服務(wù)器端控制。
M2:不安全的數(shù)據(jù)存儲。
M3:傳輸層保護(hù)不充分。
M4:無意的數(shù)據(jù)泄露。
M5:較差的授權(quán)和身份認(rèn)證。
M6:被破譯的加密。
M7:客戶端注入。
M8:通過不被信任的輸入做出的安全決策。
M9:不正確的會話處理。
M10:缺少對二進(jìn)制文件的保護(hù)。
OWASP移動風(fēng)險Top 10名單最近進(jìn)行了更新,移除了一些重復(fù)的內(nèi)容,減少重復(fù)內(nèi)容帶來的困惑。
大多數(shù)移動應(yīng)用都需要通過某些方式連接后端服務(wù)器來進(jìn)行一些實際的工作。如果通信是通過Web Service做的,那么可以通過SOAP或者更常用的RESTful Web Service。在過去20年當(dāng)中應(yīng)用到Web服務(wù)器安全方面的最佳實踐同樣可以應(yīng)用到移動應(yīng)用使用的Web服務(wù)器上。
安全問題最常見的地方可能就是Android開發(fā)者把不安全的用戶名、密碼、ID、密鑰、數(shù)據(jù)庫等內(nèi)容留在了shared preferences里以及database文件夾當(dāng)中。
所有通過互聯(lián)網(wǎng)傳輸?shù)拿舾行畔⒍紤?yīng)該通過安全連接來傳輸。你的應(yīng)用是否使用了帶SSL簽名證書的SSL,讓SSL代理工具不能從中讀取信息?
這包括了發(fā)送用戶未授權(quán)的個人信息給第三方。這會發(fā)生在當(dāng)你發(fā)送數(shù)據(jù)到事件日志或者文件當(dāng)中,而其他應(yīng)用能夠讀取到時。它也可能是第三方廣告庫引起的,這些廣告庫收集地理位置(或者其他)信息,然后在你不知情的情況下發(fā)送回另一個數(shù)據(jù)庫。
如果應(yīng)用允許用戶創(chuàng)建一個賬戶,那么密碼應(yīng)該包含4個以上的字符。4位的PIN碼并不安全,是否針對暴力破解攻擊做了檢查?如果應(yīng)用允許離線使用,密碼存儲在哪?別人是不是可以在Android文件系統(tǒng)上找到密碼?
查看用來解密密碼或者其他數(shù)據(jù)的密鑰是否存儲在源代碼中或者存儲在一個本地的數(shù)據(jù)庫中。
混合的或者跨平臺的應(yīng)用可以用SQL注入攻擊破解。確保SQL注入在用戶名和密碼等字段不起作用。
別人會濫用開發(fā)者無條件的信任,所以我們需要知道怎么避免落入這種陷阱。注意其他應(yīng)用和來源輸入不安全的數(shù)據(jù)的跡象。Android intents用來在應(yīng)用間傳遞信息,別人可以用intent來繞過IPC或者說進(jìn)程間通信的Android權(quán)限問題。
用戶登錄的session通常在關(guān)掉應(yīng)用程序之后都沒終止。這讓應(yīng)用關(guān)掉之后,下一次別人在平板電腦上啟動這個應(yīng)用的時候,用戶在應(yīng)用中還是處于登錄狀態(tài),那別人繼續(xù)使用這個應(yīng)用的時候,用戶的信用卡信息以及其他信息都可以被別人看到了。
混淆你的代碼,這樣它就不會被逆向工程完全轉(zhuǎn)換回源代碼了。不幸的是混淆并不是萬能的。使用混淆讓黑客破解你的應(yīng)用更繁瑣一點,但不要因此認(rèn)為沒有人能夠反編譯你的APK了。
5. Forrester Research發(fā)布的在移動應(yīng)用開發(fā)中非技術(shù)性安全問題的Top 10
Forrester Research公司的Tyler Shields提出了一個很不一樣的非技術(shù)性移動安全風(fēng)險Top 10的清單,但是它和前面的清單一樣是適用的。這份清單很好地解釋了當(dāng)前移動開發(fā)方面的安全狀態(tài)。
(1)缺乏開發(fā)者激勵。
(2)缺少移動方面的安全教育。
(3)缺乏移動開發(fā)安全方面可用的資源。
(4)安全問題沒有考慮到人的因素。
(5)去除了開發(fā)者在安全方面的責(zé)任。
(6)忽略了業(yè)務(wù)需求。
(7)保護(hù)移動安全,也就意味著保護(hù)敏捷開發(fā)的安全性。
(8)關(guān)注安全性從而忽略了隱私保護(hù)。
(9)設(shè)計、開發(fā)和質(zhì)量保證都缺乏安全性。
(10)作為附加的安全性:產(chǎn)品后期處理的安全性。
下面的清單簡單地對每個Top 10條目進(jìn)行了解釋。
(1)缺乏開發(fā)者激勵。開發(fā)者沒有得到適當(dāng)?shù)募顏砭帉懓踩拇a。
(2)缺少移動方面的安全教育。開發(fā)者不理解移動應(yīng)用和一般的應(yīng)用在結(jié)構(gòu)和安全性上的細(xì)微差別。
(3)缺乏移動開發(fā)安全方面可用的資源。移動開發(fā)安全方面的資源嚴(yán)重不足且負(fù)擔(dān)過重,使得缺少安全性成為意料之中的事。
(4)安全問題沒有考慮到人的因素。移動安全方面的人的因素和非移動方面是很不一樣的。安全問題如果不考慮人的因素,就會導(dǎo)致做出不是最合適的決策和控制。
(5)去除了開發(fā)者在安全方面的責(zé)任。改進(jìn)工具和框架的安全性,但是不能僅僅依靠工具來加強安全編碼的方法。
(6)忽略了業(yè)務(wù)需求。開發(fā)者需要理解他們開發(fā)的產(chǎn)品的業(yè)務(wù)需求。在什么都不清楚的情況下會開發(fā)出很差勁的業(yè)務(wù)解決方案。
(7)保護(hù)移動安全,也就意味著保護(hù)敏捷開發(fā)的安全性。移動開發(fā)已經(jīng)改變了開發(fā)的形式。更短的開發(fā)周期以及更小的開發(fā)團(tuán)隊使得企業(yè)開發(fā)團(tuán)隊要重新思考他們的開發(fā)流程。
(8)關(guān)注安全性從而忽略了隱私保護(hù)。安全和隱私問題是相互纏繞不可分離的。如果你忽略了其中一個,那么另一個也不會好到哪里去。
(9)設(shè)計、開發(fā)和質(zhì)量評價時缺乏安全性考慮。安全的開發(fā)生命周期這個概念已經(jīng)被討論了很長時間了。它甚至依然還可以應(yīng)用在我們看到的修改過的移動開發(fā)周期上。改進(jìn)你的SDLC(secure development lifecycle)來減少你的缺陷數(shù)量。
(10)作為附加的安全性工具:產(chǎn)品后期處理的安全性。作為產(chǎn)品后期處理的安全性工具,應(yīng)用加殼和應(yīng)用加固可以提高你發(fā)布產(chǎn)品的安全性的標(biāo)準(zhǔn)。這不會影響到你應(yīng)用中其他安全層面的內(nèi)容。
以上內(nèi)容節(jié)選自《構(gòu)建安全的Android App》
內(nèi)容簡介
本書適合Android開發(fā)人員、安全技術(shù)人員閱讀,也可以作為大中專院校相關(guān)專業(yè)師生的學(xué)習(xí)用書和培訓(xùn)機構(gòu)的教材。
本文轉(zhuǎn)載自異步社區(qū)。
Web應(yīng)用防火墻 WAF
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。