首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
移动开发
> 详细
Android app security安全问题总结
时间:
2016-05-12 23:13:43
阅读:
432
评论:
0
收藏:
0
[点我收藏+]
标签:
数据泄漏
本地文件敏感数据不能明文保存,不能伪加密(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安全问题总结
标签:
原文地址:http://blog.csdn.net/zhangcanyan/article/details/51347691
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
关闭苹果IOS app自动更新
2021-07-29
开发一个即时通讯App
2021-07-28
iOS 跳转App Store进行评分
2021-07-26
诺基亚短信生成!太好玩了
2021-07-26
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
2021-07-26
Android系统编程入门系列之界面Activity响应丝滑的传统动画
2021-07-26
uniapp h5,app两端复制文本
2021-07-22
uni-app滚动视图容器(scroll-view)之监听上拉事件
2021-07-21
新型横向移动工具原理分析、代码分析、优缺点以及检测方案
2021-07-19
Android系统编程入门系列之界面Activity交互响应
2021-07-19
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!