专栏首页渗透云笔记Android APP安全防护总结

Android APP安全防护总结

1. 资源混淆(从文件资源下手)

使用Lint对无用资源进行清理,而Lint则可以检查所有无用的资源文件,只要使用命令./gradlew lint或者在Android Studio工程中点击Analyze->Inspect Code,选择Whole Project点击ok就行。它在检测完之后会提供一份详细的资源文件清单,并将无用的资源列在“UnusedResources: Unused resources” 区域之下。只要你不通过反射来反问这些无用资源,你就可以放心地移除这些文件了。

https://www.jianshu.com/p/3ba16f34bba9 -- AndResGuard教程 https://github.com/shwenzhang/AndResGuard -- AndResGuard项目 https://www.cnblogs.com/lsdb/p/9340761.html https://blog.csdn.net/wei11556/article/details/83275469

2. 代码混淆(从代码优化)

提高代码可读性,使得程序更加难以理解。此方法基本都要做,用的最多的当Proguard莫属。

https://www.jianshu.com/p/e9d3c57ab92f?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq Android 代码混淆 混淆方案

3. 签名校验

检查APP中自己写入的私钥hash值与当前签名中的私钥hash值是否相一致。一致则说明APP没有被改动,允许APP运行;不一致则说明APP被二次打包,APP就自我销毁进程。

签名验证可以在两个地方做,一个是在MainActivity.java的OnCreate函数中做,一个是在原生代码文件的JNI_OnLoad函数中做。

https://www.cnblogs.com/lsdb/p/9340761.html

4. 反调试

第一:因为一个进程同时最多只能被一个进程所调试,那么我们就给自己附加进程,假装自己在调试自己,占住调试位置,用该方法来拒绝别的进程的调试请求。

第二:轮训检查自身status中的TracerPid字段值,如果发现TracerPid的值不等于0则代表有进程在调试,就要杀死自己。

第三:签名校验是不可或缺的一个选择,本地校验(前端)和服务器端校验双管齐下。

第四:借助系统API判断应用调试状态和调试属性,这是最基础最基本的防护。

第五:轮训检查Android_server调试端口信息和进程信息, 防护IDA动态调试的一种有效方式。

http://www.520monkey.com/archives/1000

5. 组件安全

四大组件的安全防护其实无非就是访问权限控制。

在创建组件时,如果是私有的组件,android:exported属性一律设置为false。如果是公有的,就设置android:exported为true。不管公有的还是私有的组件,处理接收的intent时都应该进行验证的数据验证。公有组件防止信息泄露和接收外部数据时进行严格的处理。如果对私有组件没有进行相应的配置,可能导致组件被其他程序调用,敏感信息泄露,拒绝服务器攻击和权限绕过等漏洞。

这里对LocalBroadcastManager说明一下,其基于Handler实现的,拥有更高的效率与安全性。安全性主要体现在数据仅限于应用内部传输,避免广播被拦截、伪造、篡改的风险。但是LocalBroadcastManager不支持Sticky、order特性,多线程并发性能不高,在某些需要后注册Receiver也可以收到信息的特殊需求无法实现。

6. WebView的代码执行漏洞

WebView远程代码执行相关的漏洞主要有CVE-2012-6336、CVE-2014-1939、CVE-2014-7224,这些漏洞中最核心的漏洞是CVE-2012-6336,另外两个CVE只是发现了几个默认存在的接口,下面就具体说明这些漏洞的情况。

CVE-2012-6336 Android <= 4.1.2 受影响

CVE-2014-1939 Android <= 4.3.1 受影响

CVE-2014-7224 Android <= 4.4.0 受影响

可以发现其实都是些低版本系统漏洞,目前已经发展到Android 10了,理论上说不存在WebView漏洞,属于老漏洞。修复方法就是升级最新系统版本。

7. 加固:360加固、梆梆加固、网易加固、腾讯乐固

8. 编码安全

编码安全就是反编译,反编译不好防,只能提高破解难度,例如加固、混淆、so文件函数加密等等。反编译后能干什么?当然是二次开发,冒充正版植入广告或者恶意程序,一旦有用户下载了山寨版的,那么就有极大概率获取手机的控制权限及本人的敏感信息。

9. 使用HTTPS链接

避免被恶心的运营商劫持,插入广告,影响用户体验。(比如我爱我家APP被挂博彩),我觉得这个很有必要,不仅仅是因为安全,包括微信公众号,googleplay 都在强制要求开发者必须使用HTTPS。(这里为什么运营商会搞鬼呢,因为运营商看你的网站或者APP量大,想利用你的流量做广告推广,可能就几分钟)

10. 密码明文保存漏洞

由于WebView默认开启密码保存功能,所以在用户输入密码时,会弹出提示框,询问用户是否保存。若选择保存,则密码会以明文形式保存到/data/data/com.package.name/databases/webview.db中,这样就有被盗取密码的危险。所以我们应该禁止网页保存密码,设置WebSettings.setSavePassword(false)。

11. 防抓包分析,两个方案:

A. System.getProperty("http.proxyHost");System.getProperty("http.proxyPort");//正常这两行代码获取的是null,如果返回不为空,就是挂代理了,那么就可以考虑是否给数据了。

B. System.setProperty("key","value");

https://www.jianshu.com/p/4a99f524e0dc 具体解释可以看看这篇文章,这里不做过多笔墨,前辈们已经总结得很好。

12. 数据存储安全

A. 隐藏数据存储位置

B. 存储内容不要使用明文

C. 代码中禁止硬编码重要信息内容

D. 存储到手机内部存储上

13. 慎重使用allowBackup属性,设置是否支持备份,默认值为true,如无必要,将值设置为false,避免应用内数据通过备份造成的泄露问题。

14. 自定义键盘

关于这一点,其实笔者不知道此做法对安全性有多大作用,我也特意去下载了一些热门应用做调查,发现还是比较多APP应用使用手机自带的或默认的键盘,所以笔者不清楚其危害性有多大,个人觉得可有可无。若是各位师傅们对此理解深切,希望纠正~

15. 账号与设备绑定

如果发现与常用设备不符合,增加短信登录形式进行重新登录。此做法笔者觉得很有效防止任意用户登录。

16. 将classes.dex哈希值存放在服务器端

为了防止被破解,软件发布时的classes.dex哈希值应该存放在服务器端。

17. 检测手机是否root

如果root了,就禁止某些核心功能。

检测是否root代码

18. 检测手机是否装Xposed

若是检测到有则隐藏核心功能模块。代码可以看看简书的这篇文章

https://www.jianshu.com/p/c37b1bdb4757

Android防护手段都有很多,具体还要结合业务的实际情况进行加固,毕竟产品的安全性和性能都同时兼顾是很难做到的,我们需要在这两者之间做平衡。

本文分享自微信公众号 - 渗透云笔记(shentouyun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker可视化管理工具

    本次是在Centos7上安装portainer 首先搜索一下Docker Hub上的portainer镜像

    天钧
  • [干货]Python渗透测试工具库

    天钧
  • HW弹药库之红队作战手册

    上个月5月9号发了两个HW红方弹药库的,今天再来发一个红队作战人员手册,我大概看了看手册里面的exp零组文档包含了很多,

    天钧
  • jcaptcha配置验证码

    public static final String SESSION_ID = "JSESSIONID";

    HUC思梦
  • spring 引入uploadify控件时的302与406

    302 302错误是由于spring拦截器造成的,需要将上传图片的controller不进行session验证即可 406 406是由于请求json头造成,解决...

    听城
  • 工业时代的管理理论在“互联网+”时代过时了!

    我们来回顾一下工业时代的那些重要的企业管理理论和经济理论,这些理论创造了伟大的企业,这些伟大的企业也为管理创新创造了卓越的成绩如通用电气使用管理原理来解决科研混...

    华章科技
  • AnimatedList 介绍及使用

    AnimatedList提供了一种简单的方式使列表数据发生变化时加入过渡动画,AnimatedList实现“左进右出”动画效果如下:

    老孟Flutter
  • 连连看(深度优先搜索+剪枝)- HDU 1175

    “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经...

    ACM算法日常
  • 响应防疫远程办公,国家统计联网直报呼叫中心开通在线服务

    ? 2020年伊始,一场突如其来的肺炎疫情在全国迅速蔓延。 面对当前严峻的疫情形势,为了避免呼叫中心服务人员集中办公引起交叉感染、响应居家远程办公的号召,...

    腾讯企点
  • 【作业】结对编程纪实

    在Graph类上,我们封装了SimpleChainModel和WordChainModel两个类,用于对图论的构图,计算,数据调度等行为进行底层封装。

    HansBug

扫码关注云+社区

领取腾讯云代金券