WAF/Web应用安全(拦截恶意非法请求)

这篇具有很好参考价值的文章主要介绍了WAF/Web应用安全(拦截恶意非法请求)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Web 应用防火墙(Web Application Firewall, WAF)通过对 HTTP(S) 请求进行检测,识别并阻断 SQL 注入、跨站脚本攻击、跨站请求伪造等攻击,保护 Web 服务安全稳定。

Web 安全是所有互联网应用必须具备的功能,没有安全防护的应用犹如怀揣珠宝的儿童独自行走在盗贼环伺的黑夜里。我们准备开发一个 Web 应用防火墙,该防火墙可作为 Web 插件,部署在 Web 应用或者微服务网关等 HTTP 服务的入口,拦截恶意请求,保护系统安全。我们准备开发的 Web 应用防火墙名称为“SkyNet 天网”。

需求分析

HTTP 请求发送到 Web 服务器时,请求首先到达 SkyNet 防火墙,防火墙判断请求中是否包含恶意攻击信息。如果包含,防火墙根据配置策略,可选择拒绝请求,返回 418 状态码;也可以将请求中的恶意数据进行消毒处理,也就是对恶意数据进行替换,或者插入某些字符,从而使请求数据不再具有攻击性,然后再调用应用程序处理。如下图:

waf拦截,Architect架构,安全,攻击

SkyNet需要处理的攻击和安全漏洞列表:

waf拦截,Architect架构,安全,攻击

概要设计

SkyNet能够发现恶意攻击请求的主要手段,是对 HTTP 请求内容进行正则表达式匹配,将各种攻击类型可能包含的恶意内容构造成正则表达式,然后对 HTTP 请求头和请求体进行匹配。如果匹配成功,那么就触发相关的处理逻辑,直接拒绝请求;或者将请求中的恶意内容进行消毒,即进行字符替换,使攻击无法生效。

其中,恶意内容正则表达式是通过远程配置来获取的。如果发现了新的攻击漏洞,远程配置的漏洞攻击正则表达式就会进行更新,并在所有运行了 SkyNet防火墙的服务器上生效,拦截新的攻击。组件图如下:

waf拦截,Architect架构,安全,攻击

HTTP 请求先到达请求过滤器,请求过滤器提取 HTTP 请求头和 HTTP 请求体中的数据,这个过滤器其实就是 Java 中的 Filter。过滤器调用漏洞策略处理器进行处理,而漏洞策略处理器需要调用漏洞定义文件加载模块获得漏洞定义规则,漏洞定义文件加载模块缓存了各种漏洞定义规则文件,如果缓存超时,就从远程配置中心重新加载漏洞定义规则。

漏洞定义规则文件是 SkyNet的核心,该文件定义了攻击的正则表达式,过滤器正是通过使用这些正则表达式匹配 HTTP 请求头和 HTTP 请求体的方式,识别出 HTTP 请求中是否存在攻击内容。同时,漏洞定义规则文件中还定义了发现攻击内容后的处理方式:是拒绝请求,跳转到出错页面,还是采用消毒的方式,将攻击内容字符进行替换。

漏洞规则定义文件采用 XML 格式,示例如下:

<?xml version="1.0"?>

<recipe

attacktype="Sql"

path="^/protectfolder/.*$"

description="Sql injection attacks"

>

<ruleSet

stage = "request"

condition = "or"

>

<action

name="forward"

arg="error.html"

/>

<rule

operator = "regex"

arg = "paramNames[*]"

value = "select|update|delete|count|*|sum|master|script|'|declare|

          or|execute|alter|statement|executeQuery|count|executeUpdate"

/>

</ruleSet>

<ruleSet

stage = "response"

condition = "or"

>

<action

name ="replace"

arg = " "

/>

<rule

operator = "regex"

arg = " responseBody "

value = "(//.+\n)|(/\*\*.+\*/)|(<!--.*-->)"

/>

</ruleSet>

</recipe>

recipe 是漏洞定义文件的根标签,属性 attacktype 表示处理的攻击类型,有以下几种。

SQL: SQL 注入攻击

XSS: 跨站点脚本攻击

CSC: 注释与异常信息泄露

CSRF: 跨站点请求伪造

FB: 路径遍历与强制浏览

path 表示要处理的请求路径,可以为空,表示处理所有请求路径。

ruleSet 是漏洞处理规则集合,一个漏洞文件可以包含多个 ruleSet。stage 标签表示处理的阶段,请求阶段:request,响应阶段:response。condition 表示和其他规则的逻辑关系,“or”表示“或”关系,即该规则处理完成后,其他规则不需要再处理;“and”表示“与”关系,该规则处理完成后,其他规则还需要再处理。

action 表示发现攻击后的处理动作。“forward”表示表示跳转到出错页面,后面的“arg”表示要跳转的路径;“replace”表示对攻击内容进行替换,即所谓的消毒,使其不再具有攻击性,后面的“arg”表示要替换的内容。

rule 表示漏洞规则,触发漏洞规则,就会引起 action 处理动作。operator 表示如何匹配内容中的攻击内容,“regex”表示正则表达式匹配,“urlmatch”表示 URL 路径匹配。“arg”表示要匹配的目标,可以是 HTTP 请求参数名、请求参数值、请求头、响应体、ULR 路径。“value”就是匹配攻击内容的正则表达式。

详细设计

SkyNet 可以处理的攻击类型有哪些?它们的原理是什么?SkyNet 对应的处理方法又是什么?详细设计将解决这些问题。

XSS 跨站点脚本攻击

XSS 攻击即跨站点脚本攻击 (Cross Site Script),指黑客通过篡改网页,注入恶意 JavaScript 脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。

常见的 XSS 攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。如图:

waf拦截,Architect架构,安全,攻击

攻击者发布的微博中有一个含有恶意脚本的 URL(在实际应用中,该脚本在攻击者自己的服务器 www.2kt.cn 上,URL 中包含脚本的链接),用户点击该 URL,会自动关注攻击者的新浪微博 ID,发布含有恶意脚本 URL 的微博,攻击就被扩散了。

另外一种 XSS 攻击是持久型 XSS 攻击,黑客提交含有恶意脚本的请求,保存在被攻击的 Web 站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。如图:

waf拦截,Architect架构,安全,攻击

此种攻击经常使用在论坛、博客等 Web 应用中。

SkyNet 采用正则表达式匹配含有 XSS 攻击内容的请求,正则表达式如下:

"(?:\b(?:on(?:(?:mo(?:use(?:o(?:ver|ut)|down|move|up)|ve)|key(?:press|down|up)|c(?:hange|lick)|s(?:elec|ubmi)t|(?:un)?load|dragdrop|resize|focus|blur)\b\W*?=|abort\b)|(?:l(?:owsrc\b\W*?\b(?:(?:java|vb)script|shell)|ivescript)|(?:href|url)\b\W*?\b(?:(?:java|vb)script|shell)|background-image|mocha):|type\b\W*?\b(?:text\b(?:\W*?\b(?:j(?:ava)?|ecma)script\b|[vbscript])|application\b\W*?\bx-(?:java|vb)script\b)|s(?:(?:tyle\b\W*=.*\bexpression\b\W*|ettimeout\b\W*?)\(|rc\b\W*?\b(?:(?:java|vb)script|shell|http):)|(?:c(?:opyparentfolder|reatetextrange)|get(?:special|parent)folder)\b|a(?:ctivexobject\b|lert\b\W*?\())|<(?:(?:body\b.*?\b(?:backgroun|onloa)d|input\b.*?\\btype\b\W*?\bimage)\b|!\[CDATA\[|script|meta)|(?:\.(?:(?:execscrip|addimpor)t|(?:fromcharcod|cooki)e|innerhtml)|\@import)\b)"

匹配成功后,根据漏洞定义文件,可以选择 forward 到错误页面,也可以采用 replace 方式进行消毒,replace 消毒表如下:

waf拦截,Architect架构,安全,攻击

在 XSS 攻击字符前后加上“&nbsp;”字符串,使得攻击脚本无法运行,同时在浏览器显示的时候不会影响显示内容。

SQL 注入攻击

SQL 注入攻击的原理如下:

waf拦截,Architect架构,安全,攻击

攻击者在 HTTP 请求中注入恶意 SQL 命令 (drop table users;),服务器用请求参数构造数据库 SQL 命令时,恶意 SQL 被一起构造,并在数据库中执行。

如果在 Web 页面中有个输入框,要求用户输入姓名,普通用户输入一个普通的姓名 Frank,那么最后提交的 HTTP 请求如下:

http://www.a.com?username=Frank

服务器在处理计算后,向数据库提交的 SQL 查询命令如下:

Select id from users where username='Frank';

但是恶意攻击者可能会提交这样的 HTTP 请求:

http://www.a.com?username=Frank';drop table users;--

即输入的 uername 是:

Frank';drop table users;--

这样,服务器在处理后,最后生成的 SQL 是这样的:

Select id from users where username='Frank';drop table users;--';

事实上,这是两条 SQL,一条 select 查询 SQL,一条 drop table 删除表 SQL。数据库在执行完查询后,就将 users 表删除了,系统崩溃了。

处理 SQL 注入攻击的 rule 正则表达式如下。

(?:\b(?:(?:s(?:elect\b(?:.{1,100}?\b(?:(?:length|count|top)\b.{1,100}?\bfrom|from\b.{1,100}?\bwhere)|.*?\b(?:d(?:ump\b.*\bfrom|ata_type)|(?:to_(?:numbe|cha)|inst)r))|p_(?:(?:addextendedpro|sqlexe)c|(?:oacreat|prepar)e|execute(?:sql)?|makewebtask)|ql_(?:longvarchar|variant))|xp_(?:reg(?:re(?:movemultistring|ad)|delete(?:value|key)|enum(?:value|key)s|addmultistring|write)|e(?:xecresultset|numdsn)|(?:terminat|dirtre)e|availablemedia|loginconfig|cmdshell|filelist|makecab|ntsec)|u(?:nion\b.{1,100}?\bselect|tl_(?:file|http))|group\b.*\bby\b.{1,100}?\bhaving|load\b\W*?\bdata\b.*\binfile|(?:n?varcha|tbcreato)r|autonomous_transaction|open(?:rowset|query)|dbms_java)\b|i(?:n(?:to\b\W*?\b(?:dump|out)file|sert\b\W*?\binto|ner\b\W*?\bjoin)\b|(?:f(?:\b\W*?\(\W*?\bbenchmark|null\b)|snull\b)\W*?\()|(?:having|or|and)\b\s+?(?:\d{1,10}|'[^=]{1,10}')\s*?[=<>]+|(?:print\]\b\W*?\@|root)\@|c(?:ast\b\W*?\(|oalesce\b))|(?:;\W*?\b(?:shutdown|drop)|\@\@version)\b|'(?:s(?:qloledb|a)|msdasql|dbo)')

从请求中匹配到 SQL 注入攻击内容后,可以设置跳转错误页面,也可以选择消毒 replace,replace 表如下:

waf拦截,Architect架构,安全,攻击

CSRF 跨站点请求伪造攻击

CSRF(Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等,如图:

waf拦截,Architect架构,安全,攻击

CSRF 的主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器 Cookie 或服务器 Session 策略,盗取用户身份。

SkyNet的防攻击策略,是过滤器自动在所有响应页面的表单 form 中添加一个隐藏字段,合法用户在提交请求的时候,会将这个隐藏字段发送到服务器,防火墙检查隐藏字段值是否正确,来确定是否为 CSRF 攻击。恶意用户的请求是自己伪造的,无法构造这个隐藏字段,就会被防火墙拦截。

注释与异常信息泄露

为调试程序方便或其他不恰当的原因,有时程序开发人员会在前端页面程序中使用 HTML 注释语法进行程序注释,这些 HTML 注释就会显示在客户端浏览器,给黑客造成攻击便利。

此外,许多 Web 服务器默认是打开异常信息输出的,即服务器端未处理的异常堆栈信息会直接输出到客户端浏览器,这种方式虽然对程序调试和错误报告有好处,但同时也给黑客造成可乘之机。黑客通过故意制造非法输入,使系统运行时出错,获得异常信息,从而寻找系统漏洞进行攻击。

匹配 HTML 注释的正则表达式如下:

“&lt;!--(.|&#x000A;|&#x000D;)*--&gt;”

如果匹配到 HTML 注释,就用空字符串 replace 该注释。

对于异常信息泄露,SkyNet会检查响应状态码。如果响应状态码为 500 系列错误,则会进一步匹配响应体内容,检查是否存在错误堆栈信息。文章来源地址https://www.toymoban.com/news/detail-666894.html

到了这里,关于WAF/Web应用安全(拦截恶意非法请求)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (WAF)Web应用程序防火墙介绍

    ​ Web应用程序防火墙(WAF)是一种关键的网络安全解决方案,用于保护Web应用程序免受各种网络攻击和威胁。随着互联网的不断发展,Web应用程序变得越来越复杂,同时也变得更加容易受到恶意攻击。WAF的目标是在应用程序和Web服务器之间建立一个安全的屏障,有效地防止各

    2024年02月11日
    浏览(42)
  • NG+WAF实现应用安全访问

    什么是waf? Web应用防火墙(waf)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品,WAF是一种工作在应用层的、通过特定的安全策略来专门为Web应用提供安全防护的产品。 什么是ngx_lua_waf? ngx_lua_waf是一个基于ngx_lua的web应用防火墙,Nginx支持开启

    2024年01月18日
    浏览(39)
  • 24 WEB漏洞-文件上传之WAF绕过及安全修复

    safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些,在真实情况下现在很多网站都是用宝塔 Content-Disposition: 表单数据,一般可更改 name:表单参数值,不能更改,改完之后,数据包是有问题的,跟前端的表单值会对不上,这样后端会无法判断你上传的地方,如果要更改,那

    2024年02月10日
    浏览(49)
  • Web 应用程序防火墙 (WAF) 相关知识介绍

    Web应用程序防火墙 (WAF) 如何工作? Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 WAF通过过滤、监控和

    2024年02月06日
    浏览(50)
  • 部署WAF安全应用防火墙(openresty部署)

    1.1 什么是WAF Web应用防护系统 (也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法: Web应用 防火墙 是通过执行一系列针对HTTP/HTTPS的 安全策略 来专门为Web应用提供保护的一款产品 。 1.2 WAF的功能 支持IP白名单和黑名单功能,

    2024年02月05日
    浏览(38)
  • 阿里云的WEB应用防火墙(WAF)能抵挡什么攻击

    Web应用防火墙(WAF)使用核心攻防和大数据能力来驱动Web安全,帮助您轻松应对各类Web应用攻击,确保网站的Web安全与可用性。本文介绍了WAF的功能特性。 业务配置 支持对网站的HTTP、HTTPS(高级版及以上)流量进行Web安全防护。 Web应用安全防护 常见Web应用攻击防护 防御O

    2024年02月03日
    浏览(54)
  • 天翼云重磅升级边缘WAF能力,助力企业高效应对Web安全威胁!

    “2022年,网络高危漏洞数量同比增长了13%;Q2遭受攻击的API数量月均超过了25万;物联网的普及大大降低了DDoS的攻击成本,大流量攻击指数显著提升;恶意Bot流量仍在持续增长,2022年上半年Bot流量约占整体互联网流量的60%,平均每月达到110亿+,而其中具备恶意攻击性的Bot流

    2024年02月14日
    浏览(44)
  • docker上面部署nginx-waf 防火墙“modsecurity”,使用CRS规则,搭建WEB应用防火墙

    web防火墙(waf)免费开源的比较少,并且真正可以商用的WAF少之又少,modsecurity 是开源防火墙鼻祖并且有正规公司在维护着,目前是https://www.trustwave.com在维护,不幸的是2024 年 7 月将不再维护交还开源社区管理,Trustwave目前打造自己的web防火墙,至于是否免费开源就不得而知

    2023年04月21日
    浏览(40)
  • 安全狗waf

    1、先将phpstudy 以管理员身份运行,将运行模式修改为 “系统服务”,点击“应用”。 2、下载安全狗, 安全狗-领先云安全服务与解决方案提供商|云原生安全|服务器安全|网站安全|态势感知   3、安装安全狗,以管理员身份运行 需要登录使用: 更改请求方式 模拟用户 延时

    2024年02月04日
    浏览(41)
  • 【安全】部署长亭雷池waf

    浏览器打开后台管理页面 https://:9443。根据界面提示,使用 支持 TOTP 的认证软件 扫描二维码,然后输入动态口令登录:

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包