0背景

身份认证的目的是确保访问者的真实身份与声明身份一致。一个可靠的身份认证系统是对外提供服务的出发点,是业务系统和数据信息安全的基石。一般场景下,身份认证的客体目标都是人,因此如何精准有效识别出目标访问用户的真实身份,同时降低用户对认证行为的感知,是身份认证系统需要重点解决的问题。对人的认证途径通常分为以下三类:

  • 仅主体所知道的信息:如密码口令,助记词等

  • 仅主体的持有的东西:如手机,物理令牌,卡片,密钥等

  • 主体独一无二的特征:如指纹,虹膜,人脸,声音等

上述三类认证途径,一般认为第一类可靠程度弱于第二类,第二类可靠程度又弱于第三类,但相应的验证难度也会依次递增。密码是身份认证使用最广泛的手段,市面上很大一部分系统和服务仅通过密码进行验证,这滋生了很多以社工窃取/爆破用户密码为主要手段的攻击方式。因此,我们需要使用结合多种认证手段并以合适方式组合的认证组策略,即多因子认证 MFA(Multi-Factor Authentication)

0常见认证因子介绍

密码

密码认证指用户创建一个文本字符串来作为认证身份的手段,系统将其以某种形式存放于数据库中,当用户需要认证时,以数据库中留存的凭据来进行身份验证。密码认证实现简便,使用方便,且无需额外的硬件依赖,在过去的几十年里曾被认为是安全的管控手段而被广泛使用。

CAPTCHA

CAPTCHA指的是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称,它并非作为一种单独存在的验证方式,而是主要用来防止攻击者使用脚本和机器人等手段来破解登录认证。CAPTCHA的方式多种多样,有拼图、连线、算数、验证码、识图等。比较有名的是谷歌提供的Google Captcha(reCAPTCHA)服务。它的主要运行方式是,在web网页如登录页中嵌入一个插件,这个插件会收集客户端的各种信息提交给CAPTCHA服务端,服务端通过AI或风控逻辑分析这些信息,最后返回一种认证方式给web网页,网页展示这个认证方式让用户操作,用户操作完后将结果提交至CAPTCHA服务端完成认证。这种认证方式提高了攻击门槛,但也并非不能破解。使用深度学习和机械学习已经可以完成拟人验证,而且外网有免费公开的库和现成模型。甚至,我们利用搜索引擎提供的识图服务,再加上一些聚合算法,可以自动化地完成CAPTCHA提出的一些验证挑战。看得出,只要攻击者愿意下功夫,这种验证方式也不是百分百完全可靠的,只是攻击门槛比较高。所以服务方常常推荐用户绑定手机或者邮箱。

邮箱验证码

邮箱验证通过给用户帐号绑定的邮箱发送验证码或验证链接来核实用户对邮箱的持有,属于验证用户持有物的方式。邮箱验证需要额外的交互成本,在国外较多用于登录验证等场景,国内则一般用于修改用户密码和登录风控二次验证的场景。

短信验证码

短信验证码是近年来使用越来越多的身份验证方式。一般通过填写短信验证码完成。因为手机属于私有设备,且通信渠道不易拦截,所以是目前比较安全的认证方式,但需要注意的是,手机号属于个人隐私信息,服务方必须提供可靠的隐私保护协议才能进行注册。在企业中,往往也会使用硬件token设备来代替手机,其实原理是一样的,都是特定用户持有的设备,输入的都是设备上存储的信息。短信验证码安全系数较密码验证高很多,但依然存在可攻击的手段且验证成本也相应有所提升。

物理令牌

常见的物理令牌包含智能卡,U盾,加密狗等,物理令牌内通常会包含一个或多个证书,密钥等信息,通过校验访问主体拥有什么来完成身份认证。物理令牌一般不单独使用,通常用于敏感场景下与另一个身份验证因子结合使用。

动态密码

TOTP(Time-Based One-Time Password)算法是基于时间的一次性密码算法,它属于HOTP(HMAC-Based One-Tme Password)算法的一个具体化的实现,根据预共享的密钥与当前时间计算一次性密码。TOTP生成设备可以是用户已完成身份认证的手机应用,也可以是单独的硬件设备。认证方与服务端通过相同的算法与密钥,在相同的时间范围内可以生成出相同的密码结果,以此完成身份认证。动态密码属于对主体所有物的验证,在安全层面高于单纯的密码验证,但动态密码一般为固定长度的6到8位纯数字,服务端要做好验证渠道的防爆破处理。

指纹 / 人脸 / 虹膜

指纹/人脸等生物特征验证是近年来随着手机等智能硬件设备发展,逐渐普及的身份验证方式,属于典型的验证访问主体是谁的认证手段。生物特征识别作为一种全新的识别技术,在物理访问控制中已经得到了广泛的应用。生物识别并非严格的验证方式,一般评估性能会涉及到灵敏度,错误拒绝率(FRR)和错误接受率(FAR),通常情况下灵敏度设置越高,FRR越高,FAR越低,需要服务方根据适当的场景评估。

0多因子认证编排

一个安全且合理的身份认证场景,应当对用户感知最小,只在必要且合理的时候才要求用户进行必要范围内的最小验证。我们在设计MFA策略的时候,应当与对应用户的使用习惯相结合,确保制定的策略能否在保障用户系统安全的前提下,尽可能减少对用户使用过程的打断,提升用户的使用体验。在企业系统中,验证因子的选择和编排一般由统一认证入口SSO实现,根据编排方式,可以分为基于业务场景的编排和基于用户行为分析的编排

基于业务场景的多因子认证组合

不同的认证因子的安全性和对用户的操作影响各有差异,我们需要在不同安全级别的业务场景中选择不同的认证组合。下面举几个例子:

(1)公司员工需要登录VPN的场景: VPN属于高风险场景,需要确保使用人的身份正确无误,对安全性的要求高于用户交互体验要求,因此该场景我们采取结合多项持有物和生物特征的多因子认证编排。用户首次在一台PC设备使用VPN登录时,要求用户进行动态密码+人脸识别认证,确保访问设备的首次使用是足够安全的,后续用户继续使用时,通过验证PC设备历史访问记录,仅需要动态密码即可认证。

(2)C端用户在线下单的场景: 在线下单一般被认为是低风险操作,很多电商系统出于用户交互体验的考虑,在下单是并不要求严格的身份验证,仅需要用户为登录状态,且在常用设备登录,用户仅需提供密码或历史登录凭证即可通过认证。但一般到付款环节会要求用户做强验证,如指纹/扫脸/验证单独的支付密码等。

(3)B端用户金额提现的场景: B端用户提现是一个典型的强校验场景,一般情况下提现需要在常用设备上进行,作为验证方,我们在进行身份验证时要规避掉用户密码泄露,设备丢失等意外情况,因此在做认证编排时需要同时包含所知,所有和生物特征三种手段。

基于用户行为分析的多因子认证组合

根据用户的历史行为特征,我们可以对用户访问进行风险与信任的动态评估。认证系统将根据评估的结果,对用户采取不同的后续验证要求。用户行为的采集项包含:

  • 用户使用位置:常用登录地点/访问IP等信息

  • 用户使用习惯:常用使用时间/使用系统等信息

  • 用户常用设备:已验证过身份的手机/PC电脑等信息

作为统一的登录验证入口,SSO可以在上述信息发生改变时及时感知并在发起认证请求时要求用户提交变更项所对应的补充验证手段。举例来说,用户通过短信验证码在一台新手机上登录了我们的应用,只能证明当前用户拥有帐号所绑定的手机号码,但无法排除用户手机卡丢失的可能,我们会在用户验证时要求用户进行人脸扫描来核实生物特征,认证通过后当前设备会被加入帐号的受信列表,设备的其他验证方式,如手机指纹验证或faceID验证就可以作为后续使用场景中的辅助验证手段。

根据场景和用户行为分析的多因子认证编排一定要明确每一种认证方式所代表的含义,多因子组合一定是涵盖不同维度的验证手段,相互独立且完全穷尽当前认证所需的安全要求。除通用策略以外,我们也允许用户和系统管理员可以对动态信任策略做自定义配置,如登录新设备或异地登录要求强制二次校验等,以满足不同角色用户的安全要求。

0多因子认证(MFA)的部署

从MFA编排需求出发,我们需要完成MFA认证前后端依赖的部署方案,常见的MFA认证终端包含客户端应用,硬件令牌,Web页面交互等,各方式介绍如下:

客户端应用

客户端应用目前一般以手机App为主,随着移动互联网的普及和智能手机功能日趋丰富,我们可以通过手机App得到更多用户提交的位置,身份,所处网络,设备等信息,为用户提供更精准且无感的身份认证服务。

移动客户端可以同时结合三种基本认证手段,使得我们可以为用户提供一站式交互认证方案,常见功能包含动态码生成器,扫码/推送二次验证,手机号识别,人脸验证等。体系化的业务系统会根据功能敏感程度的递进,要求用户提供高级别的认证方式,更严格的功能只有当用户提供高敏感手段认证渠道之后才会解锁。此外,我们也可以根据用户所处位置来判断访问用户是否与以往的使用习惯一致,进而评估用户本次访问的安全程度,基于移动设备得到上下文感知能力,为认证系统基于用户习惯构建友好的风控策略提供了帮助。客户端应用推广使用相对便捷,用户接受程度较高,部署的边际成本相对其他方式低。主要的成本在于前期开发,打磨出适合业务自身业务场景的认证客户端相对比较耗时耗人力。目前市面上存在一些公有云服务的认证客户端,但功能都较为传统且单一,难以满足实际业务需求,仍需以企业定制开发为主。

硬件令牌

硬件令牌目前依然广泛用于政府/银行等较传统行业的各个高安全要求的系统中。设计良好的硬件令牌结合安全的使用环境,可以提供很高的系统防护性,并且存在逆向成本高,不易复制的特点。硬件令牌主要问题在于硬件成本和分发成本很高,且难以避免私下借用的情况,不适合作为常规企业的大规模终端部署方案,可用于少量用户的核心功能补充认证手段,如运维/财务人员等。

Web页面交互

Web页面交互一般作为Captcha/邮箱/短信验证码的呈现载体,插入在用户的使用过程中。Web页面可实现多种基于点击/输入的认证交互手段,受限于浏览器的隐私策略限制以及电脑硬件信息采集能力,Web能实现的认证手段少于移动客户端,但在大部分非严格场景下,Web交互已经能满足我们对认证安全性的要求。对用户友好的认证原则一般遵循: 能确保用户身份可信就不需要认证,能让用户点击验证就不要输入,能在电脑输入就不要用手机认证,能用手机直接点击认证就不要进行复杂操作。基于此,Web页面的轻量交互是移动客户端认证方案很重要的补充手段,是确保整体方案实现用户友好交互的关键点之一。

服务端部署

服务端是整个多因子认证策略的编排点,是认证策略的部署核心。服务端在用户访问入口,通过综合判断当前访问用户所具备的所有可用认证手段和用户访问的目标资源/操作所需的必要安全级别,以及当前用户交互环境的信任等级,在必要情况下拦截用户交互并返回可被终端识别的认证手段要求。对于当前用户认证手段不足以操作目标资源的情况,会在对应认证客户端中提示用户补充信息以解锁功能。良好的服务端认证策略编排会减小因MFA认证对用户操作打断而带来的挫败感,甚至可以在交互成功时提高用户的成就感,提高产品整体的流畅度。

0MFA的攻防介绍

针对MFA的主要攻击方法主要有三种,社会工程学 Social Engineering、技术攻击 Technical Attack、物理攻击 Physical,在真实的攻击中会用到一种或多种攻击方法,攻击经常出现在identity, authentication, and authorization链接中。下面我们聊一聊针对MFA的常见攻击方式。

会话攻击

web会话凭据通常是Cookie中存放的会话ID,该ID是随机不可预测的值,通常由SHA-256等算法生成,并且在会话过期后丢弃,不可重复使用。大多数情况下,一旦会话被窃取,身份认证将形同虚设,攻击者可以轻松通过有效的会话进入系统并窃取数据,所以会话窃取是最常用的攻击手段之一。

会话的常见攻击有:

(1)利用会话漏洞或存储会话配置不当问题

如session ID 或session token 生成的算法存在问题,导致可被预测、暴力破解等,如ID只是通过简单的编码、加密;Jwt token 伪造等;存在会话设置,可固定目标会话,待目标认证后使用会话等;凭证未存放在httponly中,可通过跨站脚本攻击窃取会话;系统即使将会话存放在httponly中,如果存在debug页面输出凭证信息,导致通过跨域、跨站等多个利用组合利用获取httponly中的会话信息

(2)从网络窃取会话

其一,MFA认证面临着特别多的钓鱼攻击,攻击者通过代理等方式,在用户和站点间建立代理服务器,当用户认证通过后,窃取用户凭证,该方案可绕过部分MFA因子如totp、短信验证等等。

其二,必须停止使用HTTP这种非加密协议,而是使用HTTPS,HTTP建立的链接是不受保护的,非常容易被劫持。MITM(Man-in-the-MiddleAttack)中间人攻击是一种常见的攻击方式,攻击者可以通过各种中间代理方式(ARP欺骗、路由欺骗、DNS欺骗等)来窃听和查看会话,社工中经常使用的钓鱼邮件就是利用了这种方法来获取用户的会话信息。攻击者通常会引导用户进入一个与目标域名相似的网站,这些网站甚至拥有可信的数字证书,其内容和目标站点也极其相似,只要用户进行登录认证,攻击者就可以劫持会话信息。RFC8471的Token Binding协议能很好应对这种攻击手段。Token Binding允许应用程序和服务以加密方式将其安全令牌绑定到TLS层,从而预防会话盗用和重放攻击。存活时间长、唯一可识别的TLS[RFC5246]绑定可以跨越多个TLS会话和连接,同时支持用户随时重置Token。

这里不太好理解,举个例子,我去买一杯奶茶,我掏出钱包把10块钱交给店员支付费用换取奶茶。会话劫持就像是,攻击者抢走了我的10块钱,买了奶茶。这里我们把MFA比作钱包——理论上只有我知道,我拥有。一旦我的钱被抢走,MFA就被绕过了。Token Binding就像是把我的钱换成了信用卡,即使攻击者抢到了,还需要我的签名才可以支付费用,显然攻击者很难预料我的签名。这里我的签名就叫PoP(proof of possession) token。他是预先建立在这个链路上(TLS层)的机制,是很难破解的。Token Binding于2019年发布,大多数的认证协议都已经支持。

(3)从端点窃取会话

Windows、Linux、MacOS这些最流行的操作系统每年都会公布上百个漏洞,而其中至少有一个是可以远程入侵操作系统的,攻击者通常运用社工和编程攻击(木马、病毒、恶意软件等)来利用这些漏洞控制设备,一旦攻击者能控制端点设备,那么很快就能获取这片网络内所有能访问到的资源,再通过二次社工,所有IT资产都将岌岌可危。对于MFA来说,首先,攻击者可以窃取访问控制令牌,以此通过MFA。其次,攻击者可以观察并掌握整个MFA的流程。通常,MFA的关键信息无论是明文和密文,都会被记录在内存中,提权后的攻击者可以直接获取到这些信息,并针对它们进行相应绕过。另外,用户正常开启第一个连接会话后,攻击者可以开启第二个隐藏会话并重用用户的授权信息,从而进行恶意操作。以上所说的行为大部分都很难被发现,甚至不会被最先进的安全防护软件检测到。

我们再来说下移动端,攻击者在移动端所做的攻击尝试和PC端如出一辙,移动端通常是防护的薄弱环节,根据卡巴斯基实验室的研究,在2021年第一季度依旧检测到了1451660个恶意软件安装程序,虽然比2020年第四季度减少了655020个,但同比增加了298998个。

(https://securelist.com/it-threat-evolution-q1-2021-mobile-statistics/102547/)

现在大部分的MFA解决方案都离不开移动端设备,如手机,一旦被控制,那么不仅手机内的所有操作内容都会被窃取,攻击者也将轻松绕过各个应用的MFA。虽然安卓已经建立起不少基于安全认证的应用市场如Google Play等,但还是有大批量的恶意软件通过非正规渠道装入用户的手机中。对于iOS用户来说,苹果锁定了安装渠道,这确实在安全上取得了不错的效果,但依然无法阻止恶意软件植入用户设备中,就像当初人们相信Mac不会感染病毒一样。这篇文章阐述了恶意软件是如何潜入Apple Store的:

https://www.wired.com/story/apple-app-store-malware-click-fraud/

密码秘钥攻击

密码的安全性如今已经物是人非,仅这两年,互联网上累计泄露的账户和密码已达数十亿,这其中很可能就包含我们正在使用的用户名和密码,无论密码设置地多复杂,都可以被攻击者破解并登录系统。它存在以下几种被攻击的风险:

  • 自动化密码猜测:使用一些自动化工具(如 Brutus、Web Brute、Bert、SqlPing、Wfuzz等)将准备好的密码字典进行登录尝试

  • 暴力破解:按照一定顺序或随机生成字符串进行登录尝试

  • 字典攻击:根据单词或密码流行情报进行特定组合的登录尝试

  • 密码喷洒:针对一个特定密码进行不同帐户登录尝试

  • 彩虹表:使用彩虹表对密码哈希进行猜测,最终破解用户密码

这些破解手段已经非常成熟,使用门槛很低,攻击者可以以此高效地窃取用户的登录名和密码,部分针对性的攻击,攻击者会收集人员、企业信息制作对应的密码字典,如:收集帐号手机号、姓名、生日、常用密码等组合制作密码字典,提升密码破解的成功率。除此之外,用户的使用习惯也是提高登录安全风险的因素之一,一些用户会直接把密码贴在桌上的,甚至屏幕上,开发人员有时也会将密码等敏感信息硬编码在代码内然后上传至github等公开代码托管平台。这些无疑是帮助了攻击者更便捷地侵入系统。种种安全事件表明,仅凭密码无法确保身份认证的安全性和可靠性,需要与其他验证方式组合。

密码学是一门不停迭代的学问,我们建议始终使用行业认可的加密技术和密码复杂度,并进行定期更新,不过,自从量子计算向公众开放后,任意算法的解密破译就不再是一件遥不可及的事了,在不远的未来,现在所搭建的加密基础设施和理论都将被打破,我们将不得不进行另一种维度的加密来保护通信。

0MFA在红蓝对抗中的实际效果

伴随持续的红蓝对抗以及生产环境持续的外部攻击,我们制定的MFA策略逐渐完善,已发挥出日益明显的防护效果,场景如下:

密码/验证码爆破

密码爆破属于比较基础的攻击手段,服务端一般通过封禁IP、增加人机交互、冻结被爆破的帐号、以及要求用户使用高强度密码等方式来对抗攻击,但这些都属于比较被动的防御手段。我们在此之上做了更严格的要求: 针对大部分核心系统功能,不允许使用单独的密码认证方式,密码仅为部分场景的登录认证开放,并作为一些场景的辅助验证手段。用户的日常登录均通过App扫码/推送登录实现,不依赖密码认证可以极大减小被攻击面。针对验证码爆破,我们一方面在验证码发送入口采用白名单验证机制,仅通过交互验证的设备才可调用一定次数的发送接口,同时在验证码提交接口增加针对手机号/验证码/设备标识/IP等因素的失败计数,达到设定阈值即冻结对应特征值。以上措施可以迫使攻击者放弃攻击,或使用其他更高成本的攻击手段,实现对抗效果。

会话劫持

会话劫持一般通过钓鱼邮件或链接进行,攻击者在邮件中散布诱导性很强的内容,吸引用户到伪造的登录页面发起登录认证。会话劫持常见的有效预防方式是对公司人员的安全意识培训,通过日常的培训和不定期的安全演练来提升员工对可疑邮件的敏感性。在系统层面,我们实现了以下防护手段:

  • SSO颁发的所有session或token凭证均记录颁发时的请求方关键信息,一旦后续请求的信息发生变化,如IP地址/归属地发生变化,将中止用户的访问请求并要求用户通过手机App进行二次验证

  • 大部分攻击者通过公有云或海外服务器发起攻击,服务端会对以上IP发起的请求要求用户做额外验证

  • 增加登录页前端的复杂性,对当前访问地址域名做检查,避免攻击者通过直接的前端转发呈现给被攻击用户完全相同的登录页面

  • 办公人员统一使用自研邮箱客户端,对于外来邮件做强提醒并在客户端内限制用户发起非公司域名的登录行为

端点控制

社工是防御方无法绕过的问题,人永远是系统安全防护最薄弱的环节。对于攻击者而言,通过社工成功获取到办公人员电脑权限基本意味着目标已经达成,在不设防的办公电脑上可以藉由办公人员已经登录过的浏览器,访问用户具有权限的所有公司内部系统,并能以办公网作为攻击点来继续扩大攻击面。针对社工的防护,除基础的人员安全意识培训以外,在系统层面我们还可以做到以下手段:

  • 公司内部系统权限实现最小化分配原则,避免出现非关键人员一人沦陷后,公司全部系统都被攻击者摸个遍的情况

  • 针对用户日常访问系统做画像分析,用户访问行为有明显异常的情况下,触发用户手机二次验证

  • 办公网电脑统一安装内部杀毒软件并及时升级,避免办公人员电脑被木马控制

  • 办公网络限制常见的远程控制软件连接,工作场景有需求的均使用内部软件

  • 办公网及关联网段部署蜜罐,及时发现受控电脑的异常访问或攻击行为

0总结与展望

如今,全世界都在遭受着大量的网络攻击,到处都充满着攻击者,他们窃取个人隐私、账户密码、甚至IT资产。二十多年来,90%到99%有效的攻击都来源于社工和软件漏洞,而最可怕的是,大部分攻击都没有被感知到。这些攻击中,有很大一部分都和系统的身份认证有关,一个简陋的认证将会导致大量的恶意攻击和信息泄露。从最早的密码认证到动态密码,短信验证码,人脸认证,再到结合用户使用场景的多因子认证,多因子MFA认证已成为越来越多系统和服务的选择,未来的认证场景一定是朝着结合用户使用习惯,减少用户操作的方向发展。目前我们已完成的实践主要是基于规则和业务场景,后面会逐渐依赖机器学习,大数据分析等,使认证编排组合趋向动态化,智能化,无感化。

声明:本文来自中通安全应急响应中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。