除了各种 DNSLog 之外还有得选吗?

本文介绍了Yakit的新版本中添加的两种反连检测方法:TCP/ICMPSizeLog通过观察ICMP包大小判断TCP/ICMP连接,以及TCPRandomPortLogger利用TCP随机端口检测。这些方法比传统DNSLog更快,适用于网络隔离和漏洞检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景与前情提要

在 “抽象的黑盒漏洞扫描与风险技术评估方法论” 中,我们提出了反连的各种姿势,简单总结一下:

  1. 通过实现通信协议来进行反连检测:DNSLog / RMI / LDAP / HTTP 等
  2. TCP 随机端口反连检测
  3. ICMP 反连:以特定长度 ICMP 包作为依据实现反连检测

我们在 Yakit v1.0.14-sp6 版本中实现了上述描述的所有细节的 GUI 版本

现状

绝大多数的现有方案(例如:http://dnslog.cn / http://ceye.io / xray等)使用 DNSLog / HTTP / RMI 来检测特定协议携带 token 的域名 / URI。当然这些确实是久经验证且非常有效的方式。

这些方式通常对应了我们说的 “第一种方案”:通过实现通信协议来进行反连检测。

然而,通过其他“信道”的观测,我们可以用其他指标来确定 “是否还有其他办法” 检测反连,就是我们今天要介绍的比较少见且有效的 TCP / ICMP Size Log。

我们做了什么?

ICMP Size Logger:

原理解释

众所周知,ICMP 最简单的触发应该是 ping 命令:如果我们在受害主机上 ping 我们自己控制的公网服务器,那么如果 Ping 通了,我们就马上会尝试测试 TCP 反连之类的各种操作。

那这中间可能会有其他的问题:

  1. 如果 ICMP 通,但是 TCP 禁止出网外连怎么办?能想办法缩短检测路径吗?
  2. 如果 ICMP 通了,但是没有回显,不知道到底通了没有,怎么办?

经过思考后,我们发现如果我们自己控制的公网服务器能告诉我们 “有人 Ping 了我” 就再好不过。

基于这种朴素的想法,我们觉得思路完全 Ok,所以只要知道 “谁” ping 了我。这个问题就已经解决了。于是我们使用 ping 命令的 ping -s [len] yakbridge 可以 ping 到我们的目标主机。

为此,我们在 Yakit 中的 “反连管理” 中新增了一个 “ICMP Size Log” 的新页面,在这个页面中,实现了我们上面描述的操作内容:

  1. 我们生成一个可用的 ICMP 长度
  2. 使用这个长度渲染 ping 命令,可供用户使用
  3. 在用户 ping 命令执行后,可以自动观测到 “谁 ping 了我”。

ICMP Size Log 实机演示如下

00:15

TCP Random Port Logger:

原理解释

实际上对于除了 DNS 之外的大多数场景来说,绝大多数反连的 “检测” 都是以 TCP 作为基础协议的,我们可以通过对基于 TCP 协议进行实现从而实现多种应用写的复杂兼容:

  1. 常见的 HTTP 反连检测,我们一般使用 Path 作为 Token 的标注位置,来区分 “到底是哪个漏洞触发”:http://example.com/[token]
  2. 常见的 RMI 类似 jndi:rmi://http://example.com/[token]
  3. ...

但是实际上,上面的各种用例都是需要用户具体监听某个端口来实现的,在于 @奶权 师傅的交流中,我们实现了一种更 “通用的” 检测手段,并成功把它进行了工程化实现:

为此,我们同样也实现了一个 GUI 版本,大家可以在 Yakit - “反连管理” 中直接使用

TCP Port Log 实机演示如下

00:14

关于公网服务器:

配置公共 Yak Bridge

目前 Yakit 内置了一个公网服务器供大家在 Yakit 中使用上述功能。当然,这个服务器的搭建十分简单:

通过一个 “docker-compose” 即可实现该服务器的搭建。

HTTPversion: "2"services: bridge: image: v1ll4n/yak-bridge:latest network_mode: host restart: always command: yak bridge --dnslog --domain [your-root-domain] --log-level error

搭建之后,可以直接连接默认的 64333 端口 (grpc)。

如果用户要在 Yakit 中使用自己的服务器连接:使用 YAK_DNSLOG_BRIDGE_ADDR=[your-bridge]:[port] yak grpc 然后使用 Yakit 连接自己的 Yak 引擎即可

配置加密的私有 Yak Bridge?

目前引擎虽然支持配置私有加密 Yak Bridge,但是这个功能应该在 Yakit 上进行 GUI 输入并本地记住用户的配置选项。

不过当前可以通过右上角 “配置” 选择 “全局配置” 来配置 “公网反连服务器(Yak Bridge)”。

需要注意的是,这个 Yak Bridge 目前并不会在 ICMP Log / TCP Port / DNSLog 中生效,这个配置目前只针对 yaklang 在自动进行漏洞扫描的时候生效。

在进行一些配置转换和调整之后,这个配置将可以在 GUI 服务中生效,同时也会把这部分配置更简单明确的放出。

小总结:

  1. 这两种方式并不一定完全代替 DNSLog,例如 FastJSON 检测的场景。
  2. 这种方式某种角度上来说,比 DNSLog 更快:因为 DNSLog 需要额外进行一次 dns 查询(查询 NS 记录),然后再去连接 NS 记录对应的主机发送 DNS 请求(UDP/TCP 53)
  3. TCP / ICMP Log 可以迅速判断受害主机到攻击机 TCP / ICMP 是否通畅,这是非常好的一个技术补充。
  4. 不止用在 “漏洞检测” 方面,可以用这个方式来判断用户的 “网络隔离” 配置是否生效。

Yak官方资源

Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值