如果 Charles SSL 代理向我显示敏感数据,该数据是否不安全/已暴露?

信息安全 验证 代理人 网站
2021-08-21 12:05:20

今天我正在探索一个用于跟踪学生成绩和与学校相关的一切的网站。基本上就像您孩子的学校进度跟踪器,我国 90% 的学校都在使用它。

我启动了 Charles 代理并将我的手机连接到它并安装了 Charles 的根证书,这样我就可以使用 https(该站点使用它)。无论如何,我登录了网站并检查了查尔斯捕获的内容。

它捕获了一个包含所有登录凭据的 4 个字段的简单 ajax 调用。这是一个屏幕截图:

在此处输入图像描述

甚至所有东西都贴上了标签——uporabnik 的意思是“用户”,而 geslo 的意思是“密码” 所以如果我理解正确(我真的只是一个初学者),每个设法捕捉到它的人都可以看一下吗?

这是否只有通过代理才能实现,或者wireshark也可以这样做并仅通过wifi捕获数据包?

我的假设是真的吗?如果是,我应该怎么做?

2个回答

您似乎从根本上误解了 TLS 的作用。

TLS 采用常规的纯 HTTP 流量并对其进行加密并添加完整性检查。连同服务器的证书,这确保了

  • 机密性:捕获网络流量的攻击者无法读取通信内容。
  • 完整性:如果攻击者修改网络流量,这将导致错误。
  • 真实性:您可以确定您的通信伙伴是您认为与之通信的服务器。(我们马上就会讲到这个。)

如果您要查看底层 HTTP 通信,您会看到纯文本的用户名和密码,因为这是您发送到服务器的内容。

代理现在做什么?

如果您使用诸如 Charles 之类的 TLS 代理,您实质上是与代理通信,而代理与 Web 服务器通信。那么是什么阻止了攻击者只使用 TLS 代理呢?证书!

当您安装 TLS 代理时,代理会生成一个新的 CA 证书,然后您将其导入。这意味着您授予代理为任何创建证书的权限。出于成为代理的目的,这很好。

但是,攻击者必须让您导入他们的证书(或窃取您的私钥!),这样您才能信任他们代理的证书。

那么,现在这是一个问题吗?

不,这不对。一切都按预期工作。归根结底,当您将用户名和密码发送到网站时,它必须以某种方式实际到达该网站。

您认为大多数网站如何处理登录?通过在 POST 数据中发送用户名和密码,然后使用会话 cookie 识别登录用户。没有理由对凭据客户端进行散列,更不用说混淆变量名:同样容易找出它uporabnik或者ugcbuzsq是一个携带用户名的变量。

这就是连接使用 TLS 加密的原因,也是您在安装 Charles 代理的根证书之前无法看到此信息的原因。