假设受信任的根CA被泄露/强制生成欺诈性SSL证书。这些证书能够实现什么,特别是关于MITM类型的攻击?
例如拿Facebook,如果我去那里,我会得到(1)挂锁,(2)DigiCert签署的证书,以及(3)我可以检查SHA指纹匹配某些值81:AB:等。
我的假设是,如果DigiCert是受到攻击的CA,那么假证书就会与1,2和2相匹配。 3可以生产,这是正确的吗? SSL安全模型中还有什么可以使伪证书与实际发给Facebook的真实SSL证书区分开来吗?或者其他任何可以根据此证书检测MITM类型攻击的内容?
我的第二个假设是,如果DigiCert以外的CA是受到攻击的CA,那么可能会产生假证书,但它不会在其上说“DigiCert”,并且它在SHA密钥方面不匹配?这是正确的,还是可以(纯粹从技术角度来看)根CA创建冒充另一个根CA的证书?如果是这样,是否有任何其他方法可以检测到连接是否使用此假证书进行加密?另一个CA是否可以创建一个显然具有相同SHA密钥的证书?
这个问题的灵感来自于英国即将推出的“窥探者章程”,该计划旨在赋予当局许多监视数字通信的权力。关键是这些权力在加密方面可能有多大用处,因为有人谈论使用“黑匣子”执行深度数据包检查来收集提供商(例如Facebook)可能不会选择与女王陛下政府分享的信息。我的猜测是这样的技术是不可能的(当然不是我希望的DPI!)但假冒证书和MITM攻击的可能性对我来说并不是很清楚。我猜这不会尝试,只是出于政治原因假设技术娴熟的客户可以检测到假证书。
答案 0 :(得分:0)
如果攻击者可以强制合法的根CA生成欺诈性TLS / SSL证书,他们可以使用这些证书来冒充该用户。这就是Superfish问题如此重要的原因。根CA没有受到攻击,但是在将它们出售给客户之前,他们将自己的根CA添加到一堆机器上。这使得他们能够在没有用户明智的情况下对所有流量进行MitM。
还可以采取特殊保护措施来防止这种情况发生。
一种这样的保护是HTTP Public-Key-Pinning(HPKP)。您可以插入一个标头,指定您的网站公钥和其中一个根CA的公钥。浏览器将存储此列表,并将终止任何与此不匹配的连接。因此,如果您尝试MitM我与Facebook的连接(如果他们使用HPKP),我的浏览器会抛出错误而不允许请求通过。
通过在HPKP中指定根CA,它表示只有rootCA可以签署您的证书。如果您在HPKP中指定了DigiCert,则您的浏览器将不接受Comodo签署的证书。
在胖客户端或移动应用程序中,您可以执行类似的操作,称为证书固定。基本上,在开发应用程序时,您可以指定服务器需要返回的证书。如果未指定该证书,则请求将失败。您还可以指定证书必须由特定的根CA签名。
还有一种称为在线证书状态协议(OSCP)的东西。浏览器将向根CA发出额外请求以验证证书的状态。这将检查它是否被撤销。这取决于你对rootCA的危害程度。如果您的假证书未通过OSCP验证,则希望浏览器通知用户。
对于拥有正确的SHA密钥,我的意思并不完全正确。 SHA1和SHA2是散列算法,没有密钥。证书通常有两个使用SHA算法的东西。首先,它们将包含证书签名。这通常是证书内容的SHA2,然后由根CA签名。证书还包含指纹,它是整个证书的SHA。更改证书的任何内容都会改变它的指纹。但是,您需要另一个沟通渠道才能知道预期的指纹是什么。