基于Wireshark的TLS协议分析

2022-05-30 08:08邓逸铭郭旭
电脑知识与技术 2022年27期

邓逸铭 郭旭

摘要:传输层安全协议(TLS)是安全通信中普遍运用的传输协议,为安全通信提供保密性、完整性和可靠服务。该文通过对TLS协议的详细描述,采用Wireshark分析工具在实时网络中获取网络通信数据包,逐一分析TLS的工作过程,并比较了其版本迭代的差异,对深入理解TLS协议及其安全通信过程具有重要意义。

关键词:传输层安全协议;Wireshark;安全通信

中图分类号:TP311     文献标识码:A

文章编号:1009-3044(2022)27-0064-03

开放科学(资源服务)标识码(OSID):

1 绪论

传输层安全协议(TLS)是在安全套接字层协议(SSL)的基础上标准化之后的产物,目的是保证加密通信的信息完整性,确保其保密性,以实现服务端和客户端之间的安全通信。通过Wireshark网络协议分析工具,对实时网络中的通信过程抓取并进行分析,展开详细的TLS工作流程解析,对于学习TLS协议在安全通信中的显著作用有所裨益。

2 Wireshark 协议分析工具简介

Wireshark是一個用来抓取和解析网络数据包的工具,对新手学习非常友好,支持图形化界面,对各个字段的数据分析非常详细,可以用来学习和验证传输协议,以提升学习效率。Wireshark并不具有预警和风险监测功能,若产生异常流量行为,Wireshark并不能及时作出响应。可以通过Wireshark检测网络问题,保证网路通信中的安全性,排除差错,降低风险[1]。Wireshark的功能十分强大,对于截取网络数据包有其独到的便捷性,使用过程中,需要先选择连接到网络的接口,设置捕获过滤器将捕获文件初步过滤,以免获取过多文件,再通过显示过滤器二次过滤,筛选出符合研究对象的数据。Wireshark还支持对会话进行着色突出,以标记不同数据,另外,Wireshark也可以通过重组不同数据包,将离散的多个数据包重新组合,以还原原本的文件[2]。

3 TLS协议简介

3.1 TLS协议简介

TLS协议是工作在传输层的安全协议,使用的是公开密钥技术,以保证网络安全服务的可靠性,便于数据传输。TLS协议分为两层:上层即是TLS握手协议,主要用于协商密钥,描述双方如何安全协商会话密钥以便安全通信,对于身份认证、交换密钥等方面都有重要作用。下层是TLS记录协议,用于对上层传来的数据加密后传输,对于向高层协议提供加密解密等功能。TLS协议中的身份认证属于端到端协议,无须防火墙支持。TLS是一个混合加密系统,采用的是非对称加密和对称加密结合的形式,同时,TLS也支持多种密钥交换算法和加密算法,TLS通信的建立在客户端和服务端完成TCP三次握手建立连接之后,即开始建立TLS握手过程[3]。

3.2 TLSv1.2与TLSv1.3

TLS的发展历程是一个不断前进,不断迭代的过程,通过对旧版本的修补以兼容更多更新的功能。TLSv1.2主要存在的问题诸如安全问题和性能问题。TLSv1.2的安全问题依然为人诟病,被发掘出许多漏洞,在交换算法的选择和数字签名等各个方面都存在较严重的安全问题。另外,高版本的TLS协议降级为低版本时,由于不兼容性,也存在较大的漏洞。再者,TLSv1.2对于传输的损耗也很大,即使加入了许多的技术改善,TLSv1.2仍然需要2RTT的时延。Client端和Server端仍然需要来回两次的通信才能建立起TLS传输。

而TLSv1.3是对TLSv1.2革命性的进步,在其中更新迭代了许多功能和特性。对于前文所述的安全问题和性能问题,TLSv1.3都给出了解决方案。TLSv1.3不再与之前版本兼容,同时使用安全算法加密通信,以此减少通信时间。当请求资源包并不大时,其优势即被体现。TLSv1.3将TLSv1.2的TLS握手阶段缩短为1-RTT,又由于会话复用阶段发送第一个包时即可附加数据,所以引入了0-RTT概念。诚然,使用TLSv1.2和TLSv1.3在具体运用中还需要特定分析,以便在实际应用中有的放矢[4]。

4 TLS协议工作流程分析

4.1 TLSv1.3握手过程

TLSv1.3通信过程如下:

(1)由Client端发送名为Client Hello的消息到达Server端,该消息包含客户端支持的cipher suites以及随机数,此时为明文传输。

(2)当Server端收到Client端发来的消息后,返回自己支持的cipher suites信息和Server端的生成的随机数和数字证书等信息。二者通过以上两个步骤确定安全传输能力,协议的版本以及密码套件,并可以通过商定的安全算法生成共享的密钥信息,为后续进行对称加密提供保障。

(3)Client端验证(2)中Server端的数字证书,不断溯源直达顶端CA,验证证书的合法性。为了验证Server端拥有与其数字证书对应的私钥,Client端还需要验证Server端提供的Certificate Verify信息。验证通过后,Client发送Change Cipher Spec消息,后续依据商定的安全参数进行安全通信,发送加密的Finished消息结束握手协商。

(4)Server端接收到密文Finished后,使用(2)中计算的共享密钥进行对称解密,解密成功后验证握手消息的完整性和真实性。

通过以上步骤,TLS的握手过程结束,之后进行对称加密通信。

4.2 使用Wireshark抓包分析

首先,利用Wireshark协议分析工具对目标网站抓包。为了从大量的数据包中过滤出预分析的TLS交互流量,需要采用Wireshark的显示过滤功能。可通过ping命令获取目标网站域名对应的IP地址,例如图2所示,yangtzeu.yuketang.cn目标网站的IP地址是140.179.30.171。

通过Wireshark的过滤指令ip.addr == 140.179.30.171过滤出与对应IP通信的流量,得到的未解密的流量如图3所示。

图3中可以看到由客户端发来Client Hello消息,而在第二步中,服务端的Server Hello消息中数据被加密,显示为Application Data。

为了获得对应的解密消息,需要在抓包前进行环境变量配置。例如,在Windows 10系统中,添加Administrator的用户变量,新建变量名为SSLKEYLOGFILE和值为C:\keys\sslkey.log(保存路径,可自定义)。并在Wireshark首选项中对TLS协议的预主密钥日志文件名进行配置,如图4所示。然后重新抓包,通过加载TLS密钥解密后,得到的数据流。

对比图3和如图5,可以看到Server Hello阶段一并传输的Application Data数据被解密,其中的Encrypted Extensions即为对应的解密部分信息,说明此时用于检验对称加密的密钥可以正常工作。

协议具体分析如下:

(1) Client端发送的第一条消息Client Hello消息中包含了客户端生成的随机数和支持的密码算法套件。如图6所示,客户提供了密码套件,长度为32,例如TLS_CHACHA20_POLY1305_SHA256、TLS_AES_256_GCM_SHA384等。由于TLSv1.2存在良久,网络中的部件也已经非常老旧,很久没有更新,若此时采用TLSv1.3,则因为未知性导致传输失败,所以此时的version字段是TLS1.2[5]。

Client端在发送Client Hello报文时,会将公钥存于key_share中,如图7所示,key_share中包含Client端选择的曲线X25519,长度为32,表示将使用ECDH密钥交换算法建立对称密钥。Client端通过所要使用的ECDH算法生成公钥和私钥对后,将其设置于上述key_share信息中。TLSv1.3通过采用key-share信息字段,大大提高了传输速度及认证速度,相较于TLSv1.2解决了其性能不足的问题。

(2) Server端返回的Server Hello中包含Server端生成的随机数和选择的密钥算法套件即TLS_AES_256_GCM_SHA384,长度为32位。同样,此时的version字段是TLS1.2。

Server端同样生成公钥和私鑰对,key_share中也包含Server端的公钥信息。同样地,key_share中包含Server端选择的曲线X25519,长度为32,表示将使用ECDH密钥交换算法建立共享密钥。至此阶段,Client和Server可以依据交换的随机数和公钥信息,生成对应的预主密钥、主密钥和会话密钥等共享密钥。随后Server端通过Change Cipher Spec协议字段将消息传输由明文传输改为加密传输,增强了安全性。这也是TLSv1.3相较于TLSv1.2改进的重要步骤,由于此后过程都将采用加密传输,安全性得到改善。

(3) 为了实现对Server的认证,防止中间人攻击,一般需要Server端提供相关的认证信息,包括certificate和certificate verify,最后发送Finished信息。

Certificate消息来自服务端的数字证书,在选用ECDH算法时,内容为服务端加密的签名证书。Certificate Verify信息用于确保Server端拥有其所声称的公钥对应的私钥,防止中间人攻击,紧跟于Certificate信息之后。Finished消息指代握手结束,采用SHA384验证握手过程的真实性,Client端或者Server端在接收后,需要保证自己收到的数据包是否完整且准确。当Client端和Server端都发送且成功接收到对方的Finished信息之后,代表数据传输已经完成校验,保证握手过程无误。

(4) 当Client端获取到Server端发来的数据包后,计算出传输的密钥,向Server端发送Change Cipher Spec信息和Finished信息。

至此,通信双方都接收到了对方的Finished信息,标志着握手完成,Server端会发送一个New Session Ticket报文给客户端,此信息将为后续会话起到重要作用。

(5) 在有效期内,当客户端想尝试会话复用时,则需要在发送的Client Hello消息中携带pre-shared-key,即上一步的New Session Ticket信息。pre-shared-key信息由第一次完整结束时Server端发往Client端,所以在Client端需要发回给Server端时即可直接使用。值得注意的是,此时的pre-shared-key信息采用非对称加密传输,保密性和安全性得到了保证。如图14和图15所示,New Session Ticket字段内容和pre-shared-key字段内容完全一致,即可印证结论正确性。

Server端接收成功之后,进行校验,校验通过后则恢复会话。

5 结语

随着信息技术的不断发展,网络通信日益壮大的同时,其隐患和安全漏洞也不可忽视,新形势之下也需要新的安全对策。本文通过对Wireshark的功能实现和TLS协议的工作流程和基本状态进行了较为详细的介绍,并通过Wireshark分析工具对于传输层安全协议TLS的网络通信过程进行了详细的分析,了解其保障安全性的原理和流程,对于学习网络通信协议受益良多。

参考文献:

[1] 王炅,张华,吴征远,等.基于Wireshark的OSPF路由协议分析与仿真[J].闽江学院学报,2019,40(2):62-69.

[2] 欧国成.Wireshark在网络安全管理中的应用[J].网络安全技术与应用,2020(5):16-19.

[3] 张兴隆,程庆丰,马建峰.TLS 1.3协议研究进展[J].武汉大学学报(理学版),2018,64(6):471-484.

[4] weixin_30780649.TLS 1.3 VS TLS 1.2,让你明白TLS 1.3的强大.2018[2022-03-12].https://blog.csdn.net/weixin_3078064 9/article/details/98834099.

[5] ChainingBlocks.使用wireshark分析TLSv2(详细)[EB/OL].2016[2022-02-15].https://blog.csdn.net/liangyihuai/article/details/53098482.

【通联编辑:梁书】