网络安全 频道

王文君:基于双因子验证加固SaaS应用

  【IT168 资讯】11月3日,以“深度解读应用及业务安全”为主题的OWASP 2012中国峰会在深圳博林诺富特酒店召开。本届大会从多方面、多角度诠释基于因特网、无线电话网和物联网的应用、融合及业务方面的安全,并围绕应用及业务安全发展方向和威胁增长趋势等方面,进行深层次的探讨。

  以下是HP安全架构师王文君《基于双因子验证加固SaaS企业级应用》的演讲:

王文君:基于双因子验证加固SaaS应用
HP安全架构师王文君

演讲PPT下载:http://wenku.it168.com/d_000617407.shtml

  大家下午好,我今天跟大家分享的议题是基于双因子验证加固SaaS企业级应用。我们用淘宝、用微博,这些都是基于用户的,我这里讲得企业级应用,企业级应用可能更窄一些。

  这是我个人的介绍,刚才主持人讲过《WEB应用安全威胁与防治》可能下个月与大家见面,这本书基本上以IT的视角,来去WEB应用安全所以读起来可能有点小清新。

  我今天的议程有三个:首先我们介绍一下基本概念,企业级软件、SaaS和双因子验证三个基本概念介绍;然后再介绍SaaS企业级应用一些常用的风险以及基本对策;最后第三个可能是我一家之言了,就是对这些安全威胁的防治有没有可能用一种方式来吃掉大部分的威胁?这是我的一点建议,可能不一定对,或者与大家讨论一下,最后做了一个demo。

  首先介绍一下基本概念。企业级软件,企业级软件这里有说明,有HR、ERP、Finance这么一个东西。举一个例子我上班,我要休假,进入HR系统请假。第二个概念是一个SaaS,今天上午有很多同事讲过了,我这里讲一点我们还是以HR为例,如果公司要部署很好的HR系统,首先需要采购,其次需要维护。维护升级可能需要一个专门的安全部门,也可能是一个人或两个人。我们知道任何企业级软件最头疼的就是升级,因为企业级软件要考虑兼容性,数据不能丢失,所以传统的方式会有很多的弊端。SaaS的优势在于用户按需购买,厂商部署更新速度快。但是SaaS基本上都是基于互联网进行访问,凡事具有两面性,你带来便利的同时风险性就增加了。第三个概念是多因子验证,我想这个概念大家可能或多或少接触过,但是不一定知道这个名字。我们首先有三个方面,一个是“What you know”,你知道什么,我们一般有一个密码,密码有8-16位;第二个因子是“What you have”,你拥有什么,比较常见的就是令牌、手机;第三个就是“What you are”,你有什么?别人可能代替不了你的,例如指纹、视网膜。企业级应用的话考虑到应用及成本,如果我们要实现SaaS的双组合可能前面两种用得最多。

  然后我们今天讲一下要解决的问题,SaaS企业级软件隐藏有很多的风险,比如说CSRF、暴力破解、不可否认性等等。下面我把这三个常用风险解释一下。暴力破解最核心的东西是字典,中国人喜欢这一方式,如果有了一些字典,可以为他暴力破解提供很大的便利性。所以防止暴力破解有很多方法,多次登录失败锁定此账户,还有一个是验证码。如果你想通过暴力来破解,因为有验证码,所以是通不过的。这里有一些简单的基本概念,就说你处于被验证的情况下,你可能会做你不想做的事情。比如你打开一个电子邮件,访问一个看似很正常的页面,但是里面可能插了一些代码,来做只有你授权才能做的事情,比如CSRF。防御的方法之一是加入令牌,因为这个令牌是随机的,这样的话在攻击构造URL的时候,因为令牌是不可预知性,所以你构造是构造不出来。这是一个很好的解决方式。第二个方法是重要功能强制认证,你进入淘宝了点开一个链接正好点击确认付款,但是加上这么一个人机交互你不得不重新输入密码,第三个对于我们都不陌生,就是不可否认性。刚才有人讲过了,美国国防部都用他来制造东西,他需要一些不可否认性,比如说我有一亿美金的订单,我要批准,这可能是一个经理或者是CEO才能批准的东西,如果别人通过暴力破解知道你的密码,然后登录,是不是就可以批准呢?这个操作是不被批准了,这个时候我们需要一个不可否认性,证明按纽是别人点的,特别是给一些欧洲或者是美国的,他们非常在乎这点。刚才说的工商银行的钥匙,你发送请求的时候把私钥的信息发送出去,服务器进行匹配,匹配以后证明确实是这个人。所以我们可以用私钥实现不可否认的功能。还有一个验证方式是硬件令牌,令牌是你自己持有的,从而具有不可否认性。

  刚才讲了常用的几个大家都明白,那想想有没有一种可能“All in one”,有没有一种方式解决这个方案?我认为双因子验证保护就很好的实现了这一点。使用密码和手机,就和“What you have” 和“What you are” 相对应了。现代化社会,不用智能手机都不好抬头,智能手解决人的生活,智能手机产生软令牌,软令牌有一个特点,令牌时间很短。很短时间会不断变化,而且是不需要额外投入的。它的工作流程是这样的,首先是一个后台,我们会产生一个种子文件,然后用这个种子生成一个二维码,用户使用手机扫描之后就会产生一个不断变化的数字,每30秒变化一次。而验证码是只有你手机才有的,当企业在做验证的时候,通过验证二维码产生的数据和手机里的验证码,从而实现不可否认性。

  我们说的二维码又有怎样的秘密?如果有一个二维码以后,用手机查看,你扫描一下二维码。其实我们产生的二维码的东西是隐藏这么一个东西,是16位,但是他采用了32位base的,我们一般都是用64位的,但是我们这里的32位,是什么概念呢?A-Z是26个,然后再加上一个数字1-7,用这些数字来代替所有的ASCII码,从127这个编码,所以我们叫32位编码,他是用了16位编码的这么一串数字。这串数字组了一个协议叫OUTPUT。如果大家在浏览器里执行这个东西,就会发现生成一个二维码,就会生成一个QRQD。QRQD最核心的内容就是这个。所以我们后端在产生一些很强的随机算法的话,这个保密性还是很强的。通过它生成二维码,产生一个随机的六位数,30秒变化一次。当用手机扫描之后就不停出现验证码。这是我们思路解决的方案。

  剥茧抽丝见真相,我们看看真相到底是怎么回事?第一个是客户端,国内很多大公司有实力开发一个客户端,现在开发手机客户端还是很困难的事情,为什么?安卓手机、IPHONE、Win8功能手机都要开发。如果我们是做企业级软件开发的话,不一定有那么多时间,我们可以利用下载。他会产生一个OTP。它的核心思想是基于RFC6238这么一个标准,这个标准是国际通用的一个标准。之前说的80bit,刚才讲的16位base,32位编码,一个数字代表5个bit,每30秒产生一个OTP,利用的HMAC-SHA的前6位,这是客户端。我开发一个企业级软件,客户正好是一个工商企业,安全要求很高,我只要是服务性,服务性一天就可以实现的,基本上是8个小时就足够了。二维OTP又不一样了。还有服务器端的容错,你可以做一个容错的处理,前30秒和后30秒都符合这个要求,所以可以很好的实现这个功能。但是我们做的时候还可能遇到一个问题,为什么登录验证总是不通过?这里要说明,因为我们是基于时间,所以可能是你的服务器跟手机时间不同步,基本上需要保证你的客户端和服务器时间是一样的,这样才能匹配。所以如果大家匹配的时候发现有不同,你看一下你的时间是不是同步。

  这里还有一个算法保密和密钥保密。上午也说了算法保密,很不错。如果你是一个密码专家,你专门搞算法,你基本上很容易得到算法,所以算法保密和密钥保密是一个话题。对于我们企业经营来说,基本上都是使用公开的算法,我们只需要对密钥保密就可以了。

  最后讲一下好处,通过刚才的演讲大家也熟悉了,开发成本低,客户端只要下载就可以,只要加入用户管理,服务器端检验。推广成本低,每个人都有智能手机。使用成本低,手机不联网也可以产生OTP,一个裸机装了之后也可以进行工作,而且没有短信产生的费用。适用面广,暴力破解,我通过OTP可以卡掉,还有CSRF的攻击。不可否认性也是一样的,OTP我发给你,只有你拥有,如果你有1亿美金的单子你的密码被人偷了,我的手机也被同一个人偷了,这个概率很低的,所以具有不可否认性。我这里很小的一个DMEO给大家分享一下。不会时间很长,就50秒。这里用的安卓手机,录像的时候可以一起录。假设我收到一个二维码,然后用安卓手机可以扫描一下。一旦扫描好了以后,就会产生这个数字,这是服务器端。你的手机上的数字就可以进去了,所以这个比较简单的一种方式,大家可以根据自己的需求来实现它,所以我今天的演讲基本上到这里。谢谢大家!

0
相关文章