android程序安全注意点
转自:http://www.taobaotesting.com/blogs/2336
编写android短信安全程序项目中的安全注意点
云林 发表于:2013-01-10 浏览:7633次 评论:3次 所属分类:安全测试 有幸参加了淘宝网组织的工程师之夜第二轮无线之夜, 与boss铁花和乔倩同学一起做了个 短信的收读程序 , 重点在体现安全性上, 在程序过程中有点小收获,记录于此, 第一次做完整的android 程序, 没看什么参考,单纯个人理解 ,这里的安全我分三块,APK反编译、activity安全,数据库安全。
APK反编译, 在APK反编译上,我们使用了淘宝两套反编译工具, 一套代码保护,一套DEX文件保护,使用通过So文件加载, 以及不能被反编译的Dex文件 等,由于涉及到淘宝产品安全, 具体就不细讲了 。
activity 安全,在这一块上我们做了几个内容,
- 第一个是所有程序入口必须是输入密码界面,用户不能从其他方式进入到程序的其他activity中
使用方法:
- 所有activity 在intent 跳转之后,必须finish ,一开始程序即是这么设计,后来发现,这样写用户体验会非常不好,在程序中,用户一旦点返回就会整个退出程序,后面改了操作, 在程序中intent 跳转 不 finish , 一旦activity 要跳转到输密码的 activity , 不论从哪儿过来, 输密码的activity 都会结束所有activity 并 直接 kill 进程, 这样下次用户进来之后 ,必须先进入输入密码的activity中
- 还有一种情况是用户在 内部 页面,点击 home 键,回退到页面 ,在进入程序, 这时我们可以在 onResume 方法中查看如果intent没有特定参数带入或没有intent(内部跳转的intent会顺带来一个 带加密参数的intent),那么即跳转到 main页面,要求输入密码
- 总之概括一句话, 不论用户如何退出,都会结束所有activity 后在退出 ,即下次再进来会要求输入密码
2. 第二所有intent 必须带加密参数才容许跳转
在程序内部传递, 或通知栏信息进入的时候, 必须带上指定的加密参数, 才容许跳转,否则重新调回到主页面,要求输入密码 。这块主要是放 伪造通知栏信息 进入程序内容页面
3. 第三是在main 页面,onStart(),方法中查看当前 activity 栈中 第一个activity 是否是程序的activity , 如果不是,根据activity 生命周期的看法, back前的activity 很可能是攻击者的activity在获取你的密码 。这个是防activity劫持的基础
4 . 所有 intent 均为点对点跳转, 不使用广播事件。为了防止 intent 事件被监听
5 . (在manifest文件中将所有activity 设置为android:launchMode="singleTask" 并且不配置 main filter ,作用是 用户按home 键退出之后 ,在进入肯定回到首屏,这个方法其实有点点问题,不合符google的开发规范, 建议谨慎使用,另一个方法, 建议在onStop方法中 finish 这样也方便)1 和 5 的作用是 不论用户如何退出,都会结束所有activity 后在退出 ,即下次再进来会要求输入密码 ,这个具体怎么做 参考另一篇博文http://www.taobaotest.com/blogs/2337
1 2 3 4 点 加起来, 基本可以防止activity劫持的情况,这点我各种测试中验证了一把, 是可行的。 这一块上,也只是测试 ,希望有想法的同学给我留言,探讨下
数据库安全
1 、 防暴力破解
对于爆破而言,我们需要做的是如何缓解攻击者的破解时间,该程序采用的方法是如果输错密码 ,即会退出程序,需要在点击图标进入,这样尝试一个密码,至少需要2s , 按照我上回8位 数字密码 爆破 每秒 300-500次 破解,需要35个小时才能遍历完毕的速度, 如果用户设置一个6位 纯数字密码, 攻击者要暴力破解,则至少需要400d 。
2 、用户名和密钥绑定
加解密的密钥设置为通过用户密码几次转码后得到, 跟随用户密码动态绑定,如果用户密码更改, 那么加密内容也必须重新拿出来解密后在加密
3 、防止数据库注入
防止数据库注入,所有操作均使用sqllite 的封装函数, 并且对search函数中的参数做强制类型转义
2点 的作用体现在,即使攻击者攻破一台手机, 也无法使用 该台手机的密钥去做第二台的破解,另外,就算攻击者拿到了数据库, 把密码字段删除后,也无法通过重置密码来获取短信内容 。
更多相关文章
- Android(安卓)framework——Activity的启动和创建
- Android学习笔记(四)——通过剪切板传递数据
- Android(安卓)Studio 4.0 稳定版全方位详解
- Android(安卓)NDK学习笔记(一) 初识NDK
- android 2.3 StrictMode 使用
- android activity 属性解释
- 个人帐号密码信息管理(PAPIM)软件构想
- Android中的数据库
- 如何为Android,Mac和Windows平台创建Java JNI动态链接库