什么是域名生成算法(DGA)?

域名生成算法是恶意软件用来生成大量域名的一种方法,目的是让它和背后的控制服务器碰头。软件每天算出成千上万个候选域名,攻击者只需注册其中几个。这样即使某些域名被封,僵尸网络也不会断线。

恶意软件通常需要连回攻击者的服务器接收指令。如果它把服务器地址写死在代码里,安全人员只要封掉这个地址,整批软件就失联了。域名生成算法(DGA)改变了这一点。

它的做法是:恶意软件内置一个算法,用日期等作为种子,算出一长串域名。攻击者的服务器端跑同样的算法,得到同一串域名;攻击者预先注册其中几个,被感染的设备挨个去试,碰到哪个能通就用哪个。这些域名绝大多数并没有被注册,设备查询它们时,得到的是域名不存在的响应(第 70 期)。算法按日变化,候选域名也随之刷新。2008 年前后出现的 Conficker 蠕虫是早期代表,其中一个版本每天生成五万个域名,分布在 116 个顶级域下,让封锁变得几乎不可能。

面对这种方法,防御方会反过来推演算法,提前把预测出的域名抢注下来、指向受控服务器,既切断通信,也能统计有多少设备被感染。这类域名还有统计上的特征:随机生成的字符串随机性高、难以拼读,和人工挑选的域名不一样。研究人员曾借此预判并接管过 Torpig 僵尸网络的通信。