在不安全設備,如被root或解鎖的手機上,運行應用通常會伴隨着一定安全風險,例如被惡意病毒或木馬軟件利用root權限植入病毒、篡改用戶設備信息和破壞系統等。因此,如何做好應用的安全防護、避免在不安全設備環境中產生安全風險,已經成為其開發者必須要考慮的因素。對此,華為開放安全檢測服務,提供系統完整性檢測(SysIntegrity API),可檢測應用運行的設備環境是否安全,如設備是否被root、被解鎖等。
一、服務介紹
華為系統完整性檢測包括以下特點:
-
基於可信執行環境TEE提供系統完整性檢測結果:在設備安全啟動時,在TEE中評估檢測系統完整性,可信度高,並動態評估系統完整性。
-
系統完整性檢測結果安全可信:系統完整性檢測結果經過數字證書簽名,檢測結果不可篡改。
其業務流程圖如下圖所示:
(1) 你的應用集成HMS Core SDK調用Safety Detect service。
(2) 請求TSMS(Trusted Security Management Service)服務器簽名檢測結果Server。
(3) 你的應用請求自己服務檢測結果。
---- 結束
二、場景案例介紹
目前已有金融、娛樂、便捷生活、新聞閱讀等多個領域的App集成了華為系統完整性檢測:
金融類應用集成華為SysIntegrity,可有效提升交易安全性。例如,可以在用戶輸入信用卡安全碼(CVC)時,確認手機的系統環境是否安全。如手機設備未通過系統完整性檢測驗證,則不允許使用該應用,以此保護交易安全:
生活、新聞閱讀類應用,集成SysIntegrity后可有效防止黑客攻擊,確保應用內付費等活動安全:
視頻娛樂類應用集成SysIntegrity,可以幫助保護內容版權;當用戶注冊、觀看和下載離線播放視屏時,可以確保用戶在內容提供商認可的設備上,完成流媒體和視頻播放:
三、開發代碼
1 在AppGallery Connect中配置相關信息
在開發應用前,需要在AppGallery Connect中配置相關信息。
具體操作步驟:https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides-V5/config-agc-0000001050416303-V5
2 配置HMS Core SDK的Maven倉地址
2.1 打開Android Studio項目級“build.gradle"文件
2.2 添加HUAWEI agcp插件以及Maven代碼庫
- 在allprojects-> repositories里面配置HMS Core SDK的Maven倉地址。
1. allprojects {
2. repositories {
3. google()
4. jcenter()
5. maven {url 'https://developer.huawei.com/repo/'}
6. }
7. }
- 在buildscript->repositories里面配置HMS Core SDK的Maven倉地址。
1. buildscript {
2. repositories {
3. google()
4. jcenter()
5. maven {url 'https://developer.huawei.com/repo/'}
6. }
7. }
- 在buildscript ->dependencies里面增加配置。
1. buildscript{
2. dependencies {
3. classpath 'com.huawei.agconnect:agcp:1.3.1.300'
4. }
5. }
3 創建SafetyDetectClient 並生成nonce值
1. // 創建SafetyDetectClient
2. SafetyDetectClient mClient = SafetyDetect.getClient(MainActivity.this);
3. // 生成 nonce值
4. byte[] nonce = new byte[24];
5. try {
6. SecureRandom random;
7. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
8. random = SecureRandom.getInstanceStrong();
9. } else {
10. random = SecureRandom.getInstance("SHA1PRNG");
11. }
12. random.nextBytes(nonce);
13. } catch (NoSuchAlgorithmException e) {
14. Log.e(TAG, e.getMessage());
15. }
4 創建檢測結果監聽
1. // 實現OnSuccessListener接口,並從 onSuccess獲取檢測結果
2. protected class SysIntegrityOnSuccessListener implements OnSuccessListener<SysIntegrityResp> {
3.
4. // 獲取系統完整性檢測結果
5. @Override
6. public void onSuccess(SysIntegrityResp sysIntegrityResp) {
7.
8. }
9.
10 }
11. // 實現OnFailureListener接口,並從 onFailure異常詳情
12. protected class SysIntegrityOnFailureListener implements OnFailureListener {
13. // 獲取異常錯誤碼已經異常詳情
14. @Override
15. public void onFailure(Exception e) {
16.
17. }
18. }
5 調用系統完整性檢測
1. // 調用系統完整性檢測接口,********傳入appid
2. Task task = mClient.sysIntegrity(nonce,"********");
3. task.addOnSuccessListener(new SysIntegrityOnSuccessListener()).addOnFailureListener(new SysIntegrityOnFailureListener());
6 結果驗證
服務器中驗證系統完整性檢測結果可以參考開發者聯盟官網。
如果你對實現方式感興趣,可以參考Github源碼鏈接:https://github.com/HMS-Core/hms-safetydetect-demo-android
更詳細的開發指南,請參考華為開發者聯盟官網:
獲取開發指導文檔:
下載demo和示例代碼請到Github:https://github.com/HMS-Core
解決集成問題請到Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest
原文鏈接:
https://developer.huawei.com/consumer/cn/forum/topic/0201393882637910006?fid=18
作者:晚上吃啥