如何提高存储的可靠性打造一款可靠的WAF

中国领先的IT技术网站
51CTO旗下网站
如何打造一款可靠的WAF
本篇文章从WAF产品研发的角度来YY如何实现一款可靠的WAF,灵感来自ModSecurity等,感谢开源。
作者:碳基体来源:FreeBuf| 10:11
之前写了一篇《WAF防御能力评测及工具》 ,是站在安全运维人员选型WAF产品的角度来考虑的(优先从测试角度考虑是前职业病,毕竟当过3年游戏测试!)。本篇文章从WAF产品研发的角度来YY如何实现一款可靠的WAF,灵感来自ModSecurity等,感谢开源。
本片文章包括三个主题
(1) WAF实现
WAF包括哪些组件,这些组件如何交互来实现WAF防御功能
(2)WAF规则(策略)维护
规则(策略)如何维护,包括获取渠道,规则测试方法以及上线效果评测
(3) WAF支撑
WAF产品的完善需要哪些信息库的支撑
一、WAF实现
WAF一句话描述,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来。 不管硬件款,软件款,云款,核心都是这个,而接下来围绕这句话来YY WAF的实现。 WAF的实现由五个模块(配置模块、协议解析模块、规则模块、动作模块、错误处理模块)组成
1. 配置模块
设置WAF的检测粒度,按需开启,如图所示
2. 协议解析模块(重点)
协议解析的输出就是下一个模块规则检测时的操作对象,解析的粒度直接影响WAF防御效果。对于将WAF模块寄生于web 服务器的云WAF模式,一般依赖于web 服务器的解析能力。
3. 规则模块(重点)
重点来了,这块是WAF的核心,我将这块又细分为三个子模块。
(1) 规则配置模块
IP黑白名单配置、 URL黑白名单配置、以及挑选合适的规则套餐。
(2)规则解析模块
主要作用是解析具体的规则文件,规则最好采用统一的规则描述语言,便于提供给第三方定制规则,ModSecurity这方面做得非常优秀。
规则文件由四部分组成,分为变量部分、操作符部分,事务函数部分与动作部分。
(3)规则检测模块
上一步我们设置了各种变量,接下来就是按照一定的逻辑来做加减乘除了。
4. 动作模块(重点)
通过规则检测模块,我们识别了请求的好恶,接下来就是做出响应,量刑处理,不仅仅是拦截。
5. 日志模块(重点)
日志处理,非常重要,也非常火热,内容丰富到完全可以从WAF独立出来形成单独的安全产品(e.g.日志宝)而采用提供接口的方式来支撑WAF。对于数据量巨大的云WAF,都会有单独的大数据团队来支撑架构这一块,包括数据存储(e.g. hdfs) ,数据传输(kafka),数据离线分析(hadoop/spark),数据实时分析(storm),数据关联分析(elasticsearch)等等,以后另开一篇单独说明。
6. 错误处理模块
以上模块运行错误时的异常处理
二、WAF规则(策略)维护
三、WAF支撑信息库
以上支撑库几乎所有的安全人员都在重复地做,而资源没有共享的原因,一是内部不可说;二是没有采取统一的描述语言无法汇合,唉,安全从业人员的巴别塔。
四、补充知识(包括文章与代码)
想想写了这么多文章,自我感觉萌萌哒!
ModSecurity相关文章(我就是ModSecurity的死忠粉)
HTTP发包工具
第八、九、十,十一我是反复看,每次都有新的灵感,第14、15章是当成新华字典看的,以免遗忘。
《 Web Application Defenders Cookbook Battling Hackers and Protecting Users 》 (红宝书,还在看)
原文地址:http://danqingdani./blog/static/0/
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
原创原创原创专题热点
24H热文一周话题本月最赞
讲师:4988人学习过
讲师:1579人学习过
讲师:12033人学习过
精选博文论坛热帖下载排行
本书全面阐述Java应用安全的基本知识并介绍一种强大的结构化安全设计方法;介绍独立于厂商的安全架构;列出详细的评估核对表以及23种经过实...
订阅51CTO邮刊3110人阅读
nginx(4)
作者github地址:
/loveshell/ngx_lua_waf
————————————————————
转自作者说明文档:
ngx_lua_waf是我一个基于ngx_lua的web应用防火墙。
代码很简单,开发初衷主要是使用简单,高性能和轻量级。
现在开源出来.其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。
用于过滤post,get,cookie方式常见的web攻击
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
请自行给nginx安装ngx_lua模块,推荐lujit2.0做lua支持
请提前新建/data/logs/hack/目录攻击日志,并赋予nginx用户对该目录的写入权限。
配置文件添加:
在http段添加
lua_need_request_(开启post请求)
access_by_lua_file /usr/local/nginx/conf/waf.
规则更新:
考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。
规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,nginx reload即可生效。以保障ngx lua waf的高性能
只记录过滤日志,不开启过滤,在代码里在check前面加上–注释即可,如果需要过滤,反之
一些说明:
过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
global是全局过滤文件,里面的规则对post和get都过滤
get是只在get请求过滤的规则
post是只在post请求过滤的规则
whitelist是白名单,里面的url匹配到不做过滤
user-agent是对user-agent的过滤规则
默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分–注释即可
日志文件名称格式如下:虚拟主机名_sec.log
欢迎大家到http://bbs.linuxtone.org多多交流
weibo: @ppla(/opscode)
感谢ngx_lua模块的开发者@agentzh(/agentzh/),春哥是我见过开源精神最好的人之一
本文记录如何安装ngx_lua模块
nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力
http://wiki.nginx.org/HttpLuaModule
————————————————————
1 下载luajit 2.0并安装
http://luajit.org/download.html
直接使用源码make && make install
所以lib和include是直接放在/usr/local/lib和usr/local/include
2 下载nginx源码解压
wget http://nginx.org/download/nginx-1.2.7.tar.gz
注意版本号,如果机子上已经装了nginx,不想升级的话,请使用/to/nginx/sbin/nginx -v 来查看版本号
tar -zxvf nginx-1.2.7.tar.gz
3 下载ngx_devel_kit解压
/simpl/ngx_devel_kit/tags
wget /simpl/ngx_devel_kit/archive/v0.2.18.tar.gz –no-check-certificate
tar -zxvf v0.2.18
4 下载nginx_lua_module解压
/chaoslawful/lua-nginx-module/tags
wget /chaoslawful/lua-nginx-module/archive/v0.7.18rc2.tar.gz –no-check-certificate
tar -zxvf v0.7.18rc2
5 进入nginx源码文件夹
cd nginx-1.2.7/
6 导入环境变量,编译
export LUAJIT_LIB=/usr/local/lib #这个很有可能不一样
export LUAJIT_INC=/usr/local/include/luajit-2.0 #这个很有可能不一样
./configure –prefix=/opt/nginx \ #nginx的安装路径
–add-module=/path/to/ngx_devel_kit \ #ngx_devel_kit 的源码路径
–add-module=/path/to/lua-nginx-module #nginx_lua_module 的源码路径
./configure –prefix=/usr/local/nginx-help –add-module=/root/jiangbin/ngx_devel_kit-0.2.18 –add-module=/root/jiangbin/lua-nginx-module-0.7.18rc2 –with-ld-opt=”-Wl,-rpath,$LUAJIT_LIB”
make install
安装lua模块发现的问题:
我在编译安装 Nginx 的第三方模块时,碰到一个错误:
/usr/local/nginx/sbin/ngxin -s reload
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
百事不得其解,后来Google之,发现了解决办法。
在 Nginx 编译时,需要指定 RPATH,加入下面选项即可:
./configure –with-ld-opt=”-Wl,-rpath,$LUAJIT_LIB”
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
7 请提前新建/data/logs/hack/目录攻击日志,并赋予nginx用户对该目录的写入权限。
mkdir -p /data/logs/hack/
www账户是跑nginx和php-fpm
chown -R www:www /data/logs/hack/
chmod -R 755 /data/logs/hack/
8 安装ngx_lua_waf模块
wget /loveshell/ngx_lua_waf/archive/master.zip –no-check-certificate
把这个文件解压到
nginx的conf目录下.
然后在nginx.conf里的http配置里添加
lua_need_request_
access_by_lua_file /usr/local/nginx-help/conf/waf.
注意:waf.lua一定要放在/usr/local/nginx-help/conf/waf.lua 已经他的子目录.否则会报500错误.
最后用/usr/local/nginx-help/sbin/nginx -V和/usr/local/nginx-help/sbin/nginx -t 验证一下
/usr/local/nginx-help/sbin/nginx -V
nginx version: nginx/1.2.7
built by gcc 4.1.2
(Red Hat 4.1.2-48)
configure arguments: –prefix=/usr/local/nginx-help –add-module=/root/jiangbin/ngx_devel_kit-0.2.18 –add-module=/root/jiangbin/lua-nginx-module-0.7.18rc2 –with-ld-opt=-Wl,-rpath,/usr/local/lib
/usr/local/nginx-help/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-help/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-help/conf/nginx.conf test is successful
9 过滤配置说明:
过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
global是全局过滤文件,里面的规则对post和get都过滤
get是只在get请求过滤的规则
post是只在post请求过滤的规则
whitelist是白名单,里面的url匹配到不做过滤
user-agent是对user-agent的过滤规则
为了不返回一些无用给用户直接把注入测试防护返回信息改为http 403状态,修改/usr/local/nginx-help/conf/waf.lua
71 function check()
72 ngx.header.content_type = “text/html”
73 –ngx.print(“403″)
74 ngx.exit(403)
注意:每次更改waf.lua代码需要把nginx reload一下!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:376315次
积分:4152
积分:4152
排名:第7548名
原创:61篇
转载:57篇
评论:23条
(1)(4)(3)(1)(6)(7)(2)(3)(15)(15)(18)(7)(2)(27)(8)行业信息化
产品与技术
安全宝定义新一代WAF标准
打造顶尖WAF系统
10:28:36&&&出处:中国信息主管网&&&作者:&&&评论: 点击:
作为网站安全防护的一道闸门,WAF(Web Application Firewall,Web应用防护系统)逐渐成为网站部署安全措施的一个重要环节。然而,技术的发展需要WAF拓宽部署范围,同时也需要更加灵活的管理深入到网站的日常运维中。
  作为网站安全防护的一道闸门,WAF(Web Application Firewall,Web应用防护系统)逐渐成为网站部署安全措施的一个重要环节。然而,技术的发展需要WAF拓宽部署范围,同时也需要更加灵活的管理深入到网站的日常运维中。在此背景下,传统的WAF系统在采购成本、资源配置、设备维护等方面与网站用户需求出现了严重的不匹配。为此,创新工场旗下网站安全专家安全宝最近推出了能实现零部署、零维护的云WAF系统,解决了中小型企业网站用户的燃眉之急。
  传统WAF系统维护成本极高 本地部署致使防护功能受限
  从传统角度来看,WAF就是一台具有&Web应用防护&功能的硬件设备,其通过执行一系列针对HTTP/HTTPS的安全策略,专门为Web应用提供保护。从网络入侵检测的角度来看,可以把WAF看成运行在HTTP层上的IDS设备;从防火墙角度来看,则可以把WAF看作&深度检测防火墙&的增强版。
  在应用的早期,传统WAF系统为应对网站入侵发挥了很大的作用。然而,随着互联网经济的快速发展,Web攻击的对象也渐渐从大型Web服务商向中小型Web服务商扩展。这些中小型Web服务商有着部署WAF设备的天然需求,但是,传统WAF系统在架构上的局限性却极大的制约了这种需求的实现。这种制约集中体现在成本方面:采购和维护成本。
  首先,传统WAF系统大多基于本地的硬件设备,这些设备的价格大多不菲,而且难以实现共享。用户如果部署此类WAF系统,往往需要单独购买,往往超出初期的采购预算,为网站运营起步带来了资金上的压力。其次,即使在采购之后,传统WAF系统巨大的部署及运维工作量同样让用户&不省心&。为了让系统能够充分发挥入侵防护效能,用户需要聘请专业的运维人员乃至团队,人力成本高昂。而且,由于安全防护与黑客攻击天生是此消彼长、相互抗衡的动态发展过程,系统刚刚部署的时候也许可以发挥不错的防护效果,但时间一长很容易落后于时代,很可能会因为疏忽或者黑客使用最新的攻击手段而使网站受到威胁。
  安全宝云WAF系统零部署与零维护 彻底颠覆传统架构
  正是由于看到了传统WAF系统在成本、部署、运维等方面存在的局限性,安全宝推出了基于云计算技术的云WAF系统。该系统完全具备了传统WAF设备的功能,并且由于采用了云计算的架构而获得了更多的灵活性,实现零部署、零维护,颠覆了传统安全领域靠资金巨额投入来换取安全的笨拙方式。
  零部署:用户无需部署WAF系统,只需在安全宝网站开启域名保护即可安枕无忧,其它所有的事情都由安全宝整体的云防护体系来完成。
  零维护:安全宝拥有一个专业的安全专家团队,紧密追踪最新的安全威胁和安全发展态势,自动升级规则库,用户不需要任何维护工作即可享受到最新的安全防护服务。
  为了更好的保护用户网站的安全,安全宝云WAF系统给网站提供了革命性的替身安全模式。为用户拦截渗透攻击、过渡消耗服务器资源和带宽的非法网络爬虫程序、以及多种DDoS攻击。此外,安全宝云WAF系统还给用户提供了独特的&多对多对多&模式,采用数十个网站节点为多用户服务,即使网站遭遇攻击,其他节点仍然确保用户能够访问无忧。
  安全宝在推出云WAF系统之后,迅速在网络安全业界引起了一场&地震&。其强大的云计算创新技术、极富创造力的概念使其颠覆了整体网站安全防护的格局,并迅速跻身为主流安全厂商。而因为在安全产品创新方面的卓越成就,安全宝获得2012年度安全领域评奖中的&产品创新奖&,引起了业界的广泛关注与好评。
  一名网站用户在部署安全宝云WAF系统后表示:&经过一段时间的实际测试,安全宝云WAF系统在安全防护能力上完全不逊色于传统的WAF系统,尤其让我们惊叹的是,要达到完美的安全防护效果,我们只需要在安全宝网站开启域名保护,无需自行部署、维护。在大大节约了网站成本的同时,让我们能够将精力集中在主要业务上。&
责任编辑:anne
相关热词搜索:
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
2016第九届中国信息主管年会于12月13日在京召开,本次..
12月27日,由工业和信息化部信息化和软件服务业司指导..
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
&&•&&
编辑邮箱:
广告专线:赵瑞华 010-互联网公司WAF系统设计
0×01 WAF简介
WAF 全称是Web Application Firewall, 简单讲就是web防火墙, 是对web业务进行防护的一种安全防护手段。
其实,现在很多的移动app,也是使用的http协议进行数据交换,也可以理解成web业务,可以对app server进行防护。
主要的web危害,一般指的是OWASP Top 10,比如SQL注入、XSS、CSRF等常见的web危害方法。当然可能不止这些方法,比如社工。轻则用你的服务器打个ddos,重则数据全部被盗,损失公司的信誉和money。
互联网公司的业务倾向于云平台,云WAF就应运而生,除去考虑硬件WAF的考虑,下面只讲基于互联网公司的需求,打造一款WAF联动系统。
0×02 WAF基本组成
大部分互联网公司的业务,都会使用Nginx做各种各样的工作,负载均衡、A/B测试、Web网关等等的功能;另外,加上openresty(nginx + lua)的开发效率和易用性,提高了程序猿开发nginx功能的效率。
现在互联网公司招WAF开发的,一般都会加上nginx lua的要求,可见使用nginx + lua开发WAF,实在是天时地利人和。
现在简单的说一下WAF系统的组成。WAF系统主要是由三部分组成的:执行前端、后端中心系统及数据库。
执行前端是WAF的执行引擎, 主要是根据规则进行过滤。根据规则匹配的结果,执行相应的动作。
后端中心系统主要是生成规则的逻辑,并与执行前端的nginx进行必要的数据交换。
数据库就是存放规则和一些配置及状态的地方,可以根据实际情况,选择关系型数据库或者Nosql。
其中,可以看到后端中心系统相当于WAF的大脑,会根据不同的域名或者设备hostname的配置生成对应的逻辑。当执行前端拉取配置和规则时, 后端中心会把它对应的内容发给执行前端。
这里做成集中式的管理模式,主要是方便统一管理,另外可以监控执行前端的状态,具体的状态数据,可以根据实际的情况进行协商,目前是建议json数据走http协议,方便易用。当然,数据传输的过程最好还是使用对称加密加 encode。
0×03 WAF细节考虑
一直比较关注cloudflare的云WAF,基本上WAF规则可以考虑为三类(不考虑长亭科技的sqlchop /chaitin/sqlchop ,据说有类似的xss 要开源):: 1. 通用的规则,比如sql、xss 规则,拦截恶意爬虫和扫描器等等的非常有效,这种基本上通用的。
2. cms规则,就是根据不同的cms,根据相应的漏洞定制的规则,比如php网站,不可能存在java语言的漏洞,具有专一性。
3. 自定义规则,这就是根据自己的需求,自定义一些规则。根据入侵类型,再细分就会更多了,拦截shell、爬虫等等的,这里只是输了大概。
在github上面,最具参考的lua waf 就属 /p0pr0ck5/lua-resty-waf 她了, 其它的并不是说不好,然而只有这个最接近Modsecurity的逻辑, 最突出的有点就是规则的弹性化,最接近Modsecrity的规则。
不过, /starjun/openstar 里面的很多防御方法,也是可以借鉴的。
执行前端:
基于p0pr0ck5 的WAF,二次修改一下,就可以做成上述的执行前端,但是它是有Bug的,生产环境下需要线下流量测试。
主要在这个基础上,添加拉取配置和规则的timer就可以了, 有些人说用zookeeper什么的, 另外还有用的http 来进行配置更新通知,zookeeper不建议,当你reload的时候,就可以看见很多nginx 处于shutting down状态,就只zookeeper处于keepalive状态。
使用http访问加共享内存,京东的涛哥是这样做的,也是有些坑,不过timer最简单,每个worker单独维护一个配置,避免了锁的情况。
另外,收集日志最好不要用kafka, 打火焰图的时候,明显cpu时间有点长,用tcp或者http 发送最靠谱。执行前端大概就是这些内容,记得加上xpcall 能把一些小的问题catch到,避免影响请求。
所有的配置是用json传输的,然后转换成 lua的数据格式,使其能正确识别出WAF规则。WAF规则类似如下:
确保WAF能够识别出这些规则就可以了,严格按照它的格式来,毕竟lua脚本的优势在这里体现的一览无余。
后端中心系统:
后端中心系统同样是使用的Openresty(别的我也不会,开个玩笑),设计成类似api网关,还是那句话好管理。根据不同的域名和设备Hostname发送不同的配置。
甚至,可以把所有WAF的逻辑放到这里,这是lua支持热加载的功能。这里是如何做你的WAF的关键,主要逻辑还是在这里。
这里是一些基本配置涵盖了:
WAF基本配置,包括了规则拉取服务配置、日志中心配置及更新组件等配置。
这些基本配置决定了,WAF主要的逻辑处理。
IP列表, 包括了所有黑名单的ip,及对应host或者uri对应的ip,其中,支持配置生效时间。
规则列表,主要是Web入侵规则配置,包括了default集合及对应host的waf配置。
基本配置主要是配置规则拉取服务配置、日志中心配置及更新组件等配置。这些配置也可以有由服务端动态生成。
IP列表, 其中有些是全局封禁,有些是针对某些接口,配置有过期时间的功能。
规则的内容就是上面已经列出的内容了。 其中因为要适合配置的逻辑需要根据根据自己的需求进行修改。
数据库和Web:
数据库规则设计:
这个是最主要的,有些属性暂时没有设置。
对于web而言,主要还是配合下发配置,规则方面,我是设置了三层结构:规则-&规则组-&host。
它们只是逻辑上的关系,具体在后面逻辑实现时,会把散列的规则进行分组并根据数据库的逻辑进行组合,生成对唯一host的配置。同理,可以设置不同的分组,达到灰度测试的目的。
这是具体规则的web设置,规则配置增删改规则,规则分组则是对规则分组的增删改操作,规则应用则是对不同host配置不同的规则分组。 这里说明一下,规则分组是按照XSS、SQLi 、灰度等功能分开的,对于host进行不同的配置。
目前,阿里云有自定义的规则,太单一,远远比不上cloudflare的设计,而且cloudflare更贴近互联网公司的需求,最主要的如何让自定义功能更有弹性,更大限度的支持规则的弹性。
简简单单,就说了个大概, 如果真的对WAF有研究的话,剩余的就比较轻松了,算是抛砖引玉了。
0×04 其它
记得有个作者提到,WAF位置卡位比较好, 现在很多CC和扫描器都是在七层防御的,WAF封禁某些ip和用户还是比较靠谱的,另外很多是cdn过来的请求,只能靠x-forward-for取出来的ip进行封禁,当然它可以伪造,就看数据分析的能力,把真实的ip抓出来。
WAF规则p0pr0ck5 提供了一些Modsecurity转译的,可以参考它实现自己的规则。另外,WAF的性能也很重要,章亦春大神的很多讲座ppt有提到的,可以作为参考。章亦春大神已经创业了,它打造的商业openresty就有WAF的支持。
最后,就先写这些吧,有问题的可以私信我,后面会引入大数据分析和安全数据挖掘。第一次发文章,欢迎各位大神轻拍。
*本文作者:chengfangang,转载请注明来自
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点

我要回帖

更多关于 如何打造一款网红食品 的文章

 

随机推荐