目录

前序    2

什么是SafetyNet校验?    2

Safetynet工作原理    2

监控及校验内容    2

实现方式    3

参考文献:    4

前序

由于近年来Android支付应用的兴起,一些人在root过的手机上发现该类支付性质的应用无法使用。原来,google针对app的安全性推出了Safetynet验证服务。该服务可以为Android设备的app运行安全提供一个相对比较高的标准。

什么是SafetyNet校验?

说白了,她就是一个google play里的一个service,在Android2.3及以上版本可用,专门为了搜集Android设备信息(主要是安全相关),并对其进行身份核验,不过,这里的身份主要就是设备的"运行身份",比如:设备是否root过,设备运行环境是否安全等,然后核验信息反馈给相应设备。当然,既然是google play的东西,我们在国内如果不借助翻墙软件的话是无法使用的,且SafetyNet会通过google play市场不断的更新。下面就简要介绍下其运行原理

Safetynet工作原理

首先,应用程序连接到google服务器,发送校验请求(注意,这里的请求包含一个随机数):

com.google.android.gms.safetynet.SafetyNetApi;->attest(mGoogleApiClient, nonce)

上面attest方法属于google play SDK中的方法,该方法通过binder机制调用下面SafetyNet服务

com.google.android.gms.safetynet.internal.ISafetyNetService

这样就调用到了SafetyNet服务。

然后,google将校验结果反馈给应用程序,结果是JES(JSON Web Signature)的格式(一种JSON实体),包括各种签名以及结果标志"ctsProfileMatch"(true/false)。

最后,开发者(一般是应用所对应的服务端)对google反馈的结果进行校验,需要注意的是,这里也可以继续借助google服务器进行校验。

如果校验通过,即"ctsProfileMatch"为true,则表明该设备的运行状态是安全的。

监控及校验内容

SafetyNet有自己的一套复杂的校验标准,且这些标准都是符合"CTS compatibility"测试标准的,但该校验标准,google是没有公开的,原文如下:

Google does not disclose how exactly it determines "CTS compatibility" based on the collected data. For much of this data it is not very obvious what would constitute 'safe' and what not. For example, if Google collects a list of all the paths of files in the filesystem, an attacker would have to figure out what to hide by trial and error. Even though he would be able to make educated guesses, he wouldn't know what exactly Google is looking for.

主要校验内容每个版本不一样,每个版本都有所更新,主要包括如下内容:

  • default_packages

检查设备当前安装的应用包,特别检查其浏览器是否是com.android.browser或者com.android.chrome

  • su_files

检查/system/bin/su or /system/xbin/su文件是否存在,如果存在,则标志着该设备root了,运行环境可被攻击。

  • settings

从android.provider.Settings$Secure或者android.provider.Settings$Global搜集安全相关的设置值,比如:adb_enabled, install_non_market_apps, isKeyguardSecure(), getNotificationVisibility(), lock_screen_lock_after_timeout, lockscreen.password_type, lock_pattern_autolock.

locale

搜集设备中的本地配置情况

  • ssl_redirect和ssl_handshake

ssl相关

  • proxy

IP相关

  • selinux_status

检查selinux状态,是否使用

  • sd_card_test

检测sd卡是否被攻击

  • logcat

执行logcat -d指令,这里google可以将所有log上传至他们的服务器

......

此外还有很多被监控搜集的模块,这里不一一列举。具体可以参见参考文献中的《SafetyNet: Google's tamper detection for Android》及《Inside SafetyNet - part 2》《Inside SafetyNet - part 3》部分。

实现方式

这里对比参考文献中的《Using the SafetyNet API》简要说明:

假设你的app是一个可以连接远程服务端的应用,通过下面几种实现模式的对比,即可大致了解到SafetyNet服务如何使用,具体过程这里不再解析。

没有使用SafetyNet服务的普通app模式:

这里是传统app的实现方式,直接与服务端交互,没有前面的安全校验部分。

如下两种情况使用了SafetyNet服务,但第一种实现方式缺少了前面与远程服务端的握手校验,以及把google反馈的结果在服务端进行校验,所以这种实现方式不够安全。

不安全地使用了SafetyNet服务:

安全的使用SafetyNet方式:

参考文献:

  • SafetyNet: Google's tamper detection for Android——https://koz.io/inside-safetynet/
  • Inside SafetyNet - part 2——https://koz.io/inside-safetynet-2/
  • Inside SafetyNet - part 3——https://koz.io/inside-safetynet-3/
  • Using the SafetyNet API——https://www.synopsys.com/blogs/software-security/using-safetynet-api/
  • com.google.android.gms.safetynet——https://developers.google.com/android/reference/com/google/android/gms/safetynet/package-summary
  • Protecting against Security Threats with SafetyNet——https://developer.android.com/training/safetynet/index.html

SafetyNet简要梳理相关推荐

  1. 初识SafetyNet简要梳理

    目录 前序    2 什么是SafetyNet校验?    2 Safetynet工作原理    2 监控及校验内容    2 实现方式    3 参考文献:    4 前序 由于近年来Android ...

  2. zookeeper简要梳理

  3. SAP销售发票中容易出现的科目确定过账问题的简要分析

    在SAP销售业务中,遇到过做销售发票时,出现"acct determin error" 财户确定错误.通常遇到该问题,专业顾问会了解,其原因可能是在销售发票中信息不全,导致过账时, ...

  4. Muduo网络库核心梳理

    Muduo网络库 Muduo网络库本身并不复杂,是一个新手入门C++面向对象网络编程的经典实战项目.但是,新手在刚刚上手读代码的时候,非常容易陷入代码的汪洋大海,迷失方向.本文旨在简要梳理Muduo网 ...

  5. attention seq2seq transformer bert 学习总结 _20201107

    https://blog.csdn.net/weixin_44388679/article/details/102575223 Seq2Seq原理详解 一文读懂BERT(原理篇) 2018年的10月1 ...

  6. AI芯片的“战国时代”:计算力将会驶向何方?

    CSDN 出品的<2018-2019 中国人工智能产业路线图>V2.0 版即将重磅面世! V1.0 版发布以来,我们有幸得到了诸多读者朋友及行业专家的鼎力支持,在此表示由衷感谢.此次 V2 ...

  7. 为了研究因果关系,原来科学家在这么多方向上都有尝试(附链接)

    来源:集智俱乐部 本文约3500字,建议阅读8分钟 本文尝试整理近年来关于因果推断的代表性研究,梳理出几个典型的探索方向. [ 导读 ]自从休谟喊出"因果是人类的错觉",科学家就再 ...

  8. 倒下的RoadStar结局来了:VC清盘止损,三位创业者承担1亿债务,打着官司各投林...

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 因利而聚,以内讧而亡. 中国倒下的第一家无人驾驶公司RoadStar(星行科技),最近有了一系列结果. 项目遭投资方清盘,合伙人相互诉告有 ...

  9. Spark-1.6.0之Application运行信息记录器JobProgressListener

    JobProgressListener类是Spark的ListenerBus中一个很重要的监听器,可以用于记录Spark任务的Job和Stage等信息,比如在Spark UI页面上Job和Stage运 ...

最新文章

  1. 视频+课件| PointDSC:基于特征匹配的点云配准方法(CVPR2021)
  2. c语言指针中冒号的用法,在c中使用冒号后面的类名
  3. Java中的定制国际化(i18n)
  4. LeetCode 1874. 两个数组的最小乘积和
  5. JFrog Artifactory 7.27 上传应用到私服和从maven私服下载制品
  6. ubuntu16.04安装teamviewer12
  7. 详解Python生成器函数和生成器对象的原理和用法
  8. 计算机组装与维护心得体会作文,《计算机维护与局域网建设》学习心得
  9. batocera整合包_模擬器作業系統RetroPie更新至4.6,支援Raspberry Pi 4、新增NeoGeo CD模擬功能...
  10. java实现活动安排问题_贪心算法-活动安排问题
  11. [Hadoop] - Win7下提交job到集群上去
  12. PulseAudio安装流程
  13. 功能安全专题之端到端(E2E) 的通信保护
  14. 2023跨境出海指南:马来西亚网红营销白皮书
  15. 基于深度学习下的稳定学习究竟是什么?因果学习?迁移学习?之一
  16. 3D建模一个月的真实收入,当作副业在家就能月入过万?
  17. LORA1276/1278 CAD检测功能测试
  18. 历年百度搜索风云榜小说年度冠军,2019年元尊、圣墟、剑来大PK
  19. Involution论文解读:从卷积变换出的神经网络新算子
  20. JaveSE 17 Java基础语法 → 注释奇怪的注释

热门文章

  1. 【W5500】STM32 H743驱动W5500进行UDP收发
  2. 桥接模式: Bridge
  3. NYOJ - [第九届河南省程序设计大赛]Decimal integer conversion(暴力)
  4. 计算机行业未来20年前景,未来20年,哪个专业最有“前景“?符合一定要报
  5. IIS 端口netstat -ano命令
  6. uni-app 从本地相册选择图片或使用相机拍照
  7. 中航重机 600765
  8. 微信扫码登录,微信公众号生成二维码,关注登录nodejs+vue
  9. html日历页面节假日_js css+html实现简单的日历
  10. python -m的那些实用功能