聚焦安全:互联网场景的身份认证方法分析
文 / 肖新光
2011年末多家国内网站用户信息泄露,让许多人意识到安全不再是与自己无关的话题。 2012年3月《程序员》封面报道,我们分别从身份认证、数据库安全、中间平台、终端用户、云计算等几个角度为大家剖析安全所涉的方方面面。
互联网之前的身份认证
身份认证是一个古老的话题,从最早的户籍造册,到今天的2代身份证或社会保险号码,“我是谁”或“他是谁”的问题贯穿着人类社会的发展。
身份认证的历史,是辨识方式演进的历史。辨识可能是基于个体,如悬赏缉拿画影图形,也可能是针对群体,比如两军对垒,要身着不同的盔甲以做混战中的辨识。身份认证的历史,也是与仿冒和窃取对抗的历史,从兵符形状相合到盖在圣旨上的“皇帝之宝”图章,都是在与诈符矫诏进行着斗争。因此,互联网身份认证,并不是孤立新生的技术,它具有传统的特点,也具有新生的便利性,同时也带来了新的困难与挑战。
如果说网络对身份识别方式的最大挑战是身份与物理实体的脱离,那么,一个开放的互联网所带来的最大挑战就是身份的虚拟化一般来说,在现实社会中,一个合法公民的身份是唯一的、终身的,但在网络上并非如此。对于大多数网络应用,用户都可以自由拥有多个身份,并可以随时新建或废止它们,当然也包括一不小心遗失它们。
用户名/口令
最原始的用户名/口令安全模式,据说出现在1962年MIT的CTSS计算机之上。其中用户名用来保证虚拟身份唯一,口令则用于保证虚拟身份安全。用户名一经建立不可改变,而密码则可以随时更改。
没有人发现这其中的革命性意义吗?身份和凭证被区分开了,因为与现实世界一样,身份是不变的,但凭证则可以更新。互联网身份认证的威胁也与传统安全要素一脉相承,包括验证场景的安全性、传递通道的安全性、凭据的质量等。
第一波威胁
传统的用户名/口令机制遇到的威胁,多来自其围绕着早期UNIX系统那种非常明显的君子时代的痕迹,但回头来看,这些威胁实际一直演化至今。
口令猜测:早期系统可以在低权限条件下实现用户名列表的获取,而同时还有默认用户名和内建账户的存在(默认口令可能为空),这就使口令猜测成为可能。依托某些信息,进行单点的密码猜解是一直存在的安全威胁,并逐渐推演出,单用户大密码档猜测、多用户常见密码猜测和今天的拖库后的撞库攻击。
登录过程嗅探:对于Telnet 、FTP这些非常原始的远程行命令工具来说,其连接场景都不是基于加密协议的。而HUB设备本身却基于广播,Sniffer是非常容易的事情。而今天基于主机在TDI、NDIS等层次的本机Sniffer,基于ARP欺骗的监听,和针对无线信号的各种威胁都显得更加普遍。
口令文件的抓取:尽管早期的UNIX系统进行了基于MD5或DES的加密,但其权限配置经常相对薄弱,其Shadow文件易于抓取,之后就可以进行从容地猜测或者暴力破解,这也可以视为“拖库攻击”的雏形。
但在1998-2000年,随着Switch取代HUB提升了Sniffer的实施成本,随着Server系统的安全性普遍提高,随着SSL的逐步广泛应用,安全威胁呈现出走向桌面的趋势,围绕着登录场景的安全构成了对口令安全的第一轮攻击。
登录场景的安全
登录场景的安全,焦点在于攻击者通过木马等手段,对系统输入和输出信息的获取。其中包括KeyLog(键盘记录)、录屏、远程控制等手段。攻击者利用这些手段截取用户名和口令的输入过程,从而可以在另一地点冒用身份进行登录,或者在用户本机进行非用户本人的操作。
而随着主流桌面系统日趋复杂,更容易遭到相关手段的威胁,根据不完全整理,上述威胁点如表1所示。
表1 常见登录场景威胁
从场景安全的角度出发,安全工作者和应用开发者想到了很多方法来改善场景安全,除了主机检查、主机加固和反病毒软件外,也对登录过程的安全做了有针对性的尝试。
软键盘:用以对抗Keylog,通过鼠标点击进行密码输入,其主要问题是不能抵御远程录屏。
加扰:在输入过程加入扰动和解码两部分内容,使原始的Keylog获取不到真正的键盘记录信息,其主要问题在于扰动和解码代码本身难以有效对抗逆向分析,同时攻击者总能实现更底层的获取,实现在加扰前或者解码后获得真实的信息。
前置检查:用以在登录过程之间进行安全检查,包括环境检查(一般是针对Keylog的各个挂接点)和病毒检查两部分。而病毒检查有独立检查和外调反病毒软件两种。对于独立检查,由于不能挂载完整的反病毒引擎和库,一般都采用的是有针对性的小规则集或者采用云检测技术。
尽管有很多产品,声称已经彻底解决了登录过程的安全问题,但多数安全研究者依然倾向认为,在主机环境安全无法有得到效保障的前提下,很难实现这样一种安全登录方案—其过程是高安全等级的,并能与其他应用良好的兼容。
因此,安全工作者开始寻找其他方法,从双因数的思想出发,寻觅不依赖于主机场景的安全机制。
密保卡/矩阵卡
密保卡/矩阵卡作为一度在网游保护中普遍应用的产品,显然是受到了传统密码本思路的启发。
其基本思想是,服务商建立若干组不同的位置+信息数据,每组数据对应唯一ID,这个ID与位置+信息的数据以印刷的方式制成物理介质分发给用户,用户将相关ID与自身账号建立关联绑定。之后,服务商则不仅要求用户登录过程中输入用户名和密码,亦会要求用户输入在该介质上的一些位置信息。
这是一种典型的双因数安全思想。其密钥分发通过传统的销售渠道来进行,从而不具备在网络上监听的可能。而其自身又通过了刮刮卡等方式保护ID信息,来避免在分发渠道中遭遇翻拍记录等威胁。
但该机制很快遭遇到了安全挑战,那就是所谓的位置累计攻击。由于用户登录场景安全难以保证,每次位置询问的信息均难以避免不被获取,特别是为了避免对单个位置信息的猜测式破解,一般该机制都是同时生成多个位置,要求用户输入对应信息。因此,攻击者可以对相关位置信息进行累计。当信息累计到一定程度,攻击者就可能进行多次登录试探,当全部位置都落入攻击者之手,攻击者就进入系统,取消用户账户与密保/矩阵卡的关联。
这其实反映出了矩阵卡面临的主要问题,就是其口令空间明显受到了“工艺”和纸张大小的约束,使其为有限集。为了对抗这种攻击,服务商只能通过增加张数的方式来增加密码本的厚度,比如每月一张甚至每周一张。
如果我们从传统密码学的角度看待这种问题,亦能找到原因。目前只有一种密码机制具备者理论证明级的安全,那就是一次一密。但这一机制由于受到密码空间的限制,因此显然是“伪一次一密”。完全是民用级别的安全性。当然由于成本、易于携带等因素,其应用依然十分广泛。
有人认为由于矩阵卡基于印刷技术,因而成本低廉,但实际并非完全如此。与一般印刷不同,任何两张密保卡的内容都不同,同时还需要在印刷后准确切割。因此密保卡都需要特制设备印刷。在密保卡刚刚兴起的时期,相关印刷设备均价值百万。只有在印量足够大的情况下,相对电子令牌才有成本优势。
当然,作为一种频繁更换的产品,它也为网游厂商创造了一种增值服务的形式。
手机动态口令
对采用一次一密思路的体系来说,最大的困难不只在于大量密钥的生成和管理,如何低成本安全地传递密钥也是关键。
在PKI体系中,公钥算法被作为在同一个信道下可以实施安全会话密钥传递的方案。但落实到目前的节点安全场景来看,无论是Private Key本身,还是用以保护它的Passphrase,都可能被入侵者非常容易地获取。因此,PKI除非依托专用硬件,保证Private Key不被获取,否则在解决登录场景不安全条件下的登录安全的问题方面,并无优势可言。
由于手机的普及,使用文字短信作为动态口令分发的方法,成为一种可行的方案。它的优点是不需要增加其他动态口令设备的成本,而只依托现有电信服务就可以解决问题。
但这样的问题,也是明显的:
- 第一,如果短信有一定滞后,用户等待的体验并不理想,开玩笑地说,手机动态口令最普遍的场景是运营商的网上营业厅,因为只有运营商能保证自己的短信及时到达;
- 第二,对GSM网络来说,其监听成本日趋低廉,在定向攻击中,采用GSM动态口令的安全性,可能反而不如PC+静态口令安全。
- 第三,相对更大而更尴尬的问题出在手机上,传统手机的安全性在一定程度上来自于其简单。当它不再是那个只能进行语音通话和文字短信的无线终端,而变成一个掌上平台,当各种木马开始捆绑进入官方和非官方的App Store或电子市场,当越来越多的预装和复制的应用难以确定其安全性和真实来源时,手机安全性已经明显呈现出比PC更差的趋势。
动态口令卡/令牌/电子密保
能否建立一种机制,既能保证动态口令的一次性,同时又不产生密钥传递的成本呢?如果动态口令的体验能不依赖于第二信道的实时性,就更为理想。这就要求,在服务器和登录者之间或者存在一个巨大的共有码表,或者拥有一个具有随时一致的元素。显然,后者最理想的,就是时间。
为此,基于随机数种子+时间的动态口令/令牌机制产生了,其工作机理为,服务商为用户分发一个带有口令生成机制+显示屏的电子设备。该设备在交付给用户时完成初始化,生成用于与时间结合生成动态口令的唯一参数,该参数在服务端保存,从而完成一个依赖于时钟的动态口令机制。
有趣的是,这样一个动态口令机制在历史上依然出现过问题。由于考虑到时钟误差、用户操作时间等因素,这个机制必须能保证在一个较短时差之内(默认一般为五分钟)的登录有效,而攻击者则利用某厂商设计上的疏漏,即允许五分钟之内采用相同凭据重复登录,来获取用户输入内容,之后登录进去取消与动态口令卡的关联,或者窃取用户虚拟物品、修改密码等。
这是一个有趣的违反基本原则的设计案例,动态口令卡的设计初衷是保证登录凭据向一次一密的思想靠拢,具有一次性,但这种问题却明显违背了这一原则。
动态口令卡的安全性遇到的最大危机是2011年RSA公司被入侵后,计划召回全球超过3000万个电子令牌。
USB KEY
USB KEY显然是从加强场景安全的角度来入手的。它利用了USB接口设备内置的算法芯片,实现对数字的加密和签名,通过电路控制,确保凭证不可被远程获取。
攻击者即使获得了用户名和密码,也无法在其他位置登录。USB KEY目前的主要问题是,攻击者可能是通过远程控制在被害者主机上进行操作的,而此时对于USB KEY体系来说,则无能为力。
这一问题不仅对USB KEY存在,在用户已经完成登录过程的情况下,远端系统都无法识别出操作来自用户还是来自Backdoor。
而我们必须严肃指出的是,目前最大的风险是一部分USB KEY并不是真正的带有加密芯片的设备,而是所谓的隐藏数据U盘,但这种伪安全没有得到足够的揭露和警示。
生物识别
在传统的物理安全领域,无论我们是否情愿,都不得不遇到一些生物识别的场景。比如我们在办理某些国家签证时,必须留下掌纹;有很多单位使用指纹打卡;电影里那些要害部门更是使用虹膜作为入门凭证。
生物识别的最大意义,在于其与实体身份先天具备的不可脱离的对应关系。从这个意义上,生物识别与互联网基本匿名原则存在某些对立。但包括Fackbook等互联网巨头在内,也莫不对脸部识别兴趣十足。对生物识别的崇尚和批判,在安全领域一直都没有停止过。一些反对者认为,至少对于脸部识别和指纹识别来说,这是更容易在完全无知觉、也无法追溯条件下套取的凭据。这比传统口令只在输入过程中才有被Keylog或者Sniffer的风险相比,要高得多。当然,复制这些凭据的成本自然也高得多,无论是制作指模,还是对面部的3D打印。
而我认为,生物识别技术不适用于互联网场景的最关键原因,在于它是一种可能被获取,但却不可废止的凭据。我们只有两个虹膜、两个掌纹和十个指纹,而这使生物识别与上述任何一种安全机制相比,都处于明显的劣势。
传统的物理安全场景,基本保证了我们的指纹打卡机、虹膜检验仪是可靠的(即使只生成签名数据,不保留原始数据)的,但如果这些手段泛化到一般性的应用,则这种保障就不复存在。而同时,由于生物识别是在高等级的安全部门普遍采用的,如果互联网普遍使用,也就加大了敏感人员的个人生物信息被通过钓鱼等方式获取的风险。当然,虹膜、骨像等认证基本不太可能出现在互联网的日常应用中,而尽管一些笔记本本身已经默认带有指纹识别,但摄像头肯定是最普适的生物识别设备。因此,脸部识别的争论和博弈,就会成为焦点。
但实际上,露一面就上网,或者像刷一下指纹就进电脑一样,其实就是一个登录过程的Agent,充其量是解决了方便性问题而已。如果真的采用这个信息完成登录过程,那么无疑还是要生成相关的签名数据传递过去,只要有这个生成和传递过程,就有被获取的可能,因此并不需要用3D打印再造一张脸,只要实现一个签名数据的重放即可。
巨头们真正对脸部识别感兴趣的原因,绝不是其安全性,而是其巨大商业图谋。当图像识别出登录者脸上的雀斑时,就能定向投放祛斑霜的广告,这是多么精准的投放!
尾声
安全威胁就像一个永远不能被抓获的流窜犯,只能被我们赶来赶去,当我们认为随着动态口令卡、USB KEY等的广泛使用,基于PC的关键性互联网业务安全开始获得一定保障时,安全威胁仿佛又转入到了对Server端的威胁。
而同时在终端上我们亦无法解决一切问题,尽管登录过程已经有了保护,但信息交互的全程并不是仅靠加密就能保护的。五年前,当我们分析一个并不盗号的网银木马时,惊诧地发现,它就是截获用户转款操作,把目标账户改为预设的账户。显然这是上述任何机制都不能绝对解决的问题,即使USB KEY是基于公钥签名算法的,也无法判定让其签名的数据是否合法。因此,我们当时提出,带有显示屏幕并能进行确认操作的“专用安全交易终端”才是终极解决方案。
五年过去了,尽管类似设备多次昙花一现,但终未能形成气候,因为这是对应用和便利性的反动,同时,也不可能有绝对的安全端点。如果设备的一点有Bug,其修补显然比在PC上更困难。安全界与应用界的差距就是这样拉开的,而当算法界正在零知识和同态加密中钻之弥坚时,却发现整个应用领域,还处在是否加密,以及如何正确使用散列算法的原始困扰之中。而对攻击阵营,当然也包括白帽研究者,其研究资源和能力却在不断地增长,他们安享算法分析领域的最新成果,他们从软件到硬件的纵深,都在我们这些纯种的防御者之上。
安全存在的价值不是为了给应用的发展设置这样或者那样的屏障,因为我们完全无力约束应用的野蛮生长。安全的价值更不是为了让用户穿着50斤重的盔甲和防毒面具去上班和晨练,因为99%的用户都拒绝为应对小概率威胁,却受到持续的困扰。这就是互联网场景的安全特点。
作者肖新光,网名江海客,安天实验室首席技术架构师,研究方向为反病毒和计算机犯罪取证等。微博:weibo.com/seak
本文选自《程序员》杂志2012年03期,更多精彩内容敬请关注03期杂志