如何进行web应用安全防御,是每个web安全从业者都会被问到的问题,非常不好回答,容易过于肤浅或流于理论,要阐明清楚,答案就是一本书的长度。而本文要介绍一本能很好回答这个问题的优秀书籍——《web application defender's cookbook》,这 是一本被低估的“干货”书籍,虽然是为ModSecurity量身定制,但里面提到的防御技巧对web安全从业者均有启发,是WAF版的孙子兵法(有趣的 是,这本书的每个章节均以孙子兵法作为开篇语)。
这本书提出了使用ModSecurity进行web应用安全防御的100个技巧,每个技巧都用真实的案例来说明,非常容易掌握,下文介绍这100技及个人点评(已经准备好被喷了:))。
第1技 实时分析HTTP请求特征
例如请求方法,参数名,参数个数,参数长度,参数取值类型(数字,字母,email, URL或文件路径)
脑洞:给HTTP请求做白名单,或为了准确度给出现过漏洞的URI做白名单
2015-12-11:  http请求分析,从长远来看,有些基本信息库必须建立,URL库就是其中一个,来跟进每个站点的URL变化(包括首次访问时间,最后访问时间,建站指纹,漏洞列表)
e.g.
xxx.xxx.xxx/plus/mytag_js.php?aid  DeDeCMS系统    DeDeCMS一句话写马漏洞   xxxxxxx首次访问    xxxxx最后访问 ...
(p.s. 基本信息库基本很难建立起来,建立了也很难维持更新,原因嘛,都知道的)
第2技  验证hash token预防数据篡改
例如: http://xxx.xxx.xxx/?p=4&rv_token=aafb509403bbf7d78c3c8fe1735d49f01b90eb64
rv_token的验证
第3技 安装OWASP ModSecurity CRS
该规则集有两种模式,一种独立检测模式,一种协同检测模式(规则评分制)
第4技 将IDS Snort规则转换为ModSecurity规则
使用 snort2modsec2.pl脚本将Snort规则转换为ModSecurity规则
脑洞:安全防御是个整体,将各个关卡有效地联动起来形成壁垒
2015-12-11: 规则一直被歧视(貌似不表示下歧视就low),但我们用事实说话,看看主要安全产品的主要防御方式吧,其中规则被诟病的主要原因:
(1)心理原因,觉得人人都能写,不高端
(2)实际效果,总被绕过, 规则需要持续维护的成本
静态规则如果有一套自动化的运维系统来支撑就能持续发挥作用
(1)自动化规则漏报/误报检测:基于异常检测来支撑漏报,基于统计阈值来支撑误报(已实践,效果不错)
(2)规则自动化提取生成:上一步的结果自动生成规则,未实践
(3)静态规则的分级防御:结合漏洞库,对出现过漏洞的path调整防御级别
(4)规则的通用性转换:漏洞扫描报告转化为防御规则,
第5技 使用贝叶斯分类算法区分恶意请求
第6技 开启HTTP日志审计,设置粒度为全部记录
第7技 开启HTTP日志审计,设置粒度为部分记录
例如只记录响应码为4xx的HTTP请求
第8技 开启HTTP日志审计,不记录静态资源访问请求
第9技 将HTTP日志中的敏感信息****化
脑洞:出发点是尊重用户隐私,但是不少CDN厂商并不会这样做
第10技 使用syslog将server警告信息转发给中心日志平台
作用于分布式/协同防御系统中的日志收集阶段,例如递交给SIEM系统进行分析
2015-12-11:

日志分析技术并不是新鲜的概念,发展的只是分析的支撑平台(存储计算),提高的是处理量级与效率,(机器学习算法暂不评价,因为并未深入),分析的核心还
是分析者的专业知识与经验(特别是经验,安全防御是特别需要经验的,处理的case多了,大多数事情就能hold住了)。

第11技 使用更为友好的ModSecurity 的审计控制平台AuditConsole
第12技 被动的漏洞识别方案-通过读取漏洞库(例如OSVDB)来识别漏洞从而进行防御
2015-12-11: 安全防御总体说是漏洞驱动的,瞧瞧有多少做漏洞平台的,无论官方的还是地下的
小小的感慨下,安全从业人员的增多并没有使得网络安全环境变好反而是恶化,赏金制度的挖洞,催发出多少未授权的渗透行为,对漏洞平台人员所说的漏洞平台会引导黑帽子持质疑的态度。
抛开个人情绪,漏洞库在防御上非常有用。第4技有说明
第13技 主动的漏洞识别方案-调用扫描器(例如Arachni)来识别漏洞从而进行防御
第14技  将扫描器结果手动转化为防御规则

第15技  将扫描器结果自动转化为防御规则
使用 Arachi2modsec.pl脚本将arachi扫描报告转换为ModSecurity规则
第16技 实时调用扫描器(例如Arachni RPC)进行防御
第17技 设置honeypot,新开监听端口
第18技 设置honeypot,伪造robots.txt disallow 项与伪造401请求身份验证的请求
脑洞:其实在中国区也发生过“正规”搜索引擎不遵守robots协议,爬取disallow路径的案例
第19技 设置honeypot,伪造HTML注释
脑洞:黑客一般会在HTML代码注释区找敏感信息,Burpsuite就专门提供了"find comments"功能。例如在注释区增加一个不存在的uri来捕获黑客
第20技 设置honeypot,伪造隐藏表单域(hidden form fields)
例如增加一个隐藏表单字段debug,如果HTTP请求中包含这个隐藏表单,说明请求就有攻击意向
第21技 设置honeypot,伪造cookie
第22技 使用IP信誉库,查询访问者IP信息
脑洞: MaxMind IP库,估计没有人没听说过
第23技 使用IP信誉库,识别恶意恶意代理
第24技 调用在线RBL(real-time blacklist)库(例如sbl-xbl.spamhaus.org),识别恶意IP
在线查询国际反垃圾邮件组织提供的IP黑库,或者调用开源的IP黑名单收集蜜罐API接口HTTPBL(Honeypot HTTP Blacklist)进行IP信誉查询
第25技 创建自己的RBL
使用jwall-rbld创建自己的RBL,https://jwall.org/ 提供了不少java编写的web安全工具
第26技 调用URI黑库(例如URIBL,Google Safe Browsing API),识别恶意URI
脑洞:BAT,360,金山等大的互联网公司都陆续开放了自己的恶意网址库接口
第27技 按需解析HTTP请求体
HTTP请求体的检测是非常消耗性能的,所以要加上各种优化限制,例如检测体长度限制,缓存到本地文件系统的请求体是否解析(像naxsi就不解析这种),是否解析XML实体类型等
第28技 识别不符合协议规范带有潜在恶意的请求体
无法为协议解析组件所解析的请求体都有恶意的可能性,例如在multipart-form类型的文件上传包中构造恶意格式绕过上传文件类型的限制
第29技 规范化Unicode编码
WAF绕过技巧中有一大分支-编码绕过,使用编码映射规范化编码是个不错的点子
第30技 识别多重编码
例如两次urlencode
第31技 识别异常编码
验证是否为规范编码
第32技 识别异常的HTTP请求方法
制定HTTP请求白名单,例如只允许GET、POST、HEAD

第33技 识别不符合RFC 2616定义的URI格式

第34技 识别HTTP请求头异常
例如HTTP请求头缺失、请求头排列顺序异常、请求头取值异常
第35技 通过多余参数识别攻击
第36技 通过缺失参数识别攻击
第37技 通过重复参数(HPP)识别攻击
脑洞:正常的应用也会出现重复参数的情况,why!!!
第38技 通过参数取值长度异常识别攻击
第39技 通过参数取值字符类型异常识别攻击
采取参数取值白名单的方式来防御
第40技 识别HTTP响应头异常
例如5xx错误的比例,HTTP响应拆分,恶意的重定向
第41技 预防HTTP响应头中的信息泄漏
移除或伪造服务签名响应头,例如Server,X-Powerd-By,X-AspNet-Version
第42技 按需解析HTTP响应体
响应体的检测是极其消耗性能的,所以要参照安全级别谨慎设置如何解析HTTP响应体
第43技 检测网页篡改-标题篡改
第44技 检测网页篡改-响应体长度异常
网页内容被篡改或后端DB被拖库时,响应体的大小会发生明显的变化
2015-12-11:  挂马并不会发生大的变化,常见拖库行为是否会引发明显变化,需要试验后给出结论(也是继webshell检测后计划试验的)
第45技 检测网页篡改-响应体动态内容篡改
例如在表单注入一段<script>alert(document.cookie);</script>,检查响应体中会出现新的JS标签,我们根据标签个数便能发现攻击。
第46技 检测响应体中的源码泄漏
例如php-cgi源码泄漏漏洞CVE-201201823
第47技 检测响应体中的信息泄漏
例如响应体中泄漏源码绝对路径,数据库信息
第48技 通过异常的响应时间来发现攻击
例如基于时间的SQL盲注waitfor delay会造成异常的响应时间
第49技 检测响应体中的用户数据泄漏
例如信用卡号
第50技 检测木马、后门、webshell连接尝试

第51技 监测使用常用账号进行的登录尝试

例如使用admin administrator root system等作为用户名来尝试登录
第52技 监测登录口横向暴力破解
使用同一个密码,不同的用户名来尝试暴力破解
第53技 监测失败的登录尝试
第54技 监测高频率的登录尝试
第55技 使用统一的登录失败提示,避免有用信息泄漏
像错误的用户名或错误的密码这种提示会给暴力破解提供有效信息
第56技 启用密码复杂度检测
第57技 分析一个会话期,登录尝试的用户名来发现登录口异常
第58技 检测异常的cookie取值
基于会话的攻击,包括可猜测的会话ID取值(burpsuite就集成了会话sequence分析工具)
第59技 检测来自cookie字段的攻击
例如cookie字段的SQL注入
第60技 设置会话有效期
防御会话固定攻击
第61技 检测一个会话期,请求者IP的GEO信息的变化

第62技 检测一个会话期,请求者指纹的变化

该技术一般用于反欺诈系统用于识别用户身份,包括访问者屏幕大小,时区,语言设置,浏览器插件
第63技 检测请求者中的非ASCII字符
例如NULL字符%00
脑洞:看过naxsi基础规则文件的会发现,90%的规则都是检测非ASCII字符
第64技 检测目录遍历攻击
2015-12-11:  猜后台目录/漏洞path是比较有效的渗透方法
第65技  检测非正常流程的网站资源访问
控制URL进行横向权限提升,纵向权限提升操作
可以使用加密token(例如url hash)来防御任意资源访问,如下所示
https://www.REDACTED.com/Cust/cust_5.php/222557/20040216?rv_token=abfb508403bbf7d78c3f8de1735d49f01b90eb71
第66技 检测SQL注入攻击
SQL注入的防御方法一般有三种
(1)SQL关键字过滤器 (2)SQL语义分析 (3)朴素贝叶斯异常分类(使用机器学习算法的异常检测)
2015-12-11:  
第67技 检测远程文件包含漏洞
当URI包含以下情况时,极可能是一次攻击请求
IP地址,例如/a.php?libdir=http://89.238.174.14/fx.txt???
PHP函数,例如/?id={${include("http://xxx.xx.xx/fx.txt??)}}
多个?号,例如/a.php?libdir=http://xxx.xx.xx/cgi???
包含的host与Host头的字段不符,例如/a.php?libdir=http://www.example.com
第68技 检测操作系统命令执行漏洞
第69技 检测HTTP Request Smuggling HRS攻击
第70技 检测HTTP响应拆分漏洞
第71技 检测XML攻击
例如XPath注入
第72技 使用CSP策略防御
第73技 检测XSS攻击
XSS的防御方法一般有三种
(1)XSS关键字过滤器 (2)X-XSS-PROTECTION (3)javascript沙盒
第74技 检测CRSF攻击
CSRF防御方法:加密token
第75技 防御UI Redressing(clickjacking)
clickjacking防御方法:
(1)X-Frame-Options(2)frame-busting javascript
第76技 防御盗号木马-中间人攻击
盗号木马一般会截获HTTP请求,伪造登录界面来盗取账号,而对这种钓鱼攻击的防御灵感来源于文件完整性检测工具tripwires,使用JS注入响应体md5值附加在登录页面来验证页面完整性。
第77技 限制上传文件的大小,避免超大文件上传造成服务器的拒绝服务攻击
第78技 限制上传文件的数目,避免过多文件上传造成服务器的拒绝服务攻击
第79技 集成病毒扫描工具(例如ClamAV),检测上传文件是否为恶意文件
第80技 HTTP DDoS(CC)攻击识别
比较有名的攻击工具有low orbit ion cannon LOIC,high orbit ion cannon HOIC
注意与第8技相同只监控动态页面,因为静态资源的请求一般会缓存到CDN节点而到不了源站
第81技 HTTP slow DDoS攻击识别
比较有名的攻击工具有slowloris
第82技 通过检测后续请求的响应时间是否过快来检测CSRF攻击

如CSRF <img
src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=alice">
受害者访问图片标签的同时就发送了一个GET请求,两个请求的间隔时间非常短
第83技 检测异常的HTTP请求次序
自动化攻击往往会最小化操作步骤,我们可以参照第2技,第65技,增加token来预防自动化攻击
2015-12-11:  基于图的异常检测方式比较有效,比如检测孤立点来发现webshell(注意不能只有这个特征),比如监测非常规路径来发现越权访问
第84技 识别网站特定资源访问量的异常
当网站的某个资源的访问量出现异常的时候,往往意味着攻击发生了,例如新浪微博CSRF蠕虫攻击中自动发微博接口的自动调用

第85技 多个HTTP请求之间的联动分析

启用协同检测模式(规则评分制),例如单个IP/会话触发的规则情况
第86技 动态开启WAF日志审计
例如当收到来自IP黑名单的请求时,开启日志审计功能
第87技 email发送WAF协同防御细节给站长
可以调用外部email发送脚本也可以使用AuditConsole平台(第11技中提到)发送
第88技 将WAF事件信息通过请求头分享给其他安全组件来进行联动分析
当捕获一个安全级别较低的攻击时,直接拦截就不是个好的选择了,这时候就可以将WAF事件信息分享给其他安全组件进行联动分析来执行合理的应对措施,而通过HTTP请求头传递WAF事件信息就是个不错的方案(这种方法叫做request header tagging)。
第89技 将攻击请求重定向到用户友好的自定制拦截页面
第90技 断开攻击者的网络连接
该措施常用于拒绝服务攻击,例如CC攻击
第91技 使用IP黑名单阻塞工具阻塞恶意用户访问
一般会将User-Agent与IP地址联合起来来阻塞恶意用户访问
常见的黑名单阻塞工具有jwall-Rbld,Jwall AuditConsole, blacklist,samtool(snortsam)
第92技 动态启用基于IP-GEO信息的分级防御
例如发现大量攻击者来自X国,对X国启用高级防御
第93技 通过延迟对请求的响应时间来减缓自动化攻击,给防御者争取时间来应对攻击
第94技 伪造攻击成功的返回页面来迷惑攻击者,给防御者争取时间来应对攻击
集成honeypot的防御思想
第95技 将攻击请求代理到honeypot
第96技 当检测到会话异常时,强制攻击者登出
例如当会话期间useragent发生变化时,强制攻击者登出
第97技 当攻击事件发生时,锁定攻击者账号一段时间 
第98技 使用JS注入cookie阻塞流量性攻击(例如CC攻击)
第99技 使用验证码阻塞自动化(机器)攻击
例如自动注册,自动发送垃圾贴等机器人行为
脑洞:注意验证码服务器要足够健壮,以免招受拒绝服务攻击时导致这一措施失效
第100技 集成BeFF(browser exploit framework)来分析恶意用户请求
终于写完了,我们会发现这100个防御技巧中出现了以下工具(规范或方法)
WAF(web
应用防火墙),Snort(入侵检测系统),OSVDB(开源漏洞库),honeypot(蜜罐),Arachni(漏洞扫描器),BeFF(漏洞挖掘框
架),ClamAV(杀毒软件),tripwires(文件完整性校验工具,在web领域可以用来预防HTTP请求数据篡改,钓鱼页面伪造和自动化提交请
求),RBL(实时IP黑库,IP信誉库),URIBL Google Safe Browsing API(恶意网址库),javascript sandbox(沙箱),SIEM(安全信息与事件管理平台), SQL词法分析器 ,HTTP RFC规范,编码映射表,朴素贝叶斯分类算法
于是,可以很容易发现web安全防御是个整体,需要将各个组件(关卡)有效地联动起来形成壁垒,安全防御方法也是没有严格的领域区分的,客户端的安全技巧可以用于web,反之亦然,同时在解决某个安全问题时,如果找不到完善的单独解决方案,不妨同时使用不同的有缺陷的防御方案,三个臭皮匠顶个诸葛亮。
2015-12-11:  
现在出来了不少新概念的安全产品,仔细研究下来基本属于以下两种
(1)通用型安全产品:安全组件大礼包,比如说集成web漏洞检测、恶意软件检测、恶意网址检测、DNS/DDoS检测、情报信息(包括漏洞/攻击事件feed,信息泄漏集成),将网络层面的流量信息/系统层面的进程日志信息 定向到安全组件中进行检测,将结果聚合后展示在控制面板上(目前还没有看到什么产品做到强聚合)
这种产品的特性是对误报容忍性差,静态检测规则为主
(2)垂直型安全产品:这种客户都有着高端或更直接的安全需求,例如欺诈识别为主的业务安全、金融产品安全(比如说支付终端漏洞,支付木马),金融企业安全(针对金融行业的专业黑客攻击)

这种产品的特性是对漏报容忍性差,个人感觉是研发代价比较大的数据安全分析技术更能发挥作用的地方

from: 碳基体

web应用安全防御100技 好书再次阅读, 变的只是表象,被概念迷惑的时候还是静下心来回顾本质的更多相关文章

  1. 常见【十种】WEB攻击及防御技术总结

    最近参加了一个WEB安全培训,感觉WEB攻击跟防御都是挺有意思的.以下总结比较简短,仅供观赏哈. 一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的 ...

  2. 云计算之路-阿里云上:博客web服务器轮番CPU 100%

    今天下午14:30左右开始,不知道怎么回事,博客站点负载均衡中的web服务器轮番CPU 100%.平时访问高峰5台服务器就能稳稳支撑,而今天发现CPU出现100%问题后就开始加服务器,结果到目前加到了 ...

  3. web攻击和防御措施

    1.SQL注入:参照下面的链接 http://www.cnblogs.com/chenhaoyu/p/8758888.html 2.跨网站脚本攻击(Cross Site Scripting, XSS) ...

  4. Juniper SRX550防火墙web页面CPU达到100%的故障解决办法

    Juniper SRX550防火墙web页面CPU达到100%的故障解决办法 利用telnet远程连接主机,对web页面注销重新登录即可,在配置中输入命令:run restart web-manage ...

  5. 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)

    https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面 ...

  6. web攻击与防御技术--SQL注入

    sql注入是WEB安全中比较重要而复杂的一个东西.而且危害性比较大. 一般来讲SQL注入的话首先要识别注入点.一个是看能不能注入另外一个是看是什么类型的注入比如说字符,数字,搜索(?)等等 GET.P ...

  7. web攻击与防御

    攻击方式 利用输出值转义漏洞 跨站脚本攻击(XSS) SQL注入攻击 OS命令注入攻击 HTTP首部注入攻击 邮件首部注入攻击 文件目录遍历攻击 利用设置或设计缺陷 强制游览 开放重定向 不正确的错误 ...

  8. 常见web攻击以及防御

    xss攻击: 跨站脚本攻击,攻击者在网页中嵌入恶意代码,当用户打开网页,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie,用户名密码,下载执行病毒木马程序,甚至是获取客户端admin权限 ...

  9. WEB安全--CSRF防御

    CSRF漏洞防御主要可以从三个层面进行,即服务端的防御.用户端的防御和安全设备的防御. 服务端的防御 目前服务器端防御CSRF攻击主要有5种策略(我知道的就这么多):验证HTTP Referer字段, ...

随机推荐

  1. java面试问题整理-垃圾回收

    对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况.通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象,通过这种方式确定哪些对象是"可达的" ...

  2. gradle添加依赖

    gradle添加jar,moudle依赖 dependencies { compile fileTree(include: '*.jar', dir: 'libs') compile project( ...

  3. jsp标签<c:forEach>取出传递参数注意

    运行书里的代码,其中servlet可以通过以下两个方式向jsp传参数: 1.         request.getSession().setAttribute("productList&q ...

  4. git 常见问题

    RPC failed; error: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), er rno 100 ...

  5. IBM 3090 with Vector Facility

    COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  6. iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

    本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...

  7. flot - jQuery 图表插件(jquery.flot)使用

    Flot是纯Javascript实现的基于jQuery的图表插件,主要支持线状图和柱状图的绘制(通过插件也可以支持饼状图). 特别注意Flot使用的是UTC时间,最好修改flot.js去掉所有的UTC ...

  8. Open Live Writer 安装

    Open Live Writer来源 Windows Live Writer在2012年就停止了更新,Open Live Writer是由Windows Live WriterWriter更名而来,是 ...

  9. linq实现数组转符号分割的字符串(备忘)

    fitemidstr = string.Join(",", detailpre1.Select(i => i.Key.ToString()).ToArray());

  10. Spring松耦合实例

    假设你的项目有一个函数输出的内容,以CSV或JSON格式.您的代码可能看起来像下面的例子: File : IOutputGenerator.java – 输出生成器接口 package com.yii ...