App上架应用市场,如何攻破安全过检难题

原创 2018年04月16日 19:52:00

App的安全过检与众所熟知的安全检测是两个完全不同的概念。首先App行业本身对App安全过检有一定的要求与规范,其次2017年6月1日正式实施的《中国网络安全法》中就曾要求App在渠道上线时进行实名认证,同时还要完成相应的安全检测。App这一上线过程就称为安全过检或者叫做安全候审。

App安全过检过程中遇到哪些问题

App在具体过检时所参考的一个细则就是《移动应用安全检测基本要求》,这个要求总共分为四大类,其中包括应用层、网络层、数据层以及服务器端。而安卓App本身的一些安全点,总共分为十个,分别是程序代码安全、程序代码防护、密码与安全策略、权限与界面安全、动态调试检测、SO注入检测、内存数据保护、隐私与存储安全、日志泄漏检测、通信数据安全等。

一、程序代码安全

第一块与用户信息收集要求相关。APP上架时对用户信息收集是有一定要求的,收集用户信息就明确相关的法律声明以及相关隐私政策。假如App没有获取用户隐私数据,但是使用了三方平台去收集,这个也要声明清楚App使用了哪个三方平台去收集用户数据,收集用户数据的目的等。

image

上图就是我们常见的一个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 漏洞检测

版权声明:转载请注明出处、作者。 https://blog.csdn.net/HuaweiOpenlab/article/details/79965394

Android App性能调优、内存泄露检测

本课程属于Android的高级部分,主要讲解Android性能调优的多种方式(如通过Android手机自身的工具,算法优化、严格模式等),以及如何用不同的工具检测出内存泄露点。学员通过本课程的学员,可以达到Android开发的高级阶段。
  • 2016年08月28日 21:38

历经8年双11流量洗礼,淘宝开放平台架构和技术难点解密

淘宝开放平台(open.taobao.com)是阿里系统与外部系统通讯的最重要平台,每天承载百亿级的API调用,百亿级的消息推送,十亿级的数据同步,经历了8年双11成倍流量增长的洗礼。本文将为您揭开淘...
  • jek123456
  • jek123456
  • 2017-03-06 09:38:34
  • 451

App上架应用市场,如何攻破安全过检难题

App的安全过检与众所熟知的安全检测是两个完全不同的概念。首先App行业本身对App安全过检有一定的要求与规范,其次2017年6月1日正式实施的《中国网络安全法》中就曾要求App在渠道上线时进行实名认...
  • HuaweiOpenlab
  • HuaweiOpenlab
  • 2018-04-16 19:52:00
  • 46

【Android 动画】仿淘宝加入购物车动画实现(附件demo)

在开发详情页时,我们需要实现这样一个下面这样的动画。在看到这个动画设计的时候,我就想到“京东”和“淘宝”的加入购物车的动画。话不多说,讲一下这个动画的实现原理:1、获取“对比”按钮和“比+1”按钮的绝...
  • colinandroid
  • colinandroid
  • 2017-10-31 15:11:58
  • 250

安卓应用在各大应用市场上架方法整理

想要把APP上架到应用市场都要先注册开发者账号才可以。这里的方法包括注册帐号和后期上架及一些需要注意的问题。注意:首次提交应用绝对不能随便删除,否则后面再提交会显示应用APP冲突,会要求走应用认领流程...
  • niezhipeng8
  • niezhipeng8
  • 2018-01-19 10:10:31
  • 5051

2017最新各大应用商店APP上架指南

最近很多人问到如何发布应用,需要准备哪些材料,本文就应用商店发布做个基本介绍。 国内目前流量逐渐中心化,而一些还不错的小市场逐渐被各种收购,更加造成了目前这种流量集中的情况。 所以在这种情...
  • zxt94
  • zxt94
  • 2017-05-26 11:19:29
  • 3807

Android之如何把你的应用上传到谷歌市场

一直挺纳闷没有一篇关于把应用上传到谷歌市场的教程,只好自己琢磨,也借着这个机会,记录一下,以免以后忘记。 1.在国内要访问谷歌市场,要翻墙的。所以要打开翻墙工具,我用的是Shadowsocks。2....
  • android793062158
  • android793062158
  • 2017-06-14 15:38:28
  • 4554

【知识整理】安卓(Android)应用上传360应用市场步骤详解

一。将开发好的安卓应用打成apk包。 二。将应用上传至360应用市场 1.注册360账号:网址:http://dev.360.cn/ 2.点击“提交软件”按钮 3.选择注册开发者类型,如为个...
  • qq_19891827
  • qq_19891827
  • 2017-10-30 15:44:29
  • 702

Android开发如果要发布到应用市场需要哪些条件呢

1.比如说需要配置哪些属性。 2.应用ID需要配?怎么配置。 3.需要到Android市场做哪些认证?...
  • yulianqing8702
  • yulianqing8702
  • 2016-12-30 00:49:50
  • 127

android如何在华为市场发布应用

android应用发布之华为应用市场 前言:之前在公司发布应用这种事情有专门负责运维的小伙伴来做,可是当需要我们开发人员自己来发布应用时,应该怎么做呢?不要慌,其实很简单,首先先写华为应用市场。 ...
  • little_flf
  • little_flf
  • 2017-08-10 17:53:10
  • 1248
收藏助手
不良信息举报
您举报文章:App上架应用市场,如何攻破安全过检难题
举报原因:
原因补充:

(最多只允许输入30个字)