网络安全:https劫持

文章目录

  • 参考
  • https原理
  • https窃听手段
  • SSL/TLS降级
    • 原理
    • 难点
    • 缺点
  • SSL剥离
    • 原理
    • 发展
    • 缺点
    • 前端劫持
  • MITM攻击
  • 透明代理劫持

参考

https原理
SNI
浏览器校验SSL证书
https降级
https握手抓包解析
lets encrypt申请证书

https原理

在这里插入图片描述
步骤如下:

  • 客户端向服务器发送https请求。
  • 服务器收到请求之后将证书发给客户端,证书内含公钥、颁发机构等。
  • 客户端收到公钥之后加以验证,验证通过后生成一个随机值作为对称加密密钥,用服务器公钥加密并发回服务器。
  • 服务器用私钥解密获取对称加密密钥,作为会话密钥。
  • 双方使用会话密钥进行加密通信。

https窃听手段

理论上可行的https窃听手段有以下几种:https降级、SSL剥离、MITM攻击、透明代理劫持。

SSL/TLS降级

原理

SSL/TLS协议通过握手来确定通信信息,其中握手双方要统一加密协议版本。
在握手过程中这样确认加密协议版本:

  • 由客户端(如浏览器)发送第一个数据包 ClientHello,这个数据包中保存着客户端支持的加密协议版本。
  • 服务器收到这个ClientHello数据包,查看里面客户端支持的加密协议版本,然后匹配服务器自己支持的加密协议版本,从而确认双方应该用的加密协议版本。
  • 服务器发送ServerHello数据包给客户端,告诉客户端要使用什么加密协议版本。

在上述过程中,如果客户端发送给服务器的ClientHello数据包中说自己仅支持某个有漏洞的旧版本加密协议(比如仅支持SSLv3.0),服务器有两种可能:

  • 服务器支持很多版本,其中包括有漏洞的旧版本和新版本(包括了SSLv3.0协议),那么服务器会认可使用有漏洞的旧版本协议,从而告诉客户端使用有漏洞的旧版本(可以使用SSLv3.0)。
  • 服务器不支持有漏洞的旧版本,拒绝客户端的这次请求,握手失败。

对于攻击者,作为中间人只能监听到加密过的数据,如果这些数据通过没有漏洞的加密版本加密,攻击者并不能做什么。但是,如果服务器提供有漏洞的旧版本加密协议的支持,而同时攻击者又能作为中间人控制被攻击者的浏览器发起漏洞版本的HTTPS请求,那虽然攻击者监听到的也是加密过的数据,但因为加密协议有漏洞,可以解密这些数据,所以数据就和明文传输没有什么差别了。这就是HTTPS协议降级。

难点

没找到开源工具,需要自己写

缺点

请马上停止使用TLS 1.0和TLS 1.1!
分析TLS 1.3降级攻击以及主要TLS库中的漏洞
很多网站不支持低级TLS/SSL版本,且访问时会有明显提示。

SSL剥离

blackhat 2009 sslstrip
SSL Stripping攻防之道

原理

在上古时代,访问大多数网站默认使用http,只有在两种情况下才会使用SSL,一是点击https的超链接,二是http访问服务器后被302重定向到https。

在这种情况下,SSLstrip原理如下:
① 客户端Client向服务器Server发起HTTP连接请求;
② 中间人MITM监听客户端与服务器的HTTP数据;
③ 服务器返回给客户端的HTTP数据包被在客户端与服务器之间的中间人截获。中间人解析原HTTP数据包,将其中 href=”https://…”>替换成 href=”http://…”>,将Location:https://… 替换成Location:http://…,同时记录下所修改的URL,并保存;
④ 中间人将修改后的HTTP数据发送给客户端;
⑤ 客户端Client向服务器Server发起HTTP连接请求;
⑥ 中间人计算机解析客户端的HTTP连接请求,并与保存文件相比较。当发现存在有已修改过的HTTP URL时,将其替换成原HTTPS URL,并发送给服务器;
⑦ 与服务器保持HTTPS连接,回到步骤③;
⑧ 与客户端保持HTTP连接,回到步骤④。

发展

为了应对HSTS的攻击,2012年设计了HSTS协议,让服务器使用一个名为Strict-Transport-Security的特殊头部进行应答,其中包含一个响应消息,告诉客户每当重新连接站点时,必须使用HTTPS。该响应中包含一个“max-age”字段,存放的是一个以秒为单位的数值,它代表着HSTS Header的过期时间。

HSTS的一个缺点是,它需要通过先前的连接才能知道可以安全地连接到特定的站点。当访问者初次连接到网站时,他们不会收到要求始终使用HTTPS的HSTS规则。只有在后续的连接中,访问者的浏览器才会收到要求他们通过HTTPS进行连接的HSTS规则。

除此之外,HSTS还面临着其他类型的攻击,例如通过劫持用于同步计算机时间的协议,可以将计算机的日期和时间设置为将来的时间。当HSTS规则已过期后,可以将日期和时间设置为任意值,从而绕过HSTS。

HSTS Preload Lists是一种解决这些问题的潜在方案,其工作原理是把只能使用HTTPS连接的网站硬编码到一个列表中。启用HSTS的网站可以提交到hstspreload.org的Chrome HSTS Preload Lists中;它可以作为其他浏览器中采用的预加载列表的基础。

后来,Leonardo Nve又开发了一款名为SSLStrip+的软件,它实际上是SSLStrip更新版,SSLStrip+具有绕过HSTS的能力。当站点通过未加密的HTTP进行连接时,SSLStrip+就会查找相关的HTTPS连接。当发现网站的HTTPS连接时,会将其重写为HTTP,并将该域重写为HSTS Preload列表之外的、与原来比较相似的域。

缺点

如果是按现在这种默认采用https访问的方式,客户端一开始就要进行SSL握手,中间人不可能与客户端建立http连接。

前端劫持

针对HTTPS的Web前端劫持及防御研究
这种方式其实和SSLstrip大同小异,核心思路就是剥离SSL,理论上可行,但实际上涉及到修改前端的东西,要考虑的太多了。

MITM攻击

电信级HTTPS劫持
类似fiddler等抓包工具,核心思路就是需要用户信任自签证书,不信任的话一点用处都没有。

透明代理劫持

透明代理劫持

透明代理与正向代理最大的区别在于不需要客户端明确的配置代理服务器,所有发出的请求都会被服务器拦截和转发,透明代理对客户端而言是“透明”的(类似连接手机热点)。

假设现在已经完全控制了一个热点/路由器/网关,可能的劫持步骤如下。

  • 客户端向服务器发送https请求。
  • 路由器重定向客户端连接到中间人服务器。
  • 中间人通过SNI获知目标域名。
  • 中间人替换证书进行劫持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/685696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搭贝请假审批应用

在现代企业管理中,高效的请假审批系统至关重要。搭贝的请假审批应用通过简化员工的请假流程、提升管理层的工作效率,确保企业运作的连贯性和透明度。本文将介绍搭贝请假审批应用的主要功能模块:请假分析看板、请假申请审批流、请假类型维护和…

【NOIP2020普及组复赛】题3:方格取数

题3:方格取数 【题目描述】 设有 nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊…

【区块链】truffle测试

配置区块链网络 启动Ganache软件 使用VScode打开项目的wordspace 配置对外访问的RPC接口为7545,配置项目的truffle-config.js实现与新建Workspace的连接。 创建项目 创建一个新的目录 mkdir MetaCoin cd MetaCoin下载metacoin盒子 truffle unbox metacoincontra…

《日均70亿请求项目实战》之部署三台zookeeper集群

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

搜索与图论:宽度优先搜索

搜索与图论&#xff1a;宽度优先搜索 题目描述参考代码 题目描述 输入样例 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0输出样例 8参考代码 #include <iostream> #include <algorithm> #include <cstring> using namespace std;const int N …

【Python】教你彻底了解 Python中的文件处理

​​​​ 文章目录 一、文件的打开与关闭1. 打开文件2. 关闭文件3. 文件模式 二、文件的读写操作1. 读取文件内容2. 写入文件内容 三、使用上下文管理器四、异常处理五、二进制文件操作1. 读取二进制文件2. 写入二进制文件 六、实际应用示例1. 处理CSV文件2. 处理JSON文件 结论…

poweroff, reboot流程

poweroff /halt /reboot操作通常由用户空间的systemd或其他初始化系统通过sys_reboot()系统调用触发 sys_reboot() 在内核中定义&#xff0c;通常位于kernel/reboot.c文件中。当传递特定的magic值如 LINUX_REBOOT_CMD_POWER_OFF时&#xff0c;内核会执行关机并尝试触发硬件层面…

HTTP-一

一、超文本传输 1. 文本传输 > 字符串(能在utf8/gbk等码表上找到合法字符) 2. 超文本传输 > 不仅仅是字符串,还可以携带一些图片,特殊得格式 HTML 3. 富文本 word http0.9 -> http1.0 -> http1.1 -> http2.0 -> http3.0 http1.0是主流版本 2.0 和…

TiDB学习8:TiDB6.0新特性

目录 1. Placement Rules in SQL 2. 热点小表缓存 3. 内存悲观锁 4. Top SQL 5.TiDB Enterprise Manager(TiEM) 6. 小结 1. Placement Rules in SQL Placement Rules in SQL 之前 跨地域部署的集群&#xff0c;无法本地访问无法根据业务隔离资源难以按照业务等级配置资源…

联合(union)和枚举(enum)学习(c语言)

前言 Hello,亲爱的小伙伴们&#xff0c;好久不见&#xff0c;今天我们继续来学习新的内容-----联合和枚举 如果喜欢作者菌的文章的话&#xff0c;就不要吝啬手中的三连呀&#xff0c;万分感谢&#xff01;&#xff01; 联合&#xff08;共用体&#xff09;&#xff08;union&…

【荒原之梦考研数学】感谢 CSDN 的小伙伴们

自 2016 年在 CSDN 上开设账号至今&#xff0c;荒原之梦网获得了很多同学们的支持和肯定&#xff0c;以及意见或建议&#xff0c;荒原之梦网一路走来&#xff0c;是大家给予了我们不断前进的动力。 当前这个 CSDN 账号&#xff0c;是荒原之梦考研数学网目前在 CSDN 的第一个也…

哪些机构签发代码签名证书?

在数字化快速发展的今天&#xff0c;软件安全已成为全球关注的焦点。代码签名证书&#xff0c;作为一种数字证书&#xff0c;不仅保障了软件在传输过程中的安全性和可靠性&#xff0c;还为用户提供了信任的基石。本文将深入探讨代码签名证书颁发机构&#xff08;CA&#xff09;…

神经网络 torch.nn---Linear Layers(nn.Linear)

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation nn.Linear torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone) 参数&#xff1a; in_features - 每个输入样本的大小out_features - 每个输出…

HarmonyOS(32) @Link标签使用指南

Link 前言Link简介State和Link的同步场景使用示例参考资料 前言 之前写过Link的使用&#xff0c;最新的API有点变化&#xff0c;在此做个记录。 Link简介 子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。。子组件变量发生变化&#xff0c;父组件也会随…

【干货】视频文件抽帧(opencv和ffmpeg方式对比)

1 废话不多说&#xff0c;直接上代码 opencv方式 import time import subprocess import cv2, os from math import ceildef extract_frames_opencv(video_path, output_folder, frame_rate1):"""使用 OpenCV 从视频中抽取每秒指定帧数的帧,并保存到指定文件夹…

开机弹窗找不到opencl.dll怎么办,教你几种有效的修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll文件”。这个问题可能会影响到我们的正常使用&#xff0c;因此了解其原因和解决方法是非常必要的。本文将从多个方面对“找不到opencl.dll文件”这一问题进行详细分析和解…

socket网络编程——多进程、多线程处理并发

如下图所示, 当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。 如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送…

关于main函数参数列表的那些事

写在最前面&#xff1a; 本篇博客所写代码&#xff0c;全部都依赖于Linux环境。 在开始之前&#xff0c;我们先问自己几个问题&#xff1a; main函数可以传参吗?如果main函数可以传参&#xff0c;最多可以传几个参数。main函数传递的参数具体作用是什么&#xff1f; 一.是否…

25-unittest执行顺序

在使用unittest框架时&#xff0c;各个测试方法的执行顺序是怎样的&#xff0c;本篇通过简单案例讲解unittest执行顺序。 一、定义测试类 import unittestclass Demo(unittest.TestCase):def setUp(self):print("start!")def tearDown(self):print("end!"…

大模型的跃进众生相

最近一段时间&#xff0c;在互联网科技圈&#xff0c;掀起了一阵大模型发布潮&#xff0c;许多大企业加码其中&#xff0c;甚至不少互联网大佬级人物也在其中全情投入&#xff0c;开启了人工智能创业浪潮。那么在这阵阵浪潮中&#xff0c;我们可以观察到什么样的“众生相”&…