数据泄漏

  • 本地文件敏感数据不能明文保存,不能伪加密(Base64,自定义算法等)
  • android:allowbackup=false. 防止 adb backup 导出数据
  • Activity intent 的数据泄漏。比如通过 getRecentTask 然后找到对应的intent 拿到数据。
  • Broadcast Intent,自己应用内使用 LocaBroadcast,避免被别的应用收到,或者 setPackage做限制。
  • ClipBorad 数据泄漏。
  • WebView settings setSavePassword(false) 这个会明文保存密码。
  • Log 要关闭,防止重要数据泄漏。使用boolean常量开关 或者 proguard 直接优化。
  • 键盘事件的读取预防,/dev/input/event 可以读取到按键和触屏。键盘建议随机布局自定义。
  • 对于截屏 android5.0以及以后 window.setFlag(LayoutParam.FLAG_SECURE) 禁止录屏。

客户端暴露的攻击面

  • 使用外部数据不进行校验,比如app升级,插件安装等,需要对这些数据进行合法性校验。
  • zip解压目录覆盖风险。zip中允许 ../../file 这样的路径。如果一旦解压到当前目录,有可能覆盖上级目录的文件。
  • Android components 不当暴露,不需要export的需要 exported = false。
  • 本地端口开放问题,socket server。尽量不要开放此接口。如果要的话,也只是bind到 127.0.0.1,不要暴露给局域网,避免局域网内恶意代码扫描端口。另外 app 可以通过 读取proc 通过 端口查看是哪个app连接该端口。(收selinux限制)。另外就是使用此方法不要实现一些特别敏感的功能。
  • 开放组件的 dos攻击。开放的 activity service receiver等需要对传入的intent做合法性校验,以及相关的类型转换保护。防止恶意代码攻击。
  • PendingIntent,不要给第三方app发送PendingIntent。避免数据被修改。

界面的劫持

  • 恶意悬浮框,在我们的app上边覆盖一个悬浮框,误导用户点击不合理的按键。这时候需要设置setFilterTouchesWhenObscured 为 false,被别的窗口覆盖的话,不接受按键。
  • 钓鱼窗口,当用户打开我们的界面时,恶意程序也打开一个类似的钓鱼界面。我们需要在关键的界面 onPause的时候 做必要的检查,比如看看栈顶是不是自己的界面。(5.0以后受限制?)
  • ContentProvider sql 注入。参数中包含恶意sql;– 。最简单的是做 sql参数校验。
  • ContentProvider openFile 便利目录风险。

Webview远程方法调用漏洞

  • 4.2以下手机 addJavaScriptInterface 会导致漏洞。js通过 getClass 后获取java 类,然后调用相关函数。系统自己带一个 searchbox_xxx 需要自己移出掉。

不安全的网络通信

  • 中间人攻击。
  • 敏感数据不要明文传输。
  • 恶意wifi可以通过 kali linux 很简单的创建。在商场进行钓鱼。
  • 加密算法
    • RC4 已经过时,不推荐使用。
    • SHA256 最好,不推荐md5 sha1
    • RSA 要 2048 bit,要 padding。
    • 对称加密密钥不要放在代码中。可以协商后保存在本地加密存储。
    • AES 不要使用 ECB 模式,初始化向量不要使用固定的常量。
    • SecureRandome 不要使用setSeed(),使用也不要传入固定值
  • https 中间人攻击
    • cookie 要设置为 secure(secure flag),否则该cookie会在 http会话中传输。
    • 不要使用 SSLv3以及更低版本
    • 在程序中不要自己处理证书相关的校验。
  • SSL证书校验
    • webview onReceivedSslError后 不要自己做什么处理。
    • android 系统中有时候某些手机证书不全,但是也不能忽略该证书错误。
    • 不要覆盖 Trustmanager. checkServerTrusted 不要重写。
    • HostNameVerifier 不要重写。不要不校验 hostname。
  • 如何处理呢?
    • 通过TrustManagerFactory 导入证书。
    • 证书绑定。就是我只认这个证书。自己做 veriry。成本最低。证书可以是自签名的。 # 二进制攻击 #
  • 各种黑产QQ群论坛等,看雪论坛。
    • 重新打包,插入恶意代码
    • 逆向分析
    • 运行时debug,修改数据等
  • 工具
    • apktool,dex2jar, JEB
    • IDA pro (查看 so 代码,F5 汇编转c代码)
    • xposed,Cydia substrate 注入框架
  • 防护
    • 理论上没有100%有效的地域二进制攻击的方法。
    • 但是为啥还要这么做呢?提高门槛,提高成本,提高他的利益成本(有这时间他可以去找些软柿子赚钱去)
    • proguard做混淆
  • 安全性校验
    • 检查apk有没有被修改
    • 检查签名(不靠谱,此处代码可以被修改)。但是有比没有强。黑产都是些批量自动化的,可以防止一些。
    • 增加难度
      • 放在 native代码中
      • 多点检查
      • 检查的代码不要放在退出点,放在比较隐蔽的地方。然后后边别的地方再退出程序。
      • 和网络请求结合,传参数到server,server返回不合法数据等。
  • 反调试,反注入
    • debuggable = false
    • Debug.isDebuggerConnected 进行检查。
    • 监控 JDWP 线程(hook socket,进行数据过滤)
    • 多进程ptrace保护。进程只能被ptrace一次。(多个进程间需要pipe通信监控ptrace进程是否退出,监听到,主程序也退出)
    • 检查tracerPid,被trace后为不为0(也可以被绕过)
    • 检查 gdb android_server gdbserver 是否在手机上(可改名)
    • 检查 xposed框架是否在运行。
    • 检查是否被 hook(java,GOT, inline)
    • 检查设备是否被root或者是在 emulator上运行。
    • 检查 jailbreak(iOS)
  • 字符串混淆加密
    • java native中的字符串都要做混淆。代码放在 native 层。
    • 隐藏native层的函数名, dlsym
    • obfuscator-llvm 混淆 natived代码。支持 SUB FLA BCF 等几种模式。
  • 其他native保护
    • so 中检查签名
    • jni函数名混淆
    • 删除所有不需要 export 的符号。编译选项中设置。
    • elf tricks,设置一些数据让工具 crash。
    • so整体加密。加壳。开源的 upx。
    • 特定函数加密。
  • 应用加固
    • 非定制化方案,无混淆,无字符串加密。
    • hook系统代码,等,有比较大的兼容性问题。
    • 影响启动速度。
    • 无 so 层保护。

自动化扫描工具

  • 360捉虫猎手

app自动检查上报机制

  • 检测到恶意攻击,上报给服务器,可以了解风险面。

Android app security安全问题总结的更多相关文章

  1. [转]设计一款Android App总结

    开发工具的选择 开发工具我将选用Android Studio,它是Google官方指定的Android开发工具,目前是1.2.2稳定版,1.3的预览版也已经发布了.Android Studio的优点就 ...

  2. 【Android开发】如何设计开发一款Android App

    本文从开发工具选择,UI界面.图片模块.网络模块.数据库产品选择.性能.安全性等几个方面讲述了如果开发一个Android应用.现在整理出来分享给广大的Android程序员. 开发工具的选择 开发工具我 ...

  3. 假设让我又一次设计一款Android App

    转载请注明出处: 本文来自aspook的博客:http://blog.csdn.net/ahence/article/details/47154419 开发工具的选择 开发工具我将选用Android  ...

  4. 【转载】Android app 安全测试调研及执行

    本文来源于:http://testerhome.com/topics/2209 一.通过在线工具进行测试 1.腾讯金刚审计系统http://service.security.tencent.com 优 ...

  5. 跨过几个坑,终于完成了我的第一个Xamarin Android App!

    时间过得真快,距离上次发随笔又是一年多.作为上次发的我的第一个WP8.1应用总结的后继,这次同样的主要功能,改为实现安卓版APP.前几个月巨硬收购Xamarin,把Xamarin集成到VS里了,大大方 ...

  6. 【转】can't find referenced method 'android.app.RemoteInput[] getRemoteInputs()' in class android.app.Notification$Action

    原文网址:http://stackoverflow.com/questions/25508735/cant-find-referenced-method-android-app-remoteinput ...

  7. wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法

    wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...

  8. android app demo

    package jczb.shoping.model; import java.io.Serializable; import android.R.string; //登录所需要的字段信息 publi ...

  9. Android App 安全的HTTPS 通信

    漏洞描述 对于数字证书相关概念.Android 里 https 通信代码就不再复述了,直接讲问题.缺少相应的安全校验很容易导致中间人攻击,而漏洞的形式主要有以下3种: 自定义X509TrustMana ...

随机推荐

  1. records.config文件参数解释

    # Process Records Config File # # <RECORD-TYPE> <NAME> <TYPE> <VALUE (till end ...

  2. JAVA常用知识点总结---集合篇

    一.Collection 与 Collections的区别:1. Collections:java.util.Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例 ...

  3. win7 重装 docker 启动后无法启动错误解决

    描述 win7 重新安装Docker 后启动  Docker Quickstart Terminal 出现如下错误 Starting "default"... (default) ...

  4. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  5. bzoj 4826: [Hnoi2017]影魔 [主席树 单调栈]

    4826: [Hnoi2017]影魔 题意:一个排列,点对\((i,j)\),\(p=max(i+1,j-1)\),若\(p<a_i,a_j\)贡献p1,若\(p\)在\(a_1,a_2\)之间 ...

  6. POJ 1625 Censored! [AC自动机 高精度]

    Censored! Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9793   Accepted: 2686 Descrip ...

  7. 如何使用 scikit-learn 为机器学习准备文本数据

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被称为标记化的单词.然后,这些词还需要被编码为整型或浮点型,以用作 ...

  8. VScode离线安装插件

    VScode离线插件的转移 需求:换台电脑用VScode 找到插件安装路径 在本地找.vscode的文件夹,里面的extensions文件夹里都是下载的插件 复制发给其他电脑 在vscode首选项-- ...

  9. opencv-python与c++ opencv中的一些区别和基础的知识

    使用opencv-python一段时间了,因为之前没有大量接触过c++下的opencv,在网上看c++的一些程序想改成python遇到了不少坑,正好在这里总结一下. 1.opencv 中x,y,hei ...

  10. Windows Server 2012开启多人远程

    首先在Server Roles中选择Remote Desktop Services,然后在Role Services中安装Remote Desktop Session Host 安装完成后需要重启机器 ...