从项目方及用户角度,简析 DNS 被劫持的根本原因
DNS Hijacking(劫持) 大家应该都耳濡目染了,历史上 MyEtherWallet、PancakeSwap、SpiritSwap、KLAYswap、Convex Finance 等等以及今天的 @CurveFinance,十来个知名加密货币项目都遭遇过。但很多人可能不一定知道其劫持的根本原因,更重要的是如何防御(项目方角度及用户角度),我这里做个简单分享:
DNS 可以让我们访问目标域名时找到对应的 IP:
如果这种指向关系被攻击者替换了:
Domain -> IP_BAD(攻击者控制)
那这个 IP_BAD 所在服务器响应的内容,攻击者就可以任意伪造了。最终对于用户来说,在浏览器里目标域名下的任何内容都可能有问题。DNS 劫持其实分为好几种可能性,比如常见的有两大类:
1. 域名控制台被黑,攻击者可以任意修改其中的 DNS A 记录(把 IP 指向攻击者控制的 IP_BAD),或者直接修改 Nameservers 为攻击者控制的 DNS 服务器;
2. 在网络上做粗暴的中间人劫持,强制把目标域名指向 IP_BAD。
第 1 点的劫持可以做到静默劫持,也就是用户浏览器那端不会有任何安全提示,因为此时 HTTPS 证书,攻击者是可以签发另一个合法的。
第 2 点的劫持,在域名采用 HTTPS 的情况下就没法静默劫持了,会出现 HTTPS 证书错误提示,但用户可以强制继续访问,除非目标域名配置了 HSTS 安全机制。
重点强调下:如果现在有 Crypto/Web3 项目的域名没有强制 HTTPS(意思是还存在 HTTP 可以访问的情况),及 HTTPS 没有强制开启 HSTS(HTTP Strict Transport Security),那么对于第 2 点这种劫持场景是有很大风险的。大家擦亮眼睛,一定要警惕。
对于项目方来说,除了对自己的域名 HTTPS + HSTS 配置完备之外,可以常规做如下安全检查:
1. 检查域名相关 DNS 记录(A 及 NS)是否正常;
2. 检查域名在浏览器里的证书显示是否是自己配置的;
3. 检查域名管理的相关平台是否开启了双因素认证;
4. 检查 Web 服务请求日志及相关日志是否正常。
对于用户来说,防御要点好几条,我一一讲解下。
对于关键域名,坚决不以 HTTP 形式访问,
而应该始终 HTTPS 形式
如果 HTTPS 形式,浏览器有 HTTPS 证书报错,那么坚决不继续。这一点可以对抗非静默的 DNS 劫持攻击。
对于静默劫持的情况,不管是 DNS 劫持、还是项目方服务器被黑、内部作恶、项目前端代码被供应链攻击投毒等,其实站在用户角度来看,最终的体现都一样。浏览器侧不会有任何异常,直到有用户的资产被盗才可能发现。
那么这种情况下用户如何防御呢?用户除了保持每一步操作的警惕(尤其是钱包要签名要确认的那一刻)外。
我推荐一个在 Web2 时代就非常知名的浏览器安全扩展:@noscript (推特虽然很久很久没更新,不过惊喜发现官网更新了,扩展也更新了),是 @ma1 的作品。
NoScript 默认拦截植入的 JavaScript 文件。
但是 NoScript 有一点的上手习惯门槛,有时候可能会很烦,我的建议是对于重要的域名访问可以在安装了 NoScript 的浏览器(比如 Firefox)上进行,其他的尽管在另一个浏览器(如 Chrome)上进行。
隔离操作是一个很好的安全习惯。许多你可能觉得繁琐的,驾驭后、习惯后,那么一切都还好。
但是这并不能做到完美防御(从来就没有完美防御),比如这次 @CurveFinance 的攻击,攻击者更改了其 DNS A 记录,指向一个 IP_BAD,然后污染了前端页面的
植入了盗币有关的恶意代码。
如果我们之前 NoScript 信任了 Curve,那么这次也可能中招。
可能有人会说了要不要多安装一些浏览器安全扩展,我的看法之前已经提过(这里补充 NoScript,你用的前提最终一定来自你自己的独立研究,DYOR)
这个话题我暂时先介绍到这,目的是尽可能把其中要点进行安全科普。至于其他一些姿势,后面有机会我再展开。
如果你觉得对你有帮助或有什么要补充的,欢迎参与讨论。
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum