移動APP安全漏洞(原理/場景/修復)

待補充

反編譯

0x01 漏洞描述

APK文件是安卓工程打包的最終形式,將apk安裝到手機或者模擬器上就可以使用APP。反編譯apk則是將該安卓工程的源碼、資源文件等內容破解出來進行分析。

0x02 漏洞危害

攻擊者通過反編譯可獲取應用安卓客戶端應用的源代碼,攻擊者可根據源代碼獲取對應接口信息,加密算法、密鑰,以及一些硬編碼在代碼中的其他敏感信息,從而進行進一步攻擊。

0x03 修復意見

  • 使用市面上安卓加固的廠商對安卓APP進行加固,比如360、梆梆等。

安裝包簽名

0x01 漏洞描述

Android系統要求安裝的應用必須用數字證書進行簽名後才能安裝,並且簽名證書的私鑰由應用開發者保存。簽名證書的生成也由開發者自己生成。在應用安裝時會校驗包名(package name)和簽名,如果系統中已經存在了一個相同的包名和簽名的應用,將會用新安裝的應用替換舊的;如果包名相同但是簽名不同,則會安裝失敗。

應用簽名完後在應用的META-INF目錄下會有三個文件: CERT.RSA、CERT.SF和MANIFEST.MF。

 

MANIFEST.MF中保存了所有其他文件的SHA1摘要並base64編碼後的值。

CERT.SF文件是對MANIFEST.MF文件中的每項中的每行加上“\r\n”後,再次SHA1摘要並base64編碼後的值(這是爲了防止通過篡改文件和其在MANIFEST.MF中對應的SHA1摘要值來篡改APK,要對MANIFEST的內容再進行一次數字摘要)。

CERT.RSA文件:包含了簽名證書的公鑰信息和發佈機構信息。

 

0x02 漏洞危害

簽名信息中包含的組織信息,將便於用戶識別安裝包的真僞。

0x03 修復意見

  • 在應用程序發佈時使用企業簽名對安裝包進行簽名。

應用完整性

0x01 漏洞描述

客戶端若未進行應用完整性校驗,經二次打包後的Android APP,破解後植入惡意代碼重新打包。不管從性能、用戶體驗、外觀它都跟正規APP一模一樣但是背後它確悄悄運行着可怕的程序,它會在不知不覺中浪費手機電量、流量,惡意扣費、偷窺隱私等等行爲。

0x02 漏洞危害

  • 插入自己廣告或者刪除原來廣告;
  • 惡意代碼,惡意扣費、木馬等;
  • 修改原來支付邏輯;

0x03 修復意見

  • 在應用發佈時使用360、梆梆等安全廠商進行安全加固。
  • 對簽名文件中classes.dex哈希值的校驗

可參考下列文章:

android APK安全性校驗

Android防重簽名和二次打包

Android 應用防止被二次打包指南

任意數據備份

0x01 漏洞描述

Android屬性allowBackup安全風險源於adb backup允許任何一個能夠打開USB 調試開關的人,從Android手機中複製應用數據到外設,一旦應用數據被備份之後,所有應用數據都可被用戶讀取,adb restore允許用戶指定一個恢復的數據來源(即備份的應用數據)來恢復應用程序數據的創建。

因此,當一個應用數據被備份之後,用戶即可在其他Android手機或模擬器上安裝同一個應用,以及通過恢復該備份的應用數據到該設備上,在該設備上打開該應用即可恢復到被備份的應用程序的狀態。

0x02 漏洞危害

當allowBackup標誌爲true時,用戶即可通過adb backup和adb restore來進行對應用數據的備份和恢復。

尤其是通訊錄應用,一旦應用程序支持備份和恢復功能,攻擊者即可通過adb backup和adb restore進行恢復新安裝的同一個應用來查看聊天記錄等信息;對於支付金融類應用,攻擊者可通過此來進行惡意支付、盜取存款等;

0x03 修復意見

  • 設置android:allowBackup值爲false。

 

 

程序可被調試

0x01 漏洞描述

當在 AndroidManifest.xml文件中設置 android:debuggable="true"時,應用程序可以以調試模式啓動,並被任意調試器附加調試。

0x02 漏洞危害

客戶端若設置了可被動態調試時,增加了apk被破解、分析的風險。

目前動態調試器的功能都很強大,如果debuggable屬性爲true,則可輕易被調試,通常用於重要代碼邏輯分析、破解付費功能等。

0x03 修復意見

  • 在應用發佈時,不要將android:debuggable的值改爲ture。

 

Root環境檢測

0x01 漏洞描述

Android安全架構是基於Linux多用戶機制的訪問控制。在Linux操作系統中,root的權限是最高的,也被稱爲超級權限的擁有者。在系統中,每個文件、目錄和進程,都歸屬於某一個用戶,沒有用戶許可其它普通用戶是無法操作的,但對root除外。

root用戶的特權性還表現在:

  • 對文件或目錄進行讀取、修改或刪除;
  • 對可執行程序的執行、終止;
  • 對硬件設備的添加、創建和移除等;
  • 對文件和目錄進行屬主和權限進行修改,以適合系統管理的需要;
  • root是超越任何用戶和用戶組的,基於用戶ID的權限機制的沙盒是無法隔離的。

0x02 漏洞危害

攻擊者可在root的終端上對應用程序進行動態調試、內存訪問篡改、Hook應用程序與服務端交互流量等。

0x03 修復意見

3.1 查看系統是否爲測試版

可以查看發佈的系統版本,是test-keys(測試版),還是release-keys(發佈版)。

可是在實際情況下,也有某些廠家的正式發佈版本也是test-keys

3.2 檢查是否存在Superuser.apk

Superuser.apk是一個被廣泛使用的用來root安卓設備的軟件,所以可以檢查這個app是否存在。

3.3 檢查su命令

su是Linux下切換用戶的命令,在使用時不帶參數,就是切換到超級用戶。通常我們獲取root權限,就是使用su命令來實現的,所以可以檢查這個命令是否存在。

3.4 執行busybox

BusyBox集成壓縮了 Linux 的許多工具和命令,所以若設備root了,很可能Busybox也被安裝上了。

3.5 訪問/data目錄,查看讀寫權限

在Android系統中,有些目錄是普通用戶不能訪問的,例如 /data/system/etc等。

可以以/data爲例,來進行讀寫訪問。先寫入一個文件,然後讀出,查看內容是否匹配,若匹配,才認爲系統已經root了。

具體代碼可參考:

Android root檢測方法小結

 

 

模擬器環境檢測

0x01 漏洞描述

安卓模擬器是一種可以運行在電腦上的虛擬設備,通過它可以實現應用的跨平臺操作,讓移動端APP無需任何改動即可在PC上執行。

模擬器作爲一種虛擬機,配合改機工具,能夠以較低成本實現設備多開,因此而備受黑灰產的青睞。

0x02 漏洞危害

  • 可利用PC端其他輔助工具完成對移動端應用的支持,如通過按鍵精靈完成自動掛機等操作。

  • 通過模擬器多開功能,零成本體驗同時多部手機、多個賬戶開小黑屋,實現刷單、薅羊毛。

  • 通過模擬器虛擬定位僞造真實地理位置。
  • 。。。

0x03 修復意見

在客戶端代碼中增加模擬器檢測代碼。

模擬器的檢測秉持一句話:抓取特徵值與真機比較。

可參考下列文章:

Android模擬器檢測體系梳理

檢測Android虛擬機的方法和代碼實現

 

代理環境檢測

0x01 漏洞描述

APP客戶端通過宿主機與服務器進行流量交互,攻擊者可通過設置Wi-Fi、網卡代理進行中間人劫持,抓取通信過程中的流量包,進行進一步分析利用。

0x02 漏洞危害

攻擊者可利用Charles、fiddler、BurpSuite等抓包工具,抓包分析網絡流量及api接口信息,從而進一步分析相關接口、參數等安全問題。

0x03 修復意見

  • 檢查是不是用了Http代理,如果是,客戶端不發送網絡請求;
  • 通過Okhttp設置默認代理;

代碼可參考:

Android檢測代理

SQLite敏感信息

0x01 漏洞描述

ndroid中有些時候會將一些隱私數據存放在sqlite數據庫中,在root過的手機中通過RE就能夠輕鬆的打開並查看數據庫所有內容。

0x02 漏洞危害

SQLite不支持加密,應用中重要的數據、賬號密碼等容易被泄露。

0x03 修復意見

3.1 加密數據庫內容

在存儲數據時加密內容,在查詢時進行解密。但是這種方式不能徹底加密,數據庫的表結構等信息還是能被查看到,另外檢索數據也是一個問題。

3.2 加密數據庫文件

藉助SQLCipher。SQLCipher是一個在SQLite基礎之上進行擴展的開源數據庫,它主要是在SQLite的基礎之上增加了數據加密功能。

  • 加密性能高、開銷小,只要5-15%的開銷用於加密
  • 完全做到數據庫100%加密
  • 採用良好的加密方式(CBC加密模式)
  • 使用方便,做到應用級別加密
  • 採用OpenSSL加密庫提供的算法

LogCat敏感信息

0x01 漏洞描述

在 Android 中有一種名爲 LogCat 的日誌機制,不僅系統日誌信息,還有應用日誌信息也會輸出到LogCat。

開發人員通常會通過打印出的日誌信息來分析、定位問題。如果對外發布版本的時候,忘記關閉相關的日誌打印。LogCat 中的日誌信息可以從同一設備中的其他應用中讀出,敏感信息不應輸出到LogCat,因此向Logcat輸出敏感信息的應用,被認爲具有信息泄露的漏洞。

0x02 漏洞危害

攻擊者通過調試可獲取到logcat輸出的敏感信息,造成敏感信息泄漏

0x03 修復意見

  • 在發行版應用中,最好不要輸出任何日誌。

  • 爲了APP的錯誤採集,異常反饋,必要的日誌如要被輸出,需遵循安全編碼規範將風險控制在最小範圍內

具體代碼及實現請參考:

 

硬編碼敏感信息

0x01 漏洞描述

信息安全的基礎在於密碼學,而常用的密碼學算法都是公開的,加密內容的保密依靠的是密鑰的保密,密鑰如果泄露,對於對稱密碼算法,根據用到的密鑰算法和加密後的密文,很容易得到加密前的明文;對於非對稱密碼算法或者簽名算法,根據密鑰和要加密的明文,很容易獲得計算出簽名值,從而僞造簽名。

若將加密密鑰、數據庫連接信息、後臺信息等敏感信息硬編碼在Java代碼、文件中,將導致敏感信息泄漏,造成更大危害。

0x02 漏洞危害

硬編碼敏感信息泄漏,造成的安全問題一般無法被輕易修正。例如:

  • 在代碼中泄露利用未指定賬戶的硬編碼密碼,這樣遠程攻擊者獲取到敏感信息,可以通過訪問數據庫獲得管理控制權限;
  • 本地用戶可以通過讀取配置文件中的硬編碼用戶名和密碼來執行任意代碼;

0x03 修復意見

  • 使用市面上安卓加固的廠商對安卓APP進行加固,比如360、梆梆等。
  • 使用DexGuard
  • 對敏感信息進行僞裝或者加密
  • 敏感信息隱藏在原生函數庫中(.so文件)

可參考下列文章:

Android安全開發之淺談密鑰硬編碼

關於Android敏感信息

 

通信加密

0x01 漏洞描述

在開發應用程序時,最好將網絡請求限制爲必要的網絡請求。對於必要的,請確保它們是通過HTTPS而不是HTTP製作的。HTTPS是一種加密流量的協議,因此竊聽者無法輕易攔截它。

多年來,HTTPS協議已被多次利用。雖然可以使用HTTPS的方式保證與服務端加密傳輸,但是我們仍然可以通過網卡、wifi代理、Hook等方式劫持未加密的流量數據包。

0x02 漏洞危害

攻擊者通過嗅探、中間人劫持等手段可獲取到客戶端與服務端的交互數據包,從而能夠進行數據流量分析與篡改,進行進一步的攻擊。

0x03 修復意見

通信加密需採用兩種手段同時加固:

3.1 使用HTTPS加密傳輸

3.2 對數據包進行加密,比如使用AES等

 

鍵盤記錄

0x01 漏洞描述

在應用軟件在運行時,用戶在設備上的一舉一動都將被詳細記錄下來,更多的是在使用者毫無覺察的情況下將屏幕內容以圖片的形式、按鍵內容以文本文檔的形式保存在指定的文件夾或發送到指定的郵箱。鍵盤記錄,包括物理按鍵與軟鍵盤的監控,通常監控的事件有:點擊,長按,滑動等,這些時間在Android上表現出來的都是一系列的KeyEvent。

0x02 漏洞危害

客戶端應用程序若未針對鍵盤記錄保護增加相關安全策略,攻擊者可將記錄下來的鍵盤記錄發送到指定郵箱或post到指定網頁。

0x03 修復意見

  • 建議使用自定義隨機的軟鍵盤;

  • 對輸入框打碼處理

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章