前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TLS降级攻击的一种抵御方法

TLS降级攻击的一种抵御方法

原创
作者头像
用户9535167
发布于 2022-03-09 07:58:03
发布于 2022-03-09 07:58:03
1.2K0
举报
文章被收录于专栏:final gogogofinal gogogo

内容以及要求

在TLS握手期间 攻击者可以利用一个或者两个通信方对旧版本或者密码套件的支持发起一系列的攻击 本研究利用服务器与浏览器的协调 设计实现一种抵御TLS降级攻击的方法

要求 熟悉流量分析 熟悉TLS协议 能够搭建HTTP服务器 熟悉PHP编程以及burp的使用

大概的关键词

  1. 中间人攻击
  2. tls ssl
  3. 降级攻击

降级攻击

  1. 百度百科的介绍(什么是降级攻击)
  • 向下兼容(downward compatibility),在计算机中指在一个程序、库或硬件更新到较新版本后,用旧版本程序创建的文档或系统仍能被正常操作或使用(包括输入数据)、在旧版本库的基础上开发的程序仍能正常编译运行,或较旧版的硬件仍可在新版使用的情况。降级攻击是一种间接攻击计算机系统的方式,使系统放弃安全度较高的工作方式,使用向下兼容的工作方式。降级攻击常被用于中间人攻击,将加密通讯的安全性大幅削弱,得以进行原本不可能做到的攻击。
  • SSL/TLS协议是降级攻击的重灾区,长期面临这类问题,例如POODLE(Padding Oracle On Downgraded Legacy Encryption)攻击。去除向下兼容往往是解决降级攻击的较好手段。
  • 降级的过程 降级过程通过翻转两端的认证协议来实现。具体来说, 由于对认证协议选项的配置是从服务器端开始的,当服务器发送出第一个 configure-request 报文时,服务器端 PPTP 程序记录了当前服务器认可的认证协议选项, 这个认证协议是 CHAP。 当客户端接收到这个 configure-request 报文时,必然会发送 Ack 报文对服务器发送的上一个配置报文进行确认。此时,中间人攻击程序将这个 Ack 报文拦截掉并偷偷丢弃,然后自己伪造一个 Nak 报文并在其中添加 PAP 选项之后发送给服务器端。服务器接收到这个报文以后,其认证协议选项就从 CHAP 翻转成 PAP。 但是此时客户端事实上已经接受了服务器发送的上一个配置报文, 所以客户端所记录的认证协议状态是 CHAP。下面我们需要通过伪造 configure- request报文对客户端的认证协议状态进行翻转。

由于服务器接收到了客户端发送过来的 Nak 报文,它就会进入重协商过程, 重新发送一个新的 configure-request 报文,这个配置报文中不包含对认证协议的协商。 当这个报文到达中间人主机时,中间人攻击程序将这个报文拦截,并在它的选项字段添加一个新的PAP 选项,然后继续转发给客户端。 客户端接收这个新的配置报文以后,其认证协议就从 CHAP 翻转为PAP。 此时客户端会对这个配置报文重新进行确认,发送一个Ack 报文,当这个 Ack 报文到达中间人主机时,中间人攻击程序拦截这个报文,删除其中的 PAP 选项,并继续转发给服务器端。

至此,整个降级攻击过程完成。这个降级攻击方式不会对 GRE 隧道的序列号造成混乱,因为中间人并没有凭空伪造一个报文来消耗两端的序列号, 而是通过替换原有的报文,占用了原有的序列号。从上面的分析可见,降级过程是通过伪造 Nak 报文来让两端进行强制重协商状态,只有通过 Nak 报文强制翻转服务器端的认证协议选项,才可以实现降级。 强制重协商过程也是中间人攻击的典型攻击模式 [1]

tls 相关内容 介绍一下tls是什么 降级攻击是什么

  1. 百度百科:传输层安全性协议(Transport Layer Security,TLS),及其前身安全套接层(Secure Sockets Layer,缩写作 SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。随后又公布RFC 5246 (2008年8月)与 RFC 6176 (2011年3月)。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如Google、Facebook等也以这个协议来创建安全连接,发送数据。已成为互联网上保密通信的工业标准。

SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

TLS协议采用主从式架构模型,用于在两个应用程序间透过网络创建起安全的连接,防止在交换数据时受到窃听及篡改。

TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。

TLS协议是可选的,必须配置客户端和服务器才能使用。主要有两种方式实现这一目标:一个是使用统一的TLS协议通信端口(例如:用于HTTPS的端口443);另一个是客户端请求服务器连接到TLS时使用特定的协议机制(例如:邮件、新闻协议和STARTTLS)。一旦客户端和服务器都同意使用TLS协议,他们通过使用一个握手过程协商出一个有状态的连接以传输数据。通过握手,客户端和服务器协商各种参数用于创建安全连接:

  1. 当客户端连接到支持TLS协议的服务器要求创建安全连接并列出了受支持的密码组合(加密密码算法和加密哈希函数),握手开始。
  2. 服务器从该列表中决定加密和散列函数,并通知客户端。
  3. 服务器发回其数字证书,此证书通常包含服务器的名称、受信任的证书颁发机构(CA)和服务器的公钥。
  4. 客户端确认其颁发的证书的有效性。
  5. 为了生成会话密钥用于安全连接,客户端使用服务器的公钥加密随机生成的密钥,并将其发送到服务器,只有服务器才能使用自己的私钥解密。
  6. 利用随机数,双方生成用于加密和解密的对称密钥。这就是TLS协议的握手,握手完毕后的连接是安全的,直到连接(被)关闭。如果上述任何一个步骤失败,TLS握手过程就会失败,并且断开所有的连接。

中间人攻击

  1. 百度百科:中间人攻击(Man-in-the-Middle Attack),是一种间接攻击模式。 黑客通过某种技术控制一个处于通信两端的主机之间的某个路由,在这个路由上,中间人可以嗅探、拦截或修改两端通信过程中的数据包。 能够实现中间人攻击的技术很多,比如:ARP 欺骗 ,为了欺骗一个处于同一局域网的某台主机 ,可以使用 ARP 配置报文,使目标主机误认为攻击者主机是该局域网的默认网关。 这样受害者主机所有的出口流量就都会发送到中间人主机上。

DNS 欺骗 :在域名解析过程中 ,客户端首先需要通过域名向 DNS 服务器发送一个请求报文,以获得目的主机的 IP。 攻击者可以通过劫持这个请求报文,然后发送一个虚假的回复报文,将一个虚假的目的 IP 地址发送给客户端。 客户端就会被带到一个中间人预先设定好的目的主机上。

钓鱼网络:无线接入是非常普遍的局域网接入方式。中间人可以通过在一台安装有无线收发网卡的设备上开启无线网络诱导被害者使用该网络。由于被害者一旦接入该网络,他的所有数据都是通过这个钓鱼网络进行转发的,因此在中间人的机器上可以很容易的拦截和修改数据包。而且相比于前两种策略,搭建钓鱼网络的成本非常小,配置也比较简便。总体来说,在公共场所开放一个免费Wi-Fi是一个非常隐蔽和简单快捷的攻击方案。

一个中间人攻击能成功的前提条件是攻击者能将自己伪装成每一个参与会话的终端,并且不被其他终端识破。中间人攻击是一个(缺乏)相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由受信任的数字证书认证机构颁发,并且能执行双向身份认证。

中间人攻击(Man in the Middle Attack,简称“MITM攻击”)是一种间接的入侵攻击。这种攻击模式是通过各种技术手段,将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。

CA证书

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
12 经典游戏服务器端架构概述
现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质上也是游戏服务器这个特定领域的软件架构。 软件架构的分析,可以通过不同的层面入手。比较经典的软件架构描述,包含了以下几种架构: 1.运行时架构——这种架构关心如何解决运行效率问题,通常以程序进程图、数据流图为表达方式。在大多数开发团队的架构设计文档中,都会包含运行时架构,说明这是一种非常重要的设计方面。这种架构也会显著的影响软件代码的开发效率和部署效率。本文主要讨论的是这种架构。 2.逻辑架构——这种架构关心软件代码之间的关系,主要目的是为了提高软件应对需求变更的便利性。人们往往会以类图、模块图来表达这种架构。这种架构设计在需要长期运营和重用性高的项目中,有至关重要的作用。因为软件的可扩展性和可重用度基本是由这个方面的设计决定的。特别是在游戏领域,需求变更的频繁程度,在多个互联网产业领域里可以说是最高的。本文会涉及一部分这种架构的内容,但不是本文的讨论重点。 3.物理架构——关心软件如何部署,以机房、服务器、网络设备为主要描述对象。 4.数据架构——关心软件涉及的数据结构的设计,对于数据分析挖掘,多系统协作有较大的意义。 5.开发架构——关心软件开发库之间的关系,以及版本管理、开发工具、编译构建的设计,主要为了提高多人协作开发,以及复杂软件库引用的开发效率。现在流行的集成构建系统就是一种开发架构的理论。
范蠡
2018/07/25
8K1
12 经典游戏服务器端架构概述
经典的服务器结构概述(中)
. 经典的服务器结构概述(中) 今天将和大家详细探讨分服模型,本文结构如下: 1模型描述 分服模型是游戏服务器中最典型,也是历久最悠久的模型。其特征是游戏服务器是一个个单独的世界。每个服务器的帐号是独
韩伟
2018/03/05
2K0
经典的服务器结构概述(中)
经典游戏服务器端架构概述(上)
架构的分析模型 一、 讨论的背景 现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质上也是游戏服务器这个特定领域的软件架构。 软件架构的分析,可以通过不同的层面入手。比较经典的软件架构描述,包含了以下几种架构: 运行时架构——这种架构关心如何解决运行效率问题,通常以程序进程图、数据流图为表达方式。在大多数开发团队的架构设计文档中,都会包含运行时架构,说明这是一种非常重要的设计方面。这种架构也会显著的
韩伟
2018/03/05
2.9K0
经典游戏服务器端架构概述(上)
经典游戏服务器端架构概述 (2)
根据文章内容总结的摘要
韩伟
2016/12/02
5.9K0
经典游戏服务器端架构概述 (2)
游戏服务器的架构演进(完整版)
游戏服务器端,是一个会长期运行的程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类软件的特点是要非常关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。
曲水流觞
2020/07/13
5.7K0
游戏服务器的架构演进(完整版)
Golang语言社区--游戏服务器端开发的一些建议(转载)
大家好,我是Golang语言社区(www.golang.ltd)主编彬哥,本篇给大家转载一篇关于游戏服务器开发的文章。
李海彬
2018/03/18
2.9K0
Golang语言社区--游戏服务器端开发的一些建议(转载)
【专业技术】如何搭建游戏服务器?
存在问题: 手游越来越火了,听听业内人士的分析,他山之石,多多借鉴,那么手游的服务器到底如何搭建的? 解决方案: 从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术。(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多) 一.聊聊服务器开发有哪些东西要考虑。 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用。 业界主要的是c/c++ + Pyt
程序员互动联盟
2018/03/15
12.6K0
1 游戏服务器开发的基本体系与服务器端开发的一些建议
近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么的少,那么的零散。当他们进入游戏公司时,显得一脸茫然。如果是大公司还好点,起码有人带带,能学点经验,但是有些人是直接进入了小公司,甚至这些小公司只有他一个后台。他们一肩扛起了公司的游戏后端的研发,也扛起了公司的成败。他们也非常尽力,他们也想把游戏的后端做好。可是就是因为没什么经验,刚开始时以为做游戏服务器和做web差不多,但是经过一段时间之后,才发现代码太多,太乱了,一看代码都想重构,都是踩着坑往前走。
范蠡
2018/07/25
5.4K0
1 游戏服务器开发的基本体系与服务器端开发的一些建议
游戏服务器端有什么特别
在游戏服务器端开发所有要面对的问题中,有两个是最核心和最普遍的:一是和客户端的通讯;二是游戏登录用户的数据处理。
韩伟
2018/03/05
3.3K1
游戏服务器端有什么特别
游戏服务器概述
(1)了解常见查找/排序算法的特点:利用算法来改善性能,胜于通过编译器选项、编程技巧;
Zoctopus
2018/08/03
4.9K0
游戏服务器概述
再谈游戏服务器架构
一、服务器划分原则 在现有的网络游戏服务器端架构中,多是以功能和场景来划分服务器结构的。负载均衡和集群暂且不在本文中讨论(bigworld、atlas)。服务器划分可以基于以下原则: 分离游戏中占用系统资源(cpu,内存,IO等)较多的功能,独立成服务器。 以多线程或多进程的编程方式适应多核处理器。 在同一个服务器架构下,应尽可能的复用某些服务器(进程级别的复用,比如场景服务器)。 运行时玩家数据的保存、修改及数据流向应该是设计的焦点,它同时也决定了服务器应该如何划分。 服务器的划分应该适度,在保
李海彬
2018/03/22
4.5K0
再谈游戏服务器架构
4 关于游戏服务端架构的整理
一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须)。其中业务逻辑可能根据具体需要,又划分为好几个子模块。
范蠡
2018/07/25
3K0
4 关于游戏服务端架构的整理
如何使用 Go 语言写游戏服务器?
之前先后用Erlang,nodejs做过tcp,http的游戏服务器。接触了golang一两个月(纯新手),想在最近的tcp网游项目中使用,但又担心以下问题: # 如何高性能的搭建tcp底层,并且能负载到同时在线N多人 # 如何架构整个服务器端(包括网络层,缓存层,持久化层,日志层,逻辑分发处理层,通信协议层,以及如何有效部署) # goroutine间如何高效通信 # 担心go1.5版本及以后的gc问题 # 如何调试程序和快速定位线上问题 # 压力测试负载能力 希望用过golang的前辈给出一些建议~
李海彬
2018/03/22
3.2K0
Wind分布式游戏服务器引擎的实现
Wind是一款面向云的高性能、高效率以及高扩展性的大型分布式游戏服务器引擎。Wind利用Python语言的简洁语法以及丰富的生态库来提高游戏业务的开发效率,针对一些对性能有要求的游戏业务功能(如实时战斗功能),Wind利用Golang的高并发特性来保证服务的高性能,同时Wind接入云的组件来保证游戏服务的动态扩展性,提高服务资源的利用率。
Wind09
2022/05/15
2.3K0
Wind分布式游戏服务器引擎的实现
Wind:一款面向云的分布式游戏服务器引擎
Wind是一款面向云的高性能、高效率以及高扩展性的大型分布式游戏服务器引擎。Wind利用Python语言的简洁语法以及丰富的生态库来提高游戏业务的开发效率,针对一些对性能有要求的游戏业务功能(如实时战斗功能),Wind利用Golang的高并发特性来保证服务的高性能,同时Wind接入云的组件来保证游戏服务的动态扩展性,提高服务资源的利用率。
Wind09
2022/05/15
1.9K0
Wind:一款面向云的分布式游戏服务器引擎
游戏服务器架构概要
方案:切分xysvr,让多个scene分别服务于一些用户,world负责拉取数据。并协调控制多scene。
Zoctopus
2018/08/10
1.9K0
游戏服务器架构概要
腾讯互娱开源分布式开发框架 Pebble
韩伟
2017/11/15
3.5K0
腾讯互娱开源分布式开发框架 Pebble
论可复用的游戏服务器端开发框架(一)
本文试图以游戏服务器端开发的角度,探讨在需求高度变化的环境下,可重用模块构建的可能性和基本方案。 可复用框架的必要性与可行性 在现代游戏产品的开发中,游戏服务器端程序已经几乎成为了标配。从最简单的正版保护功能,到玩家档案、成就的存储功能,到复杂的主要游戏逻辑运算,游戏服务器端系统都是必不可少的。但是和客户端丰富的游戏引擎不同,服务器端比较少这类可复用的软件产品出现。其原因可能有以下几个:一是欧美、日本的服务器端逻辑一般比较少,所以这类产品的需求也比较少;二是游戏服务器端本身涉及大量不同的运行平台、环境、语
韩伟
2018/03/05
2.5K0
论可复用的游戏服务器端开发框架(一)
教你从头写游戏服务器框架
大概已经有差不多一年没写技术文章了,原因是今年投入了一些具体游戏项目的开发。这些新的游戏项目,比较接近独立游戏的开发方式。我觉得公司的“祖传”服务器框架技术不太适合,所以从头写了一个游戏服务器端的框架,以便获得更好的开发效率和灵活性。现在项目将近上线,有时间就想总结一下,这样一个游戏服务器框架的设计和实现过程。
韩伟
2019/01/30
4.3K1
教你从头写游戏服务器框架
为什么决定要重新造一个轮子?
目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些考量,希望大家能开放的讨论,有不恰当的地方也请指正。 首先是开发语言 目前用于游戏服务器开发的主要应该有以下这些语言: c/c++ 优点: 性能很好 开源框架: skynet底层是C 开发语言是lua,没有客户端库kbengine底层是C++ 开发语言可以使用C#,Python有多个平台的客户端库 C# 优点: 性能很好 开源框架: Scut底层C# 开发语言是 C#、Py
李海彬
2018/03/27
3.1K0
相关推荐
12 经典游戏服务器端架构概述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档