返回介绍

15.1 账号安全

发布于 2024-10-11 22:28:33 字数 4189 浏览 0 评论 0 收藏 0

相比于大部分互联网应用只需要手机注册短信验证,金融行业的账号往往需要到柜台或远程视频核实开启,包括身份证、电话、住址甚至人脸信息等都会收集,按道理安全系数会比较高,但有利益的地方就会有黑灰产的出现。

金融业务系统中,账号安全是所有业务场景的基础,包括注册、登录、密码找回等功能模块的安全性是必须要考虑的。随着 Web 应用开发水平的提升,一般金融企业在这些地方出现逻辑漏洞的可能性比较小,但也需要关注比如垃圾注册、拖库撞库、账户盗用、短信炸弹等问题。结合金融行业特点,下面重点阐述发生频率较高的撞库、账户盗用等相关内容。

15.1.1 撞库

撞库分为垂直撞库和水平撞库两种,垂直撞库是对一个账号使用多个不同的密码进行尝试,可以理解为暴力破解,在做了“多次错误导致锁定”控制的应用上,垂直撞库很容易被发现。水平撞库则是利用同一个密码(比如 123456)对多个账号进行尝试,由于对同一个账号的错误次数没有触发锁定条件,水平撞库往往更难从业务系统上直接发现。

防撞库有几种主要的思路:在用户侧做人机识别,比如验证码;利用页面混淆技术实现保护;在后端做请求分析与拦截。

1.验证码

验证码一般包括图形验证码、短信验证码两种,其中图形验证码因低成本优势被广泛使用。

(1)图形验证码

常见的图形验证码是与 Web 中的会话相关联的,在一个会话开始时,在需要使用验证码的地方会生成一个与当前会话相关的验证码,用户识别出验证码后通过填写表单将数据提交给服务器,服务器端会验证此次会话中的验证码是否正确。

对用户方来说,用户访问起始页面,识别返回页面中的验证码,在输入验证码和其他信息后提交表单,在服务器处理后可查看到当前操作是否成功。服务器在接收到用户对初始页面的请求后,会自动创建一个新的会话,同时生成验证码来关联这个会话,并且生成用户可见的验证码图片,最后这些页面返回到用户的浏览器上,用户此时可看到完整的页面。在接到用户提交的表单请求时,服务器会将用户提交的验证码值并与之前存储在此会话下的验证码值做比较,如果一致则判断验证码是正确的,否则认为提交的验证码是错误的,客户端可能是计算机或者用户识别错误。服务器端进行这些处理后将处理结果反馈给用户。如果提交的验证码是正确的,则按照预定流程进行下一步骤,否则回到需要用户输入的那个界面上。

但是,图形验证码存在一定的弊端,图形验证码通过去噪、二值化、切片等处理后,可以实现机器自动识别,网上有专门的验证码识别工具,搜索“验证码识别”还能找到一些打码平台。

打码平台在黑产链条中使用广泛,从目前公开的案件报道中可以看到,黑产在这方面的技术已经非常先进,包括机器学习、人工打码全都用上了。

真实的攻击场景中,验证码的识别率不用太准确,假设有 40%的识别率,理论上多请求两次就会成功,所以黑产先天上占有优势。对于企业来说,验证码搞复杂了用户体验就会非常差,像某购票网站就是个例子。

(2)短信验证码

同样,针对短信验证码,也有专门的平台,笔者随手在网上搜索“短信验证码接收”就找到了一个叫“易码平台”的短信验证码接收平台。

有攻也有防,验证码的技术也在不断地发展,包括常见的问答模式、点选模式、拖动验证等,图 15-1 是某公司推出的人机行为验证解决方案在线演示效果图。

而某 T 公司基于其海量数据和场景优势,也推出了验证码服务,包含其独创的 VTT 语义验证,其官网介绍图如图 15-2 所示。

图 15-1 人机行为验证

图 15-2 某 T 验证码官方介绍

VTT 验证码效果如图 15-3 所示。

2.页面混淆

针对登录场景的保护,Shape Security 公司推出了一种基于页面混淆的动态保护技术,其效果如图 15-4 所示。

图 15-3 某 TVTT 验证码效果

图 15-4 ShapeSecurity 效果图

一个登录的表单,混淆前后变化非常大,包括元素的 ID、Name 全都变了样,传统的暴力破解工具在这里就失效了,因为没法定位到这些元素。

国内的瑞数公司也在推出了类似的产品,采用动态变形、动态混淆、动态令牌等技术进行防护,其中动态变形效果如图 15-5 所示。

瑞数公司的动态混淆与动态令牌效果如图 15-6 所示。

此类方案实施过程中需要注意两点:

·网站系统内存在的一些接口,由于需要被调用,不适合用此方案进行保护,实施时需要注意做例外处理。

·由于混淆会对 HTML 甚至 js 进行处理,需要考虑一些特殊业务场景下的兼容性问题,如浏览器版本、第三方控件、页面嵌套在 C/S 客户端中等。

3.后端分析与拦截

这里的后端处理,可能是专门的 WAF 设备,也可能是 Nginx 上的过滤模块,也可能是传统的防火墙。

一般的 WAF 都有对基于请求频率进行限制的功能,将需要保护的页面、时间、请求次数相关参数进行设置即可。

图 15-5 瑞数公司的动态变形示例

图 15-6 瑞数的动态混淆与动态令牌

Nginx 本身也提供了一些连接限制模块,比如 limit_zone 和 limie_req_zone,为了控制更细粒度,比如针对 URL 等,一般采用 Nginx+Lua 的方案。

将客户端来源 IP、URL 及其他值合并为一个参数,对这个参数进行统计并写入 Nginx 的共享内存,当这个统计值大于一定数量时将进行拦截。

有些公司可能出于可用性考虑,仅将日志收集起来进行准实时分析,当发现有问题后调用防火墙进行拦截,此处不再赘述。

15.1.2 账户盗用

通常情况下,用户在一个 APP 正确输入了用户名和密码,就会允许登录;而在金融行业场景下,涉及资金的操作都得谨慎,所以很多业务都设置了单独的支付密码(或称交易密码)。

并不是单独设置了支付密码就安全了,因为坏人总会想办法拿到你的密码,比如上面的撞库,或者通过伪基站发送钓鱼短信诱使用户访问并在页面中输入用户密码等信息,一旦这些信息被坏人拿到,马上就会给受害者造成财产上的损失,所以危害极大。

因此,金融企业还需要采用加强性验证、用户提醒等方式来保障用户账号安全。图 15-7 是某银行启用安全认证的官网通告截图。

图 15-7 某银行官网关于启用安全认证的通告

其工作原理是:当用户在一部新手机或新设备上登录网站或 APP 时,由于后台没有对应的设备指纹记录,所以用户输入成功用户和密码后,还会要求输入一个短信验证码(我们叫它二次认证),当达到一定的条件(比如成功在这个设备上登录 5 次)后才不会有这个二次认证。

除了以上方法外,不少应用还会按场景使用验证码、异地登录提醒等功能,比如当发现账号在非常用的地点登录时,可以通过验证码进行二次认证,或者登录成功后给用户发一个异地登录提醒的信息等,图 15-8 为 QQ 异地登录提醒功能。

图 15-8 QQ 异地登录提醒功能

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文