您好,登錄后才能下訂單哦!
這篇文章主要介紹了Android手機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中的漏洞時,最大的問題是確定輸入是否可信,以及破壞性有多強。
以下面這段代碼為例(有縮略):
<receiver android: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 –permission null
這條命令能列出所有不需要任何讀寫權限的Content Provider,然后找到相對應的包,去訪問給定包存放在它的Content Provider中的數據。如果一些Content Provider的URI不需要讀權限,那就可以通過drozer工具提取其中的數據。在某些情況下,設置和執行讀寫權限不當,也會將ContentProvider中的數據暴露給攻擊者。除了提取數據,對于寫權限管理不當的Content Provider還可以向其中寫入數據,使得攻擊者可以將惡意數據插入到數據庫中。
(2)Content Provider中的SQL注入漏洞
和Web漏洞類似,安卓APP也要使用數據庫,那就也有可能存在SQL注入漏洞。主要有兩類,第一類是SQL語句中的查詢條件子語句是可注入的,第二類是投影操作子句是可注入的。使用drozer可以很容易的找出查詢條件子句可注入的content provider。
dz> runapp.provider.query [URI] –selection “1=1”
也可以使用其他恒為真的值,例如“1-1=0”,“0=0”等等。如果APP存在SQL注入漏洞,那么輸入這行指令后就會返回數據庫中的整張表。
(3)Provider文件目錄遍歷漏洞
當Provider被導出且覆寫了openFile方法時,沒有對Content Query Uri進行有效判斷或過濾。攻擊者可以利用openFile()接口進行文件目錄遍歷以達到訪問任意可讀文件的目的。
2.6 Intent組件漏洞
Intent(意圖)主要是解決Android應用的各項組件之間的通訊。
(1)隱式意圖調用漏洞
封裝Intent時采用隱式設置,只設定action,未限定具體的接收對象,導致Intent可被其他應用獲取并讀取其中數據。Intent隱式調用發送的意圖可能被第三方劫持,可能導致內部隱私數據泄露。
(2)意圖協議URL漏洞
intent schemeURLs(意圖協議URL),可以通過解析特定格式的URL直接向系統發送意圖,導致自身的未導出的組件可被調用,隱私信息泄露。
2.7 WebView組件漏洞
WebView是一個基于webkit引擎、展現web頁面的控件。
(1)Webview明文存儲密碼風險
Android的Webview組件中默認打開了提示用戶是否保存密碼的功能,如果用戶選擇保存,用戶名和密碼將被明文存儲到該應用目錄databases/webview.db中。而本地明文存儲的用戶名和密碼,不僅會被該應用隨意瀏覽,其他惡意程序也可能通過提權或者root的方式訪問該應用的webview數據庫,從而竊取用戶登錄過的用戶名信息以及密碼。
(2)Webview遠程代碼執行漏洞
Webview是Android用于瀏覽網頁的組件,其包含的接口函數addJavascriptInterface可以將Java類或方法導出以供JavaScript調用,實現網頁JS與本地JAVA的交互。由于系統沒有限制已注冊JAVA類的方法調用,因此未注冊的其它任何JAVA類也可以被反射機制調用,這樣可能導致被篡改的URL中存在的惡意代碼被執行,用戶手機被安裝木馬程序,發送扣費短信,通信錄或者短信被竊取,甚至手機被遠程控制。
(3)Webview繞過證書校驗漏洞
客戶端的Webview組件訪問使用HTTPS協議加密的url時,如果服務器證書校驗錯誤,客戶端應該拒絕繼續加載頁面。但如果重載WebView的onReceivedSslError()函數并在其中執行handler.proceed(),客戶端可以繞過證書校驗錯誤繼續訪問此非法URL。這樣將會導致“中間人攻擊”,攻擊者冒充服務器與銀行客戶端進行交互,同時冒充銀行客戶端與銀行服務器進行交互,在充當中間人轉發信息的時候,竊取手機號,賬號,密碼等敏感信息。
(4)未移除有風險的Webview系統隱藏接口
android webview組件包含3個隱藏的系統接口:searchBoxJavaBridge, accessibilityTraversal以及accessibility,惡意程序可以利用它們實現遠程代碼執行。需通過顯示調用removeJavascriptInterface移除這三個系統隱藏接口。
(5)WebView忽略SSL證書錯誤
WebView調用onReceivedSslError方法時,直接執行handler.proceed()來忽略該證書錯誤。忽略SSL證書錯誤可能引起中間人攻擊。
3.數據安全漏洞
3.1 數據存儲漏洞
(1)SharedPreferences漏洞
當使用getSharedPreferences打開文件,第二個參數設置為MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE。當前文件可以被其他應用讀取或寫入篡改,導致信息泄漏或更嚴重的問題。
(2)File任意讀寫漏洞
如果開發者使用openFileOutput(String name,int mode)方法創建內部文件時,使用MODE_WORLD_READABLE或 MODE_WORLD_WRITEABLE模式,就會讓這個文件變為全局可讀或全局可寫的。
3.2 數據加密漏洞
(1)明文數字證書漏洞
Apk中使用的數字證書可被用來校驗服務器的合法身份,以及在與服務器進行通信的過程中對傳輸數據進行加密、解密運算,保證傳輸數據的保密性、完整性。明文存儲的數字證書如果被篡改,客戶端可能連接到假冒的服務端上,導致用戶名、密碼等信息被竊取;如果明文證書被盜取,可能造成傳輸數據被截獲解密,用戶信息泄露,或者偽造客戶端向服務器發送請求,篡改服務器中的用戶數據或造成服務器響應異常。
(2)AES/DES弱加密
在AES加密時,使用“AES/ECB/NoPadding”或“AES/ECB/PKCS5padding”的模式。ECB是將文件分塊后對文件塊做同一加密,破解加密只需要針對一個文件塊進行解密,降低了破解難度和文件安全性。
(3)setSeed偽隨機數漏洞
本地加密時如果使用SecureRandom中的setSeed方法設置種子將會造成生成的隨機數不隨機,使加密數據容易被破解。在SecureRandom生成隨機數時,如果不調用setSeed方法,SecureRandom會從系統中找到一個默認隨機源。每次生成隨機數時都會從這個隨機源中取seed。
3.3 數據傳輸漏洞
(1)SSL通信服務端檢測信任任意證書
自定義SSL x509 TrustManager,重寫checkServerTrusted方法,方法內不做任何服務端的證書校驗。黑客可以使用中間人攻擊獲取加密內容。
(2)未使用HTTPS協議的數據傳輸
無線傳輸的數據能被第三方輕易截獲,由于客戶端與服務器之間的傳輸數據遵循通信協議指定的格式和內容類型,如果未使用加密措施,傳輸數據可被還原成網絡層的數據包并進行解包分析,直接暴露用戶的各種關鍵數據,例如用戶名,密碼等。加入了SSL(Secure SocketLayer)子層實現的HTTPS協議可確保數據在網絡上加密傳輸,即使傳輸的數據被截獲,也無法解密和還原。
(3)HTTPS未校驗服務器證書漏洞
使用HTTPS協議時,客戶端必須對服務器證書進行完整校驗,以驗證服務器是真實合法的目標服務器。如果沒有校驗,客戶端可能與仿冒的服務器建立通信鏈接,即“中間人攻擊”。仿冒的中間人可以冒充服務器與銀行客戶端進行交互,同時冒充銀行客戶端與銀行服務器進行交互,在充當中間人轉發信息的時候,竊取手機號,賬號,密碼等敏感信息。
(4)HTTPS關閉主機名驗證
構造HttpClient時,設置HostnameVerifier時參數使用ALLOW_ALL_HOSTNAME_VERIFIER或空的HostnameVerifier。關閉主機名校驗可以導致黑客使用中間人攻擊獲取加密內容。
(5)開放socket端口
app綁定端口進行監聽,建立連接后可接收外部發送的數據。攻擊者可構造惡意數據對端口進行測試,對于綁定了IP 0.0.0.0的app可發起遠程攻擊。
3.4 日志信息漏洞
(1)調試日志函數調用風險
調試日志函數可能輸出重要的日志文件,其中包含的信息可能導致客戶端用戶信息泄露,暴露客戶端代碼邏輯等,為發起攻擊提供便利,例如:Activity的組件名,是Activity劫持需要的信息;通信交互的日志,會成為發動服務器攻擊的依據;跟蹤的變量值,可能泄露一些敏感數據,輸入的賬號、密碼等。
4.業務邏輯漏洞
4.1 權限漏洞
(1)全局文件可讀寫
APP在創建內部存儲文件時,將文件設置了全局的可讀權限。攻擊者惡意讀取文件內容,獲取敏感信息,或惡意寫文件,破壞完整性。
(2)敏感權限調用
在Manifest文件中調用一些敏感的用戶權限,敏感行為包括發送、攔截短信,讀取、修改通訊錄、通話記錄,撥打電話,發送地理位置,使用攝像頭,訪問瀏覽器歷史記錄等。函數調用這些敏感行為,可能導致用戶隱私數據泄露,釣魚扣費等風險。
(3)冗余權限
如果調用了非必須的權限,就會出現冗余權限,冗余權限可導致串謀攻擊,串權限攻擊的核心思想是程序A有某個特定的執行權限,程序B沒有這個權限。但是B可以利用A的權限來執行需要A權限才能完成的功能。
4.2 業務漏洞
業務漏洞需要依靠機器和人共同檢測,需要根據應用功能作用的不同來進行判斷。機器可以檢測一些通用的業務漏洞,例如廣告、非授權下載、扣費短信等業務,而人工則判斷應用在面向不同業務邏輯時產生的漏洞,例如登錄驗證不完善、不可信的敏感數據交付等。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Android手機App安全漏洞有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。