攻击者能否从服务器窃取 SSL 证书并将其用于 MITM 攻击?

信息安全 tls 中间人
2021-08-16 01:32:58

我正在编写一个供私人使用的 iOS 应用程序,以充当 PHP 服务器的客户端。为了保护连接,我使用了自签名 SSL 证书。

由于服务器是自托管的,在我的 LAN 内的第一个连接上,我可以很确定没有发生 MITM 攻击。因此,我将服务器发送给客户端的证书保存在一个文件中,然后我将下载的证书捆绑在我的应用程序中,以检查服务器发送的证书和我的应用程序中捆绑的证书是否相同(SSL Pinning基本上)。

我对 MITM 攻击和一般安全性知之甚少,所以我的问题如下:攻击者是否可以从我的服务器下载证书(就像我所做的那样)并使用该证书伪装成服务器并执行 MITM 攻击?还是我误解了中间人的工作方式?

3个回答

重要的不是证书,而是私钥那一个不会离开服务器。要冒充服务器,中间人需要获取该私钥。证书本身是公共数据,由服务器通过简单的连接发送给每个请求它的客户端。

中间人攻击是双重冒充:攻击者在与客户端交谈时冒充服务器,在与服务器交谈时冒充客户端。在简单的 SSL 中,没有基于证书的客户端身份验证,客户端名义上是匿名的,因此安装成功的中间人会减少运行客户端接受为真实的假服务器。如果您没有服务器的私钥,那么祝您好运。)

实际上,根据您的客户端实现 SSL/TLS 和 PKI 的方式,攻击者可能会执行一些类似的操作:例如,请阅读此页面,了解在技术上如何窃听安全连接,如果没有足够的注意力的话。 t 支付给 SSL/TLS 的 PKI 部分。

简而言之:攻击者会生成一个根证书,以某种方式让您的客户端应用程序信任它(这是关键部分),然后充当中间人,在您的客户端运行时生成服务器证书连接到(该)服务器。

编辑:将软件旨在信任的证书与应用程序捆绑在一起,而不是从中间人可能会破坏的商店中提取它们,原则上足以阻止此漏洞。

捆绑证书、安装嵌入式证书、实施并不重要如果您认为是这种情况,那么您就错过了证书的底层处理。

当通过 PKI 基础设施建立连接时,它通常按如下方式工作:

Client (with cert) --> before connection is made, let me consult CA --> Internet
Client (with cert) --> Hey CA is this cert being used valid --> Internet CA
CA --> checks cert information
CA --> Valid cert? --> Yes --> This is a valid cert --> Client
CA --> Valid cert? --> No --> This is NOT A VALID cert --> Client

攻击者发生的情况是 a) 他们可以用STOLEN - SIGNED CERT替换的有效证书,并且发生上述情况:

Client (with signed STOLEN cert) --> Let me consult CA --> Internet
Client (with signed STOLEN cert) --> Hey CA is this cert valid?
CA --> checks cert information
(cert was not revoked)
CA --> Yes --> This is a valid cert --> Client

从我正在阅读的内容来看,如果在建立连接时只会使用指定的证书并且攻击者无法完全替换该证书的印象。实现这一目标需要大量的编程。事实上,软件供应商必须为每个客户编写 N 次迭代才能实现这一目标。否则,证书是证书是证书...