美剧 WestWorld 第二集里有个场景十分有意思:游客来到西部世界公园,遇到了一个漂亮的女接待员,但无法区分对方是否是人类,于是产生了如下对话:

Guest: "Are you real?"  -- Are you a Human or a Host?

Host: "If you can't tell, Does it matter?"

可以说科技尤其人工智能的发展,机器人已经足以模拟人类达到以假乱真的地步,不过今天要谈的并不是人工智能、不是机器学习。诚然AI可以在人机识别及诸多方面做得很好(假设有足够的训练样本),但它未必是最好、也不是唯一的选择,至少在我所说的当前场景中。

作为科普和背景铺垫,感兴趣的可以检索:

验证码的前世今生(前世篇)

验证码的前世今生(今生篇)

直入主题,安全领域中爬虫、暴力破解、扫描、DDoS等攻击行为都是通过工具发起,操纵者预设指令而工具去自动执行直到任务完成或出于某种原因中断运行。传统安全机制而言,WAF、IPS等这类产品的确在一定程度能够保护用户免受攻击,但鉴于它们都依赖于特征和规则库又有很多限制。

时代在变化,攻击者也在不断尝试新的机会和场景,比如竞争性爬虫、撞库、薅羊毛、虚假注册、灌水刷评论等等。全局分析时,我们可以认为这些操作都是恶意且应被阻断的,然而单独来看每一个操作又是合法且正常的,没有任何攻击特征,WAF解决不了,代码层面做诸多做限制也解决不了。

没有攻击特征,不代表无法识别,可以肯定的是这些针对业务发起的"定制"攻击绝大多数来自于自动化工具,或者说机器人。然而问题难就难在这里,怎么区分一个请求的发起者是人还是机器?

业务方会做很多事情限制非法机器人的访问,最常见的是使用图形验证码、短信验证码。验证码机制早期确实很有效果,但现在也遭遇着巨大的挑战,比如国内打码平台的出现及使用。另一方面,验证码会对用户体验造成较大伤害,企业不得不做一个安全与使用方便的折中,于是出现了滑块验证码。相比扭曲的图形验证码,理论上基于用户行为的滑块验证码无论从安全级别还是易用性都可以有巨大提升,然而它只是安全防护机制其中的一道,存在被突破的可能,而且已经被突破。

实力较好的公司有人专门负责风险控制(简称风控),国内目前也有很多风控服务和产品的提供商,大多是从多维度的数据层面(如过往操作记录、设备指纹等)为某一个"用户"的操作提供信誉评分,确定其是否合法,例如转账支付是否为本人操作。阿里云是这方面的杰出代表,不仅数据层面而且在用户行为识别方面做了不少工作。不过其在风控方面的成就可复制性并不高,首先不是每家公司都有能力做好海量大数据分析,其次用户行为识别需要有很强的前端技术能力,而这种能力又会以数据的形式转化为大数据的分析能力。

下面介绍一下我们在用户行为特别是人机识别上的一些实践,以下均以Web应用为例说明。

对于Web应用而言,(视情况而定)本身就存在较多敏感信息,比如页面内容、JS源代码、后续链接、表单信息等,它们构成了一个应用的运行逻辑。只要能判断这个逻辑,应用行为就是可以预测的,这也是爬虫、扫描器等工具运作的基本原理。那如果我可以对应用页面的源代码进行混淆或加密,是否能使工具失去作用呢?答案是在一定程度上可以,但这里面临几个问题。

首先,页面中包含各种标签、表单、链接、JS等信息,哪些信息需要混淆需要明确。最重要的是,虽然可以使用算法进行混淆,但是把混淆后的代码还原让浏览器可以解析以保证应用可正常访问则要难得多。正是因为还原混淆代码的难度大,很少有应用采用这种保护方式。

其次,如果算法固定且考虑到性能问题,加密信息和算法可以被逆向还原,稍微做一些定制开发就可以使工具再次自动运行。如果有多种混淆算法,如何决定在某一时刻使用哪种算法?

上述两个问题已经超越了本人能回答的范畴,但可以讲一下我司已经实现的效果:(1)页面的表单、URL、JS代码全部使用专有算法封装,可理解为加密,其余内容不做处理;(2)算法是动态变换的,每次请求譬如刷新页面都会随机使用不同算法,可使用算法数40亿以上;(3)所有封装通过JS实现,用于加密页面的JS本身被混淆且没有逆袭价值;(4)被保护页面具备防止调试和虚拟执行的能力;(5)正常用户通过浏览器进行访问不受任何影响;

根据Distil公司的统计,54%的自动化工具不具备Javascript解析能力,这意味着超过一半的工具将无法使用,无需任何规则即可有效阻拦大量机器,此为人机识别第一步。

虽然商用扫描工具很多都具备JS解析能力,但对于这类机器行为仍有办法识别——动态验证。简单来说,动态验证会校验JS的实际运行环境、获取设备指纹,以及采集客户端行为——例如是否有键盘鼠标操作及在页面停留时间等。通过多维度数据分析可以区分操作的是人还是机器,此为人机识别第二步。

对于提交的表单信息,也可以选择对其进行混淆,即便通过中间人攻击截获了请求,看到的都是乱码,无法窃取信息、无法伪造、无法篡改。由于算法是动态的,同样不担心被逆向或破解。这一步本身不是用于识别工具行为,却可以有效防御借助工具进行的中间人攻击等行为。

动态令牌机制可以作为人机识别的第三步来看,可以有效防止请求重放等非法操作。即便不对页面进行封装,仍然会(根据上一个页面的访问)动态生成每个请求唯一的令牌,存放在Cookie中。保护模式下每个令牌都只能用一次,一旦令牌为空、重复使用、或者被篡改,请求就会被视为无效请求而拦截。

综合以上几个过程,从简单到高级的Burp、爬虫、扫描器、PhantomJS等机器行为都能被有效识别,理论误判概率%0。最重要的是,做这么多事情无须应用改一行哪怕半行代码,客户端无需做任何更改,各大主流及非主流浏览器访问均不受任何影响。

我们使用的方案除了人际识别当然还有更多的能力,这里不做描述,感兴趣的可以联系我。

实际上,如果能在非法请求到达后台之前能够对其进行识别并采取阻断措施,带来的效益除了减缓攻击,还可以节约带宽、服务器资源、过滤大量噪音和垃圾数据。更重要的是,我们使用的是一种全程防护的方式却又很轻量级,变被动为主动,先发制人。

更多信息请见:https://www.riversecurity.com.cn | 私聊

"机器人防火墙":人机识别在应用安全及风控领域的一点实践的更多相关文章

  1. 活动 Web 页面人机识别验证的探索与实践

    在电商行业,线上的营销活动特别多.在移动互联网时代,一般为了活动的快速上线和内容的即时更新,大部分的业务场景仍然通过 Web 页面来承载.但由于 Web 页面天生“环境透明”,相较于移动客户端页面在安 ...

  2. 风险识别系统-大数据智能风控管理平台-企业风控解决方案– 阿里云 https://www.aliyun.com/product/saf

    风险识别系统-大数据智能风控管理平台-企业风控解决方案– 阿里云 https://www.aliyun.com/product/saf

  3. Web前端接入人机识别验证码---腾讯防水墙

    Web前端接入 1. 准备AppID 验证码接入需要先在管理后台中注册获取APPID和APPSECRET,注册步骤请参考 快速开始 2. 快速接入步骤 1.在Head的标签内最后加入以下代码引入验证J ...

  4. 【DDD】领域驱动设计实践 —— 限界上下文识别

    本文从战略层面街上DDD中关于限界上下文的相关知识,并以ECO系统为例子,介绍如何识别上下文.限界上下文(Bounded Context)定义了每个模型的应用范围,在每个Bounded Context ...

  5. 小白日记13:kali渗透测试之服务扫描(三)-SMTB扫描、防火墙识别、负载均衡识别、WAF识别

    SMTP扫描 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/ ...

  6. 机器人学 —— 机器人感知(Gaussian Model)

    机器人感知是UPNN机器人专项中的最后一门课程,其利用视觉方法来对环境进行感知.与之前提到的机器人视觉不同,机器人感知更侧重于对环境物体的识别与检测.与计算机视觉不同,机器人视觉所识别的物体往往不需要 ...

  7. 如何使用padlepadle 进行意图识别-开篇

    前言 意图识别是通过分类的办法将句子或者我们常说的query分到相应的意图种类.举一个简单的例子,我想听周杰伦的歌,这个query的意图便是属于音乐意图,我想听郭德纲的相声便是属于电台意图.做好了意图 ...

  8. 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程

    视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...

  9. Ocr答题辅助神器 OcrAnswerer4.x,通过百度OCR识别手机文字,支持屏幕窗口截图和ADB安卓截图,支持四十个直播App,可保存题库

    http://www.cnblogs.com/Charltsing/p/OcrAnswerer.html 联系qq:564955427 最新版为v4.1版,开放一定概率的八窗口体验功能,请截图体验(多 ...

随机推荐

  1. TortoiseSVN设置忽略文件和目录文件夹

    TortoiseSVN设置忽略文件和目录文件夹  在多数项目中你总会有文件和目录不需要进行版本控制.这可能包括一些由编译器生成的文件,*.obj,*.lst,或许是一个用于存放可执行程序的输出文件夹. ...

  2. CentOS添加磁盘分区

    (这里的磁盘在vmware workstation VM中添加) 1.关闭虚拟机,在虚拟机设置中添加一个硬盘,然后开启虚拟机. 2.使用fdisk -l命令查看,这时会发现一个为被使用的设备,有2G的 ...

  3. @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式

    在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...

  4. halcon c++ 异常处理

    现象 Halcon导出的C++程序,try catch不到异常.在Halcon下可以正常Catch到异常.  C++代码:try{   tuple_max(hv_Length, &hv_Max ...

  5. Delphi基础-数据类型

    枚举类型 Pascal程序不仅用于数值处理,还更广泛地用于处理非数值的数据.例如,性别.月份.星期几.颜色.单位名.学历.职业等. ​ 1. 枚举类型的定义 格式: type 枚举类型标识符=(标识符 ...

  6. 【Luogu1373】小a和uim之大逃离(动态规划)

    [Luogu1373]小a和uim之大逃离(动态规划) 题面 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布 ...

  7. Luogu4137:Rmq Problem/mex

    题面 传送门 Sol 这题可能是假的 离线莫队搞一搞,把数字再分块搞一搞,就行了 # include <bits/stdc++.h> # define IL inline # define ...

  8. console.log 简写

    console.log 简写 平常代码调试总会用到console.log,但是每次写这么长也是很麻烦,就想着存一个简介一点的变量: 然后就随手写了下面代码: var a = 10; var log = ...

  9. 简单几步优化你的windows,加快开机速度(重装windows之后要做的几件事)

    每个人都想要让自己的系统运行得快一些,开机快一些,我就来说说我自己的经验,我使用的系统是windows8.1,当然这有些方法也适用于其他的系统,我每次重装完系统之后第一件事就是下面几步,当然重装系统之 ...

  10. 快速搭建CentOS+ASP.NET Core环境支持WebSocket

    环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...