常见App安全问题

常见的 App 安全问题

据2015年第三季度移动安全报告显示,Android 16个行业 TOP 10 应用漏洞类别和数量中,Webview远程代码执行占到了第一位,第二位是Webview文明存储密码。这些领域涵盖大家平时工作领域,我们所面临的漏洞是非常严峻的。

常见安全问题分析

上图可看出Android研发要点约450个,包含组建安全、配置安全、策略安全、通信安全、权限欧洲、DOS安全、ROOT安全等等,今天从这里面挑一些重点讲一下。

组件安全问题。安全有四大原生的组建:

   一、Activity,首先是访问权限控制,组建处理不好会导致你的应用被恶意程序进行恶意的页面调用。作为研发人员,我们可以从以下三点来预防和避免这个问题:

  • 私有的Activity不应该被其他应用启动且应该确保相对是安全的;

  • 关于Intent的使用要谨慎处理接受的Intent,以及其携带的信息尽量不发送敏感信息,并进行数据校验。

  • 设置Android:exported属性,不需要被外部程序调用的组建应该添加android:exported=”false”属性。

   二、Service劫持、拒绝服务。

       常见的漏洞有 Java 空指针异常导致拒绝服务和类型转换异常导致的拒绝服务两种。应对 Service 带来的安全问题给大家三点建议:一我们应用在内部尽量使用 Service 设为私有,如果确认这个服务是自己私有的服务,就把它确认为私有,不要作为一个公开的服务;针对 Service 接收到的五数据应该进行校验;内部的Service需要使用签名级别的 protectionle。

传输安全。本地校验用户验证码也非常重要,以后请大家开发中本地的数据校验尽量不要放在本地,尽量放在云端。对于数据的加密,建议所有的App和用户的客户端不要用一个共同的密钥,对于密钥生成的方法尽量根据用户的ID或者一些信息来生成出来,这样避免了大规模密钥的泄露。

第三方组件安全。之前做App应用,在研发后对应用做了很多安全防御。但是大概刚上线不到两天就暴露出漏洞了,究其原因是App项目中用了国内一家非常著名的SDK的推送平台,由于这个平台在发送推送广播的时候没有做数据的校验,导致了黑客可以利用这个推送广播进行伪装,给我发一些数据,最后导致应用在接收了广播之后,只要我点击这个广播应用就崩溃。因此我们除了做好自身应用的安全以外,要保证所引用的第三方,或者合作伙伴也是安全的。也就是说安全是一个团队性的。

Webview的代码执行漏洞。安卓存在一个非常著名的远程代码执行的漏洞,由于我们程序没有正确地使用,大家可能在做GS和Java户调的时候会遇到这个问题,远程攻击者可以通过Java分设接口执行一些恶意的Java方法,最终导致App在使用Webview的时候遭到攻击。我们是可以做一些应对的,安卓系统通过Webview通过一个注册来调用Java功能,攻击者利用反射对他进行攻击,其实谷歌也看到了这个问题,因为这个问题毕竟比较大、也比较广,所以谷歌在API Level17以后这个问题就得到了遏制,对于小于17,或者17以下的能不使用就不使用,如果真的要使用可以增加过滤,对数据的传输做一下校验。

应用安全层。可以对代码进行一些混淆,如配置,如果觉得这还不够,也可以使用一些第三方的工具,比如APK文件。对于更加讲究安全性的经营类的企业,可以选择加固,使用脱壳程序,最后形成一个新的Dex包,最后完成对一个程序的加固。

安全编码规范

其实程序员的编码规范很重要。在Java中,对于一些重要的类、方法、变量,我们在定义的时候一定要想这么几个问题。

  • 定义的类或者变量到底返回什么?
  • 它们获得什么作为参数?
  • 是否能够绕过安全线?
  • 它是否含有能够绕过边界,从而绕过保护的方法变量?

有了这种思想之后,对于一些安全性的风险代码为了防止暴露,我们可以做一些操作,说限制对变量的访问,让每个量的方法都成为Final,尽量使你的类不要被克隆,如果一旦允许被克隆,它可能会绕过这个类轻易地复制类的属性。安卓中很多会使用到序列化,如果自己觉得这个类是有风险的,或者说安全性是很高的,尽量不要让它序列化。最后是避免硬编码影响数据。

黑无止境移动安全“漏洞”

知道创宇高级安全顾问锅涛从攻击客的角度看看安全是怎么发生的,未来安全的主战场就在云这一块。未来移动市场肯定会成为我们整个生活的主角,因为移动是主角,就会对移动端安全信息的窃取,以及我们资产的窃取等,有主角的地方就有伤害。我们看到国外安全发展的趋势,尤其是国际上比较知名的Owasp。

从黑客攻击的角度去分析未来攻击主战场,因为硬应用大家通过查阅书籍、网上、社区搜集资料都可以进行多方面的避免。但是黑客攻击的时候,发现攻击想要拿到的数据,就要去平衡一下攻击的成本,如果完全分析带来混淆,我就带来混淆防止别人能够快速分离出代码之间的逻辑。但是黑客也知道你做了大量比较,也就会换思路,就会从一个人的程序设计缺陷的漏洞利用,因为黑客最终是要拿到移动端和最终的核心数据库连接的信息,用户的信息,以及通过缺陷进行资产盗窃。黑客的攻击已经从一个应用发展到了一个逻辑。

黑客在发动任何一次攻击的时候,都有成本。做防护就是为了增加黑客攻击的成本,无论是做代码混淆还是加固,成本提高了黑客有可能就会放弃攻击,但是他会寻找新的突破口。这就是下面要跟大家说的移动端里面业务逻辑设计缺陷,为什么业务逻辑设计缺陷会成为未来的一个主要的方向。

  • 应用逻辑是神一般地存在,老的程序员也是在劫难逃,因为业务的发展造成了程序员没法快速地去准备代码。
  • 安全开发人员也不能安全避免应用设计缺陷。
  • App本身的漏洞,一半的比例在业务漏洞上,而自己的逻辑漏洞没有一个自动化的程序促使全员去发现它。
  • 业务逻辑漏洞利用的就是开发人员本身人的缺陷,造成了它逃逸于各种防护,无论是代码混淆、加固等等。

业务逻辑漏洞之所以会出现是因为业务发展迅速、开发水平不一、第三方缺陷、内部监管不严格也会出现这种漏洞发生。业务逻辑漏洞最常见的就是账号登陆限制的问题。还有安全性的问题,也会发现密码重置,还有的是采用手机号+我的验证码,就造成了黑客可以利用验证码进行破解,以及常见的另一种安全问题是App端的客户端应用。

随着我们业务的发展,发现在金融行业,以及在我们的社交领域另一种手势密码。手势密码安全其实还是可以的,但是手势密码有很多解锁,可以通过多种方式去对手势密码进行一个修改。最常见的有暴力破解,以及去修改这一个文件重置本地手势密码。



猜你喜欢

转载自blog.csdn.net/markkr133/article/details/80545689