之前写了一篇《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需要修炼一图以蔽之

三、WAF支撑信息库

WAF需要修炼一图以蔽之

以上支撑库几乎所有的安全人员都在重复地做,而资源没有共享的原因,一是内部不可说;二是没有采取统一的描述语言无法汇合,唉,安全从业人员的巴别塔。

四、补充知识(包括文章与代码)

想想写了这么多文章,自我感觉萌萌哒!

WAF相关

WAF防御能力评测及工具

ssdeep检测webshell

ModSecurity相关文章(我就是ModSecurity的死忠粉)

[科普文]ubuntu上安装Apache2+ModSecurity及自定义WAF规则

ModSecurity SecRule cheatsheets

ModSecurity CRS 笔记、WAF防御checklist,及WAF架构的一些想法

ModSecurity 晋级-如何调用lua脚本进行防御快速入门

ModSecurity 白名单设置

指纹识别

Web应用指纹识别

FingerPrint

IP相关

使用免费的本地IP地理库来定位IP地理位置-GeoIP lookup

获得IP的地理位置信IP Geolocation及IP位置可视化

IP地理信息离线获取脚本

IP地理信息在线获取脚本

识别搜索引擎脚本

判断使用哪家CDN脚本

代理类型判断脚本 Proxy探测脚本与HTTP基本认证暴力破解脚本

CDN架构

网站负载均衡技术读书笔记与站长产品的一点想法

正则优化

NFA引擎正则优化TIPS、Perl正则技巧及正则性能评测方法

HTTP发包工具

HTTP.pl——通过HTTP发包工具了解HTTP协议

HTTP发包工具 -HTTPie

WAF实现的思维导图

参考:

《ModSecurity  Handbook》

第八、九、十,十一我是反复看,每次都有新的灵感,第14、15章是当成新华字典看的,以免遗忘。

《Web Application Defenders Cookbook Battling Hackers and Protecting Users》 (红宝书,还在看)

FreeBuf推荐:碳基体MM微博

http://weibo.com/tanjiti

如何打造一款可靠的WAF的更多相关文章

  1. 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)

          “很多人都不太认可以第三方ORM,因为考虑的点不够全面,没有大用户群体的ORM有保证,这点是不可否认确是事实.但是往往用户群体大的ORM又有不足之处,今天我们就来聊聊关于ORM的话题,打造 ...

  2. 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)

    上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...

  3. 打造一款属于自己的web服务器——开篇

    JVM总结慢慢来吧,先插播一篇水文,来介绍下最近业余一直在写的一个小项目——easy-httpserver(github).适合新手学习,大神们路过即可^_^. 一.这是个什么玩意? easy-htt ...

  4. 如何打造一款五星级的 APP ?

    移动互联网大潮来袭!据统计,2015 年平均每天有 1000 个新的应用上架,而这些应用的现状可以说是鱼龙混杂,同是每个人的眼光.品味.意识和利益都不同,因此每人眼中的应用也是不同的.在巨大的市场竞争 ...

  5. jquery+css3打造一款ajax分页插件

    原文:[原创]jquery+css3打造一款ajax分页插件 最近公司的项目将好多分页改成了ajax的前台分页以前写的分页插件就不好用了,遂重写一个 支持IE6+,但没有动画效果如果没有硬需求,个人认 ...

  6. Notepad++给自己打造一款PowerQuery M语言编辑器【转】

    Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器 Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器-Power BI-ExcelHo ...

  7. 基于VueJS的render渲染函数结合自定义组件打造一款非常强大的IView 的Table

    基于VueJS的render渲染函数结合自定义组件打造一款非常强大的IView 的Table https://segmentfault.com/a/1190000015970367

  8. 使用Python打造一款间谍程序

    知识点 这次我们使用python来打造一款间谍程序 程序中会用到许多知识点,大致分为四块 win32API  此处可以在MSDN上查看 Python基础重点在cpytes库的使用,使用方法请点击此处 ...

  9. 打造一款 刷Java 知识的小程序(二)

    学习Java的神器已上线,面向广大Java爱好者! 之前写的一篇:打造一款 刷Java 知识的小程序(一) 一.第二版做了什么? 第一版小程序只具有初级展示功能,知识点都是hardcode在代码里面的 ...

随机推荐

  1. python_day4学习笔记

    一.内置函数

  2. How To Install Nginx on Ubuntu 16.04 zz

    Introduction Nginx is one of the most popular web servers in the world and is responsible for hostin ...

  3. 修改Struts2的struts.xml配置文件位置

    默认情况下,Struts2的配置文件名称为struts.xml,且该文件放在src根目录下.如下图所示: 如果需要修改struts.xml的位置,例如把struts.xml放到struts2文件夹下, ...

  4. (1)ansible基本配置

    1)ansible安装 yum install epel-release -y yum install ansible -y 2)ansible语法 语法: ansible <host-patt ...

  5. CentOS按电源键关机

    chkconfig --list查看没有acpid服务.安装之后解决yum install acpid -y 安装后需要重启,不然会提示:* Starting acpid ...acpid: can' ...

  6. VS2015运行 cordova 时候提示无法运行解决

    出现此问题的原因是在于npm程序损坏了.vs调用的npm程序并不是在node安装目录下的npm,而是在: C:\Users\用户名\AppData\Roaming\Microsoft\VisualSt ...

  7. 最近公共祖先LCA(前置知识)

    1.前言 最近公共祖先(Least Common Ancestors),简称LCA,是由Tarjan教授(对,又是他)提出的一种在有根树中,找出某两个结点u和v最近的公共祖先问题. 2.什么是最近公共 ...

  8. Linux命令之chattr

    chattr [-RVf] [-v version] [mode] files… chattr修改文件在Linux第二扩展文件系统(E2fs)上的特有属性.符号模式(mode)有+-=[aAcCdDe ...

  9. EXISTS运算符

    和IN.ANY.ALL等运算符不同,EXISTS运算符是单目运算符,它不与列匹配,因此它也不要求待匹配的集合是单列的.EXISTS运算符用来检查每一行是否匹配子查询,可以认为EXISTS就是用来测试子 ...

  10. 解决在jqmobi框架上使用mobiscroll控件的bug问题

    jqmobi(appframework)框架的好处主要是它很轻量级,用在手机上占用内存较小,实际表现较为流畅,这也是它区别于jQuery mobile的一大特色,上一篇博客中提供了在它上面使用日期控件 ...