每20个HTTPS服务器中只有1个正确实现了HTTP Strict Transport Security,这是一种广受支持的安全功能,可防止访问者与服务器建立未加密的HTTP连接。因此,其余的95%容易受到微不足道的连接劫持攻击的攻击,可以利用这些攻击进行有效的网络钓鱼,欺骗和中间人攻击。每当用户无意间尝试通过HTTP访问安全站点时,攻击者就可以利用这些漏洞,因此,攻击者甚至不需要欺骗有效的TLS证书。由于无需使用加密专家即可劫持HTTP连接,因此比起针对TLS的攻击,这些攻击要容易得多,例如最近宣布的 DROWN攻击。
HTTPS的增长是互联网发展中最积极的一步,它使前所未有的用户和网站之间的加密通信成为可能。现在,许多知名站点默认情况下都使用HTTPS,并且Web上当前正在使用数百万个TLS证书。随着诸如Let's Encrypt之类的公司提供免费证书和自动化管理工具,部署HTTPS网站将比以往任何时候都容易,该网站将受到所有现代浏览器的信任。
TLS证书的主要目的是允许浏览器验证其正在与正确的网站进行通信。例如,如果 https://www.example.com使用有效的TLS证书,则中间人攻击者将无法劫持浏览器与该站点的连接,除非他也能够获得有效的该域的证书。
如果客户使用HTTPS,通常不会发生像这样的中间人攻击。 如果来自客户的初始请求使用HTTPS,通常不可能进行这种中间人攻击。
对于攻击者而言,要获得不受他控制的域的有效证书将非常困难,并且使用无效证书将导致受害者的浏览器显示适当的警告消息。因此,很难实施针对HTTPS服务的中间人攻击,而且通常不会非常成功。但是,使用未加密的HTTP协议攻击大多数HTTPS网站有很多现实的机会。
加密通信是银行和其他金融网站的基本要求,但是仅HTTPS不足以保护这些网站免遭中间人攻击。令人惊讶的是,许多银行网站都徘徊在95%的HTTPS服务器中,这些服务器缺乏简单的功能,使它们仍然容易受到域名欺诈和中间人攻击。HTTP严格传输安全性(HSTS)是该缺少的功能,尽管实际上几乎所有现代浏览器都支持,但目前只有十分之二的安全服务器使用此功能。
可以通过劫持发往该站点的HTTP连接,简单地攻击每个未实施HSTS策略的安全网站。这是一个令人惊讶的可行攻击媒介,因为用户可以通过多种方式最终无意中通过HTTP而不是HTTPS进行连接。
手动键入的URL通常会导致初始的不安全请求,因为大多数用户没有明确键入协议字符串(http://或https://)。如果未提供任何协议,则浏览器将默认为HTTP –除非有效的HSTS策略有效。
为了提高可访问性,大多数安全的网站还运行HTTP服务,以将用户重定向到相应的HTTPS站点-但是,如果没有有效的HSTS策略,这会使他们特别容易受到中间人攻击。不仅许多用户习惯于首先访问HTTP站点,而且通过旧书签或搜索引擎结果访问该站点的其他任何人最初也可能通过不安全的HTTP地址访问该站点。无论何时发生这种情况,攻击者都可以劫持初始HTTP请求,并防止将客户重定向到安全的HTTPS网站。
可以使用sslstrip工具自动进行这种类型的攻击,该工具可以透明地劫持网络上的HTTP流量,并将HTTPS链接转换并重定向到HTTP。这种利用类型有时被认为是协议降级攻击,但严格来说,它不是:不是降级协议,它只是防止HTTP协议升级到HTTPS。
通过破坏家用路由器或DNS服务器,将目标主机名指向受攻击者控制的服务器,可以大规模攻击易受攻击的站点(所谓的“ pharming”攻击)。可以非常轻松地进行一些较小规模的攻击-例如,如果攻击者设置了恶意的Wi-Fi接入点以向附近的受害者提供Internet访问,则他可以轻松地影响其DNS查找的结果。
即使安全网站专门使用HTTPS(即完全不使用HTTP服务),中间人攻击仍然是可能的。例如,如果受害者 在浏览器的地址栏中手动输入www.examplebank.com而不使用https://作为前缀,则浏览器将尝试建立与http://www.examplebank.com的未加密HTTP连接 ,甚至如果正版站点未运行HTTP服务。如果此主机名已被篡改,或者受到中间人攻击,则攻击者仍然可以劫持该请求,并在将其中继到真正的安全站点时窃听连接,或者将网络钓鱼内容直接提供给受害者。
简而言之,未能在安全网站上实施HSTS策略意味着攻击者可以进行中间人攻击,而不必获取有效的TLS证书。由于可以通过未加密的HTTP连接执行攻击,因此许多受害者会因此而倒下,从而避免了浏览器关于无效证书的任何警告。
实施HSTS:简单的一线式通过实施适当的HSTS策略,可以阻止上述琐碎的中间人攻击。一个安全的网站只需在响应中设置一个HTTP标头即可做到这一点:
严格的运输安全性:max-age = 31536000;该标头只能通过HTTPS连接进行设置,并指示兼容的浏览器仅在下一年(31,536,000秒= 1年)通过HTTPS访问该站点。这是最常见的max-age值,几乎所有HTTPS服务器中的一半都使用该值。应用此HSTS策略后,即使用户使用http://手动为站点的主机名添加前缀,浏览器也将忽略此名称,而是通过HTTPS访问该站点。
因此,HSTS和HTTPS的组合可以很好地防御域欺骗攻击,因为当客户端遵循HSTS策略时,攻击者将无法重定向和拦截纯文本HTTP流量,也不能为客户端提供有效的TLS证书。他正在冒充的网站。
攻击者甚至不能不依赖于受害者的一小部分,就无理地忽略了无效证书的使用,因为当实施HSTS策略时,浏览器必须将这种情况视为一次失败。如果浏览器发现无效的证书,将不会让受害者直接访问该站点,也不会添加例外。
如果Google Chrome遇到具有有效HSTS策略的网站的无效证书,则不允许受害者绕过浏览器的警告消息或添加例外。 如果Google Chrome遇到具有有效HSTS策略的网站的无效证书,则不允许受害者绕过浏览器的警告消息或添加例外。
严格的运输安全性:max-age = 31536000; includeSubDomains但是,在采取将所有子域都包含在HSTS策略中的全面解决方案之前,需要进行一些思考。网站的管理员必须确保其子域中的每个子域至少在max-age参数指定的持续时间内支持HTTPS ,否则这些子域的用户可能会被锁定。
HSTS显然是重要的安全功能,但是在某些情况下,其优势无法发挥作用。由于HSTS指令通过HTTP头传递(通过HTTPS连接),HSTS只能指示一个浏览器只能使用HTTPS 后,浏览器的第一个安全网站的访问。
域名审核和传播到Firefox,Safari,Internet Explorer,Edge和Chrome的最新稳定版本可能需要几个月的时间。将域添加到预加载列表后,这些浏览器的所有用户都将受益于HSTS提供的安全性,即使他们以前从未访问过这些站点也是如此。
HSTS得到了广泛支持,但并未得到广泛实施。几乎所有现代浏览器都遵循HSTS策略,包括Internet Explorer 11,Microsoft Edge,Firefox,Chrome,Safari和Opera –但只有不到5%的安全网站启用了此重要安全功能。
如果攻击者可以劫持受害者的网络流量,则不使用HSTS的安全网站将很容易受到攻击,但是通过实施HSTS策略来抵御此类攻击甚至更加容易。这就引出了为什么这么少的网站使用HSTS的问题。
HSTS规范(RFC 6797)于2012年发布,因此几乎不再被视为一项新技术。但是,许多网站管理员可能仍然不知道它的存在,或者可能尚未准备好致力于运行仅HTTPS的网站。这些可能是其吸收率低的最重要原因。
浏览器对HSTS的支持也会带来一些隐私问题。通过向几个不同的主机名发起请求(其中一些启用了HSTS),即使用户删除了浏览器的常规cookie ,一个敌对的网页也可以建立一个“ 超级 cookie”以在后续访问期间唯一地标识客户端浏览器。浏览器将记住启用了HSTS的主机名模式,从而使超级cookie得以保留。但是,这种隐私问题只会影响客户,而不会成为网站避免实施自己的HSTS策略的借口。
实施HSTS策略非常简单,当站点已经完全通过HTTPS运行时,没有实际的不利影响。这使看到许多银行未能使用HSTS尤其是在其在线银行平台上使用HSTS更加令人惊讶。这说明了最重要的不良安全实践,因为这些实践很可能是危害攻击的主要目标。