Web安全基础
2023-03-29 15:00:36 1 举报
AI智能生成
白帽子讲安全思维导图整理,涵盖常见基础漏洞的攻击与防御,基本的安全原则,
作者其他创作
大纲/内容
客户端脚本
浏览器安全
同源策略
是一种约定,限制了来自不同源的“document”或脚本,对当前“document"读取或设置某些属性
浏览器沙箱
挂马:在网页插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式
沙箱:资源隔离模块
浏览器模块值让不受信任的代码运行在一个受限制的而环境中,从而保护桌面系统的安全
浏览器模块值让不受信任的代码运行在一个受限制的而环境中,从而保护桌面系统的安全
多进程架构
将浏览器各个功能模块分开,各个浏览器模块实例分开,一个进程崩溃,不影响其他的
恶意网址拦截
恶意网址黑名单
周期性从服务器端获取一份最新的恶意网址名单
EV SSL证书
XSS
反射型
简单的将用户输入数据反射给 浏览器
存储型/持久型
会把用户输入的数据存储在服务端
DOM型
通过修改页面的DOM节点形成的XSS
xss payload
XSS攻击成功后攻击者能对用户页面植入恶意脚本,这些用来完成各种具体功能的恶意 脚本叫做XSS Payload
Cookie劫持
构造POST与GET请求
识别用户浏览器
识别用户安装软件
攻击
XSS Worm
用户之间发生交互行为的页面,如果存在存储型XSS,则比较容易引起Worm攻击
百度空间蠕虫
XSS构造技巧
利用字符编码
百度在一个<script>标签中输入变量时转义了双引号,GBK/GB2312 %c1与\会组成新的Unicode字符
绕过长度
利用事件 onclick等
将XSS payload写在别的地方,然后加载这段代码, location.hash
利用注释符绕过长度限制
使用<base>标签
作用是定义页面上所有使用的”相对路径”标签的hosting地址
window.name的妙用
对当前窗口的window.nam赋值没有特殊字符 的限制,window是浏览器的窗体
不是document对象,很多时候不受同源策略的影响
不是document对象,很多时候不受同源策略的影响
Falsh XSS、回旋镖
防御
XSS的防御是复杂的,流行的浏览器都内置了一些对抗XSS的 措施
Firefox的CSP,Noscript扩展、IE8的XSS filter
Firefox的CSP,Noscript扩展、IE8的XSS filter
HTTPOnly
禁止页面的javaScript访问带有HttpOnly属性的cookie
HttpOnly解决的是 Xss后的cookie劫持攻击
输入检查
XSS、sql注入都需要构造一些特殊字符
格式检查、XSS filter(没有结合渲染页面的代码,对 语境的理解不够)
输出检查
除富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义来防御XSS
安全的编码函数
HtmlEncode(将字符转换成HTMLEntities)、JavaScriptEncode
HtmlEncode
在Html属性中使用
JavaScript
在<script>中使用、在事件中输出、在CSS中输出
URLEncode
在地址中输出,先检查是否以http开头
富文本
标签选择上使用白名单
开源项目对富文本的XSS检查
DOM的防御
CSRF 跨站请求伪造
攻击者诱使用户访问一个页面,就以用户的身份在第三站点里执行一些操作
进阶
浏览器的Cookie策略
Session Cookie 临时Cookie
Third-party Cookie 本地Cookie
P3P
如果网站返回给浏览器的HTTP头中包含P3P头,则在某种程度上,允许浏览器发送第三方Cookie
由于P3P在网站中被广泛应用,CSRF的防御不能依赖于对第三方Cookie的拦截策略
防御
验证码
Referer Check
常用与防止图片盗链
同理也可用于检查请求是否来自合法的源
同理也可用于检查请求是否来自合法的源
缺陷在于,服务器并不是什么时候都可以取到Referer
Token
CSRF攻击能成功的本质原因是重要擦操作的所有参数都可以被攻击者猜测到
加密重要参数 或 使用随机数
缺点URL不可读、不能收藏等
缺点URL不可读、不能收藏等
防御SCRF的Token是根据不可预测性原则设计的,所以Token的生成要足够随机
SCRF的Token仅仅用来对抗CSRF,当网站中存在XSS漏洞是,此方案无效
CSRF攻击是攻击者利用用户的身份操作用户账户的一种攻击方式,,根据不可预测性原则,常使用Anti SCRF Token来防御CSRF,要注意Token的随机性和保密性
点击劫持
是一种视觉上的欺骗手段,攻击者使用一个透明的、不可见的iframe覆盖在网页上,诱使用户在网页上操作
图片覆盖攻击
XSIO
拖拽劫持与数据窃取
拖拽不受同源策略的限制
触屏劫持
防御
禁止iframe嵌套
使用HTTP头---X-frame-Options
HTML5安全
新标签
新标签的XSS
iframe的sandbox
Link types:noreferrer
标签指定noreferrer后,浏览器在请求指定地址时不在发送referrer
处于保护敏感信息和隐私的考虑
Canvas
canvas标签能让JavaScript在页面内直接操作图片对象 甚至是像素
验证码的识别
其他安全问题
postMessage
跨窗口传递信息,不受同源策略的 限制
安全运营
业务安全
安全开发流程 SDL
安全开发周期
培训
1、培训:覆盖 安全设计、威胁模型、安全编码、安全测试、隐私等方面
需求
2、确认安全需求
确保安全的要求和需要做的事情。确认项目计划和里程碑,关键节点、避免延期
3、质量门和bug栏
质量门和bug栏用于确保安全和隐私质量的最低可接受级别,在项目开始时指定标准;
团队协商确定每个开发阶段的质量门(check in 代码进行review,修复编译器警告)随后将质量门给安全顾问审批;
bug栏是作用在整个软件开发项目的质量门,用于定义安全漏洞的严重性阈值
团队协商确定每个开发阶段的质量门(check in 代码进行review,修复编译器警告)随后将质量门给安全顾问审批;
bug栏是作用在整个软件开发项目的质量门,用于定义安全漏洞的严重性阈值
4、安全和隐私风险评估
安全风险评估和隐私风险评估是必须的;
哪些部分发布前需要的威胁模型;那些部分需要进行安全设计评审;
哪些部分需要双方认可的小组进行渗透测试;是否存在安全顾问认为需要增加的测试或分析;
模糊测试要求的具体范围;隐私影响评级如何;
哪些部分发布前需要的威胁模型;那些部分需要进行安全设计评审;
哪些部分需要双方认可的小组进行渗透测试;是否存在安全顾问认为需要增加的测试或分析;
模糊测试要求的具体范围;隐私影响评级如何;
设计
5、设计要求
在设计阶段要再仔细考虑安全和隐私问题,在项目初期确立安全需求,避免安全引起的需求变更
6、减少攻击面
减少攻击面与威胁模型紧密相关,减少攻击面通过减少攻击者利用潜在漏洞的机会来降低风险;
主要包括关闭或限制对系统服务的访问,用最小权限原则,分层防御
主要包括关闭或限制对系统服务的访问,用最小权限原则,分层防御
7、威胁建模
为项目产品面临的威胁建立模型,明确可能的攻击来源,微软提供的STRIDE(伪装、篡改、抵赖、信息泄露、拒绝服务、权限提升)模型 DREAD 造成的损失有多大、重现的可能性、可利用性、受影响的用户、发现的容易程度
实施
8、使用指定的工具
使用的编译器、链接器等,使用的版本需要提前与安全团队沟通
9、弃用不安全的函数
许多常用函数可能存在安全隐患,应禁用不安全的函数或API,使用安全团队推荐的函数
10、静态分析
代码静态分析可用相关辅助工具完成
验证
11、动态分析
动态分析是静态分析的补充,用于测试环节验证程序的安全性
12、模糊测试
模糊测试是一种专门形式的动态分析,通过故意向程序引入不良格式或随机数诱发程序故障。
13、威胁模型和攻击面评审
项目可能会因需求变更导致最终产出偏离原定的目标,所有在项目后期重新进行威胁模型和攻击面评审是有必要的。
发布
14、事件响应计划
受SDL要求每个软件发布时都需要包含事件响应计划。即使发布时不包含任何已知漏洞的产品。
如包含第三方的代码,也需要留下第三方的联系方式,加入到事件响应计划,以便迅速找到负责人
如包含第三方的代码,也需要留下第三方的联系方式,加入到事件响应计划,以便迅速找到负责人
15、最终安全评审
16、发布存档
通过FSR发布的产品也需要同时对各类问题和文档进行存档,为紧急响应和产品升级提供帮助
最终安全评审FSR是在发布前仔细检查对软件执行的所用安全活动
敏捷SDL
SDL适用于采用瀑布模型进行软件开发的团队
敏捷开发往往采用小步快跑的方式,不断完善产品,没有非常规范的流程。
敏捷SDL思想就是以变化的观点实施安全工作。需求和功能一直在变,代码也在变。
要求在实施SDL时在每个阶段更新威胁模型和隐私策略,在必要环节迭代模糊测试、代码安全分析等工作
要求在实施SDL时在每个阶段更新威胁模型和隐私策略,在必要环节迭代模糊测试、代码安全分析等工作
SDL实战
与项目经理沟通、排出足够的时间
规范公司立项流程、确保所有项目都通知到安全团队、避免遗漏
树立安全部门的权威、项目必须有安全部门审核完成后才能发布
将技术方案写入开发、测试的工作手册
给工程师培训安全方案
记录所有的安全BUG,激励程序员编写安全的代码
安全运营
安全观
安全的本质
安全问题的本质是信任问题
安全三要素
机密性
完整性
可靠性
兵法
Security By Default原则
白名单、黑名单,如果能更多的使用白名单,那么系统会更加安全
最小权限原则:系统只授予主体必要的权限
纵深防御原则:Defense in Depth
一层含义:在各个层次、不同方面实施安全方案
另一层含义:要在正确的地方做正确的事
数据和代码分离
适用于个各种“注入”攻击
不可预测性原则
能有效对抗基于篡改,伪造的攻击
其实现往往需要用到加密算法、随机数算法、哈希算法等
微软缓冲区溢出:使用DEP保证堆栈不可执行,ASLR让进程栈基址随机变化
如何实施安全评估
资产等级划分
威胁分析
可能造成危害的来源叫做威胁
互联网安全的核心 是数据安全
可能会出现的损失叫做风险
STRIDE模型:S:伪装 T:篡改 R:抵赖 I:信息泄露 D:拒绝服务 E:权限提升
风险分析
DREAD模型
确认解决方案
有效解决问题;用户体验好;高性能;低耦合;易于扩展
服务端应用安全
注入攻击
sql注入
盲注:在服务端没有错误回显时完成注入攻击
一般构造简单的条件语句,看返回的页面是否变化
Mysql benchmark()函数 让同一个函数执行若干次
攻击技巧
sqlmap
LOAD_FILE 读取系统文件 INTO DUMPFILE写入文件
利用用户自定义函数 UDF来执行命令
攻击存储过程
编码问题
防御
使用预编译语句,绑定变量
使用存储过程,先将SQL语句定义在数据库中
检查数据类型
使用安全函数
最小权限原则,避免高权限账户直连数据库
其他注入攻击
XML注入
代码注入
CRLF注入 CR(\r)和LF(\n)是两个字符 \r\n两个字符表示换行
文件上传
文件上传漏洞是指用户上传了一个可执行脚本文件,通过脚本获取执行服务端命令的功能
Apache文件解析问题 从后往前解析
IIS文件解析 windows环境下截断符号为';' 处理文件扩展名错误
防御
将文件上传目录设置为不可执行
判断文件类型时结合使用MIME Type、后缀检查等方式,推荐使用白名单检测文件类型
处理图片时使用压缩函数或者resize函数处理图片时可以破环包含的HTML代码
处理图片时使用压缩函数或者resize函数处理图片时可以破环包含的HTML代码
使用随机数改写文件名和路径
单独设置 文件服务器的域名
认证与会话管理
认证的目的时为了认出用户是谁 ;授权的目的是为了决定用户能够做什么
认证实际上是一个验证凭证的过程
密码必须以不可逆的加密算法或者是单向散列函数算法加密后存储在数据库中
多因素认证:动态口令、数字证书、宝令[采用基于时间同步的双因素动态密码认证技术,每分钟能够生成一个新的、且不重复使用的“动态密码”]、第三方证书
Session与认证 SessionID加密后存在Cookie中
Session Fixation攻击 a先获取一个未经认证的SessionID,将SessionID给b去认证,b认证完了服务器未更新SessionID
Session保持攻击 通过不断发起访问请求,让Session一直活下去
单点登录 SSO
访问控制
某个主体对某个个体需要实施某种操作,而系统对这种操作的限制就是权限控制
操作系统中给文件设置的ACL[Access Control List]访问控制列表
Web应用中常见的访问控制
基于url的访问控制
基于方法的访问控制
基于数据的访问控制
垂直权限管理
访问控制就是建立用户和权限之间的对于关系
现在广泛应用的一种方法---基于角色的访问控制(RBAC)
Spring Security
Spring Security
两种权限管理方式:基于URL的访问控制、基于方法的访问控制、还支持基于表达式的访问控制
水平权限管理
加密算法与随机数
1
2
不建议
不要使用ECB模式
不要使用流密码 如RC4
使用HMAC-SHA1代替MD5
不要使用相同的key做不同的事情
salts与IV需要随机产生
不要自己实现加密算法,使用已经存在的库
不要依赖系统的保密性
建议
使用CBC模式的AES256用于加密
使用HMAC-SHA512用于完整性检测
使用带salt的SHA-256或SHA-512用于Hashing
Web框架安全
应用层拒绝服务攻击
PHP安全
Web Server配置安全
工具
fortify
是静态 的、白盒软甲源代码安全测试工具。
通过内置五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态分析,
通过与软件安全漏洞规则进行匹配、查找、宠儿将源代码中存在的安全漏洞导出,可导出报告。
最后的结构 不包括安全漏洞的详细信息、相关的修复意见
通过与软件安全漏洞规则进行匹配、查找、宠儿将源代码中存在的安全漏洞导出,可导出报告。
最后的结构 不包括安全漏洞的详细信息、相关的修复意见
通过调用语言对应的编译器,把语言代码转换成中间媒体文件NST,将其源代码之间的调用关系,执行环境,上下文等分析清楚
通过分析不同类型问题的静态分析引擎分析NST文件,同时匹配所有规则库中的漏洞特征,抓出漏洞,形成包含详细漏洞信息的结果文件
通过分析不同类型问题的静态分析引擎分析NST文件,同时匹配所有规则库中的漏洞特征,抓出漏洞,形成包含详细漏洞信息的结果文件
dependency-check
sonarlint
收藏
0 条评论
下一页