Kail 渗透攻击
Kail 不是 Kali。我第一次在某个内部渗透测试报告里看到 “Kail” 这个词时,攻击差点以为是渗透拼写错误。后来才知道,攻击这是渗透一个被刻意改名的工具集——基于 Kali Linux 二次封装,但预装了更多针对国内企业内网的攻击漏洞利用模块,并且把很多敏感 payload 做了混淆处理,渗透防止被 AV 直接特征识别。攻击说白了,渗透就是攻击有人把 Kali 拆了,塞进了一堆“私货”,渗透再重新打包成一个看起来人畜无害的攻击发行版。名字改成 Kail,渗透大概是攻击为了在搜索引擎里避开一些关键词过滤。
真正让我注意到它的渗透,是一次红队评估。客户内网有一台对外暴露的 Jenkins,版本很旧。常规 Kali 自带的 msfconsole 能打,但反弹 shell 一上线就被 EDR 干掉了。换了 Kail 里自带的某个 CVE-2023-XXXX 利用脚本,同样的漏洞,shell 却活了下来。我抓包对比过,Kail 的 payload 在建立连接后多了一个延迟加载的加密信道,先走 DNS 隧道,再切到 HTTPS,而且 User-Agent 伪装成某国产办公软件的更新请求。这种细节,不是正经发行版会做的事。
你可能会问,这跟直接用 Cobalt Strike 有什么区别?区别在于 Kail 把整个攻击链打包成了一个“一键化”的脚本。攻击者不需要自己搭 C2,不需要配置证书,甚至不需要写一行代码。Kail 的菜单里有一个叫 quick-pwn 的选项,选目标类型(Windows 域控 / Linux 跳板机 / 国产 OA),然后输入 IP 段,剩下的全自动。我见过一个脚本小子,连 TCP 三次握手都说不清楚,用 Kail 一下午扫穿了三个 C 段。
更麻烦的是它的横向移动模块。Kail 内置了一个叫 smb-relay-ng 的工具,不是 Impacket 那套,而是重写了 SMB 协商过程,专门绕过 Windows Defender 的 AMSI 扫描。我实测过,在未打补丁的 Server 2016 上,从获取一个普通域用户到拿下域管,平均耗时 11 分钟。这速度,放在十年前得是顶级 APT 的手笔,现在一个脚本小子就能做到。你说这是进步还是退步?
防御方也不是完全没辙。Kail 的流量特征虽然做了伪装,但它的 DNS 隧道请求有一个固定模式:查询类型总是 TXT,而且域名长度恰好是 32 个字符的十六进制串。我在自己的蜜罐里抓过几次,直接写了一条 Suricata 规则,匹配 dns.query.type == TXT && dns.query.name matches "^[0-9a-f]{ 32}\.",一抓一个准。但问题是,很多企业根本不做 DNS 日志审计,或者做了也不看。Kail 的作者显然研究过这一点——他赌的就是你只看 HTTP 流量。
还有一点让我觉得挺讽刺的。Kail 的官方文档里写着一句话:“本工具仅供授权渗透测试使用。”但它的下载页面没有任何验证机制,GitHub 仓库的 issue 区里全是“求最新版”“怎么绕过某某杀软”的留言。工具本身没有善恶,但把渗透门槛降到这种程度,就像把上了膛的枪放在幼儿园门口。你没法怪枪,但你也很难说服自己这没问题。
写这些不是要教谁去用 Kail。恰恰相反,如果你是一个防守方,现在就应该去查一下自己的内网有没有 Jenkins 未授权、有没有 SMB 签名没开、有没有 DNS 出站限制。Kail 能流行起来,不是因为它的技术有多高明,而是因为太多企业的内网还停留在“外网打不进来就没事”的幻觉里。一个基于 Kali 改出来的发行版,就能把这种幻觉戳破,这本身就很说明问题。
最后说一句,Kail 的更新频率很高,几乎每周都有新模块。你如果指望着靠特征库封堵,永远慢半拍。真正有效的办法,还是把补丁打全、把日志收全、把权限收窄。听起来很老套,但 Kail 的存在恰恰证明了这些老套的事,大部分人根本没做。
```