
交互流程
主要逻辑在 \beacon\BeaconDNS中的DNSServer.Response respond_nosync方法。该方法主要传入了两个参数:
首先判断了解析类型是否为2(NS,这部分可以参考RFC文档 https://datatracker.ietf.org/doc/html/rfc1035#section-3.2.2),此处为4.3版本中的特性,可以用来防止主动探测。
stage分发阶段
接下来进入重要的stage分发阶段:
stager_subhost变量是从profile配置文件中获取的”.dns-beacon.dns_stager_subhost”字段,该字段可以自主配置。如果符合,则进入stage分发流程。就像这样:

此处特征:固定的域名前缀,查询记录为txt,且返回字段有特征可循。
上线阶段
stage分发完毕以后(或者直接使用了stageless模式),来到了我们的上线阶段。
重点是此处beacon id的获取阶段。我们重点关注
CommonUtils.isHexNumber(var6)&&CommonUtils.isDNSBeacon(var6)

数据传输阶段
也就是我们刚看到的一通判断:
这些字段为传输阶段的固定前缀。就像这样:
可以用来做什么?
检测
可以依据这些固定的特征完善检测规则。本人做了一个简单的demo,欢迎测试 https://detectcs.xn--9tr.com/
抹去特征
当然,红方队员也可以根据这些特征去抹除,不过固定的isDNSBeacon算法,需要对底层进行修改才能保证上线正常,想要改掉对逆向水平要求较高。
搅屎
根据isDNSBeacon算法,我们可以写一个搅屎脚本。就像这样:
来源:freebuf.com 2021-07-06 21:46:17 by: yumusb



