App上架应用市场,如何攻破安全过检难题
App的安全过检与众所熟知的安全检测是两个完全不同的概念。首先App行业本身对App安全过检有一定的要求与规范,其次2017年6月1日正式实施的《中国网络安全法》中就曾要求App在渠道上线时进行实名认证,同时还要完成相应的安全检测。App这一上线过程就称为安全过检或者叫做安全候审。
App安全过检过程中遇到哪些问题
App在具体过检时所参考的一个细则就是《移动应用安全检测基本要求》,这个要求总共分为四大类,其中包括应用层、网络层、数据层以及服务器端。而安卓App本身的一些安全点,总共分为十个,分别是程序代码安全、程序代码防护、密码与安全策略、权限与界面安全、动态调试检测、SO注入检测、内存数据保护、隐私与存储安全、日志泄漏检测、通信数据安全等。
一、程序代码安全
第一块与用户信息收集要求相关。APP上架时对用户信息收集是有一定要求的,收集用户信息就明确相关的法律声明以及相关隐私政策。假如App没有获取用户隐私数据,但是使用了三方平台去收集,这个也要声明清楚App使用了哪个三方平台去收集用户数据,收集用户数据的目的等。

上图就是我们常见的一个APP展示页面,虽然大部分用户没有仔细阅读过以上信息,但是法律声明及隐私政策的展示是收集用户信息的硬性要求。
第二块与调用系统权限检测相关。调用系统权限需要遵循权限最小原则,同时App申请的权限要遵守用户的同意。
第三块是源代码的安全性,上架APP要给用户提供正常服务,而且不存在恶意特征行为。
二、程序代码防护
App开发者要具备基本的安全开发意识,要时刻关注App有没有打错包、有没有采用代码混淆技术,有没有基本的防反编译能力以及能不能在某一种程度上防篡改。
第一个混淆是指客户端是否采用了代码混淆技术;
第二个防反编译是指能够阻止三方逆向工具进行逆向反编译或者通过加固特征进行反编译;
第三个防篡改是指App在运行时完整性校验防篡改机制,防二次打包,修改后重新打包运行闪退即可通过。
三、密码与安全策略

密码与安全策略需要用户输入账号密码登录的APP,尤其是金融类App,在输入账号密码时需要防止三方程序捕获或截获或者是截屏,这就需要APP有一定的键盘保护。防键盘记录SDK,就是当用户输入账号密码时,通过SDK来展示键盘供用户输入,这个SDK必须要求每次启动时所显示的字符序列是不一样的,这样才会被认为是通过的,是合格的。
四、权限与界面安全
程序数据备份需要查看AndroidManifest.xml中是否设置allowBackup标志(默认为true)或将allowBackup设置为true。如果为true时应用程序数据可以备份和恢复。
界面劫持是在账号密码输入的时候,除了键盘输入的字符会被截获之外,恶意程序也可能会提供一个假的界面,覆盖账号输入的页面上去,伪造一个登录页面,普通用户无法甄别登录页面的真伪,所以很可能会被钓鱼。这样的程序有一个要求,当对它进行测试的时候也会提供一个假的界面,这时App要弹出相关风险提示。
还有一个是截屏录屏,有些恶意程序不去拦截字符输入,因为密码输入的一瞬间字符是出现的,当输入下一个密码字符时上一个字符才会变成星号,有些恶意程序也会用到这种截屏录屏的技术。
值得一提的是,目前还没有什么专门针对Activity劫持的防护方法,因为这种攻击是用户层面上的,目前还无法从代码层面上根除。
但是我们可以适当的在App中给用户一些警示信息,提示登录或关键界面已被覆盖,具体解决方案如下:
在App的Activity界面(也就是MainActivity)中重写onKeyDown方法和onPause方法,当其被覆盖时,就能够弹出警示信息。判断程序进入后台是不是由用户自己触发的(触摸返回键或HOME键),如果是用户自己触发的则无需弹出警示,否则弹出警示信息。
五、动态调试检测
防动态调试基本上是通过ptrace方式进行判断,当应用被检测机构打回时,机构会给相关修复建议,修复建议里面会提到一些解决方案。
如果进程被附加处于调试状态,则/etc/$(procID)/status中进行procid的判断,如果进程id不为零则直接杀死本进程退出。如果进程被附加处于调试状态,则/etc/self/status中对TracerPid后面的进程ID进行判断,如果进程id不为零则直接杀死本进程退出,创建子进程,子进程对其进行ptrace,但不对子进程ptrace,互相检查ptrace状态;同时还要互相检查进程是否被挂起。

APK一旦被调试,APP异常退出,阻断调试
当然也可以用三方的加固成品来进行实现,有些加固可能做的动态是比较完善的话也能够实现这一点。
通过对App进行加固,采用加固方案加固App,防止App被动态调试。
六、SO注入检测
SO注入,在App例案里面破解手法是比较多的,无论是从linker服务还是dlopen服务,SO注入是比较实用的技能。SO搭配上so库技术,可以很方便分析应用程序的一些逻辑以及App所要达到的一些效果。
SO注入的防范方法主要包括以下三点:
1、对dlopen函数进行的判断,修改linker中的dlopen函数,防止第三方so加载。
2、定时检测应用加载的第三方so库,如果发现是被注入的so,卸载加载的so。
3、对被测系统进行加固,防止被测系统被动态注入第三方so。

七、内存数据保护
防dump
dump实际就是内存数据的读,防dump就是防内存被第三方程序读,可以利用类似如下命令dump进程内存:dd if=/proc/3039/mem of=/data/local/tmp/dump_mem.zip skip=1979047936 ibs=1 count=1490944。监控/proc/pid/mem、/proc/tid/mem等文件的读写操作,当这些文件被第三方程序访问时,触发设置的回调函数,并做进一步处理。
防内存修改
内存数据的修改就是内存数据的写,原理同防dump。配合防注入、防调试等方法,最终实现防内存修改。
八、隐私与存储安全
本地数据存储是否泄露信息检测:xml、db文件是否明文存储;日志信息是否安全检测;
1.不要将密码等敏感信息存储在Shared Preferences等内部存储中,应将敏感信息进行加密后存储。
2.避使用MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE模式创建进程间通信的文件,此处即为Shared Preferences。




九、通讯数据安全
敏感数据是否加密传输检测:网络抓包 敏感数据是否加密;
对加密信道的安全性检测(包含中间人攻击检测等)HTTPS通信协议;
建议:被测系统客户端在与服务器端通信应使用SSL等协议加密传输敏感信息。
自定义实现的X509TrustManager子类中,未对服务器端证书做验证,默认接受任意服务端证书,会存在安全风险。 被测系统忽略服务器端证书校验错误或信任任意证书,容易导致中间人攻击,可能造成用户敏感信息泄露。
在客户端对服务器端证书校验的checkServerTrusted方法中对证书进行校验。
十、其他漏洞检测
WebView漏洞:客户端App 是否使用webview 组件的接口函数addJavascriptInterface,是否存在远程代码执行漏洞。
组件引起漏洞检测
鉴权机制缺陷检测
SQL 注入漏洞检测
跨站脚本攻击(xss)漏洞检测
阿里云oss 凭证泄露漏洞检测
Struts2 漏洞检测
App上架应用市场,如何攻破安全过检难题的更多相关文章
- (转))iOS App上架AppStore 会遇到的坑
iOS App上架AppStore 会遇到的坑 前言:非原创 文章摘自:http://zhuanlan.zhihu.com/100000PM/20010725 相信大家一定非常「深恶痛疾」AppS ...
- ios app 上架AppStore
一.证书的导出 1.1 前期工作 首先你需要有一个苹果的开发者帐号,一个Mac系统. 如果没有帐号可以在打开http://developer.apple.com/ ...
- 关于APP上架制作二维码相关
1.安卓版本APP上架并生成二维码问题:安卓版本上架国内市场,这个情况比较复杂一些,比如百度,网址是以上传APP生成的一个编号来进行的,每次升级更新后都发生了变化,也就相当于每次升级后网址发生改变(比 ...
- Android App上架流程
想要把APP上架到应用市场都要先注册开发者账号才可以.这里的方法包括注册帐号和后期上架及一些需要注意的问题.注意:首次提交应用绝对不能随便删除,否则后面再提交会显示应用APP冲突,会要求走应用认领流程 ...
- iOS App上架流程(2016详细版)
iOS App上架流程(2016详细版) 原文地址:http://www.jianshu.com/p/b1b77d804254 感谢大神整理的这么详细 一.前言: 作为一名iOSer,把开发出来的Ap ...
- iOS-最全的App上架教程
App上架教程 心情有没有好一点 在上架App之前想要 真机测试的同学 请查看iOS- 最全的真机测试教程 里面包含怎么让多台电脑同时 上架App和同时真机调试.P12文件的使用详解 因为最近更新了X ...
- [Windows Phone] APP上架,遇到错误2001的解决方案。(Error:2001)
[Windows Phone] APP上架,遇到错误2001的解决方案.(Error:2001) 问题情景 最近在开始玩Windows Phone的开发,开发的过程中虽然有点小挫折,但是参考网络许多前 ...
- iOS app 上架的流程与注意点
这里整理了两个关于苹果应用商店上架方面的资料: 一个是app上架的流程,里面包含各个环节的截图,比较详细. 流程介绍链接 (提取码:52a4) 第二个是app上架的一些注意点,这里面主要说的是上架 ...
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...
随机推荐
- Gitlab的安装及项目新建
1. Gitlab的安装及仓库创建 1.1下载gitlab安装包 1).官网下载速度较慢 建议先行下载 国内的源里面可以找到最新的版本https://mirrors.tuna.tsinghua.edu ...
- "双非"应届生校招如何获得大厂青睐?(内附技术岗超全求职攻略)
写在前面的话 笔者从17年的2月份开始准备春招,其中遇到不少坑,也意识到自己走过的弯路.故写了这篇文章总结一番,本文适合主动学习的,对自己要学的课程不明确的,对面试有恐惧症的...等将来打算从事技术岗 ...
- s遇到错误不要慌,教你方法走四方
我觉得不管是新手还是老手,他们都会出错,有些错误控制台会报错,而有些错误控制台不会报错 面对不会报错的时候,就有一些人烦恼,不知道怎么办了,久而久之,就失去了对学习的乐趣. 所以我在这里说一下对错误处 ...
- 前端之JavaScript内容
一.JavaScript概述 1.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnv软件中),后将其改名ScriptEas ...
- Python操作SQLAchemy
如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle
https://beta.atcoder.jp/contests/abc075/tasks/abc075_d 题意: 给出坐标平面上n个点的坐标,要求找到一个面积最小的矩形使得这个矩形的边界加上内部的 ...
- Java Servlet(十一):一个servlet被10个浏览器客户端访问时会创建几个servlet实例?
一般Servlet只初始化一次(只有一个实例).对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给该方法.如此重复以 ...
- hdu1050 Moving Tables---贪心
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1050 题目大意:就说有一些桌子需要从某些房间搬到另一些房间,但中间只有一条走廊,且走廊中任何一段只能 ...
- scrapy.Spider的属性和方法
scrapy.Spider的属性和方法 属性: name:spider的名称,要求唯一 allowed_domains:允许的域名,限制爬虫的范围 start_urls:初始urls custom_s ...
- 一个关于C8051F350模拟电源的小问题
前言 多做重要而不紧急的工作,慢慢的就会发现重要而紧急的工作没那么多了 工作方法 今天有好几个同事出差去现场实验了,为了今天的顺利成行,昨天加了个班,但是从项目管理的角度或者说做事的方法上来讲,这次加 ...