XS-Leaks(跨站点泄漏)攻击和预防
您是否将用户暴露于恶意网站?了解如何使用 xs-leaks 从 Web 应用程序中窃取数据,以及如何通过 7 个步骤来阻止它。
什么是 XS 泄漏?
XS-Leaks(或 Cross-Site Leaks)是一组浏览器侧通道攻击。它们使恶意网站能够从其他 Web 应用程序的用户那里推断数据。
Twitter 剪影攻击就是一个极好的例子。
同源政策
在开始之前,了解 SOP(Same Origin Policy)是很有帮助的,它是 Web 浏览器安全模型的核心和灵魂。这是一个或多或少说的规则:
- 如果两个 URL 的协议、端口(如果指定)和主机相同,则它们的来源相同。
- 任何来源的网站都可以自由地向任何其他
GET
来源发送、、、POST
和请求。此外,该请求将包括该来源的用户 cookie(包括会话 ID)。HEAD
OPTIONS
- 虽然可以发送请求,但来自一个来源的网站无法直接读取来自另一个来源的响应。
- 网站仍然可以从这些 HTTP 响应中消耗资源,例如通过执行脚本、使用字体/样式或显示图像。JSONP hack 利用了第四条规则(不要使用 JSONP)。
- 如果网站获得窗口句柄,则来自一个来源的网站可以限制访问另一个来源的窗口。最值得注意的是来自不同来源的窗口可以更改彼此的 URL (
anotherWindow.location.replace("https://www.evil.com"
)。
例如,这个网站的来源https://www.appsecmonkey.com/
是. 主机是,并且未指定端口(由于协议,这是隐含的)。protocol
https
www.appsecmonkey.com
443https
好的,这就是它的要点。让我们开始攻击。
XS-通过定时攻击泄漏
浏览器可以轻松地对跨域请求进行计时。
var start = performance.now()fetch('https://example.com', {mode: 'no-cors',credentials: 'include',
}).then(() => {var time = performance.now() - startconsole.log('The request took %d ms.', time)
})
The request took 129 ms.
这使得恶意网站可以区分响应。假设有一个搜索 API 供患者查找自己的记录。如果患者患有糖尿病并搜索“糖尿病”,则服务器返回数据。
GET /api/v1/records/search?query=diabetes
{ 'records': [{ 'id': 1, ... }] }
如果患者没有糖尿病,API 会返回一个空的 JSON。
GET /api/v1/records/search?query=diabetes
{ 'records': [] }
一般来说,前一个请求需要更长的时间。然后,攻击者可以创建一个恶意网站,对“diabetes” URL 的请求进行计时,并确定用户是否患有糖尿病。
您可以展开攻击并搜索 a... b... c... d... 是的。达..分贝...迪...是的。这种攻击称为XS-search。
查看xsleaks.dev上的所有计时攻击。
XS 漏洞通过基于错误的攻击
我们列表中的下一个侧通道是使用 JavaScript 策略性地捕获错误消息。假设一个页面根据一些敏感的用户数据返回200 OK
或。404 not found
然后,攻击者可以创建如下所示的页面,该页面查询应用程序并确定端点是否为浏览器用户返回错误。
function checkError(url) {let script = document.createElement('script')script.src = urlscript.onload = () => console.log(`[+] GET ${url} succeeded.`)script.onerror = () => console.log(`[-] GET ${url} returned error.`)document.head.appendChild(script)
}checkError('https://www.example.com/')
checkError('https://www.example.com/this-does-not-exist')
[-] GET https://www.example.com/ succeeded.
[+] GET https://www.example.com/this-does-not-exist returned error.
XS-通过帧计数泄漏
通过获取帧的句柄,可以访问该帧的window.length属性,该属性用于检索窗口中的帧数(IFRAME 或 FRAME)。
这种知识有时会产生安全/隐私影响。例如,网站可能会根据某些用户数据以不同的帧数呈现个人资料页面。
有几种方法可以获得窗口句柄。第一个是调用window.open,它返回句柄。
var win = window.open('https://example.com')
console.log('Waiting 3 seconds for page to load...')
setTimeout(() => {console.log('%d FRAME/IFRAME elements detected.', win.length)
}, 3000)
另一种是对目标网站进行框架,并获取框架的句柄。
<iframe name="framecounter" src="https://www.example.com"></iframe>
<script>var win = window.frames.framecounterconsole.log('Waiting 3 seconds for page to load...')setTimeout(() => {console.log('%d FRAME/IFRAME elements detected.', win.length)}, 3000)
</script>
这两个可以说是最重要的。还有其他的,例如window.opener
和window.parent
。有关更全面的列表,请参阅本文。
在xsleaks.dev上阅读有关帧计数的更多信息。
XS-通过检测导航泄漏
知道浏览器是否在某处导航(例如,重定向),通常可以推断出关于用户的数据。例如,网站的经过身份验证的部分倾向于将用户重定向到登录页面。当然,除非用户已经登录。
观察导航使恶意网站能够查看浏览器用户登录的网站,这是一个巨大的隐私问题。
恶意网站可以通过多种方式检测重定向。这些包括:
- 创建一个框架并计算
onload
调用的次数。 history.length
从窗口句柄中检索。- 在恶意网站上创建内容安全策略 (CSP) 会在请求特定 URL 地址时触发异常。
在这里查看它们:https ://xsleaks.dev/docs/attacks/navigations/
XS-通过浏览器缓存泄漏
当用户访问网站时,这些网站的资源通常会被缓存并存储在用户的磁盘上,因此不必再次下载。这节省了带宽,降低了服务器负载,并改善了用户体验。
不幸的是,基于时间和错误的 xsleak 变体可以利用这一点并确定用户之前是否访问过网站。
缓存时间变化很简单,为请求计时,如果是瞬时的,则资源被缓存。
基于错误的版本稍微复杂一些。它利用了缓存资源从未从服务器实际请求过的事实。因此,对缓存资源的无效 HTTP 请求不会引发异常(因为 Web 服务器永远没有机会拒绝它)。
在 xsleaks 上阅读它们:https ://xsleaks.dev/docs/attacks/cache-probing/ 。
XS-通过帧中的 ID 字段泄漏
这个利用了https://developer.mozilla.org/en-US/docs/Web/API/Element/focus_event事件在带有 url 之类的框架https://www.example.com/#example
跳转到元素时被触发的事实example
。
如果example
页面上没有,则不会触发该事件。
关于 xsleaks 的变体:https ://xsleaks.dev/docs/attacks/id-attribute/
XS-通过许多其他事情泄漏
到目前为止提到的变化应该给你的想法,但还有其他的。您可以访问xsleaks.dev了解更多攻击和详细信息。
如何防止 XS 泄漏?
您将无法完全阻止所有浏览器中的所有xsleaks 。世界还没有为此做好准备。但是你可以很安全,特别是对于 Chrome 或 Edge,它们拥有所有最前沿的安全功能。就是这样:
- 使用 SameSite 属性保护您的 cookie。
- 使用 Content-Security-Policy 和 X-Frame-Options 来防止框架。
- 考虑使用 Cache-Control 禁用缓存。
- 使用 fetch metadata headers 和 Vary header 来防止缓存探测。
- 实施跨域开放政策。
- 实施跨域资源策略。
- 实施隔离政策。
使用 SameSite 属性保护您的 cookie
所有主要浏览器都支持一个很酷的功能,称为SameSite cookie。当您使用 设置 cookie 时SameSite=Lax
,浏览器不会将其包含在跨域 POST 请求中,这可以很好地抵御CSRF攻击。
对于我们的 xsleaks 用例来说,至关重要的是,它还会阻止不是顶级导航的GET 请求,也就是说,脚本标签、获取请求、图像标签等将不再发送 cookie。
Set-Cookie: SessionId=123; ...other options... SameSite=Lax
使用 Content-Security-Policy 和 X-Frame-Options 来防止框架
另一个漂亮的浏览器功能是内容安全策略,简称 CSP。CSP 可以非常有效地抵御XSS攻击。但在这种情况下,我们对阻塞帧感兴趣,而 CSP 的秘诀是:
Content-Security-Policy: frame-ancestors 'none';
此 CSP 政策将阻止所有现代浏览器让任何其他网站构建您的应用程序。如果你也想支持 Internet Explorer,那么也发送X-Frame-Options。
X-Frame-Options: DENY
考虑使用 Cache-Control 禁用缓存
禁用缓存并不适合所有人。例如,我不可能为这个博客做到这一点。但可以说,防止与缓存相关的 xsleaks 向量的最有效方法是完全禁用您网站的缓存。您可以通过在所有响应中返回以下Cache-Control标头来执行此操作:
Cache-Control: no-store, max-age=0
使用 fetch metadata headers 和 Vary header 来防止缓存探测。
这种方法更可行,但并非所有浏览器都支持。这个想法是根据获取元数据请求标头来改变缓存。
如果恶意网站尝试向您的应用程序发出请求,则Sec -Fetch-Site请求标头将包含该值。cross-site
并且由于Vary
标头,该恶意网站将拥有自己的缓存。它将无法推断出浏览器用户在网站上缓存的内容。
Vary: Sec-Fetch-Site
实施跨域开启者政策
Cross-Origin-Opener-Policy是一个 HTTP 响应标头,可限制恶意网站获取您网站的窗口句柄。你可以这样设置:
Cross-Origin-Opener-Policy: same-origin
Chrome、Edge 和 Firefox已经完全支持它。
实施跨域资源策略
Cross-Origin-Resource-Policy是一个 HTTP 响应标头,用于限制恶意网站从您的域中读取/嵌入/呈现资源。在此处相关信息。你可以这样设置:
Cross-Origin-Resource-Policy: same-origin
实施隔离政策
浏览器已经开始实现一个相对较新的安全功能,称为获取元数据请求标头。它们可用于服务器端,根据发生的上下文阻止或允许请求。
这种基于获取元数据标头阻止请求的中间件称为隔离策略。
在此处阅读有关获取元数据标头和隔离策略的更多信息。
结论
有相当多的 XS 泄漏,正如我们所说,浏览器供应商正在想出解决它们的工具。
如果可能的话,阻止所有这些都不是一件容易的事。但是按照本文和Introduction | XS-Leaks Wiki中的指南,您应该没问题。
XS-Leaks(跨站点泄漏)攻击和预防相关推荐
- 如何防止跨站点脚本攻击
1. 简介 跨站点脚本(XSS)是当前web应用中最危险和最普遍的漏洞之一.安全研究人员在大部分最受欢迎的网站,包括Google, Facebook, Amazon, PayPal等网站都发现这个漏洞 ...
- 安全编码实践之二:跨站点脚本攻击防御
安全编码实践之二:跨站点脚本攻击防御 声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用. 文章来源:https://medium.com/bugbountywriteup/how-to-w ...
- 记录如何防止跨站点脚本攻击之抄写
一.简介 跨站点脚本(XSS)是当前web应用中最危险和最普遍的漏洞之一.安全研究人员在大部分最受欢迎的网站,包括Google, Facebook, Amazon, PayPal等网站都发现这个漏洞. ...
- ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)
本博文翻译自: https://dotnetcoretutorials.com/2017/10/25/owasp-top-10-asp-net-core-cross-site-scripting-xs ...
- 基于IE的MIME sniffing功能的跨站点脚本攻击
IE有一个特性,那就是在将一个文件展示给用户之前会首先检查文件的类型,这乍看起来并没什么问题,但实际上这是相当危险的,因为这会允许IE执行图片中的代码,即嵌入在一个图像中的JavaScript代码.引 ...
- 使用AntiXss.HtmlEncode方法来防止跨站点脚本攻击,后解码
使用AntiXss.HtmlEncode方法来防止跨站点脚本攻击中文会被转码, 可使用Sanitizer.GetSafeHtmlFragment(string inpu)方法来进行解码. 转码: 解码 ...
- 防止跨站点脚本注入_防止跨站点脚本攻击
防止跨站点脚本注入 大多数现有的浏览器都能够解释和执行脚本,这些脚本以诸如JavaScript,JScript,VBScript之类的脚本语言创建,并嵌入在从Web服务器下载的网页中. 当攻击者将恶意 ...
- 如何尽量规避XSS(跨站点脚本)攻击
2019独角兽企业重金招聘Python工程师标准>>> 跨站攻击,即Cross Site Script Execution(通常简写为XSS,因为CSS与层叠样式表同名,故改为XSS ...
- 如何防止跨站点脚本 (XSS) 攻击完整指南
跨站点脚本 (XSS) 攻击的完整指南.如何防止它以及 XSS 测试. 跨站点脚本 (XSS) 是每个高级测试人员都知道的最流行和易受攻击的攻击之一.它被认为是对 Web 应用程序最危险的攻击之一,也 ...
最新文章
- UA MATH571A 一元线性回归II 统计推断2
- 【存储知识学习】第五章-5.4虚拟磁盘和5.5卷管理层-《大话存储》阅读笔记
- 如何快速定位程序Core?
- 长征五号运载火箭将于2019年7月复飞
- c语言if语句教学设计,c语言if语句教学设计.pdf
- Socket API: setsockopt(), recvmsg(), sendmsg()函数
- Android 选项菜单
- 记一次服务器上架的总结和反思
- excel熵值法计算权重_评价得分计算:确立权重的方法
- ES6 阮一峰阅读学习
- 双击 计算机 打不开,电脑双击桌面图标打不开的解决方法
- MSP430F6638单片机复习笔记
- 数字信号处理专题(1)——DDS函数发生器环路Demo
- 道与术 渠道以及通信方式的架构设计
- 如何选择第三方电子发票平台服务商?
- 海思Hi3516新增sensor imx214 笔记
- 概论_第5章_切比雪夫不等式
- SQL-常用SQL语句
- 无法用ip连接mysql数据库_MYSQL数据库无法使用IP访问的方法
- shell编程—tomcat自动发包详解