跨站点脚本攻击是由于服务器或应用程序代码中的漏洞而发生的 Web 应用程序和 Web 服务器漏洞。它们特别危险,因为安全或开发团队很难发现 XSS 漏洞,而且在随后的漏洞发生之前也很难看到攻击的影响。为了防止 XSS 攻击,您的团队需要知道它们是什么样子,以及您的系统是否容易受到攻击。
跨站点脚本如何工作?
当威胁行为者将恶意代码或脚本注入 Web 应用程序的页面代码时,就会发生跨站点脚本攻击。这种情况通常发生在动态网页上,这些网页经常更改或可被用户主动操纵(例如,用户可以在其中输入查询的搜索栏)。
网页的原始代码是可信的。通常,当用户导航到网页时,他们的浏览器会按照指示加载网页。但如果威胁行为者在网页中添加了新代码,它可能不会按原计划加载,而用户和浏览器却一无所知。新的恶意代码旨在从该 Web 应用程序中窃取数据(如 cookie 或凭据)。
跨站点脚本攻击之所以危险,是因为它们很难被发现。漏洞存在于代码中,除非安全团队知道编写页面的编程语言,否则他们无法发现这一点。通常,您需要使用应用程序扫描软件来查找 XSS 攻击的指标。手动查找需要太多的手动工作,员工可能会错过它,特别是如果他们不懂该语言的话。
如果您的 Web 应用程序遭受 XSS 攻击,则该攻击可能是存储型、反射型或基于文档对象模型 (DOM) 的攻击。XSS 攻击具有多种安全和业务风险,包括凭据窃取和公司声誉受损。要了解您是否容易受到攻击,您应该对 Web 应用程序进行测试,对明显的攻击迹象保持警惕,并使用软件解决方案查找代码和应用程序中的漏洞。
3 种常见的跨站点脚本攻击类型
存储型 XSS、反射型 XSS 和基于 DOM 的 XSS 是三种最常见的跨站点脚本攻击类型。它们的区别在于影响的是 Web 应用程序的服务器端还是客户端。
存储型XSS
在存储型 XSS 攻击中,恶意脚本被写入 Web 应用程序的实际代码中,从而影响客户端和服务器端。它会永久驻留在该服务器或应用程序的代码中,直到被管理员或自动安全解决方案根除。存储型 XSS 是一种持续严重的 XSS 攻击,因为恶意代码始终存在于应用程序中。
例如,如果威胁行为者在金融服务公司的 Web 服务器上用户输入财务数据的页面上编写恶意脚本,则每次有人使用该页面时,威胁行为者都可以窃取这些数据。由于恶意代码是在 Web 服务器中编写的,因此会影响 Web 应用程序的每个使用实例。用户不知道金融服务网页上的代码是恶意的,因为它看起来合法,他们会继续使用它,直到它被曝光。
反射型XSS
反射型 XSS 之所以得名,是因为攻击者将恶意代码注入 URL 或请求参数,而 Web 服务器的响应会反映注入的代码。反射型 XSS 不会长期存储在应用程序或服务器代码的后端。攻击在用户输入的范围内进行,例如 URL 或请求参数。如果攻击者利用反射型 XSS 窃取会话 cookie 或用户凭据,则后果可能非常严重。
反射型 XSS 的一个例子是威胁行为者拦截软件工程师访问流行工程应用程序的请求参数。威胁行为者巧妙地更改 URL,这意味着用户会转到一个易受攻击的网页,而不是他们预期的合法网页。从那里,威胁行为者可以采取多种行动来破坏工程师的工作,例如窃取他们在页面上输入的信息。
基于 DOM 的 XSS
在基于 DOM 的 XSS 攻击中,攻击者会操纵用户浏览器的文档对象模型 (DOM)。Web 应用程序本身的实际代码在服务器端不会发生变化,但会在用户端恶意执行。基于 DOM 的 XSS 尤其难以检测,因为更改发生在客户端的文档对象模型内,可能永远不会影响 Web服务器。
例如,如果攻击者窃取 URL 片段并将其用于允许动态代码执行的 JavaScript 函数中,则攻击者可以操纵Web 应用程序的客户端代码。如果攻击者选择操纵客户关系管理 (CRM) 产品的主页,则页面的实际 HTTP 响应不会有所不同,但面向客户端的代码会有所不同。威胁行为者可以使用 URL 片段发起攻击。
与 XSS 攻击相关的 5 大风险
跨站点脚本攻击非常难以发现,因为它们会伪装成合法的网页行为。它们还使威胁者能够窃取您的 Web 应用程序凭据和会话 cookie,并且可能导致标准业务流程出现一般性故障,并损害您企业的声誉。
XSS 攻击很难被发现
由于 XSS 攻击会操纵完全合法的 Web 应用程序进程,因此很难检测到。此外,XSS 攻击通常涉及特定类型的代码,通常是 JavaScript。即使是安全或开发管理员,如果他们不知道编写攻击的编程语言,也可能不知道如何缓解攻击,这是假设他们首先意识到发生了 XSS 攻击。
攻击者可以窃取您的凭证
在最糟糕的 XSS 场景之一中,威胁者可以在用户将凭证输入到他们没有意识到已被黑客入侵的网页后窃取凭证。首先,威胁者必须入侵用户登录服务或应用程序的网页。然后,他们必须成功登录并窃取用户输入的代码,以便他们可以重复使用它自己登录应用程序,最好是不被察觉。
如果该账户是高权限账户,那就更加危险了。攻击者有可能在窃取一组凭证后提升权限,然后访问更多敏感数据。
攻击者可以劫持会话 Cookie
攻击者可以在存在XSS漏洞的网站中注入脚本,并使用文件窃取会话cookie信息。如果他们将脚本设置为在用户不察觉的情况下窃取会话数据,他们甚至不会向用户透露攻击已经发生。
如果有人窃取了会话 cookie,他们就可以重复网页会话,这意味着他们可能会访问该应用程序的敏感数据并修改 Web 应用程序。这种攻击类似于凭证盗窃攻击,如果 cookie 存储了登录信息,则可能导致类似的情况。
XSS 攻击既耗时又烦人
如果 XSS 攻击导致页面瘫痪或重定向到错误的窗口,这不仅会给您企业的 IT 部门带来麻烦,还会给需要使用该页面的其他所有用户带来麻烦。对于对业务运营至关重要且员工经常访问的 Web 应用程序来说尤其如此。如果页面长时间无法运行,这不仅会让人恼火和中断,还会对关键的组织流程构成威胁。
成功的攻击可能会损害您的业务
如果网页瘫痪,或者威胁者伪造了网页内容,您的业务可能会受到严重损害。行为异常的 Web 应用程序会影响该应用程序的声誉以及运行该应用程序的组织的声誉。如果攻击者获得特权帐户的访问权限,他们甚至可能泄露敏感的客户数据。伪造内容是一种比较罕见的攻击类型,但对于技术娴熟的威胁者来说并非不可能。
如何判断您是否容易受到 XSS 攻击
虽然很难立即知道您受到了攻击,但您的安全和 IT 团队仍然可以采取一些措施来了解跨站点脚本。要确定您企业的 Web 服务器和应用程序是否可能容易受到 XSS 攻击,请对其进行测试,留意更明显的迹象,并持续评估安全漏洞。
进行测试或聘请渗透测试人员
如果您有经验丰富的安全或 IT 人员,您当然可以对自己的 Web 服务器和 Web 应用程序代码进行测试。遵循OWASP等专业安全机构的指导方针是保护您的系统免受 XSS 攻击的良好起点。
聘请渗透测试人员也很有价值。渗透测试人员是专门负责破坏您的系统并发现漏洞的。如果您聘请渗透测试人员专注于 Web 应用程序和代码漏洞,您将更有可能了解您的网页是否容易受到 XSS 攻击。
注意明显的攻击迹象
许多 XSS 攻击并不明显,但请留意更明显的迹象。如果您的网页重定向不正确,或者看似经过身份验证的用户突然开始在特权 Web 应用程序中进行奇怪的更改,那么这就是您仔细查看网页代码的提示。虽然很少有攻击是显而易见的,但请仔细观察那些显而易见的攻击。
定期扫描漏洞
进行频繁的漏洞扫描,但要查找 XSS 漏洞,请特别扫描您的 Web 应用程序。漏洞扫描工具会考虑模式,从而找出安全团队没有时间手动查找的问题。一些漏洞扫描工具还会从包含常见威胁签名或指标的数据库或库中提取信息,帮助您在自己的系统和应用程序中找到它们。
您能阻止跨站点脚本吗?
企业可以防止跨站点脚本攻击,但这需要您的安全和 Web 应用程序开发团队致力于良好的安全实践。他们需要:
- 定期检查应用程序代码是否存在问题:在整个开发生命周期中分析代码以确定您的代码是否存在漏洞。
- 编码输出并验证输入:在将数据写入 Web 应用程序时对其进行编码,并在将其发送到浏览器之前验证和清理用户代码输入。
- 使用高级安全工具: Web 应用程序安全软件旨在保护 Web 应用程序,对于防止 XSS 特别有用。
- 教授良好的 DevOps 实践:所有 Web 开发人员都应该了解 XSS 攻击以及如何通过创建强大、安全的代码来减少此类攻击。
常见问题 (FAQ)
现实世界中的 XSS 示例是什么?
2018 年,英国航空公司遭到一群黑客的攻击,他们利用了 JavaScript 库中的 XSS 漏洞。黑客将客户数据发送到试图冒充英国航空公司域名的服务器。在任何人得知攻击之前,黑客已经从超过 350,000 笔交易中窃取了信用卡数据。这是检测 XSS 攻击需要多长时间的一个很好的例子。
黑客可以利用XSS做什么?
虽然攻击者可以使用 XSS 窃取数据和 cookie,但他们的目的也可能不那么有害。攻击者可以使用跨站点脚本来拖慢竞争网站的性能,或者向合法页面添加不适当的内容。然而,声誉受损仍然很严重。
XSS 攻击的根本原因是什么?
跨站点脚本攻击的发生是因为 Web 应用程序请求的内容未得到正确验证。虽然很难判断您的 Web 代码是否容易受到 XSS 攻击,但开发和安全团队可以通过一些方法来弥补这些安全漏洞,例如在将用户请求发送到 Web 浏览器之前验证所有输入。
底线:跨站点脚本危害数据、应用程序和商业声誉
跨站点脚本攻击使 Web 应用程序和服务器面临风险,并为安全和 Web 开发团队带来挑战,他们甚至可能不知道自己存在漏洞。但是,尽管人类在代码中发现漏洞和发现漏洞的能力有限,但使用自动化安全解决方案(如漏洞扫描器和应用程序安全测试工具)会有所帮助。
您应该测试 Web 应用程序代码并创建安全的开发管道,这样在开发过程中出现漏洞的可能性就会降低。虽然防止 XSS 漏洞和攻击似乎势不可挡,但从长远来看,保护您的代码并投资自动化安全解决方案将有助于保护您的 Web 应用程序。