【THM】Network Security Protocols(安全协议介绍)-学习

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

本文相关内容:了解OSI模型不同层的安全性网络协议。

image

本文的前置学习基础:

简介

网络协议指定两个设备(或者更准确地说是两个进程)之间如何相互通信。

网络协议是一组预定义的规则和流程,用于确定数据如何在终端用户设备、网络设备和服务器等设备之间传输。所有协议的基本目标都是允许机器之间能够无缝地连接和通信,而不管这些机器在内部设计、结构、逻辑或操作上有任何不同之处。网络协议就像一种“通用语言”,有助于让具有不同母语以及来自全球各地的人们之间有通信的可能。

接下来我们将学习每个 OSI 模型层中:为了维护网络安全所必需的主要安全性协议。

应用层的协议安全性

在本小节中,我们将学习各种协议的核心技术概念。

为了进一步理解网络协议概念,我们必须非常清楚以下两点,它们是任何协议的特征(无论协议有何功能):

  • 每个协议都代表着 OSI 模型或 TCP/IP 模型的特定层,并能根据对应层的功能发挥作用。
  • 基于TCP和UDP的协议会在特定的网络端口上运行。

HTTPS 协议

HTTPS技术概述

超文本传输安全协议(HTTPS-Hyper Text Transfer Protocol Secure)是一种客户端-服务器(C/S)协议,它负责在web服务器(网站)和web浏览器(客户端)之间安全地传输数据。

HTTPS是 HTTP 协议的加密变体( HTTP 协议会以未加密的格式发送数据)。

HTTP 协议足以支持用户浏览一个网站来了解一个公司的产品,但是,当用户需要提供信用卡信息来进行在线下单操作时,HTTPS协议是必需的——使用HTTPS是为了在浏览器和网站之间安全地共享敏感信息,这些敏感信息包括密码、个人联系方式和财务信息等。

可以说:如果没有HTTPS协议,就不可能有安全的网上银行服务和网上支付服务。

HTTPS的工作流程

HTTPS在工作时,将使用其未加密的对应版本,即HTTP,并会添加一层加密。

在HTTPS中提供加密功能的部分是 SSL/TLS(Secure Sockets Layer/Transport Layer Security),而HTTPS工作流程的其余部分将和HTTP协议一样;因此,接下来我们将回顾一下HTTP请求和响应如何在典型的客户机/服务器环境中进行。

tips:HTTPS工作流程指的是HTTPS中的请求和响应过程。

HTTP的请求和响应

HTTP请求是由用户代理发出的——浏览器或任何其他应用程序将通过web API(Application Programming Interface-应用程序编程接口)发送HTTP请求。

HTTP请求旨在访问远程web服务器上的一些资源,而web服务器则会响应HTTP请求;下面是一个web浏览器向web服务器发送HTTP请求的示意图,其中web服务器将在TCP端口80上监听请求消息。

image

HTTP请求可以是GET方式——HTTP GET可用来请求一个网页、一张图片或一个文件,其他的HTTP请求还包括 PUT方式 和 POST方式,它们能将数据发送到web服务器,例如发送值或发送文件。

如果攻击者能够捕获客户端和服务器之间通过HTTP通信的网络数据包,那么攻击者就能够读取以明文形式发送的数据内容。

HTTPS的请求和响应

在我们快速回顾了HTTP请求和响应的流程之后,学习HTTPS就很方便了;请记住,HTTPS中的“S”是指在HTTP上添加额外的SSL/TLS加密层。

image

如上图所示,即使攻击者能够捕获通过HTTPS通信的客户端和服务器之间的网络数据包,但是由于数据经过了加密处理,所以攻击者无法读取TCP数据的内容。

HTTPS的加密机制

如前所述,SSL/TLS提供了HTTPS的加密层。SSL/TLS在实现数据加密时,主要依赖于非对称加密(公钥加密)和对称加密:非对称加密将使用两个密钥,即公钥和私钥,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程;而对称加密(又称为单密钥加密)将使用一个密钥,对称加密中的一个密钥可以同时用于信息的加密和解密。(无论是非对称加密还是对称加密,都需要通过协商得出使用何种加密算法并最终生成密钥)

HTTPS协议的默认端口为443端口,加密处理可以防止数据被任意截取和更改,能够保持所交换的流量的机密性和完整性。

FTPS 协议

FTPS技术概述

FTPS (File Transfer Protocol Secure)是一种通信协议,它是文件传输协议FTP (File Transfer Protocol)的改进和安全版本。FTP协议最初是在1971年开发的,并被发布为RFC 114文档,此后RFC 765和RFC 959都发布了基于FTP协议的额外改进内容。

FTP被设计成一个客户端-服务器模型,客户端和服务器之间将使用互相独立的控制(命令)连接和数据连接,同时还需要用户名和密码以进行身份验证。在FTP中,身份验证和数据传输都会以不加密的形式在客户端和服务器之间进行,而在FTPS中,所建立的关于数据传输的通道是加密通道。

FTPS工作流程

FTPS是FTP协议的扩展,FTPS在命令和数据连接中增加了TLS安全层,所以要理解FTPS,就有必要对FTP有所了解。

FTP的请求和响应

如前所述,FTP基于客户机-服务器模型,它将利用客户机和服务器之间的以下两个通信通道:

  • Control Connection(控制连接):在此连接中,FTP客户端(如Filezilla、CuteFTP)将通过FTP默认端口(TCP端口21)向远程FTP服务器发送连接请求(认证);顾名思义,控制连接主要用于发送和接收命令、响应。(控制连接也可被称为命令连接)
  • Data Connection(数据连接):经过认证后,该连接可用于传输数据(文件和文件夹)。

FTP连接类型

FTP有两种连接模式:

  1. Active modes(主动模式)
  2. Passive mode(被动模式)

Active Mode(主动模式)

在主动连接模式下,客户端会与服务器建立控制连接通道,并向服务器发送命令/身份验证参数,经过身份验证后,服务器会根据客户端所发起的数据传输请求,与客户端建立数据连接通道并传输数据,简而言之:

  1. FTP客户端通过TCP端口21与FTP服务器建立命令连接(或称控制连接);命令连接通道由客户端发起创建。
  2. FTP服务器通过TCP端口20与FTP客户端建立数据连接;数据连接通道由服务器端发起创建。

image

值得一提的是,这种类型的连接(主动模式)不适合客户机位于防火墙后的环境中,因为防火墙可能会阻塞 由服务器到客户机的传入连接;所以,如果客户端位于防火墙后,则需要使用FTP被动连接模式才能方便建立FTP连接。

Passive Mode(被动模式)

在被动连接模式下,客户端将负责建立控制(命令)连接和数据连接:客户端会先通过命令连接通道向服务器发送PASV命令,然后服务器则会向客户端发送一个随机端口;一旦客户端接收到服务器所发送的端口号,客户端就会建立起一个连接到服务器所提供的端口号的数据连接通道,以便服务器可以启动到客户端的数据传输。

image

当客户端位于防火墙后时,这种类型的连接(被动模式)工作良好。

FTP数据类型

在FTP连接中,当客户端和服务器之间发生数据交换时,将使用以下类型的数据类型:

  • ASCII/Type A:这是默认类型,主要用于文本文件传输,如有必要,数据在传输前会暂时被转换为8位ASCII,然后在数据接收时会转换回原来的格式。
  • Image/Type I:这通常被称为二进制模式,它使用逐字节传输,接收端会存储接收到的字节。
  • EBCDIC/Type E: 它适用于使用EBCDIC字符集的文本通信。
  • Local Type L n:它通常用于不支持8位字节传输的计算机之间的文件传输,此处 n 是表示字节大小的第二个参数。

FTPS的请求和响应

如前所述,FTPS是FTP协议的扩展,它增加了一个加密层,能够在客户端和服务器之间安全地传输命令和数据。

下面两种方法可用于加强安全性:

  • Implicit Connection(隐式连接):在此类连接中,FTPS客户端会和服务器建立一个链接,其中命令通道和数据通道都会使用SSL加密自动保护。
  • Explicit Connection(显式连接):在此类连接中,FTP客户端会显式地请求服务器在端口21上调用SSL/TLS安全会话,然后根据双方认可的身份验证机制继续进行数据传输;使用显式连接时,你可以通过选择控制连接通道和数据连接通道的三种通信模式来决定要加密的通道,即仅加密控制连接通道、仅加密数据连接通道、同时加密控制连接通道和数据连接通道。

FTP和显式FTPS的标准端口是21,而隐式FTPS的标准端口是990;添加FTPS服务可以防止攻击者针对登录信息和数据的窥探攻击。

SMTPS 协议

SMTPS技术概述

SMTPS (Simple Mail Transfer Protocol Secure)是SMTP协议的扩展,主要用于电子邮件通信。

注意不要混淆SMTP协议和POP3协议。虽然这两者都能用于电子邮件通信,但是SMTP是一种“电子邮件推送协议”,用于将电子邮件消息从客户端传输到服务器端,而POP3协议则用于从服务器端下载电子邮件到客户端。

SMTPS在SMTP协议的基础上使用了TLS/SSL安全层,TLS/SSL能够为传输的数据提供身份验证并且可以保证数据的完整性和机密性。

SMTP协议

如前所述,SMTP是一种“电子邮件推送协议”,通常用于将电子邮件从SMTP客户端传输到SMTP服务器。

SMTP协议有以下两种实现模式:

  • SMTP End-to-End(SMTP端到端):该模型用于组织之间的电子邮件通信;此模型中,由发送方的SMTP客户端向接收方的SMTP服务器发起一个SMTP连接。
  • SMTP Store-and-Forward(SMTP存储和转发):此模型用于组织内的电子邮件通信;在此模型中,SMTP服务器将在其内部维护邮件的副本(即存储),直到副本被转发给接收者。

SMTP组件

为了理解SMTP的工作流程,我们将学习SMTP的以下基本组件:

  • Mail User Agent (MUA):MUA指邮件用户代理,MUA负责创建电子邮件消息并将其发送到邮件传输代理(MTA)。
  • Mail Transfer Agent (MTA):MTA指邮件传输代理,MTA会将接收到的电子邮件通过互联网传送到收件人的MTA。(通常情况下,MTA和MDA会托管在同一台服务器上)

tips:MDA(Mail Delivery Agent)-邮件投递代理;SMTP组件不止以上两个,更多关于SMTP组件的内容可参考以下博客- https://www.cnblogs.com/Hekeats-L/p/16849668.html

image

SMTPS 中的 TLS 流程

SMTPS不是私有协议,相反,它会将SMTP包裹在TLS中;可以说,SMTPS与应用层上的SMTP类似,只是SMTPS在传输层上扩展了TLS加密。在SMTPS协议中,邮件客户端和邮件服务器之间能够使用STARTTLS命令进行数据加密。

使用SMTP协议传输的电子邮件并没有经过加密,这很容易发生窥探攻击;因此我们可以使用SMTPS协议对电子邮件进行TLS加密传输,用于SMTPS协议通信的常用端口号是587465

此外,使用SMTPS协议还可以禁止攻击者通过被控制的域发送垃圾邮件,这能防止发生敏感信息泄露和钓鱼攻击。

POP3S协议

POP3S技术概述

邮局安全协议(POP3S-Post Office Protocol Secure)是POP3协议的扩展,它主要用于从邮件服务器中 加密检索邮件消息并将相关邮件发送到邮件客户端。

POP3协议

在前一小节中,我们探讨了如何使用SMTPS进行安全地电子邮件传输,但是SMTP协议不负责检索电子邮件消息,因此我们需要POP3协议发挥检索邮件的作用。

POP3是常用的POP协议版本,它主要负责从邮件投递代理(MDA-Mail Delivery Agent)组件中检索邮件消息并转发邮件到邮件用户代理(MUA-Mail User Agent)。

POP3组件和工作流程

POP3包含了两个基础组件:客户端(MUA-Mail User Agent)和服务器(MDA-Mail Delivery Agent)。

POP3的工作流程如下:

  1. 邮件客户端与邮件服务器建立连接。

  2. 邮件客户端从邮件服务器下载所有正在队列中的电子邮件。(这是默认选项,但客户端只能针对特定的电子邮件进行下载)

  3. 将所有下载的电子邮件都保存在发起连接的设备上(邮件客户端设备)。

  4. 邮件服务器删除邮件副本。(这是默认选项,客户端也可以选择在检索到电子邮件后不进行下载)

POP3的局限性

  • Emails are Processed Locally(本地处理邮件):POP3协议不能实现跨多个设备同步电子邮件消息,虽然使用POP3协议能将电子邮件下载到当前登录的设备上,但是当下载完成后 通常会从服务器上删除电子邮件的副本。
  • Transmission in clear text(明文传输):在POP3协议中,用户名和密码以及电子邮件信息都会以明文形式发送,这使得POP3协议容易受到嗅探攻击。

POP3S工作流程

正如我们得出的结论,从安全的角度来看,POP3被认为是弱安全性的,这就需要使用一个额外的安全层,因此,POP3S就能开始发挥作用。POP3S是POP3的扩展,它能够把与电子邮件消息相关的通信封装在TLS中;为此,客户端和服务器需要初始化STARTTLS命令,如下图所示,在EHLO命令之后,POP3S服务器将触发TLS切换。

注意:EHLO命令代表扩展HELO,其中HELO是用于对服务器进行标识(即识别服务器)的命令。

image

tips:POP3S协议使用995端口,而POP3协议使用110端口;在下一个小节中,我们将学习应用层的其他一些安全协议。

答题

image

使用 SSL Shopper 网站检查 TryHackMe的 SSL 证书:https://www.sslshopper.com/ssl-checker.html

image

使用 SuperTool 网站,选择测试电子邮件服务器选项,以检查smtp.gmail.com的SMTP安全性:https://mxtoolbox.com/SuperTool.aspx

image

应用层的其他协议安全性

DNSSEC

DNS指域名系统,DNS协议主要负责解析域名。我们在访问目标网站时,与其选择记住 IP 地址,不如选择记住域名,例如,example.com 明显比 93.184.216.34 更容易让人记住。

DNS协议是通过发送DNS查询来工作的,例如,在浏览网页时,你的web浏览器可能会发送一个DNS记录类型为A或AAAA的查询,即获取网站的IPv4或IPv6地址。

在下面的控制台输出结果中,我们可以看到IP地址为192.168.0.102的主机向DNS服务器1.0.0.1发送了两个关于域名example.com的DNS查询,这将得到DNS查询的A记录和AAAA记录的响应内容——A记录查询所对应的响应内容为目标网站的IPv4地址,AAAA记录查询所对应的响应内容为目标网站的IPv6地址。

user@TryHackMe$ sudo tshark port 53
    1 0.000000000 192.168.0.102 → 1.0.0.1      DNS 82 Standard query 0x2717 A example.com OPT
    2 0.012241216      1.0.0.1 → 192.168.0.102 DNS 98 Standard query response 0x2717 A example.com A 93.184.216.34 OPT
    3 0.013454645 192.168.0.102 → 1.0.0.1      DNS 82 Standard query 0xac05 AAAA example.com OPT
    4 0.018705620      1.0.0.1 → 192.168.0.102 DNS 110 Standard query response 0xac05 AAAA example.com AAAA 2606:2800:220:1:248:1893:25c8:1946 OPT
#tshark是 wireshark 工具的命令行版本。

tips:53端口是DNS服务的默认端口。DNS记录有很多类型,这使得DNS查询也有对应的类型,所谓的DNS记录就是DNS查询所对应的响应结果。

DNS协议所提供的这种由域名到IP地址的解析非常方便,然而,网络上的任何人都可以用伪造的回复来响应DNS查询,并且发送DNS查询的主机也会接受“任何”响应。换句话说,如果攻击者伪造一个恶意回复来响应主机的DNS查询,那么主机就可能会连接到恶意服务器,避免该不良情况的一种方法是使用DNSSEC方案。

DNSSEC可以确保我们收到的DNS响应来自于我们所请求的域的所有者,为了实现这一目标,DNSSEC需要满足以下两个主要条件:

  1. DNS区域的所有者应该使用他们的私钥对所有DNS记录进行签名。
  2. DNS区域需要发布其公钥,以便用户可以检查DNS记录签名的有效性。

tips:DNS服务器是以区域为单位来管理域名空间的。

换句话说,我们对DNS查询结果所对应的数据进行了签名处理,以确保其完整性和真实性,此外,我们还可以检查签名的有效性以进行数字验证。

通过对DNS记录进行签名,DNSSEC将具有以下特性:

  • 真实性:你可以确认是由某个DNS区域的所有者撰写并发送了相关的DNS记录,计算机所接收到的DNS记录都将使用DNS区域所有者的私钥进行签名。

  • 完整性:你可以确保DNS记录在传输过程中没有发生任何更改,因为对DNS记录的任何更改都将使其签名无效。

OpenPGP

当1971年第一封电子邮件发出时,网络安全形势就变得完全不同。

电子邮件协议,如 SMTP 协议和 POP3 协议是被设计用来发送明文电子邮件的,此外,IMAP协议也同样适用于电子邮件服务,并且它还允许将你的邮箱与服务器上的邮箱同步;使用这些协议会使你所发送的电子邮件与公开的明信片一样,当邮件从一个服务器传递到另一个服务器时,每个人都可以看到邮件的相关数据。

下图显示了一个简化示例:用户可使用邮件客户端通过 SMTP 协议发送电子邮件,并可通过 POP3 协议或 IMAP 协议在邮件客户端上接收新的电子邮件消息;邮件服务器可以使用SMTP将用户所发送的电子邮件消息传递给预定的收件人。由于所有这些协议都在使用明文传输数据,所以当电子邮件消息在互联网上传输时 攻击者就能读取到邮件的相关数据。

image

随着基于网络的电子邮件服务的发展,用户能够通过连接到web服务器来阅读和撰写电子邮件信息。下图显示了一个示例:用户可使用web浏览器来编写电子邮件,然后web服务器将接收传入的电子邮件消息 并可使用邮件服务器来发送已撰写的电子邮件;在此过程中,用户所使用的web浏览器与web服务器之间的连接是通过HTTP建立的,这意味着与数据的机密性和完整性相关的安全问题仍然需要我们解决(因为使用了HTTP)。

image

随着服务提供商意识到需要使用SSL/TLS安全层来保护网络流量,HTTPS就成为了新的协议标准。大多数基于web的电子邮件系统都迁移到使用HTTPS协议,这使得web浏览器和web服务器之间的流量被加密处理;但是,web服务器和邮件服务器之间的电子邮件流量不一定是加密的。web服务器和邮件服务器都可以读取电子邮件消息的内容,此外,邮件服务器还可能会使用SMTP来传输电子邮件消息(如果使用SMTP,则意味着电子邮件消息以明文形式在Internet上传输)。

image

当添加了SSL/TLS之后,SMTP、POP3和IMAP就分别变为了SMTPS、POP3S和IMAPS,协议名称中所增加的“S”代表的是secure,表示的是在现有协议的基础上增加SSL/TLS安全层。

下图显示了一个简化示例:用户可以使用邮件客户端通过SMTPS来发送电子邮件,并且能够使用POP3S或IMAPS在邮件客户端上接收电子邮件;然后电子邮件在邮件客户端和邮件服务器之间会被加密发送,并且邮件服务器照样可以读取电子邮件消息的内容。

image

虽然 SSL/TLS 的加入极大地增强了电子邮件消息的安全性,但是,我们仍然必须信任对面的邮件服务器;如果这种信任关系不是你所能接受的,那么你就需要考虑使用 OpenPGP 之类的标准。PGP (Pretty Good Privacy)是由Phil Zimmerman创建的加密程序,而OpenPGP是一种用于签名和加密文件、电子邮件消息的开放标准,详细内容见RFC 4880。GnuPG (Gnu Privacy Guard),或简称为GPG,是OpenPGP标准的免费开源实现;简而言之,GnuPG可以允许你对数据、通信进行签名和加密处理。

GnuPG可以轻松地与邮件客户端集成,以无缝地签署、加密和解密电子邮件消息。使用GnuPG(即遵循OpenPGP标准)加密的电子邮件消息只能被预期的收件人读取。换句话说,除了预期的收件人之外,任何人(包括邮件服务器)都不能读取电子邮件消息的内容。

当与电子邮件一起使用时,GnuPG将要求每个用户生成一个密钥对:一个私钥和一个公钥;简单来说,发送方的私钥用于签名,而接收方的公钥用于加密,此外,从接收方的角度来看——发送方的公钥用于检查签名,接收方的私钥用于解密。有关非对称加密的更多信息,建议查看密码学的相关介绍。

OpenPGP的实现(如GnuPG)提供了一个很好的解决方案来保护电子邮件消息内容的机密性和完整性,但是,这种保护并不包括电子邮件的标题信息。

下面我们将介绍使用OpenPGP加密之前和之后的消息示例,原始消息如下所示:

user@TryHackMe$ cat message.txt
Hello,

Please proceed with the transaction.

Best,
Strategos

使用OpenPGP时,客户端和服务器端 双方都需要使用gpg --gen-key命令生成密钥对,这个命令将要求用户提供他们的用户名和电子邮件地址,并最终会创建一个私钥和一个公钥;经过创建得到的私钥应该被安全地存储,而公钥则应该与我们希望进行安全通信的其他方共享。

支持OpenPGP的电子邮件客户端将使用收件人的密钥对要发送的电子邮件消息进行加密,如果我们想通过命令行来完成这个任务,则应该像下面这样:

gpg --encrypt --sign --armor -r strategos@tryhackme.thm message.txt

注意以下选项:

  • --encrypt -r recipient@tryhackme.thm表示 使用与收件人电子邮件相关联的公钥对message.txt进行加密,这将提供保密性。
  • --sign表示 使用我们的私钥(发送方的私钥)对消息进行签名,这能确保真实性。
  • --armor表示 使用ASCII而不是二进制来产生输出。

我们使用gpg加密之后将得到以下电子邮件消息内容,这些消息将通过电子邮件客户端被无缝发送:

user@TryHackMe$ cat message.txt.asc
-----BEGIN PGP MESSAGE-----

hF4Dt1Jduipo/LESAQdAmqgCLQRRQCFNOBWSF+dY64suA8xtty7ysfolfF7+fnUw
crwR2ioRTcXTe6c0dZl/sdmtjDJPZWGHI3XcD7XWA2hPDb+w4P46e9FJGsCE/JaO
1I4BCQIQZc91A79Ebli/41D0aVkBmDpjIgvpwjHdmomT7dghTcB+Qp80WbYDnV20
4qTgdgdAnLtQp3fnJCXlZ0BfecPB+ZfECdD1IAleBB3o14v5v/ntfPKfXPZwODUm
ELY7piC2GclBWbirrZsnzTLWeYCrABiKJ3Rb75VgJXdM1uKNBY0HLN06VdEuDy+L
=nRQE
-----END PGP MESSAGE-----

SSH

随着网络化系统的发展,计算机用户可通过网络远程连接到系统,例如,用户可远程连接到系统来执行工作流程和进行系统管理。

最早的两个远程登录协议是Telnet和remote login,对应的客户端分别是telnetrlogin;这两种协议都使得通过网络远程登录系统成为可能,然而,它们都没有把重点放在安全方面。在Telnet协议和remote login协议中,正在交换的流量数据的机密性并没有受到保护(特别是登录凭据数据);此外,这两种协议也无法确保所发送的流量和命令的完整性。换句话说,正在监视网络的攻击者很容易读取远程登录协议中的登录凭据并能够修改通过网络发送的远程命令。

下面的截图是 Wireshark 在对Telnet会话使用“跟踪TCP流-Follow TCP Stream”选项之后所截取到的。我们可以看到用户输入了用户名michael,并且粘贴了用户的密码RJ9wn^t3T%gC;虽然按照现代标准,这个复杂的密码是安全的,但它是以明文形式发送的,所以这个密码就能被网络数据包捕获软件读取。

注意:在下面的图像中,红色文本内容是由Telnet客户端发送的,而蓝色文本内容是由Telnet服务器发送的。

image

SSH协议 (Secure Shell Protocol)提供了Telnet和remote login两种远程协议所不具备的安全功能。使用了SSH协议之后,攻击者读取登录凭据或修改流量数据变得不再可行。如果我们此时再次尝试在Wireshark上使用“跟踪TCP流”选项并捕获数据包,那么我们将无法获得有关用户名、密码或用户发出的命令的任何数据信息。如下面的截图所示:此时可见的有效数据信息只有系统版本号和所支持的SSH协议。(tips:红色字符内容是由客户端发送的,蓝色字符内容是由服务器发送的)

image

答题

image

表示层、会话层的协议安全性

SSL/TLS 协议

SSL/TLS技术概述

安全外壳传输协议 (SSL-Secure Socket Shell) 和传输层安全协议 (TLS-Transport Layer Security) 是用于加密客户端和服务器之间所交换的数据的重要协议,你可以将SSL/TLS视为一个包装器——它能够对各种通信协议 (比如HTTP和FTP) 进行加密以创建这些协议的安全版本 (比如HTTPS和FTPS) 。

SSL现在并不常用,因为SSL已经逐渐被TLS所取代,可以说——SSL协议是TLS协议的前身。

SSL/TLS工作流程

通过SSL/TLS握手过程能够对客户端和服务器之间的通信进行加密,具体步骤如下:

  1. 客户端Hello消息(Client Hello Message):客户端向服务器发送Hello消息,除了随机字节,此消息还包括客户端的TLS版本和客户端所支持的cypher(密码)套件。
  2. 服务器Hello消息(Server Hello Message):服务器响应一个Hello消息,突出显示服务器使用的证书、选择的密码套件和一些随机字节。
  3. 身份验证(Authentication):客户端通过证书的颁发机构对服务器证书进行身份验证;例如,当我们访问谷歌时,谷歌会共享它的证书,然后接收到的证书将由我们的浏览器进行验证,浏览器可以预装各种证书颁发机构的证书。
  4. 预备主密钥(Premaster Secret):客户端使用服务器的公钥加密随机字节。(客户端会从服务器的证书中检索公钥。)
  5. 解密预备主密钥(Decryption of Premaster):服务器用自己的私钥解密预备主密钥。
  6. 生成会话密钥(Session Keys Generated):客户端和服务器端会根据客户端随机字节、服务器随机字节和premaster secret来生成会话密钥;客户端和服务器端都会得到相同的会话密钥,此会话密钥不会被传输,我们之后对通信数据的加密和解密操作都基于此会话密钥。
  7. 就绪消息(Ready Messages):客户端和服务器将使用会话密钥发送“已完成-finished”消息,以指示会话已准备好传输;客户端和服务器现在就可以开始通过SSL/TLS加密连接来交换消息了。

image

tips:密码套件(cypher suite)是一组用于建立安全通信连接的加密算法(加密算法是针对数据进行的一组数学运算,可使数据看起来随机),有许多广泛使用的密码套件,TLS握手的一个基本部分就是要商定将为该握手使用哪个密码套件。

TLS是对通信协议的通信进行加密的包装器,它对应各种不同的协议会使用不同的端口号,比如HTTPS的端口号是443,FTPS的端口号是990等。

SOCKS5 协议

SOCKS5 技术概述

SOCKS (Socket Secure)是一种通过委托服务器(SOCKS5代理)进行数据交换的代理协议,可用于保护应用层协议的安全。例如,Squid服务器就实现了SOCKS5协议,该服务器通过HTTP协议传输数据。

作为一个Internet协议,SOCKS能够通过代理服务器在客户端和服务器之间交换网络数据包,并且SOCKS5还能额外提供身份验证机制,从而保证只有授权用户才能访问服务器。SOCKS在OSI模型的第5层(会话层)执行,SOCKS服务器将接受TCP端口1080上的传入客户端连接。

SOCKS5 工作流程

假设这样一个场景——用户a想要通过Internet连接到客户机B,但是两者之间有防火墙;相关的 SOCKS5 握手过程的步骤如下:

  • Client Initiation(客户端启动):

    • 客户端A连接到SOCKS5代理,并将第一个字节(0x05)发送到代理服务器上,其中“5”是指SOCKS版本。

    • 客户端A发送第二个字节(0x01),“1”表示支持身份验证。

    • 客户端A发送第三个字节(0x00, 0x01, 0x02,或0x03),这些字节表示客户端所支持的身份验证方法,字节长度是可变的。

  • SOCKS5 Proxy Reply(SOCKS5代理作出回应):

    • SOCKS5代理会回应客户端A所发送的第一个字节(以确认正在使用的SOCKS版本),此外,SOCKS5代理还会回应客户端A所发送的第二个字节(以指定代理服务器要选择使用的身份验证方法)。

    • 在启动数据包之后,客户端A会发送请求报文,该请求报文中将包含客户机B的HOST(主机地址)和客户机B的PORT(端口号)。

    • 客户端A和代理服务器之间将成功建立会话。(客户端B与代理的会话建立也涉及相同的步骤)

  • Data Transfer(数据传输):

    • 在成功地将两个客户端与代理服务器关联之后,两个客户端(A和B)之间就可以交换数据,并且将共享通过代理服务器路由的信息。

image

tips:关于SOCK5工作流程的可参考文章—— https://www.jianshu.com/p/91979534b49d

SOCKS5的好处

  • 在通过代理服务器进行的通信中,能够隐藏通过Internet路由的内部详细信息。
  • SOCK5代理能够充当中继服务器(实现数据转发功能),以绕过基于客户端IP地址的互联网审查。

答题

进入本文相关的TryHackMe实验房间,使用由实验房间所提供的模拟页面并完成答题。

tips:在模拟页面中按照正确的顺序放置方块,从而显示一个成功的SSL握手过程,最后会得到一个flag。

完成模拟测试:

image

最后得到的flag为:

image

得到的flag内容为:THM{GOT_THE_SSLKEY} 。

image

网络层的协议安全性

IPsec

IPsec代表互联网协议安全(Internet Protocol Security),在此处,我们所介绍的IPsec是指IPsec-v3。

IPsec能够通过添加身份验证机制和保护网络流量的完整性和机密性来提供安全性,IPsec将涉及以下概念:

  1. 认证头(AH-Authentication Header):可以提供身份验证并能确保数据完整性。
  2. 封装安全负载(ESP-Encapsulating Security Payload):可以提供身份验证并能确保数据的完整性、机密性。
  3. 安全关联(SA-Security Association):负责协商加密密钥和加密算法,如互联网密钥交换协议(IKE-Internet Key Exchange)在构建时使用了SA。

tips:对于SA(安全关联),本文并不作详细介绍。

在本小节接下来的部分,我们将更详细地讨论 AH 和 ESP。

认证头(AH-Authentication Header)

AH协议负责对流量数据进行认证并能保护数据的完整性,但是,它不能保护数据的机密性。

AH协议有两种工作模式,如下所示:

  1. 传输模式(Transport Mode):能够对TCP/UDP报文头和数据进行认证。
  2. 隧道模式(Tunnel Mode):能够对IP报文头、TCP/UDP报文头和数据进行认证。

image

在没有机密性需求的情况下,仅提供身份验证和保护完整性就足够安全了,所以此时使用AH协议是合适的。值得一提的是,AH在IPsec-v3中的实现与否是可选择的,但在IPsec-v2中AH是必须实现的。

封装安全负载(ESP-Encapsulating Security Payload)

封装安全有效载荷(ESP)除了提供身份验证和保护数据完整性之外,还能提供加密功能,它有两种工作模式:

  1. 传输模式(Transport Mode):为TCP/UDP报文头和数据提供安全性(保护数据的机密性和完整性)。
  2. 隧道模式(Tunnel Mode):为IP报文头、TCP/UDP报文头和数据提供安全性(保护数据的机密性和完整性)。

tips:通过提供加密功能以保护数据的机密性。

image

VPN

在设计TCP/IP协议时,机密性和完整性等安全需求并不是设计目标,相比之下,可用性是协议在设计时被优先考虑的,因为互联网的初始建立目的之一是抵御核攻击,这从路由协议在发生链路故障时能快速适应就可以看出。但在现实世界中,我们还需要允许公司能够使用现有的互联网基础设施安全地连接到公司的办公室网络,而解决这个问题的答案就在于建立一个VPN。

虚拟专用网络(VPN)使在公共网络上建立专用连接成为可能,换句话说,我们可以在不安全的互联网基础设施上通过使用VPN来建立安全连接。

例如,在下面的图中,我们可以看到远程办公室网络、主办公室网络以及一个通过VPN连接到办公室网络的远程用户;VPN连接需要使用VPN客户端和VPN服务器或集中器,并且VPN客户端和VPN服务器端之间的所有流量都是加密的。

image

tips:VPN Concentrator(VPN 集中器)。

用于建立VPN连接的两种常见协议是:

  • IPsec
  • SSL / TLS

IPsec中的ESP是在不同网络之间或者在计算机与网络之间建立安全隧道的理想协议,ESP可以为两点之间传输的所有数据提供安全性和完整性,在隧道模式下的ESP甚至可以隐藏IP地址;请注意,如果要使用IPsec隐藏IP地址,那么计算机系统必须位于VPN集中器的后面。(思科的VPN客户端可支持使用IPsec协议)

虽然SSL是为了保护HTTP通信而创建的,但是SSL/TLS也可以用于与OpenVPN配合以建立安全的VPN连接。通过使用围绕SSL/TLS构建的各种工具和库,OpenVPN能够提供不同的身份验证机制和加密机制来建立安全的VPN连接。

一些可用于建立VPN连接的旧协议不再被认为是安全的,比如点到点隧道协议(PPTP),它已经不被认为是安全的VPN相关协议。

答题

image

小结

在本文中,我们介绍了各种安全性网络协议,这些协议对于保护数据传输的安全至关重要。为了实现在不安全的通道上保护数据,最广泛使用的机制就是在原协议的基础上添加SSL/TLS包装器,这正如我们在HTTPS协议、FTPS协议、POP3S协议和SMTPS协议中所看到的情况一样。

使用安全性协议可以在一定程度上防止发生MITM (Man In The Middle-中间人)攻击、重放攻击和窃听攻击等恶意网络安全事件。

posted @ 2023-03-30 23:46  Hekeatsll  阅读(517)  评论(0编辑  收藏  举报