mitm6 是一款渗透测试工具,它利用 Windows 的默认配置来接管默认 DNS 服务器。其原理是通过回复 DHCPv6 消息,为受害者提供一个链路本地 IPv6 地址,并将攻击者的主机设置为默认 DNS 服务器。作为 DNS 服务器,mitm6 会有选择性地回复攻击者指定的 DNS 查询,从而将受害者流量重定向到攻击者机器而非合法服务器。关于此攻击的完整解释,请参阅我们的 mitm6 博客文章。Mitm6 旨在与 impacket 中的 ntlmrelayx 配合使用,以实现 WPAD 欺骗和凭据中继。
mitm6 兼容 Python 2.7 和 3.x。你可以通过 pip install -r requirements.txt 为你的版本安装依赖。在这两种情况下,mitm6 都使用以下软件包:
对于 Python 2.7,它使用 ipaddress 反向移植模块。
你可以通过 pip install mitm6 从 PyPI 安装最新发布版本,或者在克隆此 Git 仓库后通过 python setup.py install 从源码安装最新版本。
安装后,mitm6 将以名为 mitm6 的命令行程序形式提供。由于它使用 Scapy 进行原始数据包捕获,因此应以 root 身份运行。mitm6 默认会自动检测你的网络设置,并使用主接口进行欺骗。你可能需要指定的唯一选项是你要欺骗的 AD domain。要进行高级调优,可使用以下选项:
usage: mitm6 [-h] [-i INTERFACE] [-l LOCALDOMAIN] [-4 ADDRESS] [-6 ADDRESS] [-m ADDRESS] [-a] [-r TARGET] [-v] [--debug]
[-d DOMAIN] [-b DOMAIN] [-hw DOMAIN] [-hb DOMAIN] [--ignore-nofqdn]
mitm6 - 通过 IPv6 攻陷 IPv4
如需帮助或报告问题,请访问 https://github.com/dirkjanm/mitm6
optional arguments:
-h, --help 显示此帮助信息并退出
-i INTERFACE, --interface INTERFACE
要使用的接口(默认:自动检测)
-l LOCALDOMAIN, --localdomain LOCALDOMAIN
用作 DNS 搜索域的域名(默认:使用第一个 DNS 域)
-4 ADDRESS, --ipv4 ADDRESS
发送数据包的 IPv4 地址(默认:自动检测)
-6 ADDRESS, --ipv6 ADDRESS
发送数据包的 IPv6 链路本地地址(默认:自动检测)
-m ADDRESS, --mac ADDRESS
自定义 MAC 地址——可能会破坏功能(默认:所选接口的 MAC)
-a, --no-ra 不广播路由器通告(适用于检测恶意路由器通告的网络)
-r TARGET, --relay TARGET
身份验证中继目标,将用作伪造的 DNS 服务器主机名以触发 Kerberos 认证
-v, --verbose 显示详细信息
--debug 显示调试信息
过滤选项:
-d DOMAIN, --domain DOMAIN
要过滤 DNS 查询的域名(白名单机制,可指定多个)
-b DOMAIN, --blocklist DOMAIN, --blacklist DOMAIN
要过滤 DNS 查询的域名(黑名单机制,可指定多个)
-hw DOMAIN, -ha DOMAIN, --host-allowlist DOMAIN, --host-whitelist DOMAIN
要过滤 DHCPv6 查询的主机名(FQDN)(白名单机制,可指定多个)
-hb DOMAIN, --host-blocklist DOMAIN, --host-blacklist DOMAIN
要过滤 DHCPv6 查询的主机名(FQDN)(黑名单机制,可指定多个)
--ignore-nofqdn 忽略不包含完全限定域名(FQDN)选项的 DHCPv6 查询。
你可以手动覆盖大多数自动检测选项(不过覆盖 MAC 地址会破坏功能)。如果网络上存在阻止或检测恶意路由器通告消息的硬件,你可以添加 --no-ra 标志来不广播这些消息。路由器通告并非 mitm6 工作所必需,因为其主要依赖 DHCPv6 消息。
提供了几个过滤选项,用于选择要攻击和欺骗的主机。首先是 --host-allowlist 和 --host-blocklist 选项(简写为 -hw 和 -hb),它们接受(部分)域作为参数。传入的 DHCPv6 请求将根据此列表进行过滤。检查的属性是 DHCPv6 FQDN 选项,客户端在其中提供其主机名。
同样的规则适用于 DNS 请求,为此提供了 --domain 选项(或 -d),你可以指定要欺骗的一个或多个域。也可以通过 --blocklist/-b 阻止特定域。这两个参数可以多次指定,以包含/排除多个域(例如 -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local)。
对于主机和 DNS 过滤,都执行简单的字符串匹配。因此,如果你选择回复 wpad,它也会回复对 wpad.corpdomain.com 的查询。如果你需要更具体的过滤,请同时使用白名单和黑名单选项,因为黑名单优先于白名单。
默认情况下,指定的第一个域将用作 DNS 搜索域,如果你想自己明确指定此域,请使用 --localdomain 选项。
mitm6 被设计为渗透测试工具,因此应尽可能减少对网络的影响。这也是 mitm6 目前未实现完整机器中间人攻击(例如 SLAAC 攻击)的主要原因。 为了进一步减少影响,分配的 IP 地址具有较短的生存时间(TTL)值。当 mitm6 停止时,租约将在 5 分钟内过期,这将从受害者配置中移除 DNS 服务器。 为防止 DNS 回复被缓存,所有回复都使用 100 秒的 TTL 发送,从而确保在工具退出后几分钟内缓存被清除。
mitm6 被设计为与 ntlmrelayx 一起使用。你应该同时运行这两个工具,在这种场景下,mitm6 将欺骗 DNS,导致受害者连接到 ntlmrelayx 以进行 HTTP 和 SMB 连接。为此,你必须确保使用 -6 选项运行 ntlmrelayx,这将使其同时监听 IPv4 和 IPv6。要获取 WPAD 的凭据,请使用 -wh HOSTNAME 指定要欺骗的 WPAD 主机名(本地域中任何不存在的主机名都可以,因为 mitm6 是 DNS 服务器)。可选地,你还可以使用 -wa N 参数,该参数接受一个尝试次数,用于在你怀疑受害者未应用 MS16-077 补丁时提示对 WPAD 文件本身进行身份验证。
你也可以使用 mitm6 来中继 Kerberos 身份验证,尤其是通过 DNS。为此,请使用 --relay 参数并指定要中继的目标主机。该主机将被模拟,mitm6 将试图说服你的受害者使用 Kerberos 身份验证向 krbrelayx 发送经过身份验证的动态更新。有关此攻击的更多信息,请访问以下博客:https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
Fox-IT 安全研究团队已发布 Snort 和 Suricata 规则,用于检测恶意 DHCPv6 流量和通过 IPv6 的 WPAD 回复。这些规则可在以下地址获取:https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f