跨站点泄漏(XS泄漏)是一类Web安全漏洞,可让黑客从其他网站或Web应用程序上的用户浏览会话中获取敏感信息。现代Web应用程序通过各种功能和API共享数据 - 功能攻击者可以利用访问此用户数据。
最终,XS泄漏导致披露敏感信息,恶意演员可以将其用于许多非法目的,例如获得未经授权的访问机密系统或数据库。
在本文中,我们将更深入地了解XS泄漏以及它们的发生方式。然后,我们将回顾一些如何防止它们的动手实例。
XS泄漏是如何发生的
现代的Web应用程序非常复杂,包括多个信任水平的多个领域。因此,保持无缝的浏览器体验需要网站可以共享信息。尽管开发人员已确保此通信相对安全,但网站和浏览器功能具有某些固有的漏洞。
当攻击者利用这些漏洞以获得未经授权的私人用户数据访问时,就会发生XS泄漏。通过操纵各种Web功能,例如Cookie,JavaScript API,CSS样式表和HTML元素,并利用side channels和特定于应用程序的漏洞,攻击者可以从其他网站中提取敏感信息。此外,这些攻击在没有用户知识或同意的情况下无声地发生。
XS泄漏的不同类型是什么?
攻击者可以使用几种类型的XS泄漏。让我们探索其中的一些。
正时攻击
在计时攻击中,恶意演员试图通过测量执行各种操作需要多长时间来收集敏感的系统信息。黑客将特殊精心设计的脚本发送到目标站点以执行API呼叫,AJAX请求,或尝试触发需要交叉原始资源共享(CORS)的资源请求。然后,他们评估了这些过程的持续时间,以推断网站如何功能或处理数据的信息。
例如,攻击者可能会观察到服务器端验证过程需要多长时间来发送不同的输入类型 - 例如用户名和密码组合 - 通过交叉原始请求。然后,他们可以使用明显的时间差异来评估登录尝试是否成功或辨别用户是管理员还是常规用户。然后,此信息会告知攻击者的下一步。
框架计数
在计数攻击中,黑客创建了多个指向目标站点内不同URL的嵌套iframes。然后,他们利用网站的CORS功能查看用户浏览器访问目标URL时的帧数。
。考虑一个攻击者,为网站的受保护部分创建了几个嵌套的iframe,例如帐户设置和订购历史记录页面。当用户访问包含攻击者注入的IFRAME的页面时,攻击者会计算成功加载的帧和那些不加载的帧。然后,他们可以使用此信息来推断任何帐户限制 - 例如身份验证要求或成员资格级别,以揭示特定用户是否具有访问权限或与目标站点的特定领域的先前交互。
缓存探测
缓存探测利用浏览器缓存,该浏览器库本地将Web内容存储在用户设备上。为了执行此攻击,黑客创建了一个恶意网站,该网站从目标站点请求特定资源的图像或脚本。请求的资源具有独特的特征,例如罕见的文件大小或加载时间。
攻击者衡量用户访问其恶意网站的资源加载的速度,无论是直接从目标服务器还是通过用户浏览器中的缓存版本。然后,恶意演员使用此信息来推断,如果这些资源已经存在于用户本地浏览器缓存中。
喜欢帧计数,通过高速缓存探测获得的信息可以告知网络钓鱼活动的自定义,发现在多个在线服务和平台上使用的单独帐户之间的关系,并用于协调更复杂的攻击。</p>
XS泄漏背后有哪些机制?
XS泄漏攻击操纵固有的浏览器功能,并采用间接观察技术来获得未经授权的访问敏感数据。有助于XS泄漏攻击成功的机制包括:
- 利用浏览器功能攻击者使用浏览器功能,例如prefetching,prerendering和各种API,例如Fetch或WebSockets。他们可以通过操纵或组合这些功能与其他技术(例如高速缓存探测)来从用户中提取敏感信息,而无需直接违反Same Origin Policy(SOP)。 。
- 侧通道 - 这些是攻击者收集敏感信息的间接途径。他们这样做是通过观察诸如用户浏览器上的时间或资源加载模式等因素的变化而不是直接访问数据,因为SOPS在Web应用程序中施加的安全限制。
- 交叉通信攻击者还可以靶向跨原基通信方法,例如postMessage API和web workers。然后,他们可以拦截或操纵单个页面上iframe中的不同源头之间的消息。
XS泄漏利用的漏洞
使用上面概述的机制,攻击者可以访问敏感信息,而无需直接违反大多数现代网站使用的CORS和SOP等安全政策。
这种措施不能阻止XS泄漏发生。攻击者可以使用侧渠道跨越SOP护栏,利用CORS错误配置,并将其他漏洞结合到更协调的攻击中。
CORS和SOP控制来自不同起源的资源如何相互作用。 SOP将网页限制在访问从另一个域中加载的数据或内容,以确保脚本在其原点的上下文中运行。 CORS通过允许特定的交叉原始请求来扩展此策略,在该请求中,服务器明确允许通过HTTP标头访问其资源。从理论上讲,这种组合可以在网站之间进行安全通信,并防止恶意跨域交互,例如cross site request forgery (CSRF)攻击和未经授权的数据访问。
但是,由于XS泄漏了利用侧向通道和间接数据曝光,因此攻击者可以通过从另一个来源推论敏感信息来绕过SOP。同样,如果CORS在Web应用程序上被错误配置或不安全地实现,则可能导致信息泄漏。
恶意参与者可以执行XS泄漏技术的另一种方式是堆叠漏洞漏洞。 Cross-site scripting (XSS)是一项攻击,可与XS泄漏效果很好。一旦攻击者利用XSS漏洞,他们也可以尝试通过暴露侧向通道信息的各种浏览器功能或API诱导XS泄漏。
恶意演员可以将这两个攻击向量结合在一起,以从受损的域中获得敏感的数据,并收集额外的交叉原始见解而无需直接违反SOP。
XS泄漏的后果是什么?
XS泄漏攻击会导致严重的后果,例如披露敏感信息,攻击者可以访问机密数据,包括个人详细信息或财务信息。然后,攻击者可以在未经同意的情况下操纵,窃取或滥用用户的私人信息。
此外,会话劫持是XS泄漏攻击的另一个可能结果。会话劫持涉及攻击者控制用户的活动会话,并可能代表他们进行未经授权的更改。这些后果危害各个用户的隐私和安全,并破坏了在线平台和服务中的信任。
重要的是要注意,XS泄漏通常被认为是更广泛的攻击技术或漏洞的一部分。引起广泛媒体关注的备受瞩目的数据泄漏可能不会指向XS泄漏,因为使用的关键攻击使用。但是,恶意攻击者可以使用XS泄漏来进行更多协调的攻击。</p>
减轻XS泄漏攻击风险的最佳实践
虽然没有一种适合防止XS泄漏的解决方案,但有多种方法可以显着降低相关风险。以下各节审查了减轻XS泄漏的最佳实践,提供了如何实施它们的动手演示。
使用内容安全策略
实施强大的内容安全策略(CSP),以限制浏览器可以在网站上加载的内容源。这种实践减少了攻击者利用XSS或其他基于注射的漏洞引起的潜在信息泄漏。
您可以使用称为Content-Security-Policy的HTTP响应标头实现CSP,如下所示:
在此示例中,除非其他指令明确指定,否则不允许外部资源加载(default-src)
。我们只能从我们的域(self)
或Google api (googleapis.com)
加载脚本(script-src)
,images (img-src)
,stylesheets (style-src)
和fonts (font-src)
。
通过指定脚本,图像,样式表等内容的允许源,有助于预防未经授权的交叉原始请求和内联代码执行。
执行cookie的samesite属性
cookie中的SameSite
属性告诉浏览器是否应该在外部请求中包括cookie。例如,在JavaScript中,看起来像这样:
document.cookie = "username=JohnDoe; path=/; Secure; SameSite=Strict";
username
cookie包含JohnDoe
作为值,而路径/
表示cookie将在我们域上的所有页面上访问。 Secure
关键字可确保Cookie仅通过HTTPS连接传输。最后,我们将SameSite
属性设置为:
-
None
- 如果通过安全的HTTPS频道发送,将附加cookie。 -
Lax
- 这是基于铬的浏览器的默认行为。 cookie将用于GET
向顶级导航提出的请求, -
Strict
cookie永远不会在我们的域外发送。
将cookie中的SameSite
属性设置为Strict
可防止它们在跨站点请求时发送和减轻CSRF和一些XS泄漏攻击,例如涉及正时测量的XS泄漏攻击。
最小化URL中敏感数据的使用
最大程度地减少在URL中使用敏感数据是网络安全中至关重要的最佳实践。敏感数据(例如用户凭据或个人身份信息(PII))绝不应包含在URL中,因为攻击者可以通过浏览器历史记录,服务器日志,推荐人标头和未启发的共享链接轻松访问它。
。最小化敏感数据使用的一些方法包括:
- 使用https的
POST
请求,而不是在URL中包含敏感数据 - 使用会话令牌而不是直接传递用户凭据或pii
实施费率限制
另一个最佳实践是将速率限制在敏感端点上,尤其是那些容易受到枚举或蛮力尝试的终点。此策略将限制攻击者在指定的时间范围内可以提出的请求数,并降低XS泄漏攻击的有效性。各种编程语言和网络框架具有用于实施费率限制的库或中间件解决方案。
在带有Express的Node.js中,您将需要通过npm install express-rate-limit
命令安装的express-rate-limit
中间件。然后,您可以按以下方式设置服务器端速率限制器:
const express = require('express');
const app = express();
const RateLimit = require('express-rate-limit');
// Create a new limiter allowing 100 requests per hour from each IP address.
// You can adjust these numbers based on desired limits.
const apiLimiter = new RateLimit({
windowMs: 60 * 60 * 1000,
max: 100,
message: "Too many requests from this IP. Please try again after an hour."
});
app.use('/api/sensitive-endpoint', apiLimiter); // Apply limit to sensitive API endpoint.
// Your other routes and middleware configurations here
app.listen(3000, () => {
console.log("Server started on port ",3000);
});
请注意,与他人结合使用时,此措施是最有效的。它使您的安全配置配置文件与XS泄漏攻击依赖于向服务器收集信息的XS泄漏攻击。
使用适当的CORS配置
确保为您的应用程序制定适当的CORS配置,以防止未经授权的域提出交叉原始请求并访问受保护的资源。配置CORS标题,例如Access-Control-Allow-Origin
,适当地,以便只有信任的起源才能在允许的Origins列表中使用不必要的通配符,同时确保不需要不必要的通配符(*
)。
如果服务器允许在其Access-Control-Allow-Origin
标头中使用任何Origin(*
)或使用基于用户输入的正确验证的动态生成的起源(例如推荐人),则攻击者可以通过从恶意网站发出交叉孔子请求来利用此功能。<<<<<<<<<<<<<<<<<<<< /p>
使用诸如SNYK代码之类的集成
Snyk Code帮助您通过集成到开发工作流程,扫描依赖性,提醒您漏洞,建议和应用修复程序以及不断监视您的项目中的安全问题来识别和修复安全漏洞。例如,当创建Node.js Express.js应用程序时,SNYK代码可以帮助防止由于缺乏安全标头引起的漏洞:
- 扫描依赖项 <将SNYK集成到项目中后,您可以扫描项目的依赖项并检查包装中的已知漏洞。
- 确定该问题,如果缺乏安全标题,SNYK代码将检测到此漏洞并提醒您。例如,SNYK可能会识别您的应用程序缺少CSP标头,这可以帮助防止XSS攻击。
- 建议修复 snyk将为确定的漏洞提供修复。对于缺少安全标头的情况,可能建议将helmet middleware添加到您的Express.js应用程序中。头盔是一个受欢迎的软件包,默认情况下有助于为您的应用程序设置各种安全标头。
SNYK还可以继续监视您的项目是否有任何新漏洞或对现有的漏洞的更新。如果出现进一步的问题,您将收到警报,允许您不断,始终如一地保持在项目的安全状态。
控制XS泄漏
XS泄漏使攻击者能够从用户的浏览会话中获得另一个网站上的敏感信息。黑客利用浏览器功能,侧通道和交叉原始通信。一些常见的XS泄漏技术包括定时攻击,框架计数和缓存探测。
没有一种保证的方法来防止XS泄漏,但是实施本文概述的最佳实践可以大大降低其风险,并保护用户敏感信息免受未经授权的访问或披露。