Part 1 / 背景介绍
Bot(Robot)流量是指在互联网上对Web网站、APP应用、API接口通过工具脚本、爬虫程序或模拟器等非人工手动操作访问的自动化程序流量,一般也称为机器流量,据第三方厂商统计2020年的Bot流量请求占比达到57%,已经超过人工的访问流量。
Bot流量既存在善意的也存在恶意的,善意的流量为搜索引擎、统计和广告程序等正常流量,恶意的流量通过利用IDC机房IP、代理或秒拨IP、伪造设备、手机群控、打码和接码平台等手段来爬取信息数据、刷业务接口、薅活动羊毛、用外挂作弊和漏洞检测利用等恶意攻击行为,对业务带来信息泄露、资源消耗或资金损失等风险和影响。
本文将从流量日志分析的层面来介绍如何检测Web异常访问行为并识别区分出恶意的Bot流量,从命令操作到分析工具和平台,再到自动化实践等手段用攻击案例来讲解Web访问日志分析技术,以及通过WAF(Web应用防火墙)制定策略规则或其他反爬防刷手段对恶意Bot流量的攻击行为进行拦截防护,最后会介绍相关安全运营指标和流程。
Part 2 / 日志分析基础
在Nginx、Apache、Tomcat等Web应用服务器会根据日志配置采集相关的HTTP日志字段,当访问网站或APP后会在服务器日志文件中生成该请求的Web访问日志的记录;对于已接入WAF的域名则可在WAF中方便获取到更多的如Cookie、Request Body、各个Hearder等详细的Web流量日志,一般可用于分析的日志字段为:
- time:访问请求的时间日期
- IP:客户端来源IP地址,根据网络结构需要获取到真实IP,如X-Forwarded-For左边第一个IP(可伪造)
- request:请求的URL链接,包含Path和Params
- user_agent:识别各个操作系统、浏览器或应用程序等的标识(可伪造)
- referer:请求URL链接的来源页面(可伪造)
- method:如GET、POST、PUT等请求方法
- status:如200、404、500等响应状态码
- body_bytes_sent:返回给客户端的响应体大小,可通过长度区分请求结果
- cookie:用于识别用户身份(session可作为唯一会话标识),记录状态或信息等(可伪造)
- request_body:如post body中的参数和值
Nginx默认的Web日志结构:
11.22.33.44- – [06/Mar/2022:16:00:00+0800] “GET /login.do?username=test&password=xxxxxxHTTP/1.1” 200 368 “http://www.test.com/login.html” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.1234.100Safari/537.36” “-“ |
对应日志字段的信息:
客户端IP- 请求时间日期- 请求方法- 请求链接- 协议版本- 响应状态码- 响应体大小- 请求来源- 客户端标识 |
根据网站、APP等应用系统的功能和请求结构,在URL Params、Post Body或HTTP Header中提取的以下相关名称等的参数也是常用的安全分析字段:
- userid、username、phone:用户编号、用户名称、手机号码
- password:账号密码,通常为经过哈希或加密后的密文
- token:一般为账号登录后生成的唯一身份标识,基本会在指定时长内过期失效
- order_id:订单编号,如果有遍历ID的爬虫行为,则可能存在越权访问漏洞
- device_id:设备的唯一标识号,如手机的IMEI、MEID设备指纹等(可伪造),如因系统限制等原因,则会获取到默认值或空值
- device_type:如电脑、手机、平板等终端设备的类型、品牌或型号
- trace_id:每个请求的唯一标识,如果有持续重复的值则可能为自动化行为
- timestamp:请求的当前时间戳,如果有持续重复的值则可能为自动化行为
- signature:对请求进行签名加密后的值,如有持续重复的值则可能是没有验签导致被刷
- nonce:防重放生成的随机数,如有持续重复的值则可能是没有生效导致被刷
通过对Web流量日志中获取的字段内容,在指定单位时间内用特征匹配、聚合统计、组合关联等方法检测分析提取的各个字段内容,检测时间短的适合发现高频攻击行为,检测长的适合发现低频攻击行为,根据发现的异常特征再详细分析识别是否为恶意行为,如下举例的Web异常行为分析方法:
- 统计1天内排名Top 10的IP、User-Agent、Referer、参数中的token、device_id或userid等
- 统计1天内Referer不为空且不包含原本来源域名Top 10 Referer的访问请求
- 筛选包含脚本或工具特征的User-Agent,如Python、Java 、Apache、Client或Curl等的请求
- 筛选User-Agent不包含Mozilla、okhttp和Dart等非浏览器或APP网络库的请求
- 筛选Cookie、User-Agent、Referer或其他HTTP Header字段不存在或内容与正常访问不匹配的请求
- xx小时内在参数中trace_id、timestamp、signature或nonce等存在相同值且超过xx次以上的请求
- xx小时内在参数中的token、device_id等有超过xx个以上不同IP的请求
- 1天内在参数中的device_id有超过xx个以上不同userid、phone等的请求
- xx分钟内单个IP或token有超过xx个以上不同User-Agent的请求
- xx分钟内单个IP对order_id、phone或password等值去重后超过xx个的请求
- 1天内单个IP、token或device_id等值只访问某一个固定接口的请求
如下所示的为互联网行业常见的业务安全攻击场景,对于线上业务只要有利用价值就会存在被攻击的可能,需要通过持续运营来监测发现和分析识别出安全威胁或恶意攻击行为并进行防护和修复止损,避免对用户和企业带来不好的影响或损失。
- 账号安全:密码爆破、批量注册、账号枚举、短信轰炸、撞库、扫号
- 数据爬取:商品、物流、订单、个人和企业等信息或敏感数据
- 订单交易:外挂抢单抢票、刷单交易作弊
- 活动营销:邀请拉新作弊、优惠奖励领取、刷量推广、抽奖秒杀作弊
- 内容安全:广告引流推广、违禁内容发送
可对网站或APP来抓包提取或根据接口文档说明来梳理出重要的业务接口,如登录、注册、发送验证码、重置密码、商品信息和查询订单等API接口做重点监测和分析。对于比较复杂的风险或异常行为分析,则需要应用程序采集更多的信息在业务风控系统做分析识别和决策处置。
Part 3 / 日志分析命令实践
通过命令行对Linux服务器中的Nginx Web访问日志进行统计分析,如下命令操作指的是筛选出IP地址字段并排序,统计相同IP出现的次数并去除重复项,然后从多到少对IP次数排序,统计出一日内高频率访问的前10个IP,再对各个IP进行查询分析排查是否有异常访问行为:
分析排查发现其中一个高频IP对业务信息详情接口的ID号进行持续遍历地访问,存在爬虫攻击爬取信息的恶意行为,需要检查接口是否需要账号认证和有无返回敏感信息,是否存在未授权或越权访问漏洞导致被攻击,还是本身就公开访问的信息被爬取:
通过如下命令以双引号作为分隔符查询User-Agent字段,查找识别是否带有Python脚本、Java程序或工具软件等的请求行为,分析发现有通过Python脚本请求库对某个接口进行变化ID号进行查询或操作的异常行为:
如果爬虫通过代理IP等手段不断变化IP地址或者伪造正常浏览器指纹,则可筛选出User-Agent字段,统计相同User-Agent的高频访问行为,排查各个User-Agent是否为正常行为,可能会有相同的终端系统和浏览器,也可能存在合作方的正常调用行为,需进一步进行分析识别是否存在异常行为:
分析排查发现有个伪造正常浏览器的高频爬虫行为,也是对业务信息详情接口的ID号进行持续遍历访问爬取信息:
通过命令可以对不带有“Mozilla”关键字的非浏览器User-Agent高频请求进行统计识别,可能会存在APP客户端、通用网络请求库、搜索引擎爬虫或合作方调用服务等正常User-Agent,需要进一步分析排查出异常行为:
分析排查发现有Java程序不断请求手机账号认证接口,因访问日志中未记录Post Body信息,但可以根据业务功能可以判断出该行为是在遍历不同手机号,尝试刷取出已在业务平台注册的手机账号的账号枚举恶意攻击行为,通过识别响应体的大小可以判断出是否有遍历成功:
以上发现的恶意Bot流量攻击行为需要在WAF制定访问控制策略来拦截,防止继续被利用带来影响,针对被攻击的域名和接口,根据识别到的共同特征比如同一个IP或UA、同一个参数值等组合成规则来拦截请求,如下图所示:
对于拦截IP需要检查IP是否为运营商基站、企事业专线或合作方IP等,防止误伤到其他正常用户的访问;拦截User-Agent需要识别该UA是否为目前普遍使用的浏览器标识或正常APP调用等防止误伤,针对非浏览器且非正常客户端的才可以拦截。由于制定的WAF策略可能会造成误伤正常请求影响到业务访问,故需要先下发观察动作的策略,观察一段时间的策略匹配日志确认没有误伤后再调整为阻断动作来拦截。
Part 4 / 日志分析工具实践
对于直接用命令操作来分析日志识别异常行为,会存在不方便的问题,可通过Web日志分析工具来对日志文件自动分析输出统计结果作为参考,再进行下一步的排查分析。
如比较好用的360星图,可以识别检测出SQL注入、XSS跨站脚本、远程代码执行等Web安全漏洞攻击,还有简单的爬虫扫描和CC攻击等异常访问行为识别。支持Nginx/Apache/IIS日志和自定义格式,自动输出访问统计和安全分析报告。但该工具已没有维护更新,可作为应急检测工具来方便快速分析。
通过上述案例中使用命令操作分析识别发现的某个User-Agent针对手机账号注册验证接口的账号枚举攻击行为,在该工具中也可以发现该非法User-Agent的访问请求:
还有如下的Web日志分析工具,感兴趣的读者可以搜索下载使用:
- LogForensics:TSRC提供的一款日志分析工具,可从单一可疑线索作为调查起点,遍历所有可疑URL(CGI)和来源IP。
- GoAccess:一款开源的且具有交互视图界面的实时Web日志分析工具,通过Web浏览器或者Linux/Unix系统下的终端程序即可访问。能为系统管理员提供快速且有价值的HTTP统计,并以在线可视化服务器的方式呈现。
- AWStats:一款开源日志分析系统,不仅可用来分析Apache网站服务器的访问日志,也可以用来分析Samba、Vsftpd、IIS等服务的日志信息。结合Crond等计划任务服务,可以对不断增长的日志内容定期进行分析。
- Logstalgia:一款非常炫酷且可视化日志分析工具,可以直观的展示CC攻击和网站的日志分析,并以可视化的3D效果展示出来。
- web-log-parser:一款开源的分析Web日志工具,采用Python语言开发,具有灵活的日志格式配置。
- Webalizer:是一个高效的、免费的Web服务器日志分析程序。其分析结果以HTML文件格式保存,从而可以很方便的通过Web服务器进行浏览。
Part 5 / 日志分析平台实践
如果有上百个的业务域名而且Web访问日志分布在各个服务器中,用命令或工具来分析日志的话,操作会比较繁琐和效率不高,这就需要采用比如运维部门已有的统一日志收集与分析平台或者安全部门自己搭建部署的日志平台,也可以购买商业的日志平台产品来集中收集和分析Web日志,下面会介绍几种比较常见的日志收集与分析平台。
ELK/EFK
ELK/EFK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash/Filebeat和Kibana三个开源工具配合使用,用户可以对各类日志实现更强大的查询、排序、统计和生成报表需求。
ElasticSearch
基于Lucene(一个全文检索引擎的架构)和用Java开发的分布式存储检索引擎,用来存储各类日志,能对大容量的数据进行接近实时的存储、搜索和分析操作;可通过RESTful Web接口,让用户可以通过浏览器与Elasticsearch通信。
Logstash
由JRuby语言编写运行在Java虚拟机(JVM)上,作为数据收集引擎,它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给Elasticsearch。
Kibana
Kibana是基于Node.js开发的展示工具,可以为Logstash和ElasticSearch提供图形化的日志分析Web界面展示,可以汇总、分析和搜索重要数据日志。
Filebeat
轻量级的开源日志文件数据搜集器,通常在需要采集数据的客户端安装Filebeat,并指定目录与日志格式,Filebeat就能快速收集数据,并发送给Logstash进行解析,或是直接发给Elasticsearch存储,性能上相比运行于JVM上的Logstash优势明显。
通过Filebeat采集各个服务器中的Web访问日志,在Kibana界面对Web访问日志进行查询、筛选、生成统计报表进行分析,使用KQL语句灵活查询筛选相关日志。可以根据组合条件对Request、IP、User-Agent、Referer等字段计算出请求次数、去除重复项和排序统计生成饼图、条形图、折线图或数据报表等来分析日志数据排查异常访问行为:
例如对业务域名的账号注册短信发送接口进行统计分析,筛选排除掉Referer为原本正常来源的域名,并且Referer不为空值,发现有可疑的来源网址访问,对请求次数最高的网址筛选Referer分析详细的日志,会有不同来源IP和User-Agent、不同手机号码的调用,trace_id这类参数正常是用于生成不同的随机数,但在这里为一直相同的值,判断存在异常的访问行为:
访问来源网址后发现是号称为“在线短信测压”的网站,但实际为制作方的人员收集了不同网站没有做好限制而可被利用的短信发送接口,使用该网站的攻击者输入受害者手机号启动后即可调用大量网站的接口发送验证码等短信来实现恶意的短信轰炸攻击行为,不但会给受害者带来不好的影响,而且会对被攻击利用的业务平台造成大量的短信资费损失:
为了对该短信轰炸的恶意攻击行为进行安全防护,需要在WAF对域名制定访问控制策略,根据URL参数为该短信发送接口和Referer来源为短信轰炸网址的ACL规则进行拦截止损,策略生效匹配上后统计WAF拦截数据,在一日中可拦截达11万次以上的攻击请求,避免了增加多余的短信费用成本。
为了防止该行为再被其他攻击方利用,需要让研发人员对该业务应用的短信发送接口做限制,如限制同一IP和手机号的短信发送频次,增加图形验证码、行为验证码等人机验证手段,或者对请求的参数值添加签名验证,防请求篡改和重放等。
对于在Request中的Path、Params或Post body中的如token、device_id、trace_id、timestamp、signature等业务应用通用的参数和值,在日志中默认作为一个完整的URL或Body字段不方便分析,但可以在服务器的Logstash配置中对路径、接口参数匹配提取出来做为单独的字段,便于灵活对值进行统计和分析处理,如下图所示:
通过将URL中的接口方法和标识用户身份的参数token作为单独的字段,在Kibana报表统计计算域名在一个时间段中某个功能接口的token值,可以识别出有高频请求的用户访问行为,再对该用户的token进行详细的日志分析,排查是否为异常请求或攻击行为:
阿里云SLS
阿里云的SLS日志服务是云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。
通过购买开通日志服务可将SLB、WAF或CDN等云服务的Web访问日志存储到日志服务中,无需部署和配置直接即开即用。如开通云WAF的日志服务,可将WAF流量中包括Cookie、Request Body和规则匹配或攻击日志等常用日志字段记录下来。使用SQL语句和内置的各类函数来实现复杂的数据分析,自动生成各类统计报表,根据异常判断条件可识别出异常访问行为:
如下语句为筛选在5分钟内出各个域名Request中包含的“phone_no”手机号参数,通过函数单独取出trace_id参数的值,统计出相关域名的trace_id存在相同值且请求超过50次以上的,并从高到低排序输出对应域名、参数值和次数,可识别出可疑的域名和trace_id值,然后再继续分析是否存在异常访问:
查询域名和该参数值的相关日志发现此些请求为调用手机账号注册的短信发送接口,被用作手机短信轰炸攻击,并发现Referer不是为攻击者的短信轰炸网址,与正常的来源调用域名一样,用前面讲的检测方法则会识别不出该恶意Bot攻击行为:
通过安全威胁情报平台查询发现外部流传了该带有短信轰炸功能的黑灰产工具,反编译该工具可发现代码中包含被攻击域名和对应参数值的字符串,由此可判断出该攻击即为攻击来源工具,输入手机号启动后即可调用不同网站的短信接口来恶意轰炸受害者手机:
对于该类型的恶意攻击行为可以通过日志服务的告警通知功能实现实时监测攻击,根据以上的语句配置每5分钟统计一次数据,如请求超过50次以上则调用Webhook接口自动发送相关告警信息到工作IM软件的群机器人通知相关安全运营人员处理攻击事件:
可对不同域名带有短信发送或手机号等参数的接口做筛选,统计同一个IP、User-Agent或同一个随机参数值等多个维度来检测,在单位时间内高于请求次数的则将识别到的特征发告警信息通知出来:
通过在WAF中制定该攻击请求特征的防护策略来拦截恶意攻击,对该域名根据短信发送接口和trace_id的参数值做ACL规则来进行拦截止损,并查询对应防护策略是否正常匹配和统计拦截数据量:
但如果攻击方改变了请求参数trace_id的值则会导致绕过WAF的ACL防护规则,防护也就会失效,则就需要制定频率限制的CC防护策略,如设定当同一个trace_id值在xx秒钟内请求超过xx次以上的阈值,就会对该参数值阻断访问xx分钟。
或者根据该业务接口的正常访问频率,统计单个IP超过限定频率的话则拦截,但频率限制可能会造成误伤同一公共出口IP的正常用户请求,则可以将处置动作改为有二次验证的JS验证或行为验证码等人机识别手段,只要是浏览器访问可以执行JavaScript或者人工操作行为验证码判断正确就放行,如非浏览器访问则进行阻断,对于原生APP调用接口的不适用该方法,否则会影响到业务的正常访问。
Hive
Hive是基于Hadoop(一套开源的用于大规模数据集的分布式存储和处理的工具平台)的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供称为HQL的类SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
通过将采集到的所有业务域名的Web访问日志,根据各个日志字段和需要分析的接口参数进行过滤、拆分或转换等数据清洗处理后,定时写入存储到大数据/运维部门提供的或安全部门自建的Hadoop大数据平台集群中,并使用Hive工具写统计分析语句和算法模型对海量的日志数据实现复杂的离线分析,可制定任务定期跑数据来分析异常的访问行为。
如下例子,用HQL语句统计在某日1天时间内在URL参数中不为空的单个token值,判断条件为超过100个以上不同IP的访问请求;对域名、接口和token筛选分组且按去除重复后的IP数量从高到底的排序,并查询token访问的对应域名与接口方法、关联的各个IP地址、去重的IP数量和总共请求次数,输出结果为排名前10条的数据记录:
发现排名靠前的token有上千个不相同的IP访问,查询IP地址信息发现大部分为网络代理IP或者宽带秒拨IP,并且只访问某一个域名的同一个接口,平均每个IP只访问几次请求,通过对指定token继续查询和分析详细的日志后发现,存在变换遍历参数的数值去抓取公开信息的行为:
对于这种Bot攻击行为可以通过将业务系统的网页或APP接入签名服务的SDK,对浏览器或APP发起的请求自动添加上加密后的签名值,在签名服务的安全网关会验证签名请求是否正确,如果是非正常客户端或非人工手动的访问行为,请求参数值被篡改或者没有带上签名字段,则会验签失败拦截掉请求,如下的拦截攻击请求流量情况:
Splunk
Splunk是一个功能强大的机器数据分析平台,包括机器数据的收集、索引、搜索、监控、可视化和告警等。另一方面来说,Splunk是一个时间序列索引器,因为索引数据的时候,是基于数据时间戳把数据拆分成事件。支持从任何IT设备和应用(服务器、路由交换、应用程序、数据库等)收集日志,支持对日志进行高效搜索、索引和可视化。
Splunk功能概述
数据获取:支持各种格式(如XML、JSON)和非结构化机器数据的获取
数据索引:会自动索引从各方获取的数据,以便在各种条件下进行搜索
数据搜索:搜索包括在仪表板上创建指标或索引的模式
仪表板:以透视表、图表、报告等形式展示搜索结果
告警:用于在分析数据中发现的某些异常活动时触发邮件或其他方式的告警推送
可以通过Syslog、HTTP协议或转发器等采集Web应用服务器或WAF中的Web访问日志,将日志数据传输存储到Splunk服务器中,在Splunk界面中对Web日志进行查询、筛选、生成统计报表进行分析。
Splunk通过强大的SPL语法与内置的各类函数,可以搜索、统计、关联、分析和可视化任何数据。如支持在搜索时动态地匹配数据抽取出新的字段,也可以根据格式直接定义提取生成新字段,而无需像ELK那样在服务器中修改配置。如下语句可在URL请求中用正则表达式匹配出token参数的值并单独提取出来做统计分析,识别出高频访问的用户会话,然后再对具体token的访问日志做详细分析判断是否存在攻击行为:
Part 6 / 日志分析自动化实践
如果只通过人工手段来分析Web访问日志,识别Bot流量等恶意攻击或异常行为,则不能全面、高效和及时地发现恶意Bot流量,可能会漏掉没有发现到攻击行为,这就需要主动和实时地去自动监测Bot流量的异常行为。对于发现的安全事件人工去处置也会比较被动,可能会没有及时处理事件导致造成影响或损失,所以需要有自动去响应和阻断攻击事件的措施。
通过购买如WAF中的Bot行为分析的功能模块、SIEM/SOC平台中的UEBA(用户与实体行为分析)系统,或者由公司内部的安全研发人员来自己研发系统实现自动监测恶意Bot流量,可以关联威胁情报服务查询IP属性,将告警事件消息发送到短信、邮件或通讯工具等,并通过使用SOAR(安全编排自动化与响应)系统或者直接联动调用WAF的OpenAPI接口来自动处理攻击事件。
当采集的Web流量日志使用Kafka(一种高吞吐量的分布式发布订阅消息系统)缓存数据,就可以去实时消费拉取日志数据,使用Logstash对日志进行过滤、规范化和富化等日志清洗,通过大数据的Flink(面向分布式数据流处理和批量数据处理的开源计算平台)来进行流式计算处理数据,自动分析日志来实现识别异常行为的UEBA大数据分析功能。
对要分析的日志字段特征提取出来,根据特征表达式按计数、求和、平均数、去重数、最多值等计算规则来统计数据,采用算术、关系或逻辑等运算符制定策略表达式来组合特征后,在X分钟的时间窗口中针对标识用户身份的token、userid或IP地址等进行统计分析,识别区分出个体或群体行为来发现异常请求,将产生的告警事件信息通知出来,并将原始日志数据和告警事件存储在ElasticSearch中供于记录和分析使用。
如下例子,通过对域名的账号登录接口按请求次数来统计制定计算特征,按单个IP在X分钟请求次数最多的是账号登录接口且占比大于所有请求的60%,以及请求次数超过10次以上来制定爆破密码场景的检测策略,当有攻击行为触发检测策略后会产生告警事件将相关信息发送到工作IM群机器人,由安全运营人员分析和处理告警事件:
在Kibana中排查和分析日志发现其中某个IP对账号登录接口进行登录尝试,手机号为不同的号码且加密后的密码口令为同一个,响应体的大小也非登录失败的大小,故可以判断账号尝试登录成功,在业务运营后台系统查询也发现账号确实已注册生成。通过外部的业务安全威胁情报平台查询发现该IP地址是活跃的代理IP且为高风险,对登录的手机号查询发现部分为虚拟运营商的号码也是高风险,可判断为批量登录账号的“扫号”攻击行为:
那这些账号是从哪里和怎么注册成功的?通过查询关联的IP地址或者手机号排查分析发现请求调用发送短信验证码,并获取到验证码认证后注册账号,且通过不同代理IP和变换设备ID号来防止发现该攻击行为,查询威胁情报识别部分手机号为虚拟运营商号码,或者是被黑产控制用于收发验证码的真实手机号的拦截卡,判断为批量注册账号且有针对性目的的恶意Bot攻击行为:
在业务运营后台系统查询这些账号的操作行为和订单记录发现,账号注册成功后会领取到优惠券,并且有账号已经下单使用了优惠券。通过外部威胁情报平台可以获取到类似的黑灰产工具,攻击者通过识别图形验证码的打码平台和接收短信验证码的接码平台,实现自动注册新账号和领券优惠券来使用,且新账号可用于恶意“养号”行为。
需要对该恶意攻击行为分析识别出共同的异常特征后通过WAF制定防护策略来拦截,并补充完善检测策防止因绕过WAF防护而没有及时发现攻击。也可以制定准确率比较高的检测策略,将识别收集到的异常手机号码,调用业务风控部门提供的接口自动将手机号情报信息录入到风控系统中,由风控系统进行风险分析并对异常手机账号做禁止登录、下单或使用优惠券等手段来处置事件。
通过制定超高频访问的通用检测策略来发现高频率的爬虫或者刷接口的请求,针对各个业务域名的流量访问情况设定阈值,当在X分钟内同一个IP或token请求接口超过X次时将触发事件,并统计访问次数最多的页面或接口,调用IP信息查询服务记录IP属性,将告警事件消息通知出来,由安全运营人员进一步排查分析和判断是否为Bot攻击事件,如果确认为攻击事件的则需做出拦截攻击请求等处理:
如果每次由安全人员接收到告警消息后再分析处理,可能会处理不及时且较为低效,这就需要有自动化响应处理的手段。对于检测策略的准确率比较高的话,可以通过制定事件产生后触发的动作,指定动作内容为将事件相关信息套用到WAF封禁模板,组合成对应域名和接口以及攻击来源用户token或IP+User-Agent的封禁策略,设定封禁时长当超过后自动失效,联动调用WAF的OpenAPI接口下发封禁策略后实现精准化拦截攻击请求,并发送WAF自动封禁的消息到工作群机器人。
这样当有高频访问的攻击请求时会产生告警事件并自动触发动作来下发WAF封禁策略来拦截,如果判断出攻击请求范围扩大的话,可以自动升级扩大封禁策略。安全人员需要关注是否有误拦截的情况,对于有误报的如第三方服务调用的正常请求需要提前梳理并在检测和封禁策略中做加白IP或接口的白名单处理,防止误伤到正常请求影响到业务访问。
Part 7 / 运营流程与指标
在日常运营的Web异常访问或Bot攻击行为的告警监测分析和事件响应处置中,可能会有以下问题:
- 因为检测识别能力不足导致没有及时发现或发现不到恶意攻击行为;
- 因为大量的无效告警,造成安全运营人员的警惕性降低,忽略掉了有效告警而错过了真正的攻击;
- 因为拦截策略配置有误或不完善,误拦截了正常请求影响到业务访问导致产生故障或者被攻击者绕过策略;
- 因为人工配置策略繁琐和响应慢,造成事件的响应不及时和处理被动;
- 因为对攻击事件的处置方法不恰当或不完善,导致被攻击者一直重复攻击利用。
故需要有运营机制和措施来不断改善以上问题:
- 通过制定异常访问行为的安全事件处置SOP流程来规范安全运营的处理过程,并对分析处理的安全事件在文档或系统中记录和跟踪结果;
- 对造成影响或导致损失的事件进行溯源分析和复盘改进,有效解决问题避免重复发生类似的事件,形成对安全风险或安全事件的跟踪闭环处置;
- 制定安全策略上线变更的流程规范来限制人为操作或机器自动的封禁策略下发,防止因下发了不合适的封禁策略对线上生产环境造成业务访问影响;
- 制定相关安全运营指标来衡量反爬防刷的能力和效果,通过持续建设和运营来提升指标,根据实际状况定期更新数据,提升安全威胁事件的监测分析和响应处置能力;
- 不定期进行攻防运营演练,发现可以待改进完善的地方,提升对威胁事件的感知发现和应急响应的能力。
如下所示的Web异常访问行为的事件处置流程可做参考:
如下所示的安全运营指标和计算公式可做参考,通过对指标规定要达到的目标值,定期检查是否符合预期和是否需要改进,可作为工作绩效考核的依据:
- 接入检测覆盖率:(已接入检测的资产数量 / 需要接入检测的资产总量) * 100%
- 接入防护覆盖率:(已接入防护的资产数量 / 需要接入防护的资产总量) * 100%
- 检测场景覆盖率:(已有检测的场景类型数量 / 需要检测的所有场景总量) * 100%
- 检测准确率:(1 – 误报告警数量 / 所有威胁告警总量) * 100%
- 拦截准确率:(1 – 误伤请求数量 / 所有拦截请求总量) * 100%
- 有效拦截率:(1 – 漏拦请求数量 / 所有攻击请求总量) * 100%
- 事件召回率:(1 – 非安全侧检测到的事件数量 / 所有已发现的威胁事件总量) * 100%
- 告警处理率:(已完成处理的告警数量 / 所有威胁告警总量) * 100%
- 自动处理率:(自动化处理的事件数量 / 所有威胁事件总量) * 100%
- 事件闭环率:(已闭环处理的事件数量 / 所有威胁事件总量) * 100%
- MTTD平均检测时间(分钟或小时):
- 单个事件:告警或事件产生的时间—>发现告警或事件的时间
- 全部事件:检测总共时长 / 事件数量
- MTTR平均响应时间(分钟或小时):
- 单个事件:告警或事件开始处理的时间—>告警或事件处理完成的时间
- 全部事件:响应总共时长 / 事件数量
当建立起安全运营流程、规范和指标数据等规矩后,根据需要提升能力的地方或发现的缺陷问题来不断改进完善,熟练掌握好Web流量日志的异常行为分析和对安全检测防护平台的使用,熟悉好自家的业务资产、场景与价值等,以及黑灰产的攻击手段与获利方式,并且要懂得安全加固方法并推动整改,才能从容有效面对好每一次的恶意攻击事件,并与攻击方持续地进行攻防对抗直到防护成功。
Part 8 / 结束语
对于使用常规手段无法检测识别到的高级Bot攻击行为,则需要结合业务安全威胁情报、Web/APP前端埋点监控、客户端TLS/SSL指纹识别、机器学习或深度学习算法等更高级的技术手段来分析识别发现隐藏比较深的恶意Bot行为。
通过对APP安全加固防止反编译逆向分析,开启SSL Pinning证书锁定或mTLS双向认证防止抓包改包,对访问API接口返回的敏感数据进行加密或脱敏,接入签名验签服务防止请求被篡改和重放,按需求对接口接入图形/行为验证码服务进行人机识别验证,接入业务风控系统实时分析识别与管控风险行为等安全防护措施,才能做到对高级攻击行为的纵深防御。
如果黑灰产人员使用的攻击手段无效或者攻击成本大于所获的收益,则攻击方大有可能放弃攻击,防护方保护好信息数据和业务安全的目的也就得以实现,不但避免了给公司的用户和业务带来影响或损失,而且还会给业务带来安全价值。
货拉拉安全应急响应中心
公众号 | lalasrc
邮箱 | llsrc@huolala.cn
官网 | https://llsrc.huolala.cn