写这篇文章的初衷,主要由于自己所负责的项目有这方面的需求,就简要提一提web安全方面的一些知识
一.web安全的兴起
web攻击技术经历几个阶段
a.服务器端动态脚本的安全问题
b.sql注入的出现
c.xss的出现
d.web攻击思路从服务器到客户端
机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。
机密性:要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
完整性:要求保护数据内容是完整、没有被篡改的,常用方法是数字签名。
可用性:要求保护资源是“随需而得”,DOS破坏了这个规则
三.安全评估的四个阶段
资产等级划分、威胁分析、风险分析、确认解决方案
四.微软提出的威胁建模方法
STRIDE模型
威胁 | 定义 | 对应的安全属性 |
---|---|---|
Spoofing(伪装) | 冒充他人身份 | 认证 |
Tampering(篡改 ) | 修改数据或者代码 | 完整性 |
Repudiation(抵赖) | 否认做过的事 | 不可抵赖性 |
InformationDisclosure(信息泄露) | 机密信息泄露 | 机密性 |
Denial of Service(拒绝服务) | 拒绝服务 | 可用性 |
Elevation of Privilege(提升权限) | 未经授权获得许可 | 授权 |
五.微软提出的风险衡量模型
DREAD模型
等级 | 高(3) | 中(2) | 低(1) |
---|---|---|---|
Damage Potential | 获取完整验证权限;执行管理员操作;非法上传文件 | 泄露敏感信息 | 泄露其他信息 |
Reproducibility | 攻击者可以随意再次攻击 | 攻击者可以重复攻击,但有时间限制 | 攻击者很难重复攻击 |
Exploitability | 初学者在短期内能掌握攻击方法 | 熟练的攻击者才能完成这次攻击 | 漏洞利用条件非常苛刻 |
Affected users | 所有用户,默认配置,关键用户 | 部分用户,非默认配置 | 极少数用户,匿名用户 |
Discoverability | 漏洞很显眼,攻击条件很容易获得 | 在私有区域,部分人能看到,需要深入挖掘漏洞 | 发现该漏洞及其困难 |
六.设计安全方案原则
七.浏览器安全
同源策略:这是浏览器最核心也是最基本的安全功能。其限制来自不同源的“document”或脚本,对当前“document”读取或者设置某些属性。
影响因素有:host、子域名、端口、协议。
<script>|<img>|<iframe>|<link>等标签可以跨域请求资源,不受同源策略的限制。
挂马:在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式。
恶意网址拦截的工作原理:浏览器周期性地从服务器端获取一份最新的恶意网址黑名单,如用户上网时访问的网址存在于此黑名单汇总,浏览器就会弹出一个警告页面。
分为两类:(1)挂马网站,通过浏览器漏洞执行shellcode植入木马;(2)钓鱼类网站,欺骗用户。
八.跨站脚本攻击(XSS)
XSS攻击:黑客通过“HTML注入”篡改页面,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的攻击方式。
XSS可以分为三类:
1、反射型XSS(非持久型):简单把用户输入的数据“反射”给浏览器。也就是说,需要用户点击一个恶意链接才能攻击成功。
2、 存储型XSS(持久型):把用户输入的数据“存储”在服务器端,其具有很强的稳定性。一个常见的场景是,黑客写一篇包含恶意链接的博客,所有访问这个博客的用户都会执行这个恶意链接。
3、 DOM Based XSS:并非按照“数据是否保存在服务器端”来划分,从效果上来说是反射型XSS,由于其形成原因比较特别,因此单独提出。
XSS Payload:用以完成各种具体功能的恶意脚本。
XSS Payload实际上就是JavaScript脚本。最常见的就是通过读取浏览器的Cookie对象,发起“Cookie劫持”攻击。可以避免在URL的参数里写入大量的JavaScript代码。
XSS所能做的事:
XSS攻击平台:Attack API;BeEf;XSS-Proxy。
XSS构造技巧:
XSS的防御:
XSS前端防火墙 九.跨站点请求伪造(CSRF)
CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
本质:重要操作的所有参数都可以被攻击者猜测到。
浏览器的Cookie策略:
攻击者能够在第三方站点操作用户原本网站的内容,是因为用户的浏览器存储了原站点的Cookie,用户产生操作请求时,自动发送了这些Cookie,导致了攻击的形成。
浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称临时Cookie;另一种是“Third-parth Cookie”,也称本地Cookie。二者区别在于Third-parth Cookie是服务器在Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,其保存在本地,而Session Cookie没有指定Expire时间,浏览器关闭,就失效。
CSRF攻击思想如下:
CSRF过程
CSRF的防御:
十.点击劫持(ClickJacking)
点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
分类:Flash点击劫持;图片覆盖劫持;拖拽劫持和数据窃取,拖拽不受同源策略的限制,思路是诱使用户从隐藏的不可见iframe中“拖拽”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据;触屏劫持。
防御:
1、frame busting,禁止iframe的使用
2、 X-Frame-Options(HTTP头):DENY\SAMEORIGIN\ALLOW-FROM origin
十一.HTML5安全
HTML5新标签的XSS:其定义了许多新标签,可能带来新的XSS攻击。
Iframe的sandbox属性极大增强了iframe的安全性。
Link Types:noreferrer,标签指定了noreferrer后,浏览器在请求该标签指定的地址时将不再发送Referer。从而保护敏感信息和隐私。
十二.注入攻击
条件:1、用户能够控制数据输入;2、原本要执行的代码拼接了用户的输入。
正确的防御SQL注入:找到所有的SQL注入漏洞;修补漏洞。
1、使用预编译语句;
2、使用存储过程(避免使用动态SQL);
3、检查数据类型;
4、使用安全的函数。
文件上传漏洞:用户上传了一个可执行的脚本文件并通过此脚本获得了执行服务器端命令的能力。
要完成此攻击,需要满足以下几个条件:
1、上传的文件能够被web容器解释执行。且目录是web容器所覆盖到的路径。
2、用户能从web上访问这个文件。
3、用户上传的文件若被安全检查等改变内容,也可能导致攻击失败。
防御:
1、文件上传目录设置为不可执行。
2、判断文件类型(使用MIME Type和后缀检查),推荐使用白名单
3、使用随机数改写文件名和文件路径
4、单独设置文件服务器域名
十三.认证与会话管理
Session Fixation攻击:没有换“锁”而导致的安全问题。
解决方法:登录完成后,重写sessionID
Session 保持攻击:
1、强制销毁Session
2、当用户客户端发生变化时,要求用户重新登录
3、每个用户只允许拥有一个Session。
十四.访问控制
垂直权限管理:建立用户与权限之间的对应关系,常使用RBAC。
水平权限管理:对同一个角色能否访问不同资源进行授权。
十五.加密算法与随机数
系统中对数据进行加密使用的加密算法和随机数生成算法的安全性和健壮性都直接关系到整个系统的安全性。对称加密、非对称加密的密钥的安全性,随机数算法的随机性都是要考虑的问题。
十六.Web框架安全
在MVC框架中,通过切片、过滤器等方式,能够对数据进行全局处理。 在VIEW层可以解决XSS问题
使用securit token可以解决CSRF攻击问题。
十七.应用层拒绝服务攻击
DDOS:分布式拒绝服务,利用合理的请求造成资源过载,导致服务不可用。
常见的DDOS攻击有:SYN flood,UDP flood,ICMP flood等。
SYN flood利用TCP协议设计中的缺陷。
对抗SYN flood的主要措施有SYN Cookie/SYN Proxy,Safereset等算法
应用层DDOS发生在TCP三次握手已经完成,连接已经建立,所有发起攻击的IP地址都是真实的,针对服务器性能的一种攻击。
CC攻击:对一些消耗资源较大的应用页面不断发起正常请求,以达到消耗服务器资源的目的。
针对应用层DDOS的防御措施:
1、 限制请求频率;2、对应用程序代码进行优化;3、对网络架构进行优化;4、实现一些对抗手段,如限制每个IP的请求频率。
除CC外,还可能利用一些Web Server的漏洞或者设计缺陷,称为资源耗尽攻击:
1、slowloris攻击:以极低的速度向服务器发送HTTP请求,由于Web server对于并发的连接数有一定的上限,恶意占用这些连接数,本质:对有限资源的无限制滥用。
2、HTTP POST DOS:指定非常大的Content-length值,然后以很低的速度发包。可以使用web应用防火墙或者一个定制的Web Server安全模块。
3、Server Limit DOS:由cookie造成的一种拒绝服务,通过XSS攻击将cookie值设置为超长,这样在发起HTTP请求时,由于Web Server对HTTP头有长度限制,导致请求不成功。
4、ReDOS,正则DOS
十八.Web Server配置安全
Web服务器安全即应用部署时的运行环境安全,包括Web Server、脚本语言解释器、中间件等,对其提供一些配置参数,以起到安全保护作用。
Web Server的安全关注两点:1、自身是否安全;2、其是否提供了可使用的安全功能。
十九.互联网业务安全
安全是产品的一个特性。
优秀的安全方案至少具备两个条件:
1、良好的用户体验;
2、优秀的性能。
业务逻辑要安全,即产品在设计时尽可能消除其潜在缺陷。
二十.安全开发流程
由微软提出,SDL(Security Development Lifecycle),大致分为16个阶段:
1、培训:开发团队的所有成员都必须接受适当的安全培训,包括安全设计、威胁建模、安全编码、安全测试、隐私等知识。
2、安全要求:在项目确立前,确定安全的要求和需要做的事情。
3、质量门/bug栏:确定安全和隐私质量的最低可接受级别。
4、安全和隐私风险评估:用于和确定软件中需要评析的功能环节
5、设计要求:仔细考虑安全和隐私问题
6、减小攻击面:通过减少攻击者利用潜在弱点或漏洞的机会,来降低风险。
7、威胁建模:明确可能来自的攻击有哪些方面,其提出了STRIDE模型。
8、使用指定工具:编译器、链接器等。
9、弃用不安全的函数。
10、静态分析:由相关工具辅助完成,结果与人工分析相结合。
11、动态程序分析:用户测试环节验证程序的安全性。
12、模糊测试:专门形式的动态分析,通过故意向应用程序引入不良格式或随机数据诱发程序故障。
13、威胁模型和攻击面评价。
14、事件响应计划。
15、最终安全评析:发布之前仔细检查对软件执行的所有安全活动。
16、发布/存档。
SDL实战经验准则:
1、与项目经理进行充分沟通,排出足够时间。
2、规范公司的立项流程,确保所有项目都能通知到安全团队。
3、梳理安全部门的权威,项目必须由安全部门审核后才能发布。
4、将技术方案写入开发、测试的工作手册中。
5、给工程师培训安全方案。
6、记录所有的安全bug,激励程序员编写安全的代码。
二十一.安全运营
从战略层面上来讲有三个:
1、Find and Fix(应用脆弱性扫描,渗透测试 )
2、Defend and Defer(Web应用防火墙),安全监控和警报是有效手段。
3、Secure at the Source(安全软件开发生命周期)
Fix工作分两种:1、扫描漏洞并及时修补;2、安全事件发生或0day漏洞被公布时,紧急响应。
安全运营的重要目标:建立SOC(Secure Operation Center)
小结:互联网安全的核心核心问题是数据安全的问题,而安全问题本质是信任问题,最近比较火热的区块链的本质其实就是信任问题,下章节就简要介绍什么是区块链