【THM】Networking Secure Protocols(网络安全协议)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/networkingsecureprotocols

本文相关内容:了解 TLS、SSH 和 VPN 如何保护你的网络流量。

image-20250107222646387

介绍

image-20250108183818409

在TryHackMe的网络核心协议实验房间中,我们了解了用于浏览网络、访问电子邮件等操作的协议。这些协议效果很好;然而,它们可能无法很好地保护所传输的数据的机密性、完整性或真实性。简而言之,当我们说机密性不受保护时,这意味着能够查看到数据包的人可以 在你通过HTTP发送消息时直接读取你的密码或信用卡信息。同样,他们还可以尝试访问你通过电子邮件发送的私人文档。至于数据的完整性保护不足,则意味着攻击者可以更改被传输的数据的内容;换言之,如果你授权支付一百英镑,他们可以轻松地将其更改为另一个值,例如八百英镑。数据的真实性保护不足 意味着可能无法确保我们正在与正确的服务器而不是假的服务器进行通信。总而言之,如果无法很好地确保数据的机密性、完整性和真实性,那么一些重要的在线交易就会存在很严重的安全风险。

我们可以把 传输层安全 (TLS-Transport Layer Security) 添加到现有协议中,以更好地保护数据通信的机密性、完整性和真实性。因此,HTTP、POP3、 SMTP和IMAP就会变为 HTTPS、POP3S、SMTPS 和 IMAPS,其中附加的“S”代表的是安全(Secure)。我们将研究这些更加安全的协议以及我们从 TLS 中所获得的好处。

同样,使用 TELNET 协议远程访问系统也会被认为是不安全的; 而Secure Shell ( SSH ) 的创建就是为了提供一种安全的访问远程系统的方式。此外, SSH是一种可扩展协议,它可以为其他协议提供附加的安全功能。

前置学习条件

与本文相关的TryHackMe实验房间是关于计算机网络的四个实验房间中的最后一个:

我们建议你先完成前三个TryHackMe实验房间,然后再开始本文的内容学习。

学习目标

完成本文的学习之后,你将了解:

  • SSL/TLS。
  • 如何保护现有的明文协议(让现有的明文协议更加安全):
    • HTTP协议。
    • SMTP 邮件传输协议。
    • POP3协议。
    • IMAP协议。
  • SSH如何取代明文的 TELNET。
  • VPN如何 在不安全的网络之上 创建更加安全的网络。

TLS-传输层安全

曾经,你只需要一个抓包工具就能读取网络上所有用户的聊天记录、电子邮件和密码。攻击者经常会将网卡设置为混杂模式,即捕获所有数据包,包括那些并非发往该网卡的数据包。随后,他们将检查所有数据包捕获并获取毫无戒心的受害者的登录凭据,用户根本无法阻止他们的登录密码以明文形式发送。如今,以明文形式发送登录凭据的服务已经很少见了。

20 世纪 90 年代初,Netscape Communications认识到万维网上安全通信的需求。他们最终开发了SSL(Secure Sockets Layer-安全套接字层)并于1995 年发布了 SSL 2.0 作为第一个公开版本。 1999 年,互联网工程任务组 ( IETF ) 开发了 TLS(传输层安全)。尽管非常相似,但TLS 1.0 可以说是 SSL 3.0 的升级版,并提供了各种改进的安全措施。 2018年,TLS对其协议进行了重大修改,并发布了TLS 1.3。在这里,我们的目的不是记住确切的发布日期,而是为了了解开发当前版本的TLS(即 TLS 1.3)所投入的工作量和时间。二十多年来,每个TLS版本都有很多值得学习和改进的地方。

与其前身 SSL 一样,TLS 是一种在 OSI 模型的传输层运行的加密协议。它允许客户端和服务器通过不安全的网络进行安全通信。我们所说的安全是指机密性和完整性; TLS 确保任何人都无法读取或修改交换的数据。请花一点时间想一想,在无法保证网络数据包的机密性和完整性的情况下进行网上购物、网上银行、甚至在线消息和电子邮件会是什么样子。如果没有 TLS,我们将无法使用互联网来安全地执行现在已成为我们日常生活一部分的许多应用程序。

如今,通过简单添加 TLS,已有数十种协议获得了安全升级。示例包括HTTP、DNS 、MQTT和SIP,它们已成为HTTPS、DoT(基于 TLS 的DNS )、MQTTS和SIPS,其中使用了 SSL/TLS,附加的“S”代表安全。在接下来的任务中,我们将访问 HTTPS、SMTPS、POP3S 和 IMAPS。

技术背景

在此,我们不会讨论 TLS 握手的细节;但是,如果你好奇这一点,可以查看网络安全协议实验房间。我们会在本文中概述 TLS 的设置和使用方式。

每个需要识别自身身份的服务器(或客户端)的第一步是获取已签名的TLS证书。通常,服务器管理员会创建证书签名请求(CSR)并将其提交给证书颁发机构(CA); CA会验证CSR(Certificate Signing Request)并颁发数字证书。一旦收到(已签名的)证书,它就可以用来向其他人标识服务器(或客户端),其他人可以确认签名的有效性。为了使主机确认签名证书的有效性,需要在主机上安装签名机构的证书。在非数字世界中,这类似于识别各个颁发机构的印章。下面的截图显示了Web浏览器中已安装的受信任颁发机构。

image-20250108212953469

一般来说,获得已签名的证书需要缴纳年费。但是, Let's Encrypt允许你免费获得已签名的证书。

最后,需要指出的是,一些用户会选择创建自签名证书。自签名证书无法证明服务器的真实性,因为没有经过第三方验证。

答题

TLS 升级和构建的前身协议名称是什么?

SSL

哪种类型的证书不应该被用于确认服务器的真实性?

self-signed certificate

image-20250108213307665

HTTPS

HTTP协议

正如我们在网络核心协议实验室中所学习到的那样,HTTP 依赖于TCP,并且默认会使用端口80。我们还可以了解到所有HTTP流量都是以明文形式发送的,任何人都可以进行拦截和监控。下面的屏幕截图来自之前的TryHackMe实验房间,它清楚地展示了攻击者是如何轻松地读取客户端和服务器之间交换的所有流量。

image-20250108213428367

让我们花一点时间回顾一下Web浏览器通过HTTP请求网站页面之前最常见的步骤。客户端在将域名解析为IP地址后,通常会执行以下两个步骤:

  1. 与目标服务器建立TCP三次握手;
  2. 使用HTTP协议进行通信;例如,发出HTTP请求,如GET / HTTP/1.1

与上述两个步骤相关的数据包显示在下面的窗口中。包括位于第一个包含GET的HTTP数据包之前的TCP握手的三个数据包(标记为1)、与HTTP通信相关的数据包(标记为 2)、最后显示的用于表示TCP连接终止的三个数据包(标记为 3)。

image-20250108213457674

基于TLS的HTTP

HTTPS代表超文本传输协议安全,它本质上是基于 TLS 的 HTTP 。因此,通过 HTTPS 请求页面需要经过以下三个步骤(在解析域名后):

  1. 与目标服务器建立TCP三次握手;
  2. 建立 TLS 会话;
  3. 使用HTTP协议进行通信;例如,发出HTTP请求,如GET / HTTP/1.1

如下图所示,前三个数据包建立了TCP会话,相关标记为1;然后,交换多个数据包协商 TLS 协议,相关标记为2;最后交换HTTP应用数据,标记为3。在下面的Wireshark截图中,我们可以看到它显示的是“应用程序数据”,因为无法知道它是否确实是HTTP或通过端口 443 发送数据的其他协议。

image-20250108213526109

正如预期的那样,如果现在尝试跟踪数据包流并将其所有内容组合起来,只会得到乱码,如下面的截图所示。因为交换的流量是加密的,红色部分是客户端发送的,蓝色部分是服务器发送的;所以如果没有获取到加密密钥,我们就无法知道具体的内容。

image-20250108213543578

获取加密密钥

将 TLS 添加到 HTTP 会导致所有数据包都被加密。除非我们能够访问私钥,否则我们将无法看到正在交换的数据包的内容。尽管我们不太可能需要访问 TLS 会话中用于加密的密钥,但在向 Wireshark 提供解密密钥后,如果重复与上面的截图相关的操作 就可以发现TCP和TLS握手不会改变,主要的区别始于被标记为3的HTTP协议流量。例如,我们现在可以看到客户端何时发出GET

image-20250108213712545

如果你想查看交换的数据,现在就是你的机会!它的表现形式是不会被窥探的常规HTTP流量。

image-20250108213725251

关键在于TLS能为HTTP提供安全性,而无需对较低层或较高层协议进行任何更改。换句话说, TCP和IP不会被修改,而HTTP则会通过TLS发送数据,就像它通过TCP发送数据一样。

答题

在本小节的 Wireshark HTTPS 截图示例中,TLS 协商和建立需要多少个数据包?

tips:查看本小节的第二张截图示例,你需要对建立 TCP 连接的数据包和协商 TLS 会话的数据包进行计数。

8

通过 HTTPS 访问网站时,包含GET /login的数据包的编号是多少?

tips:查看本小节的倒数第二张截图示例,查看解密后的 HTTPS 截图,最左边一列显示的是数据包编号。

10

image-20250505075852391

SMTPS, POP3S 和 IMAPS

将 TLS 添加到SMTP 、POP3和IMAP 与将TLS添加到HTTP没有什么不同。与HTTP附加 S(表示Secure)并变为 HTTPS 类似, SMTP 、POP3 和 IMAP 协议将分别变为 SMTPS、POP3S 和 IMAPS。在 TLS 的基础上使用这些协议与在 TLS 的基础上使用HTTP协议没有什么不同;因此,上文针对HTTPS所讨论的几乎所有要点都适用于刚才提及的这些协议。

不安全版本的协议将使用如下表所示的默认TCP端口号:

Protocol 协议 Default Port Number 默认端口号
HTTP 80
SMTP 25
POP3 110
IMAP 143

安全版本的协议(即通过TLS传输数据)默认会使用以下TCP端口号:

Protocol 协议 Default Port Number 默认端口号
HTTPS 443
SMTPS 465 和 587
POP3S 995
IMAPS 993

TLS 可以被添加到许多其他协议中;这样做的理由和好处是相似的。

答题

如果你捕获到相关的网络流量,你可以在以下哪种协议的相关数据中提取到登录凭据:SMTPS、POP3S 或 IMAP?

IMAP

image-20250108214422906

SSH

我们在网络基础概念实验房间中使用了TELNET协议。虽然它在登录和管理远程系统时非常方便,但它的所有流量都会以明文形式发送,这就存在严重的安全风险。一旦你使用了telnet,那么任何正在监控网络流量的第三方都可以轻松地获取到你的登录凭据。该问题需要一个解决方案,Tatu Ylönen开发了SSH(Secure Shell)协议,并于1995 年作为免费软件发布了SSH -1,有趣的是,同一年Netscape Communications发布了SSL 2.0协议。更安全的版本SSH -2 于1996年定义。1999,OpenBSD 开发人员发布了OpenSSH,这是SSH的开源实现。如今,当你使用SSH客户端时,它很可能基于OpenSSH 的存储库和源代码。

OpenSSH 具有很多优势,我们将列出几个关键的点:

  • 安全身份验证:除了基于密码的身份验证外, SSH还支持公钥和双因素身份验证。
  • 保密性:OpenSSH 提供端到端加密,防止窃听。此外,它会在新的服务器密钥发布时及时通知你,以防范中间人攻击的发生。
  • 完整性:除了保护数据交换的机密性之外,OpenSSH 的加密技术还可以保护流量的完整性。
  • 隧道: SSH可以创建一个安全的“隧道-tunnel”来通过SSH路由其他协议。此设置可以实现类似于VPN的连接。
  • X11 转发:如果你连接到具有图形用户界面的类Unix系统, SSH允许你通过网络使用图形化的应用程序。

你可以使用命令ssh username@hostname连接到SSH服务器。如果用户名与你登录的用户名相同,则只需要使用ssh hostname即可 。然后,系统会要求你输入密码;但是,如果使用公钥身份验证,你将立即登录。

下面的截图显示了在远程 Kali Linux系统上运行 Wireshark 的示例。需要使用参数-X来支持图形界面的运行,例如ssh 192.168.124.148 -X 。 (此外,本地系统还需要安装合适的图形界面系统)

image-20250108220447212

TELNET 服务器将默认侦听端口 23,而SSH服务器会默认侦听端口 22。

答题

SSH 协议的开源实现的名称是什么?

OpenSSH

image-20250108220541823

SFTP 和 FTPS

SFTP 代表SSH文件传输协议(SSH File Transfer Protocol),用于安全文件传输。它是SSH协议套件的一部分,并共享相同的端口号 22。如果在 OpenSSH 服务器配置中启用,你可以使用sftp username@hostname等命令进行连接。登录后,你可以发出get filenameput filename等命令分别下载和上传文件。一般来说,SFTP 命令类似于 Unix,并且与 FTP 命令有所不同。

SFTP 不应该与 FTPS 混淆。你认为 FTPS 代表“文件传输协议安全”是正确的。 FTPS 如何保证安全性?是的,你可以预估它将使用TLS进行保护,就像HTTPS一样。 FTP使用的端口是 21,而 FTPS 则通常会使用端口 990。它需要设置证书,并且可能很难通过严格的防火墙,因为它使用单独的连接进行控制和数据传输。

设置 SFTP 服务器就像在 OpenSSH 服务器中启用一个选项一样简单。与 HTTPS、SMTPS、POP3S、IMAPS 以及其他依赖 TLS 实现安全性的协议一样,FTPS需要配置好适当的 TLS 证书才能安全运行。

答题

在与本文相关的TryHackMe实验房间页面中,单击“查看站点”按钮可访问相关站点。请按照网站上的说明获取flag。

image-20250108220633613

image-20250108220711736

image-20250108221239121

image-20250108221301637

THM{Protocols_secur3d} 。

image-20250108221330403

VPN-虚拟专用网络

假设一家公司在不同的地理位置设有办事处。该公司是否可以将其所有办公室和站点都连接到主分支(总部),以便任何设备都可以访问共享资源,就像物理上位于主分支上一样?答案是肯定的;此外,最经济的解决方案是利用互联网基础设施搭建虚拟专用网络( VPN )。这里的重点是VPN中的 V ,即Virtual虚拟。

tips:virtual private network。

在互联网设计之初, TCP /IP 协议套件专注于数据包的传输。例如,如果路由器停止服务,路由协议可以调整并选择不同的路由来发送数据包。如果数据包未得到确认, TCP的内置机制可以检测这种情况并重新发送。然而,目前还没有适当的机制可以确保离开或进入计算机的所有数据都能免受泄露和篡改。一种流行的解决方案是建立VPN连接。这里的重点是关注VPN中的P(Private专用)。

几乎所有公司都需要在其虚拟网络中进行“私密”信息交换。因此, VPN提供了一种非常便捷且相对经济的解决方案。此方案的主要要求是互联网连接、VPN服务器和客户端。

下面的网络图显示了一家公司的网络示例,该公司有两个远程分支机构连接到主分支机构。远程分支中的VPN客户端应连接到主分支中的VPN服务器。在这种情况下, VPN客户端将对流量进行加密,并通过已建立的VPN隧道(以蓝色显示)将流量传输到主分支。 在下图中,VPN流量仅限于用蓝色线路表示;绿色线路所承载的是被解密的VPN流量。

image-20250108221412907

在下面的网络图中,我们看到两个远程用户使用VPN客户端连接到主分支中的VPN服务器。在这种情况下, VPN客户端连接的是单个设备。

image-20250108221502670

一旦建立了VPN隧道,我们所有的互联网流量通常都会通过VPN连接进行路由,即通过VPN隧道进行传输。因此,当我们尝试访问 Internet 服务或 Web 应用程序时,它们不会看到我们所使用的网络的公有 IP 地址,而是会看到VPN服务器的IP地址。这就是为什么一些互联网用户会通过使用VPN连接来规避地理限制。此外,本地 ISP 只会看到被加密的流量,这限制了其审查互联网访问的能力。

换句话说,如果用户连接到日本的VPN服务器,他们访问的服务器将显示他们好像位于日本。这些服务器将相应地定制他们的网络访问体验,例如将他们重定向到日语版本的服务页面。下面的截图显示了连接到日本VPN服务器后所访问的 Google 搜索页面。

image-20250108221522223

最后,尽管在许多情况下,人们会建立 VPN 连接以通过 VPN 隧道路由所有流量,但某些 VPN 连接不会这样做。 VPN 服务器可能会被配置为允许你访问专用网络,但不会路由你的流量。此外,一些 VPN 服务器还可能会泄露你的实际 IP 地址,尽管它们预计会通过 VPN 路由你的所有流量。根据你使用 VPN 连接的原因,你可能需要运行更多测试,例如DNS泄漏测试。

最后,一些国家认为使用 VPN 是非法的,甚至会受到惩罚。在使用 VPN 之前,尤其是在旅行时,请注意检查当地的法律法规。

答题

你将使用什么来连接各个公司站点,以便远程办公室的用户可以访问位于主分支机构内的网络资源?

VPN

image-20250108221556917

本文小结与实践练习

在本文内容中,我们介绍了三种保护网络流量安全性的主要方法。

第一种方法是使用TLS,它提供了一种便捷的方式来保护许多协议,例如HTTP、 SMTP和POP3 。使用TLS保护的协议通常会在其名称中添加一个S(代表Secure),例如HTTPS、SMTPS和POP3S。

保护网络流量的第二种方法是使用SSH 。虽然SSH主要用于实现远程访问,但它也可以用于安全地传输文件并建立安全隧道。如果你想传递明文协议(例如 VNC)的流量,创建SSH隧道(tunnel)是一个不错的选择。

我们所介绍的最后一种保护网络流量的方法是使用VPN连接。 VPN连接通常是连接两个公司分支机构的网络的完美选择。

我们将通过实践挑战来完成本文的最终实验任务。

Challenge 挑战

在与本文相关的TryHackMe实验房间页面中,点击下面的启动机器按钮。

image-20250108221728927

目标机器将以分屏视图启动。如果它不可见,请继续点击实验房间页面顶部的蓝色“显示拆分视图”按钮。

在目标机器中,TryHackMe已经将浏览器设置为 记录会话的 TLS 密钥,以便我们可以使用 Wireshark 仔细查看流量。此日志记录是通过在浏览器快捷方式中添加一个额外选项来实现的。我们可以执行 chromium --ssl-key-log-file=~/ssl-key.log命令来将 TLS 密钥转储到ssl-key.log文件中。

相关的数据包捕获文件的名称为 randy-chromium.pcapng ,它被保存在 Documents 文件夹中。当我们在 Wireshark 中打开该数据包捕获文件时,我们可以将 Wireshark 配置为使用ssl-key.log文件,以便解密所有 TLS 流量。你可以在下面的两个屏幕截图中看到实现此操作的五个步骤。

首先,右键单击任意位置后,选择“协议首选项”,从子菜单中选择“传输层安全”,然后继续单击“打开传输层安全首选项”。

image-20250108221801272

单击“打开传输层安全首选项”将显示一个对话框。你必须单击下图中标有 4 的“浏览”按钮才能开始查找ssl-key.log ,你可以在Documents目录中找到具体的ssl-key.log文件,最后,单击“确定”,Wireshark 将显示所有解密的 TLS。这些数据包之一将会包含登录凭据。

image-20250108221830393

答题

我们可以发现我们找到的其中一个数据包包含了登录凭据,其中用户所提交的密码是什么?

tips: 检查数据包编号 366-在解密流量之后查找http2并进行follow查看也可以找到这个关键的数据包。

在与本文相关的TryHackMe实验房间中启动目标虚拟机,然后在Documents 文件夹中使用Wireshark 打开数据包捕获文件randy-chromium.pcapng ,并按照本小节所给出的操作示例来配置使用Documents目录中的ssl-key.log文件。

image-20250506101204862

image-20250506101531199

image-20250506101609204

image-20250506101638845

然后再检查数据包编号366的内容-选中数据包366并follow http2流量:

tips:在解密流量之后查找http2(edit->find packet...->http2)并进行follow查看(Follow-HTTP/2 Stream)也可以找到这个关键的数据包(编号366)。

image-20250506102525933

可以发现用户所提交的密码(将密码内容进行url解码即可):

image-20250506103131897

或者直接双击366编号的数据包,查看末尾内容:

image-20250506103446135

THM{B8WM6P} 。

image-20250506104055173

posted @ 2025-05-06 11:01  Hekeatsll  阅读(268)  评论(0)    收藏  举报