本文将通过一个真实的域名污染案例,展示什么是域名污染,它的危害有哪些,以及如何识别和处理域名污染问题。文章覆盖了域名污染的形式、后果,并给出了具体的日志分析实例,以及临时解决方案和彻底处理建议。
一、域名污染定义
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
通过分析应用程序的日志,可以识别域名污染事件。关键是要解析日志中记录的主机名和域名信息,并与实际域名解析结果进行比对。
例如上述日志显示:
- 连接的主机名(host):secure.gravatar.com
- 证书包含的域名(DNS):.cdninstagram.com,.igcdn.com,.igsonar.com,.instagram.com,cdninstagram.com,igcdn.com,igsonar.com,instagram.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网络隔离,避免全部服务受影响。