为何要探索用机器学习识别Web异常攻击?
主流识别Web应用日志攻击的方法优缺点
本章节将对Web应用日志攻击的方法进行分析。我们将在假设人力配置充足、人员研发水平高、系统稳定运行的前提下,从安全视角评估各种技术的优点和缺点。
2. 1 正则表达式:
正则表达式的主要优点在于它们在已知攻击模式的精确匹配方面的高效性。如果正则表达式编写得当且与业务逻辑相协调,它们可以有效地识别特定类型的攻击流量,同时减少误报。这一特性为正则表达式在安全产品中的应用提供了不可替代的优势,尤其是在不同业务线的实施中。在实际工作中,安全团队经常会被问及其产品是否可能误拦截正常流量以及如何应对误拦截情况。通常情况下,安全团队会回答说,仅通过启用最基本的拦截策略,大多数业务线往往会对这个回答满意,这也侧面反映了正则表达式的稳定性和可控性,这也是它在安全产品领域中持续占有一席之地的原因。
然而,正则表达式的优点也带来了其缺点。由于需要精准匹配,任何微小的攻击变化都可能使得攻击绕过正则表达式的检测。为了更准确地匹配并防止绕过,正则表达式需要变得更加复杂,这会导致效率下降。随着需要防止的绕过技巧增多,正则表达式变得更加难以维护,且性能开销会逐渐增大。
2.2 词法分析:
词法分析技术,代表如LibInjection,是从正则表达式技术进化而来,它通过将输入文本(如SQL查询)分解为一系列标记,进而分析这些标记的结构关系来识别潜在的恶意代码。与简单的正则表达式相比,词法分析能提供更深层次的文本分析,尤其有效于识别复杂的攻击模式,如SQL注入。。
以一个简单的SQL注入特征为例:这个特征在仅使用正则表达式的WAF中可能很难被准确识别。正则表达式可能需要非常复杂和精细的模式来捕捉到所有潜在的注入攻击,而这种方法往往难以应对各种变体和绕过技术。相比之下,词法分析能够更深入地理解SQL语句的结构和语义,从而更有效地识别和防御SQL注入等攻击。
%22or+%22%22%3D%22%28%28%22%29%29%3BSELECT+SLEEP%2810%29%3B--+-
正则表达式:这种攻击通常利用URL编码(例如 %22 代表双引号")进行。攻击者可能采用多种编码方法(如十六进制编码、HTML实体编码等)来规避正则表达式的检测。这是因为开发者需要预测并编写出能够识别所有可能编码形式的正则表达式。此外,不能仅依据SELECT+或者SLEEP+来进行匹配,因为在商品搜索中,+号经常用来替代空格作为商品搜索的占位符。例如,用户搜索"WELL SLEEP BED"可能会被后端处理为"WELL+SLEEP+BED",并送入其他后端逻辑进行查询,这就造成了误拦截。
语义分析:通过语义分析,我们可以识别并断定实际的SQL操作,并形成语义,如SQL逻辑操作符:OR、SQL条件:“"="”(这是一个总是为真的条件)、嵌套语句/括号:((("")))、SQL命令:SELECT、SQL函数:SLEEP(10)、注释和语句终止符:--。假设我们将SQL逻辑操作符定义为符号a,SQL条件为b,嵌套语句/括号为c,SQL命令为d,SQL函数为e,注释和语句终止符为f。则会形成一个唯一的指纹abcdef。将这些指纹序列有序排列,并以字母顺序排列,可以通过二分查找来识别唯一的指纹。
语义分析的优点很明显:以SQL注入为例,无论注入多么复杂,无论绕过策略如何,它们都是基于SQL的,一定包含SQL逻辑操作符、SQL条件、SQL命令等一系列语义符号,这会让黑客感到非常困扰。因为无论如何绕过,这些必要的SQL组成部分是无法被忽视的。
但语义分析的缺点也很明显:由于其强大的变形抵抗力和独特的指纹库,使得其维护异常困难。基本上遇到URL中的SQL就能立即识别,如果业务场景复杂,可能甚至需要使用正则表达式的白名单来过滤掉黑名单。
2.3 机器学习:
本文的重点是介绍通过机器学习识别Web应用日志的方法,主要思路是利用机器学习的概率问题来替代传统的语义分析所依赖的庞大指纹库。然而,机器学习和人工智能尽管有显著的优势,但也存在不足,它们不能直接替代正则表达式和语义分析在实际应用中的作用。即便模型的准确度非常高,比如特斯拉的全自动驾驶(FSD),它能精确覆盖绝大多数驾驶场景,但仍然要求驾驶员双手放在方向盘上进行监督。这是因为目前的人工智能和机器学习技术具有“黑盒”性质,其决策过程不透明。
在实际部署中,尽管WAF的目标是拦截恶意流量,但由于各种原因,如配置错误、规则不全或新出现的攻击手段,一些恶意流量可能仍会逃逸检测。因此,即使是经过WAF筛选的日志,也应进行进一步分析以识别可能的漏报。同时,机器学习模型在分析这些日志时,应综合考虑误报的可能性,通过持续的学习和调整,以优化模型性能。
同时,机器学习需要进行大量的数据清洗和分类工作。尽管在其他领域存在较为成熟的数据集,网络安全领域却因攻击流量的非法性质而不会公开这些数据,这就需要安全专业人员进行更多的加工和分析工作。
使用机器学习分析Web应用日志攻击的价值
对于像Advance Group这样的企业,其业务已经覆盖全球各个地区,使用CDN-WAF能显著提升网站的加速能力。然而,所有厂商的CDN-WAF都面临一个共同问题:规则不能设置得太严格,以便尽可能适配所有客户的需求。国内一些大型云安全厂商的WAF正则规则也分为宽松组和严格组,因此在使用机器学习分析Web应用日志后,安全人员经常会发现一些他们认为非常基础的攻击没有被拦截,甚至被漏报,这就需要安全专业人员去补充一些规则。
同时,CDN-WAF也面临绕过问题。通过分析Nginx日志,我们可以清晰地发现绕过Nginx的攻击行为,这有助于增强安全团队的响应能力。虽然CDN-WAF也采用机器学习来补充传统模型,但通常为了适配更多客户场景而采用评分制度。这种方法不是直接对攻击类型进行分类,而是采用一个攻击异常性评分。作为商用CDN-WAF的维护者,面对黑盒的机器学习模型,我们通常只能调节公有WAF的评分来决定拦截行为。过松的评分会导致漏拦,而过紧的评分往往意味着大量误杀。因此,单纯依赖商用CDN-WAF的机器评分算法并不能很好地识别0day攻击或进行有效的运维。
对于互联网巨头来说,探索机器学习和深度学习在Web应用日志攻击识别方面的应用更有价值和好处。绝大多数互联网巨头的WAF都是自研的,且规则自维护。通常,流量在经过脱敏处理后被收集到Hive等离线数据仓库中。对于经过WAF的白流量,可以每小时使用大数据SQL进行数据处理并送入模型进行识别,从而自适应地强化自身WAF的规则能力。对于流量丰富的互联网巨头,持续维护机器学习和深度学习模型不仅能提升对攻击的前瞻能力,还有助于发现0day和Nday漏洞。正如SQL的语义识别一样,RCE等漏洞很难脱离特定的语义特征,这对于识别未知的0day攻击是非常有用的。
项目工程落地方式与数据清洗与加工
4.1 项目工程落地方案:
验证可行性的Demo仅仅是项目实施的开始。在实际项目落地时,既要确保项目的稳定性,又要考虑到数据和流量的具体情况。对于Advance Group来说,在东南亚这一国家的区域内,Nginx的最大日志量达到了51GB/天,这是在数据经过压缩并写入ES(Elasticsearch)后的数字。通过观察,我们可以发现所有Nginx日志显示出明显的潮汐流量特性,即在某些时段流量会急剧增加,而在其他时段则相对减少。
这种潮汐流量机制对项目实施有重要的影响。首先,它要求系统能够适应流量的高峰和低谷,这意味着需要有足够的资源来处理高峰时段的数据量,同时也意味着在低谷时段可以优化资源使用,以减少不必要的成本。其次,潮汐流量可能会对安全监测造成影响,因为在流量高峰期,异常流量可能更容易被隐藏在大量正常请求中,这要求安全系统必须高效且敏锐,以确保不会漏掉任何潜在的安全威胁。
在实际部署中,使用AWS的Fargate进行部署是一种有效的方法。Fargate是一种容器化的服务,它属于FaaS(Function as a Service)机制,特别适合执行无状态的计算任务。使用Fargate,你只需要编写Kafka消费逻辑,并设置好弹性扩缩容策略,就可以实现服务的良好扩展性。这种架构允许系统根据实际流量自动调整资源,既可以处理高峰期的大流量,也能在流量减少时相应减少资源使用,从而优化成本。
日志分析服务部署在Kubernetes(K8S)中也是类似的,它可以利用K8S的弹性扩缩容能力来应对不同的流量需求。K8S提供了更加灵活的容器管理机制,可以帮助你更好地管理和扩展日志分析服务。
从成本的角度来看,虽然日志分析服务需要处理每天上百GB的流量,但由于Fargate和K8S的高效和弹性特性,使得整体成本得以控制。事实上,如果这项服务在所有的业务系统中的成本排名倒数第二,这说明使用Fargate和K8S进行日志分析服务的部署在成本效益上是相当不错的,特别是在处理大数据流量时,能够以相对低的成本提供稳定的服务。这对于维护大规模系统的企业来说是非常有价值的。
4.2 黑白流量获取:
在初期训练机器学习模型时,确实面临着高质量攻击流量难以获取的问题。这些数据通常不会在公开渠道上发布,因为它们涉及安全敏感信息。在项目初期,通常需要依赖现有的安全工具来收集这些所谓的“黑流量”,即代表恶意行为的流量。最常见的做法是利用已部署的WAF(Web Application Firewall)系统。WAF可以识别和记录各种攻击尝试,从而提供一个初始的恶意流量数据集用于训练机器学习模型。
相对于黑流量,获取所谓的“白流量”——即正常的、非恶意的流量——要容易得多。几乎所有业务系统都会记录Nginx日志,这些日志通常用于开发人员排查问题和进行系统监控。这些日志提供了丰富的正常用户行为数据,可以作为机器学习模型的正样本。
使用这些黑白流量数据,可以训练出能够区分正常请求和恶意请求的机器学习模型。随着时间的推移和数据的积累,可以不断优化和调整模型,以提高其准确性和效率。此外,随着项目的发展,可以考虑引入更多来源的数据,或者使用模拟攻击生成更多的黑流量数据,进一步增强模型的鲁棒性和准确性。
训练核心算法-以远程命令执行为例子
在讨论如何通过机器学习算法识别命令执行攻击时,我们不方便展示具体的攻击流量或代码细节,而是可以从高层次上理解这一过程。
命令执行攻击通常涉及向服务器发送恶意输入,旨在执行未经授权的系统命令。因此,在构建用于识别这类攻击的机器学习模型时,通常由非常明显的语义特征,下面我们将展开介绍。
构建命令识别的语义特征向量
对于攻击者来说,使用DNS隧道等技术验证命令执行信息是一种常见的手段。这种技术允许攻击者通过合法的DNS请求将数据从受害者网络中秘密地传输出去。在这个背景下,一个可能的攻击指标(即“攻击分析语义指纹”)可以是检测URL请求或参数中非HTTP链接的数量。URL中HTTP链接数量可以作为“语义指纹1”。
在PHP领域,命令执行通常伴随着一些特定的标识,这些是攻击者难以绕过的。例如,诸如phpinfo、eval、request等关键字,通常与PHP命令执行相关。将这些关键字的出现频次作为“语义指纹2”,可以帮助识别PHP相关的命令执行攻击。虽然单纯使用正则表达式粗暴匹配这些词汇可能会造成误报,但在机器学习模型中,它们可以作为重要特征之一。
在Java领域,命令执行或者经典漏洞通常涉及一些常见的类加载器和方法,如getRuntime、ProcessBuilder、struts2、ClassLoader等。将这些关键字的出现频次作为“语义指纹3”,有助于识别Java环境下的命令执行攻击。
在命令执行的符号领域,通常会出现特殊符号,如管道符|、重定向符号>、HTTP头破坏符号%0d、%0a、%22等。这些特殊符号的出现可以作为“语义指纹4”,用于识别命令执行攻击。
对于常见的PoC(Proof of Concept)验证领域,命令执行攻击往往伴随着显式且易于识别的特征,例如尝试访问的特殊文件路径如/etc/passwd或/etc/shadow。统计这些特殊文件路径在URL中的出现次数可以作为“语义指纹5”,有助于检测和识别攻击行为。
初版模型训练:
基于WAF正则所获取的黑白流量进行校正后,我们发现在离线环境中对黑流量的识别准确率可以达到99%。然而,作为实际的工程师,我们不应过于乐观,这可能是由于模型过拟合导致的——即模型只能识别训练集中的黑白流量,在实际的生产流量中可能表现并不理想。但作为初版模型,我们可以将其部署到线上进行调试。在这个过程中,我们将只记录黑流量信息,以便进一步分析和优化。
数据反馈与迭代:
预期模型的过拟合可能导致线上流量的误报,同时也可能识别出相应的命令执行信息。为了丰富我们的语义模型,我们可以采取以下几个方向:
根据识别出的攻击结果,补充前文提到的语义1、2、3、4、5。考虑到从WAF获取的黑流量数量有限,通过增加更多的观察点,我们可以更全面地覆盖各种攻击模式。
在分析黑流量过程中,可能会发现诸如xxx.io等非HTTP网站。这些网站的URL可以作为一个高权重的新特征,即扩展语义6。同时,这些发现也可以反馈给WAF团队进行正则封杀。通常,CDN-WAF规则不会封杀具体的URL地址。
误报的白流量通常为以下几种:
打点监控数据和广告联盟统计数据:这类数据的URL通常较长,并且包含大量的*、()、_等特殊字符。我们需要观察这些数据的特定特征,如谷歌广告追踪通常以_ga等作为参数。这类特殊行为应作为一个白流量特征向量,并补充到原有的特征集1,2,3,4,5中,形成新的特征集合1,2,3,4,5,6。我们的原则是使用统计学和机器学习解决问题,而不是将机器学习简化为另一种形式的正则表达式。需要让模型通过特征向量分类来识别这些流量为白流量。
商品搜索数据:这种数据通常会造成最多的语义冲突。例如,curl一词,在安全工程师看来可能是命令执行的工具,但普通用户可能仅是搜索“beautiful curler”。这种情况下会产生显著的误报。因此,我们需要改善统计curl这个词的语义拼接使其更加贴近安全场景,比如将curl;、curl+等作为特征,以更准确地描述curl作为URL请求工具的特征。
重复上述过程:
经过几轮迭代后,由于初始训练依赖的是WAF的数据集,这些数据集作为初始的命令执行恶意特征,所以WAF本身拦截的特征基本不会被漏报。识别的Nginx日志理论上都应该是白流量,因为它们是经过WAF筛选后的日志。在这种情况下,如果我们的模型能够识别出攻击行为,那通常会具有很高的业务价值。在实际配合WAF维护团队的过程中,我们可能会遇到以下几种情况:
发现一些非常复杂的变形SQL或者类SQL语句这些通常不是黑客常见的攻击特征,例如select+*(a++*(from+*(where+*(a=b。这种情况在一些大数据分析平台业务中特别常见,并且SQL通常相当复杂。这种接口的调用本质上就是一种SQL注入,需要与业务线团队协调,进行整改,而不是简单在WAF上做规则拦截。
由于历史遗留原因,可能在推进CDN-WAF时,某些域名没有被统计到,这导致WAF覆盖不全。对于这种情况,需要在WAF中补充缺失的域名,以确保WAF的全面覆盖。
由于厂商的适配性问题或规则更新,可能会出现WAF漏洞,这是明显的WAF漏报。对于这种情况,直接在WAF中补充相应的规则即可。
通过这样的分析和迭代,我们可以不断优化WAF的性能,减少误报和漏报,确保系统的安全性。
现状与展望
从个人观点来看,目前机器学习和深度学习技术无法完全取代正则表达式作为线上拦截策略。目前的主流方法仍然是结合正则表达式和机器学习/深度学习技术来挖掘攻击事件,这是因为业务部门和安全部门的视角不同造成的。业务部门更希望他们的系统稳定可靠,而安全部门则需要拦截可能危险的Web流量请求。因此,精准性是业务与安全之间绕不开的矛盾。
尽管基于机器学习和人工智能的模型预测结果具有一定的“黑盒”特性,这意味着它们不能完全透明地取代正则表达式并直接应用于线上环境,但合理利用机器学习和人工智能对Web应用日志进行数据挖掘,能够有效补充和识别未知攻击及其变体,从而很好地弥补正则表达式可能存在的短板。
关于领创集团