【问题标题】:What is point of SSL if fiddler 2 can decrypt all calls over HTTPS?如果提琴手 2 可以解密所有通过 HTTPS 的调用,那么 SSL 有什么意义?
【发布时间】:2012-06-04 06:05:51
【问题描述】:

不久前我在这里问了一个问题,关于如何隐藏我的 http 请求调用并使其在我的应用程序中更安全。我不希望人们使用 fiddler 2 来查看通话并设置自动应答器。每个人都告诉我要使用 SSL,电话将被隐藏,信息将得到保护。

我购买并安装了 SSL 证书并设置了所有内容。我启动了 fiddler 2 并运行了一个连接到 https 网络服务以及连接到 https php 脚本的测试应用程序。

Fiddler 2 不仅能够检测到这两个请求,还能够解密它们!我能够看到过去和第四次的所有信息,这让我想到了我的问题。

如果 SSL 对安全性的影响为零,那么它的意义何在。无论有没有 SSL,我都可以看到所有信息都返回和第四个,并且仍然设置了一个自动响应器。

我在 .NET 中是否缺少一些东西来更好地隐藏通过 SSL 进行的调用?

编辑

由于我收到了一些回复,我正在为这个问题添加一个新部分。如果应用程序连接到 Web 服务以登录会怎样。该应用程序向 Web 服务发送用户名和密码。然后,Web 服务将数据发送回应用程序,说明登录数据是否良好。即使通过 SSL,使用 fiddler 2 的人也可以设置一个自动响应程序,然后应用程序被“破解”。我知道在调试中查看数据会有什么用处,但我的问题是,究竟应该做些什么来确保 SSL 连接到它所请求的那个。基本上说不可能有中间人。

【问题讨论】:

  • 我相信它只能解密你机器上的信息,因为你已经有了私钥
  • 这是正确的——它类似于任何其他 Web 调试代理——正如下面 Alexei 的回答中提到的那样,这样的代理只检查用于您的机器的信息,从而协助调试(因此名称为 '调试代理”),但不允许任意解密从其他机器发出的调用。因此,SSL 仍然是安全的,但可以在本地观察到,因此可以更有效地进行调试。
  • 您对问题的修改提出了一个与原始问题完全不同的问题。您需要正确验证服务器发送的证书。执行此操作的方式取决于您的连接方式(使用什么类等)。

标签: c# ssl .net-4.0 fiddler encryption


【解决方案1】:

这里有介绍:http://www.fiddlerbook.com/fiddler/help/httpsdecryption.asp

Fiddler2 依赖于“中间人”的 HTTPS 拦截方法。对于您的网络浏览器,Fiddler2 声称是安全的网络服务器,而对于网络服务器,Fiddler2 模仿网络浏览器。 Fiddler2为了伪装成web服务器,动态生成HTTPS证书。

本质上,您手动信任 Fiddler 提供的任何证书,如果您手动接受随机人提供的不匹配域名的证书,情况也是如此。

编辑: 有一些方法可以防止 Fiddler/man-in-the-middle 攻击 - 即在自定义应用程序中,使用 SSL,可以要求使用特定证书进行通信。在浏览器的情况下,他们有 UI 来通知用户证书不匹配,但最终允许这样的通信。

作为显式证书的公开可用示例,您可以尝试使用 Azure 服务(即使用 Azure 的 PowerShell 工具)并使用 Fiddler 嗅探流量。由于明确的证书要求,它失败了。

【讨论】:

  • 我在我的问题中添加了一些信息,如果您可以从我的新信息中扩展您所拥有的内容,这将非常有帮助。
  • 已更新。请注意,我不是 SSL/安全通信方面的专家,如果您想进行比 SSL 更严格的安全保护,您需要与明确接受过 SSL 培训的人员交谈(请注意,SSL 被认为适用于银行交易,因此可能是你也可以)。
  • 要理解的关键一点是,如果软件在用户的计算机上运行,​​他可以在运行时简单地更改其内存中的指令以绕过您的检查。正如 Andrew Cooper 所说,这与 DRM 面临的挑战相同——“不受信任的客户端”问题。
【解决方案2】:

您可以将您的网络服务设置为要求 SSL 身份验证的客户端认证以及服务器端。这样 Fiddler 将无法连接到您的服务。只有拥有所需证书的应用程序才能连接。

当然,那么您会遇到如何在应用程序中保护证书的问题,但无论如何,您现在遇到了用户名和密码的问题。真正想破解您的应用程序的人可以尝试使用 Reflector,甚至可以对与客户端证书关联的私钥进行内存搜索。

没有真正的方法可以做到 100% 防弹。这与电影业在保护 DVD 内容方面遇到的问题相同。如果您拥有能够解密 DVD 并播放内容的软件,那么有人可以在该软件运行时进行内存转储并找到解密密钥。

【讨论】:

    【解决方案3】:

    一般来说,SSL/TLS 的意义在于,偶尔使用 Wireshark 的窃听者无法看到您的负载。 Fiddler/Burp 意味着您与系统进行了交互。是的,这是一个非常简单的交互,但它确实需要(一个)系统被攻破。

    如果您想通过使这些 MITM 程序在这样的基本级别无用来增强安全性,您将需要客户端证书身份验证(2 路 SSL)并固定服务器和客户端证书(例如,只要求特定证书对通讯有效)。您还将使用每一方的公钥加密在线传输的有效负载,并确保私钥仅驻留在他们所属的系统上。这样,即使一方(Bob)受到攻击,攻击者也只能看到发送给 Bob 的内容,而看不到 Bob 发送给 Alice 的内容。 然后,您将获取加密的有效负载并使用可验证的证书对数据进行签名,以确保数据未被篡改(顺便说一句,关于是先加密还是先签名存在很多争论)。 最重要的是,您可以使用 sha2 之类的多次传递对签名进行哈希处理,以确保签名是“已发送”(尽管这在很大程度上是一个模糊的步骤)。

    当您不控制(一个)通信系统时,这将使您尽可能合理地实现安全。

    正如其他人所提到的,如果攻击者控制了系统,他们就控制了 RAM,并且可以修改内存中的所有方法调用。

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 1970-01-01
      • 2018-07-09
      • 2011-05-10
      • 1970-01-01
      • 2016-01-21
      • 2020-08-04
      • 2011-03-06
      相关资源
      最近更新 更多