Android 应用安全 - 应用安全概念
版权归作者所有,转发请注明出处:https://www.jianshu.com/p/d7c942a72e63
Android 应用安全 - 应用安全概览
Android 应用安全 - 移动应用安全
Android 应用安全 - Mobile安全漏洞Top10(OWASP)
Android 应用安全 - 案例
Android 应用安全 - 检测设备是否Root
Android 应用安全 - 加密算法
前言
提高应用的安全性有助于维护用户信任和设备完整性
应用安全概念
1.最小特权
应用应该请求所需要的的最小特权,最小特权会限制攻击者的行为从未尽可能少的利用一些漏洞
- 如果只是需要读取DB,则不需要给予DB写的权限,可能有SQL注入的风险以及删除表的风险
- 如果只是本App使用Service或者Activity,则不需要设置
android:exported="true"
可能会被恶意应用跳转传参从而无法预期行为- 默认拒绝:在构造函数或者权限申请时,除非具备申请权限或者状态的充分必要条件,则默认拒绝此申请或返回失败的状态
2.默认安全
应用的默认配置设置是最安全的设置
- 从一开始安全的设计应用
- 将安全性集成到开发生命周期中
- 严格的密码策略
- 最低权限运行
- 深度防御策略
3.深度防御
通过分层的方法来提高系统的安全性,使攻击者成功的机会减少
- 敏感数据存储在数据库中时会被加密
- 应用程序具有广泛的输入验证
- 使用最新的安全补丁修补主机
- 内部网络被化划分成不同的区域,收到防火墙的保护
- 防火墙将内部边界与互联网分开
- 执行安全评估以检查依存性
4.强大的错误检查
在捕获到系统错误信息时,正确的处理错误信息,做到让攻击者无法拿到错误信息从而对内部系统造成间接分析造成安全问题
- 当意外错误发生时,尽可能少的向外界提供错误信息
- 不应该提供错误的堆栈信息以及IP等敏感数据信息
- 确保系统捕获所有异常,保证应用可以正常运行
5.不信任任何输入的信息
任何外界输入的信息,都必须要做验证,只有通过验证的数据才可以进入系统内部
- 输入信息必须要进行验证,比如从数据库返回的数据需要进行校验
- 操作系统输入验证,比如在get参数中注入shell命令sql语句等
- 对数据进行清除或者进行转义,比如特殊字符 “/” 空格等
6.开放式设计
比如ssh默认使用22端口,在22端口上运行的ssh服务默认是安全的,因为此开放端口是经过设计相对安全的
- 作为一项基本规则,开发人员应该从头开始安全的设计和实施系统
- 不能仅仅依赖透过隐藏问题来实现安全
比如:不要在不必要的地方添加try{}catch(){}
去防止异常结果- 安全和值应该基于已知的开放措施
7.故障时的安全性
失败后确保有安全的处理,比如在出现异常的情况下该如何处理
- 除非用户已明确的接收到应用程序某个部分的权限,否则应该拒绝他们访问
- 所有的操作都应该具有确定的结果
成功 失败 异常
- 为了确保安全性,应该在出现异常的时候使用通用的错误消息
8.在框架或语言中重新使用现有的安全控制措施
使用一些优秀的框架去避免一些问题,重用一些公共安全模块集中处理从而避免分散安全问题
- 设计和实现系统时要谨记简洁性,尽量使用经过验证的库
- 重用经过验证的代码,重用一些设计模式编码风格
9.日志记录
- 需要对一些信息进行记录,以便可以跟踪一些恶意尝试,通过监控IP可以知道账户在哪里被恶意尝试从而定位漏洞
- 不可记录敏感信息(密码等相关的账户信息))
- 使用框架进行日志记录记录关键事件记录安全问题
10.数据保护
敏感信息的保护以及完整性
表面信息的显示
日志的输出
TLS
强加密算法
数据库内容加密
源代码混淆
- 在确定需要的时候再存储用户的个人数据
- 不要硬编码安全相关信息在源代码中
- 不要以纯文本方式存储用户的密钥以及证书信息
- 安全的存储用户信息
- 通过安全通道发送数据流量
- 告知用户已经实施的隐私策略
参考资料:
http://www.owasp.org.cn/
https://mobile-security.gitbook.io
https://mobile-security.gitbook.io/mobile-security-testing-guide/
https://github.com/OWASP/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md
欢迎关注Mike的简书
Android 知识整理