本文主要介紹了APP安全漏洞整理,分享給大家,具體如下:
1.源碼安全漏洞
1.1 代碼混淆漏洞
當前APK文件的安全性是非常令人堪憂的。APK運行環境依賴的文件/文件夾 res、DEX、主配文件Lib 只有簡單的加密或者甚至沒有任何加密。諸如apktool這類工具可輕易將其破解,再配合其他例如dex2jar、jd-gui等工具基本可以做到:源碼暴露、資源文件暴露、主配文件篡改、核心SO庫暴露、暴力破解惡意利用等。因此需要對安卓代碼進行代碼混淆。
代碼混淆(Obfuscated code)亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,但是難于閱讀和理解的形式的行為。將代碼中的各種元素,如變量,函數,類的名字改寫成無意義的名字。比如改寫成無意義的單個或多個字母,如a,Ac,甚至改寫成“__”這樣的符號,使得閱讀的人無法根據名字猜測其用途。代碼混淆并不能真正阻止反向工程,只能增大其難度。因此,對于對安全性要求很高的場合,僅僅使用代碼混淆并不能保證源代碼的安全,但是可以在一定程度上保護開發者的勞動成果。
1.2 Dex保護漏洞
Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,相當于安卓中的.exe文件,Dex為Android應用的核心,保護不當容易被反編譯,暴露程序重要信息,面臨被植入廣告、惡意代碼、病毒等風險。
另外當使用DexClassLoader加載外部的 apk、jar 或 dex文件,當外部文件的來源無法控制時或是被篡改,此時無法保證加載的文件是否安全。加載惡意的dex文件將會導致任意命令的執行。
1.3 so保護漏洞
so庫一般是程序里面核心代碼塊,通過Android提供的NDK技術將核心代碼用安全性更高的C/C++語言實現并提供給Java層調用來保證程序核心代碼的安全。高性能的代碼一般都會采取C/C++實現,通過Android的NDK技術來讓Java層直接使用。其安全性相對于Java會高很多,相對于Java代碼來說其反編譯難度要大很多,但對于經驗豐富的破解者來說,仍然是很容易的事,可以通過暴力破解或國外高價工具來將其破解。應用的關鍵性功能或算法,都會在so中實現,如果so被逆向,應用的關鍵性代碼和算法都將會暴露。
1.4 調試設置漏洞
如果在AndroidManifest.xml配置文件中設置了application屬性為debuggable=“true”,則應用可以被任意調試,這就為攻擊者調試和破解程序提供了極大方便。如果開啟,可被Java調試工具例如jdb進行調試,獲取和篡改用戶敏感信息,甚至分析并且修改代碼實現的業務邏輯,例如竊取用戶密碼,繞過驗證碼防護等。
2. 組件安全漏洞
2.1組件導出漏洞
組成Apk的四個組件,Activity,Service,Broadcast Receiver 和Content Provider,如果設置了導出權限,都可能被系統或者第三方的應用程序直接調出并使用。組件導出可能導致登錄界面被繞過、信息泄露、數據庫SQL注入、DOS、惡意調用等風險。
2.2 Activity組件漏洞
Activity是Android組件中最基本也是最為常見用的四大組件之一,是一個負責與用戶交互的組件。Activity組件中存在以下常見的漏洞。
(1)activity綁定browserable與自定義協議
activity設置“android.intent.category.BROWSABLE”屬性并同時設置了自定義的協議android:scheme意味著可以通過瀏覽器使用自定義協議打開此activity。可能通過瀏覽器對app進行越權調用。
(2)ActivityManager漏洞
ActivityManager類中的killBackgroundProcesses函數,用于殺死進程,屬于風險API。
還有通過ActivityManager被動嗅探intent。Intent嗅探腳本首先調用一個Context.getSystemService()函數,并傳給它一個ACTIVITY_SERVICE標志的標識符,該函數返回一個ActivityManager類的實例,它使得該腳本能夠與activity manager進行交互,并通過這個對象調用ActivityManager.getRecentTasks()方法。最后把intent相關的信息格式化成字符串返回出來。
2.3 Service組件漏洞
Service作為Android中四大組件之一,擁有重要的地位。Service具有和Activity一樣的級別,只是沒有界面,是運行于后臺的服務。其他應用組件能夠啟動Service,并且當用戶切換到另外的應用場景,Service將持續在后臺運行。另外,一個組件能夠綁定到一個service與之交互(IPC機制),例如,一個service可能會處理網絡操作,播放音樂,操作文件I/O或者與內容提供者(content provider)交互,所有這些活動都是在后臺進行。從表面上看service并不具備危害性,但實際上service可以在后臺執行一些敏感的操作。
Service存在的安全漏洞包括:權限提升,拒絕服務攻擊。沒有聲明任何權限的應用即可在沒有任何提示的情況下啟動該服務,完成該服務所作操作,對系統安全性產生極大影響。
2.4 Broadcast Receiver組件漏洞
Broadcast Receiver是“廣播接收者”的意思,就是用來接收來自系統和應用中的廣播。
(1)權限管理不當
Broadcast Receiver執行一些敏感操作時,會通過intent來傳遞這些信息,這種傳遞數據的方式是容易被惡意攻擊的。在發掘broadcastreceiver中的漏洞時,最大的問題是確定輸入是否可信,以及破壞性有多強。
以下面這段代碼為例(有縮略):
<receiverandroid:name=”.broadcastreceivers.SendSMSNowReceiver”android:label=”Send SMS”> ………… <actionandroid:name=”org.owasp.goatdroid.SOCIAL_SMS” /> ………… <uses-permissionandroid:name=”android.permission.SEND_SMS”/> …………
在上面這段代碼中,濫用了一個沒有進行適當權限保護的broadcast receiver,由于這個組件缺乏權限保護,使得攻擊者可以在沒有發送短信權限的情況下發送短信,這個漏洞的危害在于,攻擊者可以在用戶不知情的情況下發送短信去訂購一個付費服務,或者泄漏設備中的信息。
(2)BroadcastReceiver導出漏洞
當應用廣播接收器默認設置exported='true',導致應用可能接收到第三方惡意應用偽造的廣播,利用這一漏洞,攻擊者可以在用戶手機通知欄上推送任意消息,通過配合其它漏洞盜取本地隱私文件和執行任意代碼。
(3)動態注冊廣播組件暴露漏洞
Android 可以在配置文件中聲明一個receiver或者動態注冊一個receiver來接收廣播信息,攻擊者假冒APP構造廣播發送給被攻擊的receiver,是被攻擊的APP執行某些敏感行為或者返回敏感信息等,如果receiver接收到有害的數據或者命令時可能泄露數據或者做一些不當的操作,會造成用戶的信息泄漏甚至是財產損失。
2.5 Content Provider組件漏洞
Content Provider為存儲和獲取數據提供統一的接口。可以在不同的應用程序之間共享數據。
(1)讀寫權限漏洞
Content Provider中通常都含有大量有價值的信息,比如用的電話號碼或者社交帳號登錄口令,而確認一個content provider是否有能被攻擊的漏洞的最好的辦法,就是嘗試攻擊它一下。
可以用drozer來尋找一些不需要權限的contentprovider:
dz> runapp.provider.info 主站蜘蛛池模板: 宜丰县| 丹东市| 博白县| 彩票| 理塘县| 晋城| 平陆县| 黔西县| SHOW| 五常市| 吉林市| 咸宁市| 江山市| 犍为县| 辽中县| 卓尼县| 东乌| 日喀则市| 镇雄县| 崇仁县| 梁河县| 克什克腾旗| 屏山县| 马公市| 内丘县| 天门市| 侯马市| 阳泉市| 兰西县| 同江市| 新源县| 广州市| 灵丘县| 滨州市| 长岛县| 乌苏市| 布尔津县| 秭归县| 泸定县| 益阳市| 衡东县|