玩手机上软件的时候,你有想过它安全吗?

感恩有你

甲之蜜糖,乙之砒霜——Charles

相信大家也听到并看到过生活中各种手机诈骗,犯罪分子掌握了你的一些信息屡试不爽,尤其是现在大家在使用手机软件(下文称APP)时需要绑定及输入很多个人信息,所以软件安全问题也越来越得到大家的重视, 然而相对于用户操作去规避风险来说, 软件开发者在编码阶段就更应该考虑安全方面的问题,从源头上有效扼制住风险漏洞,防止恶意者利用

那么如何提高APP的安全性呢? 我想你们需要了解常见的风险存在

1. 用户手机端应用运行环境的安全

2. APP应用自身的安全

3. 数据传输通信的安全

4. 服务器安全

对用户而言

1、下载手机应用去正规的应用市场下载,网页上未知来源的应用不要随便下载,因为不能上架到正规市场的应用都是不符合法律规定的,或者是存在风险的应用.比如涉黄赌涉及金融类用户隐私权限的,要下载多了哪怕你就看看,你收到的垃圾短信,诈骗电话都比常人要多的多

2、第一次使用一款手机app的时候,都会有提示说获取通讯录权限,相机权限,定位权限,存储权限等等各种提示, 不要随便点确定给权限, 你给了权限就意味着这款应用可以获取到你手机里的信息,举个列子,若该app没有地图定位的功能块,没有通讯录,短信等功能块,却提示你给权限,大多都是在收集用户的资料或者是开发人员图省事一键CV把权限申请完两种情况

3、现在是大数据时代,比如某猫你查看过什么商品,每种商品都是有标签的,都有做行为统计数据分析然后精准给你推送迎合你的喜好, 某猫88VIP卡将你在公司旗下应用信息关联绑定在了一起,你喜欢买什么,吃什么,听什么,看什么,玩什么,各种数据分析, 知己知彼百战百胜,总得来说大公司一般都是不会泄露用户的隐私数据的,小公司的话就说不准了,参考各种推销电话

4、不要连接未知来源的WIFI,可能遭受中间人劫持获取数据

对开发者而言(安全角度)

1、手机ROOT权限检测

风险原理:Android设备被Root的环境下,用户获得了系统最高权限,但同时也给恶意软件打开了方便之门,会导致系统安全性大大降低

建议:在APP运行的时候,应该对Android设备Root环境进行检测,并提示用户注意潜在的安全风险

参考链接:http://tieba.baidu.com/p/3428898089?traceid=

2、传输协议(防网络代理抓包)

风险原理:APP在请求网络数据时,如果没有使用HTTP+SSL/TLS进行数据传输并且没有对服务端的证书进行校验,使用Charles,Wireshark等抓包工具可以轻松的获取到传输的数据内容, 容易遭受中间人劫持,篡改数据,导致系统安全性大大降低

建议:使用HTTPS协议进行网络请求,必须对数字证书进行校验,达到一个防止网络代理的作用

参考链接:https://segmentfault.com/a/1190000004523659

3、代码混淆APK加固(防重打包)

风险原理:若APK没有加固,通过Android Killer,APKIDE等反编译工具可以得到APP的源码及资源文件,分析APP,修改APP逻辑,加入广告及恶意代码可以重打包使用

建议:APP应该进行加固处理,或进行文件完整性和数字签名校验,防止盗版软件

参考链接:https://bbs.pediy.com/thread-213188.htm

4、APP调试日志

风险原理:在APP的开发过程中,为了方便调试,通常会使用log函数输出一些信息,或者使用System.out.print打印数据信息,泄漏敏感信息,首先这些日志会影响到手机性能,其次会让攻击者更加容易了解APP内部结构,方便破解和攻击,甚至有可能直接获取到有价值的隐私敏感信息,界面劫持攻击手法也包括监听系统Logocat日志

建议:为了APP的错误采集,异常反馈,必要的日志还是要输出的,建议在开发初期做好日志统一管理类, 在打包上架时关闭日志输出,在调试时打开日志输出

参考链接:https://yiweifen.com/html/news/WaiYu/96535.html

5、防界面劫持

风险原理:顾名思义就是正常应用的界面被恶意攻击者劫持,覆盖上仿冒的或者透明的恶意界面作恶。界面劫持攻击分为界面劫持和钓鱼攻击两部分。恶意程序会对目标应用进行监控,当应用手机端程序调用Acitivity组件显示窗口,且该窗口界面是恶意程序预设的攻击对象,恶意程序就会立即启动自己的仿冒界面使之替换或覆盖在此APP程序界面之上,这就是界面劫持。恶意攻击者在发动界面劫持后,用户所面对并操作的其实已经是被替换后的仿冒页面,这意味着用户在毫无察觉的情况下将自己的账号、密码等信息输入到了仿冒界面中,这些数据最终会返回到恶意程序的服务器里,这个过程便是钓鱼攻击,手机银行这类金融APP的登录界面、转账界面等都是恶意攻击者的主要目标。

常见攻击手段:

1. 监听系统Logocat日志,一旦监听到发生Activity界面切换行为,即进行攻击,覆盖上假冒Activity界面实施欺骗。

2. 监听系统API,一旦恶意程序监听到相关界面的API组件调用,即可发起攻击。

3. 5.0以下机型枚举获取栈顶Activity,监控到目标Activity出现,即可发起攻击。

4. 恶意启动Service监听目标应用,在切换到目标Activity时,弹出对话框劫持当前界面迷惑用户

建议:APP在页面切换到后台运行时,应有提示告知用户该APP已退到后台运行

参考链接:https://www.zhihu.com/question/31964734/answer/482635488

6、会话Token超时

风险原理:如果APP没有会话超时机制,APP会话和cookie一旦被窃取或操纵,就可能被用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。其次Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮

建议:APP 5 -10分钟没有操作的情况下退出登录操作或者让用户可以选择超时时间

参考链接:https://blog.csdn.net/u010545480/article/details/70802917

7、本地存储

风险原理:如果在已root的手机上,那么可以很轻易的查看每个APP应用的本地存储文件,配置文件等,通常这些都是用户个人的敏感信息(电话,密码等),容易被第三方程序窃取和篡改

建议:在使用SharedPreference及SQLite存储敏感信息字段时加密处理再保存

参考链接:https://blog.csdn.net/mrruby/article/details/70665950

8、防截屏防录屏

风险原理:在app中敏感信息页面的信息没经过掩码处理容易造成信息的泄漏,另外涉及用户隐私的,如登录,修改密码,支付信息等页面会被三方程序截屏获取或者录屏获取

建议:做防截屏处理

参考链接:https://blog.csdn.net/jonbb/article/details/76979882

9.、输入框验证相关

风险原理:类似纯数字,纯字母等弱口令密码容易被暴力破解,学过排列组合的都知道,组合方式过少,所以需要字母+数字的强密码组合,输入框类型,长度的验证,密码,短信验证码每日错误次数的验证,防止被撞库,防止短信炸弹,防止重放攻击

建议:密码应采用字母+数字+特殊字符的实现方式,密码,验证码等每日错误次数不超过3-5次

10、四大组件安全-exported属性

风险原理:该属性用来标识其他应用的组件是否可以唤醒该组件或者和这个组件进行交互,可被其他应用调用执行特定的敏感操作或者钓鱼欺骗

建议:在配置文件AndroidManifest.xml中将不需要暴露的组件的Exported属性设置为false,意图过滤器默认Exported为true,应当手动加上Exported属性并设置为false

参考链接:http://blog.csdn.net/watermusicyes/article/details/46460347

DAD

宁愿做过了后悔,也不要错过了后悔。。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181123G1KTUQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券