Camille
Android App隱私合規檢測輔助工具,項目倉庫:https://github.com/zhengjim/camille
簡介
現如今APP隱私合規十分重要,各監管部門不斷開展APP專項治理工作及核查通報,不合規的APP通知整改或直接下架。camille可以hook住Android敏感接口。根據隱私合規的場景,輔助檢查是否符合隱私合規標准。
安裝
環境:
環境:
python3、frida 、一台已root手機(我測試機為Redmi 3s,刷機成魔趣Android 8.1,感覺問題挺多的),並在手機上運行frida-server。
測試了Android 8.1(還測試了魔趣Android 10),其他版本安卓可能會有bug。
2022-01-14:刪除hook短信接口。新增:可指定模塊hook或不hook哪些模塊。默認不傳,全掃描。
2022-06-22:修復程序異常退出、冗余度高、hook接口不全有遺落、新增多個Android版本接口;封裝hook方法,新增用戶自定義hook方法。
下載:
git clone https://github.com/zhengjim/camille.git
cd camille
pip install -r requirements.txt
python camille.py -h

用法
簡單使用:
python camille.py com.zhengjim.myapplication

com.zhengjim.myapplication為測試app的包名,會顯示時間、行為和調用堆棧。可以根據場景來判斷是否合規,如:獲取敏感信息是否是在同意隱私政策之前等。
python camille.py com.zhengjim.myapplication -ns -f demo01.xls
- -ns:不顯示日志。默認顯示
- -f: 保存app行為軌跡到到execl里。默認不保存。

python camille.py com.zhengjim.myapplication -t 3
- -t: hook應用自己的函數或含殼時,建議使用setTimeout並給出適當的延時(1-5s,需要根據不同app進行調整)。以免hook失敗。默認不延遲。
如下圖:不加延遲hook失敗。

加了延遲hook成功。

- -u: 掃描指定模塊。與命令
-nu互斥。多個模塊用','隔開。例如:phone,permission
模塊列表:
| 模塊名 | 備注 |
|---|---|
| permission | 申請權限 |
| phone | 電話、基站 |
| system | 系統信息(AndroidId/標識/content敏感信息) |
| app | 其他app信息 |
| location | 位置信息 |
| network | getNetwork |
| camera | 照相機 |
| bluetooth | 藍牙 |
| custom | 用戶自定義接口 |
- -nu:跳過掃描指定模塊。與命令
-u互斥。多個模塊用','隔開。例如:phone,permission 模塊列表同上
自定義hook接口
在script.js文件里的customHook方法里可自行添加需要hook的接口。
如hookcom.zhengjim.myapplication.HookTest類的getPassword和getUser方法。如下:
hook('com.zhengjim.myapplication.HookTest', [
{'methodName': 'getPassword', 'action': action, 'messages': '獲取zhengjim密碼'},
{'methodName': 'getUser', 'action': action, 'messages': '獲取zhengjim用戶名'},
]);
-u custom是只檢測自定義接口,如圖:

后記
本來想使用uiautomator2或appium來模擬點擊制定場景,但后續調研發現純自動化的檢測是不全的,最多也就檢測20-30%,還是得結合人工來檢測。索性就刪除了模擬點擊這塊。(其實就是懶,不定期更新)
場景
參考百度史賓格的檢測場景,根據工信部信管函〔2020〕164號文(共37項),需要人工自查的有11項
網站:https://console.bce.baidu.com/springer (現在1.2元/次,挺划算的,嫌麻煩的直接用就行。 已經1000元/次)
1 APP、SDK違規處理用戶個人信息方面
1.1 違規收集個人信息。重點整治APP、SDK未告知用戶收集個人信息的目的、方式、范圍且未經用戶同意,私自收集用戶個人信息的行為。
- 場景1:APP未見向用戶明示個人信息收集使用的目的、方式和范圍,未經用戶同意,存在收集IMEI、設備MAC地址和軟件安裝列表、通訊錄和短信等信息的行為。
- 場景2:APP以隱私政策彈窗的形式向用戶明示收集使用規則,未經用戶同意,存在收集設備MAC地址、IMEI等信息的行為。
- 場景3:APP以隱私政策彈窗的形式向用戶明示收集使用規則,但未見清晰明示APP收集軟件列表、設備MAC地址等的目的方式范圍,用戶同意隱私政策后,存在收集軟件列表、設備MAC地址的行為。
- 場景4:APP未見向用戶明示SDK收集使用個人信息的目的、方式和范圍,未經用戶同意,SDK存在收集IMEI、設備MAC地址和軟件安裝列表、通訊錄和短信等信息的行為。
- 場景5:APP向用戶明示SDK的收集使用規則,未經用戶同意,SDK存在收集IMEI、設備MAC地址和軟件安裝列表、通訊錄和短信等信息的行為。
- 場景6:APP向用戶明示SDK的收集使用規則,但未見清晰明示SDK收集設備MAC地址、軟件安裝列表等的目的方式范圍,用戶同意隱私政策后, SDK存在收集設備MAC地址、軟件安裝列表的行為。
- 場景7:APP在征求用戶同意環節,未提供明確的同意或拒絕按鈕,或者使用“好的”“我知道了”等詞語。
- 場景8:APP在征求用戶同意環節,設置為默認勾選。
1.2 超范圍收集個人信息。重點整治APP、SDK非服務所必需或無合理應用場景,特別是在靜默狀態下或在后台運行時,超范圍收集個人信息的行為。
- 場景1(人工自查):APP存在收集IMEI、IMSI、設備MAC地址、軟件安裝列表、位置、聯系人、通話記錄、日歷、短信、本機電話號碼、圖片、音視頻等個人信息的行為,非服務所必需且無合理應用場景。
- 場景2:APP在運行時,未見向用戶告知且未經用戶同意,存在以特定頻率(如每30s)讀取收集IMEI、IMSI、設備MAC地址、軟件安裝列表、位置、聯系人、通話記錄、日歷、短信、本機電話號碼、圖片、音視頻等個人信息,非服務所必需且無合理應用場景,超出實現產品或服務的業務功能所必需的最低頻率。
- 場景3(人工自查):APP未見向用戶明示SDK的收集使用規則,未經用戶同意,SDK存在收集IMEI、IMSI、設備MAC地址、軟件安裝列表、位置、聯系人、通話記錄、日歷、短信、本機電話號碼、圖片、音視頻等信息的行為,非服務所必需且無合理應用場景,超出與收集個人信息時所聲稱的目的具有直接或合理關聯的范圍。
- 場景4:APP在運行時,未見向用戶告知且未經用戶同意,存在每2秒讀取一次IMEI、位置信息等,非服務所必需且無合理應用場景,超出實現產品或服務的業務功能所必需的最低頻率。
- 場景5:APP未見向用戶告知且未經用戶同意,在后台行為時,存在收集 IMSI、設備序列號等信息的行為,非服務所必需且無合理應用場景,超出與收集個人信息時所聲稱的目的具有直接或合理關聯的范圍。
- 場景6:APP未見向用戶告知且未經用戶同意,在靜默狀態下或在后台運行時,存在按照一定頻次收集位置信息、IMEI、通訊錄、短信、圖片等信息的行為,非服務所必需且無合理應用場景,超出與收集個人信息時所聲稱的目的具有直接或合理關聯的范圍。
- 場景7:APP未向用戶明示SDK的收集使用規則,未經用戶同意,SDK在靜默狀態下或在后台運行時,存在收集通訊錄、短信、通話記錄、相機等信息的行為,非服務所必需且無合理應用場景,超出與收集個人信息時所聲稱的目的具有直接或合理關聯的范圍。
- 場景8:APP未向用戶明示SDK的收集使用規則,未經用戶同意,SDK在靜默狀態下或在后台運行時,存在按照一定頻次收集位置信息、IMEI、通訊錄、短信、圖片等信息的行為,非服務所必需且無合理應用場景,超出與收集個人信息時所聲稱的目的具有直接或合理關聯的范圍。
1.3 違規使用個人信息。重點整治APP、SDK未向用戶告知且未經用戶同意,私自使用個人信息,將用戶個人信息用於其提供服務之外的目的,特別是私自向其他應用或服務器發送、共享用戶個人信息的行為。
- 場景1:APP未向用戶明示個人信息處理的目的、方式和范圍,將IMEI、IMSI、設備MAC地址、軟件安裝列表、位置、聯系人、通話記錄、日歷、短信、本機電話號碼、圖片、音視頻等個人信息發送給第三方SDK等產品或服務。
- 場景2:APP未見向用戶明示分享的第三方名稱、目的及個人信息類型,用戶同意隱私政策后,存在將IMEI/設備MAC地址/軟件安裝列表等個人信息發送給第三方SDK。
- 場景3(人工自查):APP未向用戶告知且未經用戶同意,將設備識別信息、商品瀏覽記錄、搜索使用習慣、軟件安裝列表等個人信息傳輸至APP服務器后,向第三方產品或服務提供其收集的個人信息。
1.4 強制用戶使用定向推送功能。重點整治APP、SDK未以顯著方式標示且未經用戶同意,將收集到的用戶搜索、瀏覽記錄、使用習慣等個人信息,用於定向推送或廣告精准營銷,且未提供關閉該功能選項的行為。
- 場景1:APP的頁面或功能存在定向推送功能,但隱私政策未見向用戶告知,將收集的用戶個人信息用於定向推送、精准營銷。
- 場景2(人工自查):若APP定向推送功能使用了第三方的個人信息來源,但隱私政策未見向用戶告知。
- 場景3(人工自查):APP隱私政策存在“根據您的偏好進行個性化推薦”等內容,明示存在定向推送功能,但頁面中未見顯著區分個性化推送服務,如標明“個性化展示”或“定推”等字樣。
- 場景4(人工自查):APP以隱私政策彈窗等形式明示存在定向推送功能,未提供退出或關閉個性化展示模式的選項,如拒絕接受定向推送信息,或停止、退出、關閉相應功能的機制。
2 設置障礙、頻繁騷擾用戶方面
2.1 APP強制、頻繁、過度索取權限。重點整治APP安裝、運行和使用相關功能時,非服務所必需或無合理應用場景下,用戶拒絕相關授權申請后,應用自動退出或關閉的行為。重點整治短時長、高頻次,在用戶明確拒絕權限申請后,頻繁彈窗、反復申請與當前服務場景無關權限的行為。重點整治未及時明確告知用戶索取權限的目的和用途,提前申請超出其業務功能等權限的行為。
- 場景1:APP首次啟動時,向用戶索取電話、通訊錄、定位、短信、錄音、相機、存儲、日歷等權限,用戶拒絕授權后,應用退出或關閉(應用陷入彈窗循環,無法正常使用)。
- 場景2(人工自查):APP運行時,未向用戶告知申請權限的目的,向用戶索取當前服務場景未使用到的通訊錄、定位、短信、錄音、相機、日歷等權限,且用戶拒絕授權后,應用退出或關閉相關功能,無法正常使用。
- 場景3(人工自查):用戶注冊登錄時,APP向用戶索取電話、通訊錄、定位、短信、錄音、相機、存儲、日歷等權限,用戶拒絕授權后,APP無法正常注冊或登錄。
- 場景4(人工自查):APP運行時,向用戶索取當前服務場景未使用到的電話、通訊錄、定位、短信、錄音、相機、存儲、日歷等權限,且用戶拒絕授權后,應用退出或關閉(應用陷入彈窗循環,無法正常使用)。
- 場景5:APP運行時,在用戶明確拒絕通訊錄、定位、短信、錄音、相機、日歷等權限申請后,仍向用戶頻繁彈窗申請與當前服務場景無關的權限,影響用戶正常使用。
- 場景6: APP在用戶明確拒絕通訊錄、定位、短信、錄音、相機等權限申請后,重新運行時,仍向用戶彈窗申請開啟與當前服務場景無關的權限,影響用戶正常使用。
- 場景7:APP首次打開或運行中,未見使用權限對應的相關功能或服務時,不應提前向用戶彈窗申請開啟通訊錄、定位、短信、錄音、相機、日歷等權限。
- 場景8(人工自查):APP未見提供相關業務功能或服務,不應申請通訊錄、定位、短信、錄音、相機、日歷等權限。
2.2 APP頻繁自啟動和關聯啟動。重點整治APP未向用戶告知且未經用戶同意,或無合理的使用場景,頻繁自啟動或關聯啟動第三方APP的行為。
- 場景1:APP未向用戶明示未經用戶同意,且無合理的使用場景,存在頻繁自啟動或關聯啟動的行為。
- 場景2:APP雖然有向用戶明示並經用戶同意環節,但頻繁自啟動或關聯啟動發生在用戶同意前。
- 場景3:APP非服務所必需或無合理應用場景,超范圍頻繁自啟動或關聯啟動第三方APP。
3 欺騙誤導用戶方面
3.1 欺騙誤導用戶下載APP。通過“偷梁換柱”“移花接木”等方式欺騙誤導用戶下載APP,特別是具有分發功能的移動應用程序欺騙誤導用戶下載非用戶所自願下載APP的行為
- 場景1:APP 廣告頁面、開屏廣告、主屏等功能頁面,無顯著APP下載提示,點擊即自動下載非用戶所自願下載APP。
- 場景2:APP 廣告頁面、開屏廣告、主屏等功能頁面,以“是否立即開始游戲”方式欺騙誤導用戶自動下載非用戶所自願下載APP。
- 場景3:APP 廣告頁面、開屏廣告、主屏等功能頁面,以“領取紅包”方式欺騙誤導用戶自動下載非用戶所自願下載APP。
- 場景4:APP 廣告頁面、開屏廣告、主屏等功能頁面,點擊“下載按鈕“以外區域,自動下載非用戶所自願下載APP。
- 場景5(人工自查):暫停下載非用戶所自願下載APP,關閉並重新運行本APP后,自動恢復下載被暫停的非用戶所自願下載的APP。
- 場景6(人工自查):APP 廣告頁面、開屏廣告、主屏等功能頁面,通過設置關閉障礙等方式欺騙誤導強迫下載非用戶所自願下載APP。
- 場景7(人工自查):APP 廣告頁面、開屏廣告、主屏等功能頁面,下載的APP與向用戶所作的宣傳或者承諾不符。
3.2 欺騙誤導用戶提供個人信息。
- 行為表現:非服務所必需或無合理場景,通過積分、獎勵、優惠等方式欺騙誤導用戶提供身份證號碼以及個人生物特征信息的行為。
