从一开始的网络攻防(十三):WAF入门到上手
Web Application Firewall
概念
Web应用防护系统:(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。
利用国际上公认的一种说法:
web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品
与传统防火墙的不同
Web应用防护系统代表了一类新兴的信息安全技术,用以解决诸如防火墙一类传统设各束手无策的Web应用安全问题。
与传统防火墙不同,WAF工作在应用层,因此对web应用防护具有先天的技术优势。
基于对Web应用业务和逻辑的深刻理解,WAF对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,从而对各类网站站点进行有效防护。
主要功能
- 漏洞攻击防护
-
- WAF安全防护目前可拦截常见的web漏洞攻击,例如SQL注入、XSS跨站、获取敏感信息、利用开源组件漏洞的攻击等常见的攻击行为。
- 虚拟补丁
-
- WAF安全防护可提供0Day,NDay漏洞防护。当发现有未公开的0Day漏洞,或者刚公开但未修复的NDay漏洞被利用时,WAF可以在发现漏洞到用户修复漏洞这段空档期对漏洞增加虚拟补丁,抵挡黑客的攻击,防护网站安全。
工作原理
网站安全防护(WAF)基于对http请求的分析,如果检测到请求是攻击行为,则会对请求进行阻断,不会让请求到业务的机器上去,提高业务的安全性,为web应用提供实时的防护。
ModSecurity简介
ModSecurity是目前世界上使用最多的开源WAF产品,可谓是WAF界的鼻祖,很多其他WAF产品都或多或少受其影响,如OpenWAF。
ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的瑞士军刀”。它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。
- 中文站:ModSecurity中文社区
- 源码:Releases · owasp-modsecurity/ModSecurity
- 规则:Releases · coreruleset/coreruleset
主要功能
- SQL Injection (SQLi):阻止SQL注入
- Cross Site Scripting (XSS):阻止跨站脚本攻击
- Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
- Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
- Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
- PHP Code Injectiod:阻止PHP代码注入
- HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
- HTTPoxy:阻止利用远程代理感染漏洞进行攻击
- Sshllshock:阻止利用Shellshock漏洞进行攻击
- Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
- Scanner Detection:阻止黑客扫描网站
- Metadata/Error Leakages:阻止源代码/错误信息泄露
- Project Honey Pot Blacklist:蜜罐项目黑名单
- GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断
社区链接
Github
ModSecurity.cn中文社区
ModSecurity安装与部署
1. VirtualBox
2. CentOS镜像
CentOS-7-x86_64-DVD-1810
3. 安装虚拟机
- 软件选择-基础环境-GNOME桌面-开发工具、系统管理工具
- 设置root密码
4. 安装相关工具
4.1. 关闭SELinux的限制
SELinux(Security-Enhanced Linux)是CentOS系统中用于增强系统安全的一个功能。当SELinux设置为强制模式(enforcing)时,它会阻止许多操作,包括虚拟机的挂起。
具体来说,SELinux在强制模式下会阻止虚拟机挂起,导致出现“未能挂起虚拟机”的错误提示
解决方法:
- 临时关闭SELinux
setenforce 0
- 永久设置SELinux为Permissive模式
-
sudo vim /etc/selinux/config
SELINUX=
行,将其值改为permissive
- 保存后重启生效
4.2. VMware tools要通过镜像安装
4.3. 更新Yum源
通用,记得归档
Centos7更换Yum源 - Hope· - 博客园
1. 先备份系统本身的yum源
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
2. 下载国内的yum源到/etc/yum.repos.d/CentOS-Base.repo (腾讯云 yum 源)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
3. Yum 缓存
3.1. 清理yum缓存 yum clean all
yum clean all
是一个用于管理 Red Hat 及其衍生版操作系统中的软件包管理器 YUM (Yellowdog Updater Modified) 的命令。这个命令的作用是清理 YUM 缓存中的所有数据,包括软件包、头文件、索引等,以释放磁盘空间并确保 YUM 在执行更新或安装时不会使用过时的数据
3.2. 更新缓存yum makecache
yum makecache 是将软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度,建议执行这个命令可以提升yum安装的速度
4. 更新yum源
yum update //升级所有包的同时还升级内核
yum upgrade //只升级软件包复制
5. 验证 yum 源是否配置成功yum list
4.4. 安装相关工具
yum install -y wget epel-release
yum install -y httpd httpd-devel pcre pcre-devel libxml2-devel gcc lua-devel yajl-devel ssdeep-devel curl-devel
5. 编译ModSecurity
ModSecurity版本:2.9.3
- 将ModSecurity解压到
/usr/local
路径下 - 进入ModSecurity目录下
- 设置配置参数
./configure --enable-standalone-module --disable-mlogc
- 编译
make
6. 安装nginx
nginx版本:1.16.1
- 下载nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
- 将nginx解压到
/usr/local
路径下 - 进入nginx目录
- 设置配置参数
./configure --add-module=/usr/local/modsecurity-2.9.3/nginx/modsecurity/ --prefix=/usr/local/nginx
- 编译
make ; make install
7. 测试未启动ModSecurity的攻击效果
7.1. 启动nginx
/usr/local/nginx/sbin/nginx
7.2. 模拟攻击
模拟攻击,测试未启动ModSecurity时的访问效果
输入命令ifconfig
查看当前虚拟机ip
浏览器访问http://192.168.142.128/?param=%22%3E%3Cscript%3Ealert(1);%3C/script%3E
即使输入了alert敏感语句,依然可以访问页面
8. 测试启动ModSecurity的攻击效果
8.1. 复制配置文件
mkdir -p /usr/local/nginx/conf/modsecurity/
cp /usr/local/modsecurity-2.9.3/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity/modsecurity.conf
cp /usr/local/modsecurity-2.9.3/unicode.mapping /usr/local/nginx/conf/modsecurity/unicode.mapping
8.2. 复制规则包
将规则包解压后复制crs-setup.conf.example
到/usr/local/nginx/conf/modsecurity/
下并重命名为crs-setup.conf
复制rules文件夹到/usr/local/nginx/conf/modsecurity/
下
同时修改
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example
两个文件的文件名,将.example
删除,可将自己写的规则放置于此两个文件中;
8.3. 编辑nginx配置文件
在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置):
ModSecurityEnabled on;
ModSecurityConfig modsecurity/modsecurity.conf;
8.4. 编辑ModSecurity配置文件
SecRuleEngine DetectionOnly
改为SecRuleEngine On
同时在文件未尾添加以下内容:
Include crs-setup.conf
Include rules/*.conf
8.5. 重新加载Nginx测试效果
/usr/local/nginx/sbin/nginx -s reload
网站再次访问
http://192.168.142.128/?param=%22%3E%3Cscript%3Ealert(1);%3C/script%3E
已经无法访问了,说明已经生效了