什么是会话劫持及其工作原理?
会话劫持(又名 cookie 劫持或 cookie side-jacking)是一种网络攻击,攻击者接管合法用户的计算机会话以获取其会话 ID,然后在任意数量的网络服务上充当该用户。 这种类型的攻击对应用程序安全是有害的,因为它允许攻击者以合法用户的名义获得对受保护帐户(及其中存储的数据)的未授权访问。
本文将探讨您需要了解的有关会话劫持的所有信息,包括
- 什么是会话劫持?
- 会话劫持是如何工作的?
- 会话劫持的类型有哪些?
- 会话劫持与会话欺骗有何不同?
- 会话劫持的风险和后果是什么?
- 会话劫持的例子有哪些?
- 如何防止会话劫持?
什么是会话劫持?
每次用户通过 HTTP 连接访问网站或应用程序时,该服务都会在打开通信线路并提供访问权限之前对用户进行身份验证(例如,通过用户名和密码)。 但是,HTTP 连接本身是“无状态的”,这意味着用户执行的每个操作都是独立查看的。 因此,如果我们仅依赖 HTTP,用户将不得不为他们执行的每个操作或查看的页面重新验证自己。
会议解决了这一挑战。 一旦用户登录,就会在托管网站或应用程序的服务器上创建一个会话,然后作为初始身份验证的参考。 本质上,只要会话在服务器上保持打开状态,用户就可以保持身份验证。 用户可以通过注销服务来结束会话,或者某些服务会在预定的不活动时间后结束会话。
大多数服务通过发布一个会话 ID、一串数字和存储在网站临时会话 cookie、URL 或隐藏字段中的字母来创建这些会话。 在某些情况下,这些会话 ID 会被加密,但情况并非总是如此。 在许多情况下,这些会话 ID 基于可预测的信息,例如用户的 IP 地址。
当攻击者获得对用户会话 ID 的未授权访问权限时,就会发生会话劫持,这使他们可以假设该用户的在线身份。 这样做时,攻击者可以伪装成合法用户,获取信息,并以假冒身份采取行动。
会话劫持是如何工作的?
当攻击者获得对用户会话 ID 的未授权访问权限时,会话劫持就开始了。 攻击者通常通过窃取用户的会话 cookie(因此也称为 cookie 劫持)或诱使用户单击包含预测会话 ID 的恶意链接(下文将详细介绍)来获得此访问权限。
一旦攻击者获得会话 ID 并且用户已登录服务,攻击者便可以接管会话。 他们通过将合法用户的会话 ID 应用到他们的浏览器来做到这一点,这会诱使服务认为攻击者是参与同一会话的合法用户。
在此伪装下,攻击者随后可以伪装成合法用户并访问任何信息或执行用户有权执行的任何操作。 在用户进行单点登录 (SSO) 的情况下,攻击者可以使用这种方法获得对任意数量应用程序的未授权访问权限,从而严重损害全面的应用程序安全性。
会话劫持有哪些类型?
深入研究会话劫持的确切工作原理揭示了进行此类攻击的多种方法。 会话劫持的类型包括:
1)跨站脚本(XSS)
跨站点脚本 (XSS) 是最大的风险之一,也是最流行的会话劫持方法。 当攻击者在目标服务器或应用程序中发现漏洞并通过将客户端脚本注入网页来利用时,就会发生 XSS。 然后该页面加载了此恶意代码,但在用户方面一切看起来都是合法的,因为它仍然来自受信任的服务器。 一旦加载了恶意代码,攻击者就会获得窃取用户会话 ID 的权限。
攻击者可能会在 XSS 攻击中发送指向受信任网站的链接,但会修改 HTTP 查询参数。 一旦用户单击此链接,攻击者就可以访问他们的会话 ID,或者在某些情况下,该链接甚至可以将该信息直接发送给攻击者。 在这种情况下,攻击者通常会使用 URL 缩短器来隐藏 URL,从而隐藏链接中的任何可疑内容。
2) 会话侧劫持又名会话嗅探
会话侧劫持,也称为会话嗅探,是一种更为活跃的劫持攻击类型。 在这种情况下,攻击者将使用 Wireshark 或 Kismet 等数据包嗅探来监控网络流量并在身份验证后窃取会话 cookie。 当服务器仅加密身份验证页面而不加密会话中的其他页面时,用户最容易受到此类攻击。 因此,攻击者可以在整个会话过程中在未加密的页面上获得认证后的会话 ID。
重要的是,攻击者需要访问用户网络才能执行此类攻击,这意味着会话侧劫持通常发生在不安全的 WiFi 网络或公共网络上。
3)会话固定
当攻击者可以设置用户的会话 ID 时,就会发生会话固定。
这种类型的攻击需要目标网站中存在允许通过 URL 或表单设置会话 ID 的漏洞。 在这种情况下,攻击者可以代表用户设置会话 ID,然后通过向用户发送包含会话 ID 的网络钓鱼 URL 或在虚假登录表单中设置该 ID 来让用户相应地登录。
在任何一种情况下,合法用户都会登录网站并使用攻击者固定(因此已知)的会话 ID 进行身份验证。 用户登录后,攻击者也可以获取会话 ID。
4) 可预测的会话 ID 和暴力破解
许多网站都遵循发布会话 ID 的模式,在某些情况下,它可能就像将其设为用户的 IP 地址一样简单。 在这些情况下,攻击者可以监视发出的会话 ID 以确定模式。 如果他们可以这样做,那么他们就可以轻松地预测特定用户的有效会话 ID 可能是什么样子,并生成该会话 ID 以供自己使用。
同样,如果攻击者获得对会话 ID 设置列表的访问权限并一遍又一遍地尝试直到成功,则可能会发生暴力攻击。 如果生成 ID 的模式是可预测的,他们通常会有这样一个列表。 在这种情况下,不同之处在于他们可能无法预测特定用户的 ID,因此他们需要从列表中尝试不同的 ID,直到找到匹配项。
5) 浏览器中的人(又名中间人攻击或恶意软件)
浏览器中的人攻击,也称为中间人或恶意软件攻击,首先要求攻击者用恶意软件感染用户的计算机。
一旦安装了恶意软件并且用户登录到网站,攻击者就可以充当中间人并拦截信息、修改用户在现场执行的操作或冒充该用户执行其他操作——所有这些都是在用户不知情的情况下进行的 . 由于此类攻击源自合法用户的实际设备,因此很难在此类攻击中检测到任何违反应用程序安全的行为。
通过这种对用户设备的访问,攻击者还可以直接进入浏览器上用户的临时本地存储文件夹(也称为“cookie jar”),然后获取他们想要的任何 cookie 的会话 ID。
会话劫持与会话欺骗有何不同?
会话劫持和会话欺骗在很多方面都很相似,但它们根本不是同一类攻击。 这两种攻击之间最显着的区别是会话劫持发生在合法用户登录到良好的 Web 会话时。 相反,会话欺骗发生在攻击者冒充用户启动新的 Web 会话时(这意味着用户当时不必登录)。
这种差异最大的体现就是对合法用户的体验。 在会话劫持的情况下,攻击者中断会话可能导致网站或应用程序行为异常,甚至对受害者造成崩溃。 同时,由于用户在会话欺骗攻击期间没有主动登录,他们不会在下一个会话中遇到任何“副作用”。
会话劫持的风险和后果是什么?
成功的会话劫持实例使攻击者能够做目标用户可以做的任何事情。 这会以各种方式给应用程序安全带来重大风险,尤其是在启动货币交易、访问受保护数据或通过 SSO 获得对其他系统的未授权访问时。
会话劫持的一些最显着的风险包括:
- 货币盗窃:攻击者获得了代表用户进行金融交易的能力。 这可能涉及从银行账户转账或使用保存的付款信息进行购买。
- 身份盗窃:攻击者未经授权访问保存在帐户中的敏感个人信息,他们可以使用这些信息在被黑网站/应用程序的范围之外窃取受害者的身份。
- 数据盗窃:攻击者可以窃取应用程序中存储的任何类型的敏感个人或组织数据,并使用该信息来伤害受害者或组织(例如,在勒索的情况下)或追求他们的议程(例如,在销售的情况下) 受保护的、具有潜在竞争性的信息或知识产权)。
- 通过 SSO 访问其他系统:如果启用 SSO,攻击者还可以获得对其他系统的未授权访问,进一步分散会话劫持攻击的潜在风险。 这种风险对于组织来说尤为重要,其中许多组织现在都为员工启用了 SSO。 最终,这意味着即使是具有更强大的身份验证协议和更不可预测的会话 cookie 的高度受保护的系统,例如那些包含财务或客户信息的系统,也可能只受到整个系统中最薄弱环节的保护。
会话劫持的例子有哪些?
几个引人注目的示例准确说明了会话劫持攻击可能导致的情况。 一些最著名的例子包括:
1)“变焦轰炸”
当 COVID-19 大流行来袭时,世界变得数字化,学校、工作和社交活动都通过 Zoom 等视频会议应用程序进行。 没过多久,这些视频会议就成了会话劫持的热门受害者,甚至赢得了“Zoom-bombing”的称号。
在几个值得注意的实例中,攻击者参与了会话劫持以加入私人视频会话。 报道最多的事件包括攻击者通过大喊脏话、仇恨语言和分享色情图片来让自己出名。 作为回应,像 Zoom 这样的公司发布了更强大的隐私保护措施,例如会议密码和等候室,以便会议主持人可以手动接纳客人。
2) Mozilla Firefox“Firesheep”扩展
2010 年,Mozilla Firefox 发布了一个名为 Firesheep 的浏览器扩展,它为在公共、未加密的 Wifi 网络上使用该浏览器的人打开了一个漏洞。 具体来说,Firesheep 扩展使攻击者可以轻松地从添加到浏览器首选项的任何网站窃取这些用户的会话 cookie。 最终,许多网站通过要求 HTTP 安全 (HTTPS) 连接来响应以防止此会话劫持风险。
3)松弛
2019 年,漏洞赏金平台的一名研究人员在 Slack 中发现了一个漏洞,该漏洞允许攻击者强制用户进行虚假会话重定向,然后窃取他们的会话 cookie,最终使攻击者能够访问 Slack 内共享的任何数据(对于许多组织而言,这最终导致 很多)。 Slack 迅速做出响应,并在研究人员发现漏洞后的 24 小时内修复了该漏洞。
4)GitLab
2017 年,一名安全研究人员在 GitLab 中发现了一个漏洞,用户的会话令牌直接在 URL 中可用。 深入挖掘后,研究人员发现 GitLab 还使用永不过期的持久会话令牌,这意味着一旦攻击者获得一个会话令牌,他们就可以使用它而无需担心过期。
这种公开曝光和持久令牌的组合带来了严重的风险,通过暴力攻击的会话劫持使用户面临各种严重的攻击。 GitLab 最终通过更改其使用和存储这些令牌的方式修复了该漏洞。
如何防止会话劫持?
会话劫持仍然是首要的网络安全威胁,但有多种方法可以保护您的组织及其用户免受此类攻击。 最好的结果来自同时使用多种(如果不是全部)这些方法来提供多道保护防线。
1)使用HTTPS
确保您的团队使用的网站和应用程序(尤其是那些属于 SSO 世界的网站和应用程序)需要在所有地方使用 HTTPS——甚至超出初始登录页面——以确保在每个阶段都完全安全的会话。 您还应该让它们遵守对所有内容使用 SSL/TLS 加密的标准,包括共享会话密钥。
此级别的加密是保护会话密钥可见性的第一道防线。 最后,您应该设置一个标准来锁定从客户端脚本访问 cookie 以防止 XSS 攻击。
2) 依赖 web 框架进行会话 cookie 管理
生成的会话 cookie 越长、越多越好,因为这会使它们更难预测或猜测,从而提供针对暴力攻击的保护。 实现这种真正随机性的最佳方法是使用 Web 框架来生成和管理会话 cookie,而不是自己创建一个系统。
3)认证后更改会话密钥
防止会话固定攻击的最佳方法是在登录时进行身份验证后立即更改会话密钥。
在登录后更改密钥使得即使攻击者知道原始密钥,他们也不知道将在用户的其余会话中使用的密钥。 这种方法意味着即使攻击者向用户发送网络钓鱼链接并且用户确实使用该链接登录,攻击者也无法使用生成的密钥执行任何操作。
4) 引入额外的身份验证区域
在初始登录和生成的会话 cookie 之外添加新的身份验证区域也可以提供另一层保护。
例如,您可能会查看用户的 IP 地址以确定它是否与之前登录的位置相匹配,或者监控每个用户的整体行为以更好地识别任何异常情况。 然而,这种方法并不完美:它可能会标记非问题,例如用户经常四处走动的情况,并且它可能会遗漏实际问题,例如攻击者从与用户通常使用的相同 IP 地址登录的情况。
5)引入入侵检测系统(IDS)和入侵保护系统(IPS)
IDS 和 IPS 将站点流量与已知攻击签名的数据库进行比较。 如果这些系统找到匹配项,它们将阻止该流量并提醒系统所有者。 这些系统的安装可能既困难又昂贵,但提供了针对会话劫持的强大防御层。
6) 时间框用户会话和/或需要自动注销
最后,考虑制定管理用户结束会话方式的策略。 两种流行的方法包括对用户会话进行时间限制,特别是在一段时间不活动之后,以及在窗口关闭时要求自动注销。 这两种方法都有助于最大限度地减少特定会话 cookie 保持活动状态的时间。 同样,一旦用户注销,您应该确保会话 cookie 自动从他们的设备中删除,以避免任何额外的暴露。
wosign.com/News/news_2018090701.htm