大家好,欢迎来到IT知识分享网。
《白帽子讲web安全》笔记
(仅大概做了笔记,详细内容请阅读原书)
- 被划分出来的具有不同信任级别的区域,被称为信任域,划分不同信任域的界限叫信任边界
- 数据从高等级的信息域流向低等级信任域,不需要经过安全检查;从低等级信任域流向高等级信任域,需要经过安全边界的安全检查
- 安全的本质问题就是信任问题
- 把握信任条件的度,使其恰到好处是设计安全方案的难点
安全三要素
- 机密性:保护数据内容不能被泄露,常用的实现机密性要求是加密
- 完整性:保护数据内容是完整的,没有被篡改。常用的技术手段是数字签名
- 可用性:保护资源随需而得。常见的破坏手段是拒绝服务攻击(DoS)
安全评估
资产等级划分
威胁分析
- 把可能造成危害的来源成为威胁,把可能会出现的损失称为风险
- 漏洞:系统中可能被威胁利用以造成危害的地方
- 在进行威胁分析时,要尽可能不遗漏威胁,头脑风暴的过程可以确定攻击面
风险分析
-
风险由以下因素决定
Risk = Probability * Damage Potential
更科学地衡量风险
DREAD模型
等级 高(3) 中(2) 低(1) Damage Potential 获取完全验证权限;执行管理员操作;非法上传文件 泄露敏感信息 泄露其他信息 Reproducibility 攻击者可以随意再次攻击 攻击者可以重复攻击,但有时间限制 攻击者很难重复攻击过程 Exploitability 初学者在短期内能掌握攻击方法 熟练的攻击者才能完成这次攻击 漏洞利用条件非常苛刻 Affected users 所有用户,默认配置,关键用户 部分用户,非默认配置 极少数用户,匿名用户 Discoverability 漏洞很明显,攻击条件很容易获得 在私有区域,部分人能看到,需要深入挖掘漏洞 发现该漏洞极难
设计安全方案
白帽子兵法
Secure By Default原则
白名单、黑名单
- 白名单指,在指定防火墙的网络控制策略时,只提供允许网站服务器的端口号,屏蔽其他的端口
- 黑名单指,屏蔽指定的端口,其他的放行黑名单很容易被绕过
最小权限原则
- 要求系统只授予主题必要的权限,而不要过度授权
纵深防御原则
- 要在各个不同的层面、不同的方面实施安全方案,避免出现疏漏
- 不同层面设计的安全方案,将共同组成整个防御体系
- 要在正确的地方做正确的事,及解决根本问题的地方实施针对性的安全方案
- 深入理解威胁的本质,对症下药
数据和代码分离原则
- 比如sql注入、缓冲区溢出等都属于违背该原则
不可预测性原则
- 随机
客户端脚本安全
浏览器安全
同源策略
- 同源策略限制了不同源的
document
或脚本,对当前的document
读取或设置某些属性
XSS攻击
- 跨站脚本攻击(XSS)事客户端脚本安全中的头号大敌。XSS攻击指黑客通过HTML注入篡改网页,插入恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
分类
- 根据XSS效果不同分为如下几类
反射性XSS
- 简单的将用户输入的数据反射给浏览器。黑客往往需要诱使用户点击某个恶意链接,才能攻击成功
- 也叫做非持久型XSS
存储型XSS
- 将用户输入的数据存储在服务器端,具有极强的稳定性
- 也叫做持久性XSS
DOM Based XSS
- 从效果上讲也叫反射性XSS
- 和反射性XSS区别在于它操作了dom节点
XSS攻击进阶
XSS Payload
-
XSS攻击成功后,攻击者能够对用户当前的浏览页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为XSS Payload
-
XSS Payload本质上就是JavaScript脚本
- 最常见的XSS Payload就是通过读取浏览器的Cookie对象,从而发起Cookie劫持
- Cookie绑定上HttpOnly标识可以防止Cookie劫持
构造GET和POST请求
- 通过插入一个图片使其src自动执行(get)
- 通过构建一张表单,并诱使用户触发(post)
- 通过XMLHttpRequest发送POST请求
XSS钓鱼
- 用javascript在页面上伪造出一个用户可以交互的组件并诱使用户点击触发
识别浏览器
- 通过使用javascript读取用户的user-agent来识别出当前用户使用的浏览器,但是user-agent可以伪造
- 通过浏览器之间的细微差别进行判断
识别用户安装的软件
- 通过使用软件的一些控件判断是否安装了该软件
XSS Worm
- 用户之间发生交互行为的页面,如果存在存储型XSS,则比较容易发起XSS Worm攻击
构建payload
- 可以利用字符编码
- 绕过长度限制
- 将XSS Payload写到其他地方,并通过简短的代码加载payload
- 藏代码:比如
location.hash
- 使用注释符绕过长度限制
XSS构造技巧
-
利用字符编码
字符之间的不同组合可能会被编码所识别
-
绕过长度限制
-
利用事件来完成payload
比如原payload:
<script>alert(123)</script>
利用事件缩短它:
" onclick="alert(123)"
-
使用
location.hash
隐藏代码 -
某些环境下,使用注释符绕过长度限制
比如:
<input id=1 type="text" value=""/> 123 <input id=2 type="text" value=""/>
IT知识分享网
当input1输入的值为
">"<!--
,input2输入的值为--><script>alert(123)</script>
此时变成
IT知识分享网
<input id=1 type="text" value=""><!--"/> 123 <input id=2 type="text" value="--><script>alert(123)</script>"/>
-
使用
<base>
标签<base>
标签的作用是定义页面上的所有使用相对路径的标签的hosting地址 -
window.name
表示当前页面的名字
XSS防御
-
HttpOnly
HttpOnly解决的是XSS后的Cookie劫持攻击
-
输入检查
-
输出检查
- 安全编码:HtmlEncode(将字符转换成HTMLEntities)
-
处理富文本
- 输入检查,过滤危险标签(
-
CSRF
-
全称是
跨站点请求伪造
,让用户在第三方站点里执行某个操作 -
浏览器支持的两种cookie
- session cookie,又称为临时cookie。没有指定过期时间,当关闭浏览器时就会失效
- third-party cookie,也叫本地cookie。它会在set-cookie时指定时间,到时间之后才会失效,它保存在本地
某些浏览器会禁止third-party cookie的发送
-
加入P3P头可以跨域访问隐私数据,并成功跨域set-cookie
-
CSRF的本质原因是因为重要操作的参数都会被攻击者猜到
CSRF防御
- 验证码
- Referer Check:记录着上个页面的地址。但是它的缺点是服务器不是什么时候都能拿到的(比如从https跳转到htpp页面中)
- 加入随机Token。token生成时一定要足够随机
clickjacking
点击劫持
- 点击劫持是指攻击者使用一个透明的、不可见的iframe覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面,执行某些功能
拖拽劫持和数据窃取
- 拖拽劫持的思路是诱使用户从隐藏的不可见iframe中拖拽出攻击者希望得到的数据,然后放到攻击者能控制的一个页面中,从而窃取数据
触屏劫持
- 思路同样是使用了透明的iframe,诱使用户点击某处的按钮
防御clickjacking
- frame busting:禁止iframe的嵌套,但是可能会被绕过
- 使用HTTP头
X-Frame-Options
:它有三个值- DENY:拒绝加载任何iframe页面
- SAMEORIGIN:只能加载同源域名下的页面
- ALLOW-FROM origin:允许iframe加载的页面地址
HTML 5 新标签
-
iframe增加sandbox属性,增强了它的安全性
-
和
标签定义了一个新的LinkType:noreferrer使用后留恋其在请求该标签指定的地址就不会发送referer
-
Canvas可以在页面中直接操作图片对象,也可以直接操作像素
其他
- Cross-Origin Resource Sharing
- postMessage
- Web Storage
服务器端应用安全
注入攻击
- 违背了数据和代码分离原则
SQL注入
- 注入攻击的两个条件
- 用户能够控制数据的输入
- 原本要执行的代码拼接了用户的输入
- 如果web服务器开启了错误回显,那么就会给攻击者带来很大的便利
盲注
如果web服务器关闭了回显,无法判断调试的信息,这时必须找到一个方法来验证注入的SQL语句是否得到执行。方法如下
- 构造简单的语句,观察页面的变化
- Timing Attack:通过过时间长短的变化,判断注入语句是否执行成功
SQL注入攻击技巧
- version()函数获取数据库版本
- LOAD_FILE()读取文件,通过INTO DUMPFILE(二进制文件)/OUTFILE(文本文件)写入文件,但是需要有相应的权限
- 攻击存储过程,比如:xp_cmdshell,xp_regread等
SQL注入防御
- 预编译,绑定变量
- 存储过程,同时要避免动态拼接
- 检查数据类型
- 使用安全的函数
其他注入
XML注入
代码注入
CRLF注入
- CRLF 实际上是
\r\n
组成 - 通过在不同位置注入
\r\n
使其产生不同的效果,从而产生恶意代码
文件上传
- 指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
- 文件上传后导致的安全问题:
- 上传web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行
- 上传的是flash的策略文件crossdomain.xml,黑客控制flash在该域下的行为
- 上传的文件是病毒、木马文件,诱骗用户或管理员下载执行
- 钓鱼图片或包含了脚本的图片
- 完成该攻击需要满足以下几个条件
- 上传的文件能够被web容器解释执行
- 用户能够从web上访问这个文件
- 用户上传的文件不被修改
绕过文件上传检查
- 在文件名后添加
%00
或0x00
,则可以实现文件名截断,从而绕过文件后缀的检查 - 伪造合法的文件头,将真实的PHP等脚本代码附在合法的文件头之后
apache文件解析问题
- apache对于文件名是从后往前解析,直到遇到一个apahce认识的文件类型为止
- 如果需要增加让apache可以识别的文件类型,则需要在mine.types文件中设置新的配置
IIS文件解析
- 使用
;
截断(类似于0x00) - 如果服务器配置不当,则put方法会造成安全漏洞
利用文件上传钓鱼
- 将文件上传到目标网站,然后通过传播这个文件的URL进行钓鱼,url中也不会出现钓鱼地址
设计安全的文件上传
- 文件上传的目录设置为不可执行,web容易不可解析,比如WEB-INF
- 判断文件类型。可以结合使用MIME Type,后缀检查等方式
- 使用随机数改写文件名和文件路径
- 单独设置文件服务器的域名
认证和会话管理
Who am I
- 认证和授权
- 认证的目的是认出用户是谁,认证其实就是验证凭证的过程
- 授权是决定了用户可以做什么
密码
-
密码通常要使用不可逆的加密算法,或者是单向散列函数算法,加密后存储在数据库中
-
激活成功教程MD5密码的方法:彩虹表
思路是搜集尽可能多的密码明文和明文对应的MD5值。这样只需要查询MD5就能找到对应的明文。
-
在存储密码时可以考虑加盐,并且是随即盐
多因素认证
- 除了密码认证之外,还可以增加手机动态口令,数字证书等用户认证的方法。
Session与认证
- 用户登录后将其信息存入session中,最常见的就是放入cookie
- sessionID要有足够的随机性
Session Fixation攻击
- 在用户登录网站的过程中,如果登录前后用户的SessionID没有发生变化,则会存在Session Fixation问题
Session保持攻击
- session本身应该存在生命周期,如果一段时间没有操作后,它应该失效。攻击者在拿到这个session后可以一直发送请求让这session一直存活下去
- XSS攻击可以将Cookie设置为永不过期
单点登录(SSO)
- 单点登录指的是用户只需要登录一次,就可以访问所有的系统。
- sso的优点在于风险集中化,就只需要保护好这一个点
- sso的缺点是如果单点被攻破,那么后果非常严重,会影响到所有使用单点登录的系统。降低该风险的方法是在一些敏感的系统里,再单独实现一些额外的认证机制
- 目前最流行的单点登录系统是OpenID。用户登录后将拥有一个唯一的URI,在登录系统时,用户只需要提交他的OpenID以及OpenID的提供者即可重定向进行认证,完成后再重定向回网站
访问控制
What can I do
- 抽象的说就是某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制
- 在一个安全系统中,确定功能主体的身份是“认证”解决的问题;客体是一种资源,是主体发起的请求的对象。主题可以干什么就是权限
- 基于URL的访问控制,在java中通过filter实现
垂直权限管理
- 访问控制实际上是建立用户和权限之间的对应关系。现在广泛应用的方法就是基于角色的访问控制,简称RBAC(就是用户->角色->权限)。基于角色的权限管理,我们可以称其为垂直权限管理
- 如果一个本属于低权限角色的用户通过一些方法获得了高权限角色的能力,则发生了越权访问(垂直越权)
水平权限管理
- 在RBAC的模型下,系统只会验证用户A是否属于角色RoleX,而不会判断用户A是否能访问只属于用户B的数据DataB,因此发生了越权访问。
- 一个简单的数据级访问控制,可以考虑使用“用户组”的概念。同一用户组的成员才能实现对某些数据的操作。
OAuth简介
- OAuth是一个在不提供用户名和密码的情况下,授权第三方应用访问web资源的安全协议。
- OAuth和OpenID都致力于让互联网变得更加的开放。OpenID解决了认证问题,OAuth更注重授权
- 在OAuth中,涉及到了3个角色,分别是
- Consumer:消费方(Client)
- Service Provider:服务提供方(Server)
- User:用户(Resource Owner)
加密算法和随机数
-
常见的加密算法分为分组加密算法和流密码加密算法
-
分组加密算法基于分组操作,根据算法的不同,每个分组的长度可能不同。代表算法有:AES、DES、IDEA等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMvvPqhP-1634889320169)(C:\Users\210628f\AppData\Roaming\Typora\typora-user-images\image-20210901164514718.png)]
-
流密码加密算法,每次只处理一个字节,密钥独立于消息之外,两者通过异或
-
-
针对加密算法的攻击,一般根据攻击者能获得的信息,可以分为:
- 唯密文攻击:攻击者有一些密文,它们是使用同一加密算法和同一密钥加密的
- 已知明文攻击:攻击者除了能得到一些密文外,还能得到这些密文对应的明文。
- 选择明文攻击:攻击者不仅得到一些密文和明文,还能选择用于加密的明文
- 选择密文攻击:攻击者可以选择不同的密文来解密
Reused Key Attack
-
在流密码的使用中,最常见的错误就是使用同一个密钥进行多次加/解密。(异或)
-
如果A代表明文A,B代表明文B,E(A)代表A的密文,E(B)代表B的密文,那么:
E(A) ^ E(B) = A ^ B
因此当知道其中三个时,便可推导出最后的一个
Bit-flipping Attack
- 当明白上边的公式,便可能构造出管理员的Cookie,从而获得管理员的权限
- 解决方法是验证密文的完整性,最常见的方法是增加带有KEY的MAC(消息验证码),通过MAC验证密文是否被篡改。通过哈希算法来实现的MAC,称为HMAC。
弱随机IV问题
- 通过暴力匹配,可以得到IV
WEP激活成功教程
- WEP是一种常用的无线加密传输协议
- WEP在加密过程中,有两个关键因素,一个是初始化向量IV,一个是对消息的CRC-32校验。
- Aircrack实现激活成功教程WEP(WIFI):
- 加载目标
- 与目标网络进行协商
- 生成密钥流
- 构造ARP包
- 生成自己的ARP包
- 激活成功教程
ECB模式的缺陷
- 对于分组加密而言,出去算法本身,还有一些通用的加密模式,不同的加密算法会支持同样的几种加密模式。常见的模式有:ECB,CBC,CFB,OFB,CTR等。
- ECB模式是最简单的一种加密模式,它的每个分组之间相对独立,因此攻击者只需要对调任意分组的密文,在经过解密后,所得的明文顺序也是经过对调的
- 当需要加密的明文多于一个分组的长度时,应该避免使用ECB模式
密钥管理
- 密码系统的安全性应该依赖于密钥的复杂性,而不应该依赖于算法的保密性
- 最常见的密钥保管是将密钥保存在配置文件中或数据库中
伪随机数问题
- 伪随机数不够随机,比如根据时间戳生成的随机数,会通过暴破而遍历到
- 生成随机数的核心在于随机种子的设计
- 解决方法:使用足够安全的随机数
- java可以使用SecureRandom
- linux可以使用/dev/random或者/dev/urandom来生成随机数
- PHP5.3.0及之后可以使用函数生成
Web框架安全
MVC框架安全
- 将安全工作放在该在的地方
模板引擎和XSS防御
Web框架和CSRF防御
- 区分读操作和写操作,根据操作不同选择不同的HTTP请求方式
HTTP Headers管理
-
编码所有的\r\n对抗CRLF
-
返回号是30X的HTTP Response,浏览器将会跳转到Location指定的URL
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9DkQkU5-1634889320171)(C:\Users\210628f\AppData\Roaming\Typora\typora-user-images\image-20210902135218290.png)]
-
管理好跳转目的地址
- 在web框架提供统一的跳转函数(白名单)
- 控制HTTP的Location字段,限制Location的值只能是哪些地址(白名单)(白名单YYDS)
- HTTP Only防止token盗用
数据持久层和SQL注入
- 使用ORM框架,简化预编译开发
拒绝服务攻击
DDOS
- DDOS又称为分布式拒绝服务,DDOS本身指利用合理的请求造成资源过载,导致服务不可用。分布式拒绝服务攻击将正常的请求放大了若干倍,通过多个节点同时发起攻击,达成规模效应。
- 常见的DDOS攻击有SYN flood,UDP flood,ICMP flood等。
应用层DDOS
CC攻击
- CC攻击指的是对一些消耗资源较大的应用页面不断发起正常的请求,以达到小号服务端资源的目的。
- 黑客入侵一个流量很大的网站,通过篡改页面,将巨大的用户流量分流到目标网站,导致目标网站拒绝服务
防御措施
- 限制请求频率,当客户端的请求在一定时间内过于频繁,就重定向到一个出错页面
- 加入验证码
- 让客户端解析一段JavaScript,并给出正确的运行结果
资源耗尽攻击
Slowloris攻击
- 以极低的速度往服务器发送HTTP请求,由于Web Server对于并发的链接数都有一定的上限,因此当Web Server的所有链接都被恶意链接占用,从而无法接受新的请求,就会导致拒绝服务
HTTP POST DOS
- 原理是在发送HTTP POST包时,指定一个非常大的Content-Length的值,然后以很低的速度发包。这种攻击的本质是针对Apache的MaxClients限制的
Server Limit DOS
- 通过XSS生成一个非常长的token,导致该token对应域下的请求都被拒绝
ReDOS
- 由于正则表达式书写的问题,导致在解析一些数据时消耗时间特别长
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/7511.html