APP安全

作者: LeoFranz | 来源:发表于2019-10-11 15:55 被阅读0次

安全

1、两个大方向展开——

在引进SEAndroid安全机制之前,Android系统的安全机制分为应用程序和内核两个级别。应用程序级别的安全机制就是我们通常说的Permission机制。一个应用如果需要访问一些系统敏感或者特权资源,那么就必须要在AndroidManifest.xml配置文件中进行申请,并且在安装的时候由用户决定是否赋予相应的权限。应用安装过后,一般是通过系统服务来间接使用系统敏感或者特权资源的。这样系统服务在代表应用使用这些资源之前,就会先检查应用之前是否已经申请过相应的权限。如果已经申请过,那么就直接放行,否则的话,就拒绝执行。
内核级别的安全机制就是传统的Linux UID/GID机制。在Linux中,每一个用户都拥有一个用户ID,并且也有一个用户组ID,分别简称为UID和GID。此外,Linux系统的进程和文件也有UID和GID的概念。Linux就是通过用户、进程、文件的UID/GID属性来进行权限管理的。

几个实际开发中常见维度

1、混淆代码
加强版的混淆是用DexGuard
2、Log清理
利用BuildConfig.DEBUG判断是否是release版本,如果是就要去掉部分log

数据存储——文件加密,禁止将敏感信息保存在外存,contentProvider限制export属性或者限制在同签名应用之间流通
1、应用内存保护
要为敏感数据提供额外的保护,您可以选择使用该应用无法直接访问的密钥来对本地文件进行加密,并使用未存储在相应设备上的用户密码加以保护。不过,如果攻击者获得超级用户权限,就可以在用户输入密码时进行监控,数据也就失去了这层保护屏障
2、外部存储
由于任何应用和用户都能读写其中的内容,就不能将敏感信息保存在外存中
3、contentprovider
如果不暴露数据,就设置export为false,如果只限制数据在具备相同签名的应用之间流通,就将android:protectionLevel改为signature级别。

数据库安全——敏感信息不要明文存储
SQLCipher——一个开源库,是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能

Activity安全——设置为显式intent调用,或者在intent中添加extra判断调用者来源
设置私有activity
私有activity不能由其他应用程序启动,因此它是最安全的。当一个activity只在本APP内部使用时,只要将activity声明为显式intent调用方式,那么就不需要担心其他应用程序调用开启。
然而,有一个风险是第三方APP可以读取一个开启activity的intent。因此,为了避免第三方应用程序读取Intent来复制intent,我们可以在intent中放置一些extra做判断,避免第三方应用程序调用。
一个私有activity必须做到的关键几点如下:
1)不声明taskAffinity
2)不声明launchMode
3)设置exported属性为false
4)保证intent发送时的安全性,确定intent是来自本应用程序(签名验证和包名验证)
5)在确保是本应用程序发送Intent的时候,可以防止一些敏感信息
6)启动activity的时候不设置FLAG_ACTIVITY_NEW_TASK
7)使用显示的intent和指定的类的方式来调用一个activity
8)敏感信息放在extra中发送
9)在onActivityResult的时候需要对发挥的data小心处理

私有BroadCastReceiver——使用显式intent,exported为false,不添加intent filter
私有广播的几个关键点如下:
1)不添加intent-filter
2)exported属性为false,不接受其他应用广播
3)广播处理完毕后要终止掉广播
4)发送广播时候使用显示intent

网络安全——更新加密提供程序,添加三方库支持
要更新加密提供程序,您需要包含Google Play服务。在build.gradle的模块文件中,将以下行添加到dependencies部分:
implementation 'com.google.android.gms:play-services-safetynet:15.0.1'
该安全网服务API还有更多的功能,包括安全浏览 API,检查的网址,看看他们是否已被标记为已知威胁,以及验证码 API,以防止垃圾邮件和其他恶意流量您的应用程序。

数字签名
APP开发者使用私钥,以证书的形式对APP进行签名。
对关键的代码或者数据进行数字签名验证,可以有效的降低apk被篡改带来的风险。

组件访问权限
http://wangkuiwu.github.io/2014/07/06/ContentProvider-Permission/
可以对不同安卓组件contentprovider、activity、service设置自定义权限,让调用者必须具备权限。

其他
使用安全键盘防止木马替换键盘而记录用户输入信息
短信验证,最好是做60秒倒计时。

参考:
https://zhuanlan.zhihu.com/p/55902235
https://www.jianshu.com/p/0eb6df1e9c4d

相关文章

  • 对 iOS app 进行安全加固

    对 iOS app 进行安全加固 对 iOS app 进行安全加固

  • iOS APP 如何做才安全

    iOS APP 如何做才安全 iOS APP 如何做才安全

  • app安全

    http://m.blog.csdn.net/u013409903/article/details/76686155

  • App安全

    移动端App安全主要涉及客户端本身数据安全,客户端到服务端网络传输的安全,客户端本身安全又包括代码安全和数据存储安...

  • app安全

    今天把白金尊享的app交给了阿里聚安全检测(这绝对不是推广,我知道有很多检测网站和工具,但是我是听说了阿里有提供安...

  • APP安全

    安全 1、两个大方向展开—— 在引进SEAndroid安全机制之前,Android系统的安全机制分为应用程序和内核...

  • app安全

    转:https://www.zhihu.com/question/61899720/answer/38238474...

  • 01 APP安全基础

    1 APP常见漏洞与对策 1.1 APP安全趋势总结 软件安全演变为信息安全 信息安全离大众越来越近 信息安全越来...

  • iOS开发/App安全/代码自动混淆<笔记>

    iOS开发/App安全/代码自动混淆<笔记> iOS开发/App安全/代码自动混淆<笔记>

  • App安全之网络传输安全问题

    App安全之网络传输安全问题 移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到...

网友评论

      本文标题:APP安全

      本文链接:https://www.haomeiwen.com/subject/uwlxyctx.html