静态账户是指一组由用户名和固态密码组成的账户。固态密码是指与用户名协同进行身份认证的密码,在一段时间内保持不变,有较长的生命周期,只有在人工干预的情况下才可能发生变化,业界有时也称之为静态密码。
本文基于如下理解:
●静态账户是指一组由用户名和固态密码组成的账户。固态密码是指与用户名协同进行身份认证的密码,在一段时间内保持不变,有较长的生命周期,只有在人工干预的情况下才可能发生变化,业界有时也称之为静态密码。
●二次身份认证是指用户的静态账户通过认证后,再对用户的合法性进行一次有效性检查。本文将静态账户认证称为第一次认证,后者称之为二次认证。
●第一次身份认证与第二次身份认证通过不同的网络进行,称为双链路。比如登录一个社区,使用静态账户在PC端通过其门户进行第一次认证,再通过移动终端进行第二次身份认证,这就是一个双链路的认证过程。但是如果将移动终端生成的密码在同一PC端通过社区的门户进行二次认证,则是单链路的认证过程。
●本文将口令、密码统称为密码。OTP(One-Time Password)是一种具有时效性与使用一次性的密码,通常情况下,由于其生命周期小于一分钟,与固态密码相对应,称之为动态密码,有时也称为动态口令,本文统一为动态密码或使用英文简称OTP。
●密令(”Me”令)利用先进的双链路登陆保护,对用户登陆进行二次身份验证,有效确保用户身份的唯一性和合法性。
背景与现状
20世纪末期,随着信息技术的飞速发展,大量以手工方式处理的传统业务被信息系统代替,工作方式的转变也影响到以部门或岗位来确定工作内容和职责的物理世界。信息系统为了一一映射现实世界的责任和分工,便建立了一套以用户、角色、权限为一体的完整的权限体系,静态账户由此应运而生。
在一段时间内,静态账户解决了信息系统孤立环境下的权限分配问题,有效的保护了虚拟环境下的业务操作和数据。但是,随着的兴起,以共享、分享为理念的互联互通精神拆除了信息系统彼此之间的高墙篱笆,特别是一些社区()、、网络游等互联网应用。与此同时,开放环境下的信息共享与信息保护的冲突愈演愈烈,形形色色的黑客使用各种手段窃取或劫持用户的身份认证信息,以获得系统相关功能及数据的访问权限,进行非法操作。
由于静态账户的固态密码通常使用诸如MD5、SHA-1等杂凑函数多次或组合生成,完全可以通过字典攻击的密码猜测等手段获得固态密码,如网站http://www.cmd5.com/可以将多种杂凑函数生成的密码进行解密,获得明文。因此,以静态账户为手段的保护业务操作和数据的模式受到了极大的挑战。
最近,始于CSDN的“泄密门”事件已经波及到数家从事互联网应用的,包括、、多玩、7k7k等公司的静态账户被泄露。因此,基于静态账户的方式已不能满足互联网安全形式日益恶化的要求。
身份认证安全问题分析
为了确保信息系统中的数据不被泄露、篡改和非授权访问,身份认证的安全问题至关重要。认证窃取和劫持是最常见的一种安全威胁。
认证窃取与劫持是指攻击者通过各种手段窃取或劫持用户的身份认证信息,并因此获得系统的相应功能及数据的访问权限。典型的认证窃取与劫持包括如下几种。
(1)密码猜测
字典攻击是最常用的密码猜测方法。字典攻击的一种策略是在已知用户名的前提下,基于字典内容按一定策略猜测密码内容,直到猜测成功。对于拥有大量用户的应用系统,另一种反向字典攻击往往也会奏效,即假定系统中会有人使用某一简单密码,如“123456”,然后按字典序猜测用户名。这类攻击通常发生在需要认证的Web前端。
(2)会话劫持
会话劫持是指用户在系统成功认证后所获得的会话标识(SessionID)被攻击者窃取或劫持利用,从而得以扮演该用户身份与系统交互。应用层会话劫持实现的主要原因有:
●猜测。若Web的Session生成算法被攻击者获知,则有可能通过Session猜测得到某登陆用户的SessionID,从而劫持该会话。
●Session不充分超时。若用户没有显式点击“退出登陆”而直接关闭,则用户SessionID通常会被保留一段时间后超时删除。若超时时间设置过长,则可能会在这段时间内被攻击者利用。
●会话Cookies信息窃取。很多情况下系统使用Cookie在浏览器端记录用户认证信息,因此在某些攻击手段的支持下(如跨站脚本)Cookie会被攻击者方便的窃取从而仿冒并劫持用户认证会话信息。
(3)基于SQL注入的认证攻击
考虑应用系统基于用户填入的用户名及密码执行如下SQL查询认证用户身份信息:
SQLQuery = "SELECT Username FROM Users WHERE
Username = '" + strUsername + "' AND Password = '"
+ strPassword + "'";
如果用户输入用户名为 ' OR ''='并且密码为 ' OR ''=',则将最终产生如下的SQL查询语句,旁路掉认证逻辑从而使认证失效。
SELECT Username FROM Users WHERE Username = '' OR ''='' AND Password = '' OR ''=''SQL
(4)基于密码恢复的密码获取
很多互联网应用为用户提供忘记密码后的密码恢复功能,比如通过输入用户邮件、电话号码来恢复密码,或通过Email恢复密码。若密码恢复方法或过程过于简单,则很容易被攻击者利用而成为重置密码的途径。该种方法多发生在Web前端。
基于二次身份认证的双链路登录保护方案
基于静态账户的安全问题一般发生在单链路上,这里采用双链路的方式通过二次身份验证实现登录保护,以保障用户身份的合法性。当然,在单链路上也有一些行之有效的方法来解决很多登录认证的问题。比如,在静态账户一次认证的基础上使用时代亿宝(北京)科技有限公司的手机密令(”Me”令)产品进行二次认证,就是一种很好的解决方案。
要特别说明的是,仅仅依靠改进静态账户的固态密码生成算法进行一次认证实现登录保护往往是不够的,目前普遍的做法是安全等级不高的应用在静态账户的基础上辅助以图形验证码的方式防止系统被DOS攻击,但这实质上不是一种登录保护的措施。
(1)基本原理
基于二次身份认证的双链路登录保护方案的基本原理是用户通过PC端使用静态账户进行第一次身份认证;认证通过后,业务系统向用户手持设备(包括、等移动终端)发起二次认证请求,用户使用安装在移动终端的上系统向业务系统启动二次认证,认证通过后进入业务系统进行相关操作。认证示意图如下图所示:
静态账户是指一组由用户名和固态密码组成的账户。固态密码是指与用户名协同进行身份认证的密码,在一段时间内保持不变,有较长的生命周期,只有在人工干预的情况下才可能发生变化,业界有时也称之为静态密码。
双链路二次身份认证的登录保护完整序列图如下所示。第一次认证使用业务系统自有的用户权限管理机制,第二次认证使用独立的认证系统(这样做的原因后续会有说明)。整个认证过程大致分为11步:
Step1:用户通过业务系统的客户端(通常使用用户PC机上的浏览器)发起使用静态账号第一次登录请求;
Step2:业务系统客户端将认证请求发给业务系统;
Step3:业务系统基于静态账户进行初认证;
Step4:第一次认证通过后,业务系统将以下行短信或GPRS方式向用户的移动客户端推送二次认证请求;
Step5:用户通过移动终端发起二次请求;
Step6:移动终端将二次请求发给业务系统;
Step7:业务系统检测本次二次请求是否由第一次请求产生的。即检查二次请求的合法性和有效性;
Step8:如果本次二次认证请求有效,业务系统则请求认证系统进行第二次验证;
Step9:认证系统认证;
Step10:认证系统将认证结果返回系统;
Step11:如果业务系统检查二次认证通过,自动进入登录后的界面,用户就可以进行相关操作了。
(2)认证密码生成与分发原则
在二次身份认证的双链路保护方案中有两套密码,一套是静态账户的固态密码,用于进行第一次身份认证;另一套是基于动态密码技术的动态密码,即OTP,用于进行第二次身份认证。
静态账户由业务系统自身的权限体系产生,其固态密码一般由2次MD5加密或1次MD5结合SHA-1算法的方式生成。因此,第一次登录认证由业务系统完成。
二次认证使用的动态密码由业界统一的算法AES或国家密码局要求的SM3算法产生。动态密码拥有双因素特征,一般基于时间因子,长度为6位或8位(也可以客户定制),有效期小于60秒,只能使用一次。由认证系统分发,故第二次认证由认证系统完成。
(3)体系结构
基于二次身份认证的双链路登录保护方案的体系结构包括认证系统、被保护的业务系统、业务系统的客户端、移动客户端。各的功能和作用概要说明如下:
●认证系统:分发生成动态密码(OTP)的种子(seed),进行账号绑定和解绑,实现OTP认证的功能。
●业务系统:分发静态账号,实现第一次身份认证,请求第二次身份认证
●移动客户端:申请账号初始化绑定,根据认证系统分发的种子并基于时间因子生成动态密码,发起二次认证。
●业务客户端:发起第一次认证请求,并相应第二次认证结果
(4)解决问题
从前面所述的工作原理可以看出,基于二次身份认证的双链路登录保护方案完全可以解决静态账户泄露后的应用系统安全问题,这是因为该方案采用两套密码,通过两条不同的链路进行认证。
此外,该方案在一定程度上也可以解决钓鱼和欺诈等安全隐患。