第36卷  第12期 福  建  电  脑 Vol. 36  No.12
2020年12月
Journal of Fujian Computer
Dec. 2020
web应用防护系统———————————————
张会奇(通信作者),女,1978年生,主要研究领域为Web 开发、Web 安全、软件测试、图像处理等。E-mail:****************。
WAF 系统在OpenResty 上的构建
张会奇
(厦门海洋职业技术学院信息工程学院 福建 厦门 361000)
摘  要  本文针对传统防火墙的不足,在对比当前部分主流WAF 软件产品的基础上,构建了一套基于OpenResty 框架的WAF 防御系统。该系统可以实现对一些特殊的Web 攻击方式的较好防护。  关键词  O
penResty ;WAF ;攻击;防护
中图法分类号 TP39  DOI:10.16707/jki.fjpc.2020.12.044
Construction of WAF System on OpenResty
ZHANG Huiqi
(College of Information Engineering, Xiamen Ocean Vocational College, Xiamen, China, 361000)
1引言
随着互联网技术的快速发展,Web 应用也越来越广泛,给人们的生活带来了实实在在的便利。随之而来的网络攻击技术也快速形成体系,很多自动化工具就可以轻易到网站漏洞,对于一些特殊的Web 攻击方式,比如SQL 注入攻击、扫描工具请求识别、异常流量识别等,传统的防火墙系统难以应对。为了避免业务数据丢失或被篡改,需要构建一套在Web 应用层防护网络攻击的系统成为各大业务网站必须的防护手段。
本文将基于OpenResty 框架构建一套W AF 系统,实现攻击检测、SQL 注入检测等功能。
2 技术分析
2.1  OpenResty 技术
OpenResty 平台是以 Nginx 核心为基础,融合了常用的Lua 库、ngx-lua 模块、Lua-JIT 虚拟机和第三方Nginx 模块的一个易扩展、高性能的开源Web 平台。随着不断的完善和更新,近年来该平台逐渐被业界认可和广泛使用[1-2]。
OpenResty ,也被书写为ngx_openresty ,是一
个功能强大的Web 应用服务框架。它组合了标准的Nginx 核心,内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。通过融合众多设计良好的Nginx 模块,OpenResty 可以有效地把Nginx 服务器转变为一个强大的Web 应用服务器。基于此,开发人员可以使用Lua 编程语言对Nginx 核心以及现有的各种 NginxC 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的Web 应用[3]。 2.2 WAF 工作原理
WAF (Web Application Firewall )的中文名称叫做“Web 应用防火墙”。利用国际上公认的一种说法,W AF 的定义是这样的:Web 应用防火墙是通过执行一系列针对HTTP/HTTPS 的安全策略来专门为Web 应用提供保护的一款产品[4]。从上面对W AF 的定义中,可以很清晰地了解到,W AF 是一种工作在应用层的、通过特定的安全策略来专门为Web 应用提供安全防护的产品。
根据不同的分类方法,W AF 可分为许多种。从产品形态上来划分,W AF 主要分为三大类:硬件设备类、基于云的W AF 、软件产品类。其中软件产品类是采用纯软件的方式实现,安装简单、容易使用、成本低,具代表性的有ModSecurity 、Naxsi 等。本
2020年福建电脑143
文所构建的W AF系统也属于此类。
Web应用防火墙通过在应用层对请求服务器的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作。这些动作包括阻断、记录、告警等。Web应用防火墙的基本工作流程为:数据获取、协议解析、规则匹配、异常拦截。其中规则匹配指的是Web应用防火墙对HTTP请求进行协议解析后,将数据与Web应用防火墙中的规则进行匹配,从而对客户端请求的数据流量中的恶意攻击行为进行正确识别,进而对其进行拦截与过滤[5]。WAF 系统拓扑结构如图1所示。
图1  WAF系统拓扑结构
用户通过浏览器访问业务站点,数据会经过nginx代理转发给真实的服务器。W AF作为nginx 的一个模块,在nginx worker进程初始化的时候会从redis服务器上读取黑白名单与安全策略规则,并在worker进程启动前加载这些配置到内存中。这个过程是在worker进程初始化阶段init_worker_by_lua里面实现的。
当一个请求到来时,WAF会首先检测客户端IP是否在黑白名单中。在白名单中的请求则直接放行,允许其访问后端的PHP真实服务器;对于客户端IP在黑名单中的请求,则直接进行阻断,并向客户端返回403的状态响应码。对于不在黑白名单中的请求,WAF会逐个检测安全策略规则中的事件特征是否与请求中的特征匹配,匹配的话则记录下该规则对应的异常值。在遍历完所有规则后,将异常值相加,判断异常值是否高于W AF管理员设置的阈值,高于阈值则拦截,不高于阈值的只记录不拦截。这个过程是在访问控制阶段access_by_lua里面实现的。
最后W AF会整理异常与拦截的客户端请求所触发的事件详情,例如命中的安全策略规则、命中的数据详情等,将事件详情发往kafka服务器,这个过程是在日志生成阶段log_by_lua里面实现的。3 OpenResty上的WAF系统实现原理
OpenResty框架在处理http请求时,会经历如图2所示的流程。
图2  OpenResty工作原理图
本文主要从初始化阶段init_by_lua、访问控制阶段access_by_lua、日志生成阶段log_by_lua三个阶段介绍W AF系统在OpenResty框架中的实现。
(1)init_by_lua阶段
该阶段在OpenResty框架中主要完成创建工作进程、启动定时任务等工作。当OpenResty启动一个工作进程的时候,W AF系统将增加用于读取黑白名单及其他检测规则的配置,同时规则描述语言模块会将规则配置转换为规则检测函数。比如:从数据库里读取WAF的黑白名单配置、初始化黑白名单、读取安全策略规则配置、初始化access阶段的规则列表等。
(2)access_by_lua阶段
该阶段在OpenResty框架中主要完成请求处理工作。W AF系统在该阶段的目标是做权限控制,一个请求从Request start开始到达这个阶段后,先做协议解析、再根据IP地址做黑白名单检测或者根据在init_by_lua阶段配置的规则做规则检测。规则检测模块执行init_by_lua阶段中规则描述语言生成的检测函数,命中规则的请求则执行阻断操作,未命中的继续执行下个阶段。比如:检查IP在白名单中则放行,在黑名单中则阻断本次请求并返回403;当IP不在黑白名单中则做安全策略规则检测,
逐条
144 张会奇:WAF系统在OpenResty上的构建第12期
测试安全策略,若命中则记录该安全策略所设置的异常分数。当测试完所有安全策略后,累加的异常分数若大于阈值,则拦截改请求,否则记录该异常请求但不拦截。
(3)log_by_lua阶段
该阶段在OpenResty框架中主要完成日志记录工作,W AF系统在该阶段会记录访问http服务器的请求日志。日志类型分为三种:正常访问、异常、拦截。命中优先级高的规则会被直接判定为拦截,命中优先级较低的规则会被判定位异常。拦截与异常的访问日志都会被记录下来,方便网络安全人员做进一步的分析与判断。OpenResty的搭建可以参考OpenResty的官方文档[6]。
4 WAF功能验证
搭建靶机网站dvwa环境。dvwa是一个用来进行安全脆弱性鉴定的PHP+MySql应用,这里将利用它来验证W AF是否对针对dvwa进行的渗透攻击起到了拦截的作用。关于dvwa的搭建可以参考官方文档[7]。搭建好的dvwa环境如图3所示。
图3  DVWA网站工作图
图4  nginx配置文件部分截图
接下来要让客户端数据经过基于OpenResty的WAF系统转发到dvwa。修改OpenResty里面的nginx配置文件,配置上游服务器地址为dvwa的真实IP地址。在server块里面将数据转发到真实服务器:test-dvwa.home. com_server,如图4所示。
(1)SQL注入检测验证
向代理服务器发送一个带有sql注入特征的请求,如test-dvwa.home/login.php?id=1--,如图5所示,可以看到返回了403,证明请求被拦截,说明本文的WAF系统是生效的。
图5  SQL注入拦截图
(2)白名单功能验证
将ip地址1.1.1.2 加入白名单,将该ip填入x-forwarded-for字段,发送带有sql注入特征的请求,可以看到返回状态码为200,说明能正常访问,白名单IP被放行,如图6所示:说明本文的W AF 系统是生效的。
图6  白名单功能验证图
参考文献
[1] 陆康.高校图书馆数字资源统计系统建设研究.现代情
报,2015,35(9):140-145
[2] 倪劼.图书馆数字资源访问统计系统构建研究—基于OpenResty平台.
图书馆工作研究,2019(10):75-82,96
[3] OpenResty前端开发入门.blog.csdn, 2016,12,30
[4] 曾小斌.对外网站的安全设计.信息安全与技术,2014(03):71-73
[5] 王亚丽.Web应用防火墙绕过技术.电子技术与软件工程,2017(18):
209
[6] OpenResty安装./cn/installation.html.
[7] DVWA安装.github/ethicalhack3r/DVWA

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。