DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术。虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP、UDP通信大量被安全设备拦截的大背景下,DNS、ICMP、HTTP/HTTPS等难以禁用的协议已经成为攻击者使用隧道的主流选择。DNS隐蔽隧道基于互联网不可或缺的DNS基础协议,天然具备穿透性强的优势,是恶意团伙穿透安全防护的一把利器。
Cobalt Strike 提供了现成利用模块,DNS Beacon payload 使用 DNS 请求来将 Beacon 返回给攻击者。这些 DNS 请求用于解析由攻击者的Cobalt Strike团队服务器作为权威 DNS 服务器的域名。DNS 响应告诉 Beacon 休眠或是连接到团队服务器来下载任务。DNS 响应也告诉 Beacon 如何从你的团队服务器下载任务。在 Cobalt Strike 4.0 及之后的版本中,DNS Beacon 是一个仅 DNS 的 payload。在这个 payload 中,没有 HTTP 通信模式。
Cobalt Strike开启团队服务器模式需要Java环境,推荐安装jdk8。上传Cobalt Strike程序包到服务器上,在程序目录下执行命令如下:
./teamserver 服务器公网IP 自定义认证密码
在本机上打开Cobalt Strike,输入服务器公网IP、端口、密码,用户名任意设置。
注意:公网服务器对应的CS端口号(例如:4488)需要在设置对外开放;如果服务器上安装了宝塔面板,需要在宝塔面板中再次设置放行CS端口号(例如:4488)
提前准备好一个域名,添加一条A记录指向CS服务器的公网IP,再添加几条NS记录指向A记录域名即可。
添加一个监听器,DNS Hosts填写NS记录,DNS Host随便填写一个其中的NS记录名称。
要测试你的 DNS 配置,打开一个终端并输入 nslookup beacon domain (domain 自行替换为 stager 域名)。如果你得到了一个 0.0.0.0 的 A 记录回复,这说明你的 DNS 配置是对的。如果你没有得到回复,那说明你的 DNS 配置不对、DNS Beacon 不会与你通信。
当启动一个 DNS Beacon 的时候,就相当于 Cobalt Strike 把团队服务器作为了一个 DNS 的解析服务器。当受害主机进行 DNS 请求的时候,就需要给53端口发包。如果团队服务器在内网中,就需要把公网IP的53端口和内网IP做一个端口映射,相当于把外网的53端口映射到内网的团队服务器上去。dns域名对应绑定的团队服务器公网ip的53端口需要放行,还有就是注意下53端口放行的是UDP而不是TCP。
配置好监听器后,生成一个后门文件。
生成好后门文件后,在受害机器上运行成功后,耐心等待一会儿,Cobalt Strike 就会出现一个电脑图标黑框图标,表示受害主机shell上线成功。
右键选中,点击进行beacon执行一条命令后,即可恢复成正常状态。
上线成功以后,可以查看受害主机的网络连接情况,并不会暴露攻击者真实团队服务器的相关信息。