WAF web应用防火墙概述

WWW(万维网)概述

由互联网为基础 由许多超文本互联组成的咨询系统
有三大组件:

  • html 超文本标记语言 构筑前端页面
  • http 超文本传输协议 传输html页面
  • url 统一资源定位符 唯一的标识系统资源
    现如今 web功能越来越强大 漏洞也随着web便捷性提高而逐渐显露
    从静态页面到动态页面:
  • 静态页面:
    • 通过http请求后加载到浏览器
    • 由html、xml、shtml等标记语言构成
    • 页面内容 显示效果基本没有变化
  • 动态页面:
    • 不是简单的前端页面 存在后端结合数据库程序 能够实现交互
    • 可编程性提高 通过cgi、ajax、asp、php、jsp等脚本 请求解析数据
    • 由于交互性提高 也更加危险 攻击面广
      由于web应用的广泛 且其功能强大 sql注入 中间件漏洞 xss等web漏洞层出不穷 web应用需要得到保护

url基本格式:
协议类型://用户名:用户密码@域名:端口/子目录?键=值#锚点数据(由浏览器处理 有定位作用)
http://user@pass@www.test.com:80/index.php?key=value#test
上面这个url 首先协议类型为http 首先 访问test.com 服务器进行身份认证 通过后访问服务器web资源中的index.php 传入参数key值为value 定位到页面中test的位置

http:

超文本传输协议 用于浏览器与web服务器之间通讯 是无状态的传输协议(不会记录识别用户)平时使用cookie来记录识别用户
image
在使用时 一般是由服务器首次完成身份验证后 返回一个响应 其中setcookie会指定客户端后面需要携带的cookie值
cookie分为:

  • cookie:键值对形式 如user:abc passwd:xxxx 通常存储在客户端本地 发起请求时带上cookie
    服务器通过比对数据库 识别用户 缺点在于每次请求都会携带cookie 而这个cookie被他人窃取后能进行身份的伪造

  • session:客户端cookie中不存储数据 而是存储一个sessionid session存储在服务器内存中 当客户端访问服务器时带上sessionid 服务器取出对应session文件中数据 与数据库比对 识别用户 能安全一点 但sessionid泄露仍然会存在问题

  • token:验证信息存储在cookie中不依靠服务器或客户端存储 验证身份通过公钥机制 token分为三部分:header payload signature 签名部分是由服务器的公钥签名 服务器收到jwt后 通过解析header中的签名 hash算法 对jwt用自己的私钥解密 并使用同样的hash算法 比对hash 如果一致 身份验证成功 再到数据库中比对 识别用户

image
其中的payload的hash值就是验证身份的关键

我们常常使用secure或者httponly的形式防止cookie的泄露:
secure能防止cookie暴露在不安全网络中 设定secure后 只能通过https传递cookie
httponly能防止cookie被js代码访问 可以避免攻击者通过xss抓取cookie

http请求报文格式:
请求行:请求方法与url
首部:一些标识符 ua、content-type、XFF、cookie等
空行:分割首部与主体
主体:请求参数 内容
get方法一般没有主体

常用请求方法:
get:请求uri
post:请求uri 携带数据 传递数据到服务器
head:请求http报文首部
option:协商资源相关选项 获取服务器支持的请求方法

http响应格式:
状态行:状态码 原因语句 200 ok
消息首部:content-type content-length等响应
响应正文:传输的数据

https:

即http+ssl/tls
我们来了解一下tls/ssl的加密过程:
首先科普证书 证书为服务器信息加服务器公钥 通过第三方可信机构私钥签名后产生的

  1. 首先客户端发起请求 携带随机数1 并协商可支持的加密算法、协议(如rsa aes md5)等
  2. 服务收到客户端请求 得到随机数1 返回一个数据包 携带可支持的算法 加密协议 表示确认
  3. 服务器再次发送数据包 该数据包携带证书 以及公钥的hash值 以及一个公钥加密的随机数2
  4. 客户端收到服务器数据包 通过第三方公钥解密证书 取出服务器公钥 hash后对比如果一致 认为信道可信 使用公钥解密 得到随机数2
  5. 客户端生成随机数3 使用服务器公钥加密随机数3 发送给服务器 服务器解密后取出随机数3
  6. 客户端和服务器用三个随机数使用对称秘钥算法生成对称秘钥

WAF(web应用防火墙)

waf提供的防护主要有:网页防篡改 敏感信息泄露 http协议异常 目录遍历 webshell 盗链 扫描
暴力破解 owasptop10漏洞
waf的部署模式:
串联:二层透明模式 串联到网络中 最简单最广泛 用户访问的是真是的服务器地址 不能负载均衡
牵引:使用路由策略 策略路由等流量控制方式把流量牵引至waf设备然后回注 一对一 不能负载均衡可以ha 可以路由切换
监听:使用次数很少 不会对危险操作做出防御行为 用于测试 waf上线测试
反向代理、单臂:dns引流 把网站解析到waf设备 waf代理服务器进行交互 可以负载均衡
反向代理 也就是waf代替web服务器 接收流量 经过检查后 再把目标地址转变为目标服务器 进行转发 理解为dnat 可以ha可以dns切换

协议正规化防护:

主要是防护针对 请求头(cookie防护) 请求行
利用方式:
1.使用畸形请求 占用缓冲区 将缓冲区占满后 恶意代码最后入栈 会溢出到其它程序 其他程序正在执行恶意代码挤入运行的程序后 会导致恶意代码被执行
2.进行dos消耗服务器处理性能
3.恶意请求类型:delete put option方法禁止使用
4.恶意url:一般web漏洞使用get方法利用漏洞时请求头部较长 限制长度可以防止大部分简单攻击
5.元字符攻击:通过元字符逃逸请求检测 最好是禁止使用元字符
5.编码攻击:编码问题是比较常见的 近期著名的cve2024phpcgi漏洞就是利用了主机编码与网页编码不一致导致的
6.针对cookie的攻击:限制cookie长度 限制cookie数量 也需要针对cookie防护 有时cookie可以进行sql注入
7.针对请求头的攻击:请求头中存在大量字段 常见字段ua是区别用户与程序访问的重要方式 字段重复 字段长度 这些都会影响服务器的解析 可以采取对字段限制长度 限制个数 来防止攻击

waf的防护手段 主要有两大类型 分别是基于语义分析 基于正则匹配
基于语义分析的waf 有国产著名的雷池 基于正则有著名的引擎aws owasp 这些

web漏洞防护:

著名的有:

  1. sql注入:服务端不对用户的输入进行检测 并且是直接进行拼接 没有预编译参数化处理 导致sql语句直接拼接到原有的查询语句后 用户能够任意执行sql语句
  • 防御方法:禁止转义字符 实体化编码 进行过滤 预编译处理参数化输入
  1. xss:跨站脚本执行 浏览器解析非法用户传入的前端代码 直接执行js脚本 获取cookie或者直接配合csrf进行操作
  • 防御方法:过滤字符 实体化编码 引入csp禁止加载不信任的脚本
  1. csrf:跨站请求攻击 通过利用其它用户的身份 进行不合法的操作 常与xss结合
  • 防御方法:操作进行验证 操作嵌入token 验证refer
  1. 命令行注入:用户请求直接由操作系统解析 并处理返回 导致用户任意执行计算机命令
  • 防御方法:对操作命令进行过滤 只允许执行特定操作 设定acl 对web服务权限进行限制 加入虚拟系统 减少主机暴露

这些漏洞 waf防控的方法大部分为正则过滤

扫描防护:

在渗透初期 常常需要对目标的应用进行扫描 或者有时会使用爬虫
此时就需要对用户的访问频率进行限制

文件上传:

在web站点中 常常会有恶意用户上传脚本或者上传代码 让服务器触发运行 此时就要对文件内容进行检测 或者对文件直接进行重命名操作 注意保护htaccess user.ini文件 防止修改可解析文件类型或者直接包含

信息泄露:

有时请求的返回数据会泄露部分信息 通过waf对某些信息可以屏蔽隐藏
如 请求头 服务路径 敏感文件 关键文件 项目源码 等

反向代理waf部署:

代理模式一般用于需要ssl证书进行认证的情况下
分为
普通模式:进行http服务代理
单向卸载:服务器运行http服务 客户端请求waf时使用https 需要导入服务器的私钥和公钥(证书)
双向加载:服务器运行https waf与客户端交互使用https的方式 需要在waf设备中导入证书和私钥

透明代理:
waf三层方式运行 配置vlanif接口 访问时 将代理地址写入内容与真实服务地址一样 使用卸载方式 开启透明代理禁止nat
单向卸载:
二层组网:配置代理地址 配置vlanif接口 代理地址设为漂浮地址服务器地址为真实服务器地址 注意使用nat 转换原地址为vlanif接口地址
三层组网:直接使用漂浮地址 对外访问不用nat 除非单臂组网

posted @ 2024-07-29 16:49  f0r9  阅读(2)  评论(0编辑  收藏  举报