淺談Androi安全問題和Android P安全新特性

導語

根據(jù)谷歌最新發(fā)布的Android安全公告颇玷,2018年八月Android安全補丁將解決了多個最為嚴重的安全漏洞,包括允許本地惡意程序繞過用戶交互請求來獲取其他訪問權(quán)限桑嘶,和讓遠程攻擊者執(zhí)行任意代碼bug纫事。

目錄

1刹衫、組件
2、WebView
3口糕、存儲
4板祝、傳輸
5、日志
6走净、防止二次打包和動態(tài)調(diào)試
7券时、漏洞檢測工具
8孤里、Android P 安全防護新特性

組件

1). 設(shè)置權(quán)限開放屬性android:exported=["false"]
Activity:表示是否允許外部應(yīng)用組件啟動。
Service:表示是否允許外部應(yīng)用組件調(diào)用服務(wù)或與其進行交互橘洞。
Receiver:表示是否可以接收來自其應(yīng)用程序之外的消息捌袜。
Provider:表示是否允許其他應(yīng)用程序訪問內(nèi)容提供器。
設(shè)置為“false”后炸枣,組件只能由同一應(yīng)用或同一用戶 ID 的不同應(yīng)用啟動虏等,大大加強安全性。

2). 配置自定義權(quán)限

定義:

<?xml version="1.0" encoding="utf-8"?>
<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    <permission
        android:name="example.permission.TEST"
        android:description="@string/TestActivity"
        android:permissionGroup="example.permission-group.TEST"
        android:protectionLevel="signature" />
    ...
</manifest>

暴露:

<?xml version="1.0" encoding="utf-8"?>
<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">
    ...
 <activity
            android:name=".PrivateActivity"
            android:exported="true"
            android:label="@string/title_activity_private"
            android:permission="example.permission.TEST" />
    ...
</manifest>

使用:
在manifest文件中申請該權(quán)限适肠,該權(quán)限的使用和Android提供的權(quán)限的使用是一樣的霍衫,均為使用uses-permission標簽

3). LocalBroadcastManager
區(qū)別基于Binder實現(xiàn)的BroadcastReceiver,LocalBroadcastManager是基于Handler實現(xiàn)的侯养,擁有更高的效率與安全性敦跌。主要體現(xiàn)在數(shù)據(jù)僅限于應(yīng)用內(nèi)部傳輸,避免廣播被攔截逛揩、偽造柠傍、篡改的風險。

4). Application相關(guān)屬性配置

  • debugable屬性 android:debuggable="false"
    根據(jù)官方文檔說明辩稽,默認值就是false惧笛,一般不用手動配置。
  • allowBackup屬性 android:allowBackup= "false"
    設(shè)置是否支持備份逞泄,默認值為true患整,應(yīng)當手動配置為“false”,避免應(yīng)用內(nèi)數(shù)據(jù)通過備份造成的泄漏問題喷众。

5). intent 安全問題

  • 隱式intent沒有明確指明哪些接收方有權(quán)限接收并级,惡意程序指定action標識后,可以獲取intent內(nèi)容侮腹,導致數(shù)據(jù)泄漏嘲碧、intent劫持、仿冒父阻、釣魚應(yīng)用等風險使用愈涩。
  • 隱式調(diào)用建議使用Intent.setPackage、Intent.setComponent加矛、Intent.setClassName履婉、Intent.setClass四種方法中任一種明確指定目標組件名稱。

WebView安全

1). 處理不校驗證書漏洞:繼承WebViewClient重寫onReceivedSslError時SslErrorHandler.cancel();

2). 處理file協(xié)議安全漏洞:

setAllowFileAccess(false); setAllowFileAccessFromFileURLs(false);
setAllowUniversalAccessFromFileURLs(false);

3). 處理file協(xié)議安全漏洞:

WebSettings.setSavePassword(false)

4).開啟安全瀏覽模式:

<manifest>
<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="true" />
<application> 
... 
</application>
</manifest>

數(shù)據(jù)存儲安全

1). 秘鑰及敏感信息
項目中經(jīng)常用AES對數(shù)據(jù)進行加解密斟览,并將密鑰直接寫在項目文件中毁腿,這樣做會有一定的風險。此類配置應(yīng)當妥善存放,不要在類中硬編碼敏感信息已烤,因此可以使用JNI將敏感信息寫到Native層鸠窗。為了防止二次打包debug出密鑰,我們可以采取驗證apk簽名的方式校驗胯究。

2). SharePreferences
首先不應(yīng)當使用SharePreferences來存放敏感信息稍计。存儲一些配置信息時也要配置好訪問權(quán)限,如私有的訪問權(quán)限 MODE_PRIVATE裕循,避免配置信息被篡改臣嚣。

3). 簽名配置signingConfigs
避免明文保存簽名密碼,可以將密碼保存到本地剥哑,無需上傳版本控制系統(tǒng)

數(shù)據(jù)傳輸安全

1). 使用HTTPS協(xié)議
不要在類中硬編碼敏感信息硅则,可以使用JNI將敏感信息寫到Native層。

2). SSL通信服務(wù)端檢測信任任意證書
自定義SSL x509 TrustManager重寫checkServerTrusted方法株婴,方法內(nèi)嚴格判斷服務(wù)端和客戶端證書校驗怎虫,對于異常事件禁止return 空或者null,防止黑客可以使用中間人攻擊獲取加密內(nèi)容督暂。

3). Android N 包含一個網(wǎng)絡(luò)安全配置特性,讓應(yīng)用可以在一個安全的聲明性配置文件中自定義其網(wǎng)絡(luò)安全設(shè)置穷吮,而無需修改應(yīng)用代碼逻翁,只需要以 PEM 或 DER 格式將自簽署或非公共 CA 證書添加到 res/raw/my_ca。

在AndroidManifest.xml中配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
  <application ... >
    <meta-data android:name="android.security.net.config"           android:resource="@xml/network_security_config" />
    ...
  </application>
</manifest>

network_security_config文件如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

日志輸出

日志是我們開發(fā)調(diào)試中不可或缺的一部分捡鱼,但也是最容易泄露敏感信息的地方八回。所以,在我們發(fā)布應(yīng)用時驾诈,應(yīng)當關(guān)閉缠诅、甚至移除Log輸出:

if (BuildConfig.DEBUG == true) {
      Log.e(tag, msg);
        }

防止二次打包和動態(tài)調(diào)試

1). 混淆代碼,可以增加反編譯破解的難度乍迄。但是我們在使用混淆功能時也要注意實體類管引、與JS交互的方法、第三方混淆配置等問題闯两。

2). 應(yīng)用加固也是近年來比較熱門的應(yīng)用安全解決方案褥伴,各大廠商都有自己的加固方案,常見的如騰訊樂固漾狼、360加固重慢、梆梆加固等等。

3). Native層增加簽名校驗逊躁,當發(fā)現(xiàn)apk簽名和我們自己的簽名不一致的時候似踱,調(diào)用so庫直接崩潰即可。

4). 獲取MANIFEST.MF文件中的classes.dex文件的SHA-1哈希值,通過后臺保存的初始值進行校驗核芽。

5). java層代碼中驗證簽名囚戚,這種純粹的字符比較都很容易破解掉。

6). 通過api和ApplicationInfo的flag判斷是否調(diào)試狀態(tài)狞洋,碰到調(diào)試器動態(tài)調(diào)試即可果斷結(jié)束程序(打正式包時開啟此邏輯)

漏洞檢測工具

當項目代碼量龐大以后弯淘,積累了較多的歷史代碼,人工檢測代碼工作量大吉懊。這時庐橙,漏洞檢查工具就派上用場了,比較出名的有AndroBugs借嗽、YSO-Mobile Security Framework态鳖、FindBugs + FindSecurityBugs,而中文的漏洞檢測工具中比較有名的就是360的FireLine恶导。

FireLine介紹

  • 優(yōu)勢:
    1). 免費提供靜態(tài)代碼掃描服務(wù)
    2). 用戶本機執(zhí)行浆竭,不收集任何數(shù)據(jù)
    3). Studio中搜索plugins安裝
    4). 掃描速度快
    5). 中文描述

  • 掃描規(guī)則:
    1). APP安全檢查
    2). 代碼規(guī)范檢查
    3). 內(nèi)存泄露檢查
    4). 日志輸出檢查
    5). 空指針檢查
    6). 多線程檢查

  • FireLine配置和運行


    image

    image
  • 掃描完成后,在火線報告輸出路徑找到testReport.html惨寿,打開后可見邦泄,會看到列出你項目中存在的問題


    image
  • 圓形加好按鈕,點開就可展開顯示問題存在代碼中的位置


    image

Android P 安全防護新特性

1). 統(tǒng)一身份驗證對話框
生物傳感器被廣泛應(yīng)用于身份認證裂垦,為了保障用戶在不同感應(yīng)器和應(yīng)用間能夠獲得一致的體驗 Android9操作顺囊。應(yīng)用不再需要自行設(shè)計對話框,而是通過調(diào)用BiometricPrompt API觸發(fā)系統(tǒng)對話框蕉拢。除指紋識別以外(包括屏幕下指紋識別)特碳,該API還支持面部識別以及虹膜識別。


image

2). 高可信度用戶確認
Android 9 新增了高可信度用戶確認 (Android Protected Confirmation) 晕换,該功能通過可信執(zhí)行環(huán)境 (TEE) 確保提示文本被真實用戶確認午乓。只有在用戶成功確認之后,TEE 才會簽發(fā)該文本闸准,該環(huán)境會對顯示的確認對話框以及用戶輸入進行保護益愈。
借助這個新增的 API,應(yīng)用可以利用 ConfirmationDialog 的實例向用戶顯示提示夷家,請他們批準一個簡短的聲明腕唧。 應(yīng)用可以通過這個聲明再次確認,用戶確實想完成一項敏感事務(wù)瘾英,例如付款枣接。

3). 加強密鑰安全保護
加入了一個新的 KeyStore 類 —— StrongBox,并提供相應(yīng)的 API 來支持安裝了 Android P 的受支持設(shè)備缺谴,該實現(xiàn)位于一個硬件安全性模塊內(nèi)但惶,其中包含了自己的 CPU耳鸯、安全存儲空間、真實隨機數(shù)生成器以及抵御軟件包篡改和未經(jīng)授權(quán)線刷應(yīng)用的附加機制膀曾。 檢查存儲在 StrongBox Keymaster 中的密鑰時县爬,系統(tǒng)會通過可信執(zhí)行環(huán)境 (TEE) 證實密鑰的完整性。支持以下算法和密鑰長度:
RSA 2048
AES 128 和 256
ECDSA P-256
HMAC-SHA256 (支持 8-64 字節(jié)密鑰長度添谊,含首末值)
Triple DES 168

4). DNS over TLS
Android 9 內(nèi)置對 DNS over TLS 的支持:若網(wǎng)絡(luò) DNS 服務(wù)器提供支持财喳,設(shè)備會自動將 DNS 查詢升級為 TLS 查詢。用戶可以通過更改 “網(wǎng)絡(luò)和互聯(lián)網(wǎng)” 設(shè)置下的隱私 DNS (Private DNS) 模式來管理 DNS over TLS 行為斩狱。自行運行 DNS 查詢的應(yīng)用可以通過調(diào)用新的 LinkProperties.isPrivateDnsActive() API 來獲取 DNS 模式相關(guān)信息耳高。

5). 默認使用 HTTPS
為了將所有網(wǎng)絡(luò)流量從明文 (未加密的HTTP) 逐步遷移至 TLS,更改了網(wǎng)絡(luò)安全配置的默認設(shè)置所踊,以阻止所有明文流量泌枪,強制應(yīng)用通過 TLS 建立網(wǎng)降連接,除非開發(fā)者明確允許特定域名使用明文傳輸秕岛。

6). 用戶隱私
系統(tǒng)禁止所有處于空閑狀態(tài)的應(yīng)用對話筒碌燕、攝像頭和所有 SensorManager 傳感器的訪問。
當應(yīng)用的 UID 空閑時继薛,麥克風將會報告 “無音頻信號”修壕,傳感器將會停止報告事件,應(yīng)用使用的攝像頭也會斷開連接遏考,并在應(yīng)用試圖訪問時生成錯誤慈鸠。
在大多數(shù)情況下,這些限制不會對現(xiàn)有應(yīng)用造成新的問題诈皿,但建議從應(yīng)用中移除此類傳感器請求林束。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末像棘,一起剝皮案震驚了整個濱河市稽亏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缕题,老刑警劉巖截歉,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烟零,居然都是意外死亡瘪松,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門锨阿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宵睦,“玉大人,你說我怎么就攤上這事墅诡】呛浚” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烟馅。 經(jīng)常有香客問我说庭,道長,這世上最難降的妖魔是什么郑趁? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任刊驴,我火速辦了婚禮,結(jié)果婚禮上寡润,老公的妹妹穿的比我還像新娘捆憎。我一直安慰自己,他們只是感情好悦穿,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布攻礼。 她就那樣靜靜地躺著,像睡著了一般栗柒。 火紅的嫁衣襯著肌膚如雪礁扮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天瞬沦,我揣著相機與錄音太伊,去河邊找鬼。 笑死逛钻,一個胖子當著我的面吹牛僚焦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曙痘,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼芳悲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了边坤?” 一聲冷哼從身側(cè)響起名扛,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茧痒,沒想到半個月后肮韧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡旺订,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年弄企,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片区拳。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拘领,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出樱调,到底是詐尸還是另有隱情约素,我是刑警寧澤洽瞬,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站业汰,受9級特大地震影響伙窃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜样漆,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一为障、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧放祟,春花似錦鳍怨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眉撵,卻和暖如春侦香,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纽疟。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工罐韩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人污朽。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓散吵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蟆肆。 傳聞我的和親對象是個殘疾皇子矾睦,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)炎功,斷路器枚冗,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 《酒&色》 酒色之徒,蓋因酒后血熱亡问,燥而欲泄官紫,多生色欲肛宋,行色而泄州藕。 吾,姓連名捷酝陈,號儒易糊涂床玻,飲酒...
    連捷一心閱讀 1,103評論 0 1
  • 在互聯(lián)網(wǎng)+時代锈死,首先企業(yè)公有云贫堰、私有云的應(yīng)用,云化趨勢迫使形勢越來越復雜待牵。防范的難度也隨之疊加其屏。再一個是攻防時間嚴...
    躍過髙山閱讀 172評論 0 0
  • 今天重要三件事:工作閱,閱讀缨该,實踐 1偎行、踐行 今天被氣極,不停的對自己說:哇贰拿,太好了蛤袒!哇,太好了膨更!哇妙真,太好了! 最...
    桂桂1213閱讀 143評論 0 0