本文将通过一个真实的域名污染案例,展示什么是域名污染,它的危害有哪些,以及如何识别和处理域名污染问题。文章覆盖了域名污染的形式、后果,并给出了具体的日志分析实例,以及临时解决方案和彻底处理建议。


一、域名污染定义

1.1 什么是域名污染

域名污染是一种网络攻击或干扰行为,旨在干扰特定域名或主机名的正常解析过程,从而导致用户无法访问目标网站或资源,或者被重定向到恶意站点。域名污染可以采用多种方式进行,其目的通常是欺骗、劫持、屏蔽或干扰用户的网络连接。

1.2 域名污染的形式

以下是一些常见的域名污染方式:

  • DNS劫持: 攻击者修改DNS(Domain Name System)解析请求或响应,将合法域名映射到恶意IP地址上。这样用户访问合法域名时将被重定向到恶意站点。
  • DNS投毒: 攻击者在DNS缓存中插入虚假的DNS记录,以污染DNS解析结果,从而导致用户访问错误的网站或资源。
  • HTTP劫持: 攻击者通过修改HTTP响应头或HTML内容,将用户重定向到不希望访问的站点。这种方法通常被用于广告或欺诈目的。
  • DNS屏蔽: 在某些情况下,政府或互联网服务提供商可能会屏蔽特定域名,以限制用户访问特定网站或服务。
  • 域名欺诈: 攻击者创建与合法域名相似的伪造域名,以诱使用户访问恶意站点,泄露个人信息或进行欺诈活动。

1.3 域名污染的危害

  • 使网络服务瘫痪,网站和应用无法访问
  • 窃取用户访问的网站数据,例如账号密码
  • 返回恶意网站或广告,进行钓鱼攻击和信息欺诈
  • 执行恶意代码,控制用户设备作为僵尸网络参与DDoS等攻击

二、企业级应用遭遇域名污染案例

2.1 问题表象(应用运行异常等)

我们的应用程序使用HTTPS通信,所有网络请求设计要进行TLS握手,以建立安全连接。但是域名被污染后,DNS解析结果将连接导向了错误的IP地址。这会导致TLS握手过程中,证书中的域名(DNS name)无法匹配目标服务器的地址(Host name),从而造成TLS握手失败,连接无法建立。

当TLS握手失败时,为了保证用户体验,我们的应用程序会像浏览器一样,弹出一个证书错误的警告框提示用户。用户可以选择忽略这个错误并强制继续连接,也可以选择中断这个连接。

企业级应用程序网络问题排查: 域名污染_主机名

如果用户忽略错误强制连接,应用程序会使用不可信的证书完成TLS握手,然后访问被污染的域名。这可能导致:

  • 用户隐私数据泄露给中间人
  • 打开钓鱼网站进行诈骗
  • 访问含恶意代码的网站

所以域名污染会直接导致我们的应用无法通过TLS安全连接到真实服务器。用户可能在应用中看到各种网络连接错误、证书警告等异常表象。这严重影响了用户体验。

2.2 相关日志分析

[CSBPTApp::VTLS_NotifyCertItemVerifyFailed] Cert verified failed:     
SN:02 72 BA ...............
ISSUER:DigiCert SHA2 High Assurance Server CA    
DNS:*.cdninstagram.com,*.igcdn.com,*.igsonar.com,*.instagram.com,cdninstagram.com,igcdn.com,igsonar.com,instagram.com    
CAFP:A0 31 C4 67 ...............
FP:8F 83 6C 81 A2 ...............
host:secure.gravatar.com

通过分析应用程序的日志,可以识别域名污染事件。关键是要解析日志中记录的主机名和域名信息,并与实际域名解析结果进行比对。

例如上述日志显示:

通过对比可以发现,日志记录的连接主机名secure.gravatar.com并不在证书授权的域名列表内。这说明该连接主机名并不被该证书信任,因此出现了证书验证失败的错误。

这很可能是域名污染所导致的,证书与实际服务器不匹配。进一步查询证书信息和与公网DNS解析的比较,可以确认域名污染事件。

三、域名污染的处理

3.1 临时解决方案

  • 在本地Hosts文件中添加域名与正确IP地址的映射,强制正确解析结果,覆盖污染解析记录。
  • 通过VPN访问可信任域名服务器,绕过本地DNS污染结果。
  • 浏览器插件修正本地DNS,如DNS Jumper等。
  • 应用程序代码层面指定可信DNS服务器,不直接调用系统API,例如使用c-ares第三方库实现DNS解析。

3.2 彻底处理方法

  • 联系网络服务商,通过ACL规则过滤掉污染流量,阻止攻击链路。
  • 清洗本地DNS服务器缓存,删除污染记录,并修复DNS服务器软件漏洞。
  • 对注册商和注册中心报告域名遭劫持,进行域名Whois记录更正。
  • 根据证书特征,在浏览器及系统级加入证书拦截策略,拒绝访问。

3.3 防范措施

  • 开启DNSSEC验证,避免DNS查询结果被劫持污染。
  • 启用HTTP Strict Transport Security (HSTS),强制HTTPS访问。
  • 加强域名注册管理,设置注册锁避免被转移。
  • 监控和检测域名解析情况,发现污染行为。
  • employee网络隔离,避免全部服务受影响。