chadillac/mdns_recon

GitHub: chadillac/mdns_recon

基于 Scapy 的 mDNS 侦察工具,用于检测互联网上错误配置并暴露敏感信息的多播 DNS 服务。

Stars: 88 | Forks: 26

# 快速介绍 部署在互联网上各种系统中的多播 DNS 和 DNS 服务发现守护程序存在配置错误,并且会回复 针对其单播地址的查询,包括来自其 WAN 接口的请求。 攻击者可以利用这些守护程序进行敏感信息泄露,并且可能 在 DDoS 攻击活动中将其用于反射,在某些情况下甚至用于放大。 该漏洞是与 CERT (http://www.kb.cert.org/vuls/id/550620) 协调后公开的 ## mDNS ## 谁,什么,在哪里? mDNS 在某种意义上非常像 SSDP(这也是我最初决定测试它的原因),即它 允许本地网络上的设备轻松发现彼此,交换关于 可用服务的信息,并减少或消除配置需求。因为这些是当今 mDNS 的主要 用途,所以它可以在广泛的消费设备中找到,例如电话、打印机、NAS 系统、 媒体设备等。所有主要操作系统(Windows、OS X 和 Linux)也都有可用的守护程序。 mDNS 的著名用途包括 ZeroConf 网络、Apple 的 Bonjour 和 AirDrop 以及 ChromeCast,在 我的测试中,这些似乎都不存在漏洞(除了在野外发现的一台 MacBook Air)。并非所有 实现在互联网上都易受攻击,但一些存在漏洞的实现在嵌入式设备上,这些设备不太可能 收到来自其供应商或用户的更新。 ## 外面有什么? 作为对这些易受攻击守护程序影响初步研究的一部分,进行了广泛扫描,识别出 超过 100,000 台在互联网上回复 mDNS 查询的设备。这些设备包括几台 NAS 盒子和打印机 以及 Windows 和 Linux 机器。其中一些机器位于较大的网络中,例如公司和 大学,并且似乎安全性很差,甚至根本没有安全措施。一些供应商已经声明他们不会 修复目前在野外易受攻击的旧设备上的此问题。 ## 你如何查询这些机器? 当我最初开始研究时,我的第一个测试是使用 `dig` 来确认是否可以触发回复。 ``` $ dig +short @[target_ip] -p 5353 -t any _services._dns-sd._udp.local _workstation._tcp.local. _http._tcp.local. _afpovertcp._tcp.local. _device-info._tcp.local. _dacp._tcp.local. _daap._tcp.local. ``` 一旦我确认在野外存在一些机器,我就编写了一个快速而简陋的 Scapy 脚本,我可以用它来 轻松地自动化我未来的测试,并在实验室环境中测试可行的反射。我已经删除了 反射部分(原因应该很明显),并正在发布侦察部分,我将其 命名为 `mdns_recon`,我们稍后将在下面介绍。 ## 信息泄露 mDNS 查询的回复差异很大,在某些情况下,它们几乎不会泄露任何可用信息, 在其他情况下,它们可能会泄露敏感细节,例如网络信息、管理信息和 设备信息,如制造商、型号、序列号等。以下是在 野外发现的一些泄露上述某些示例的设备示例。为了便于阅读和节省空间,我清理了回复内容。 ### 主机名和 MAC ``` inventory [00:18:51:2a:a2:0d] administrator-X8DT6 [00:25:90:38:6c:c4] ispadmin [00:0c:29:5d:08:2f] vpsadmin [00:16:3e:d1:61:50] ``` ### 网络详情 ``` 0 0 548 KenNas.local. fe80::211:32ff:fe13:7de7 192.168.1.110 ``` ### NAS 泄露详情,Password=false ``` DiskStation(WebDAV) vendor=Synology model=DS114 serial=[REMOVED] version_major=5 version_minor=1 version_build=5021 admin_port=5000 secure_admin_port=5001 mac_address=00:11:32:2A:97:9D model=Xserve txtvers=1 Database ID= Machine ID= Machine Name=DiskStation mtd-version=0.2.4.1 iTSh Version=131073 Version=196610 Password=false ``` ### 打印机 ``` Phaser 8560DN (00:00:aa:d4:b8:2b) test-178307 adminurl=http://test-178307.local. qtotal=1 priority=80 txtvers=1 product=(Phaser 8560DN) ty=Xerox Phaser 8560DN Bind=F Copies=T Sort=F Binary=T Transparent=T TBCP=F Staple=F Color=T Duplex=T Collate=T PaperCustom=T ``` ## DDoS 反射和放大 由于 mDNS 使用 UDP,所有回复的主机都可能被恶意 行为者在 DDoS 攻击活动中用作反射器。由于回复 往往大于初始查询,因此也存在放大的潜力。攻击者可以预期至少 1:1 的反射, 在我的一些测试中,某些服务的放大率高达 975%。真实的放大率很 难预测,因为回复因服务器配置和 查询数据包本身的大小而差异很大,后者根据查询的服务而变化,但一个安全的估计是 平均放大率约为 130%+。 # 缓解措施 ## 作为反射器 阻止发往端口 5353 的 UDP 流量。 ## 作为目标 阻止源端口为 5353 的 UDP 流量。 # mdns_recon.py `mdns_recon.py` 是一个快速而简陋的 Scapy 脚本,在我的测试中用于识别 在野外会回复指向它们的单播查询的 mDNS 客户端。因为它的目标是快速测试 并记录这些回复及其各自的长度以用于研究目的,所以这实际上就是它所做的一切。 如果您想添加功能,或者您发现了一个错误等等,请 fork 代码,如果有 必要,我们将很乐意接受 Pull Request。 如果您想要能取悦您人类大脑的漂亮回复,我建议您使用 `dig`,但如果您 正在进行大规模自动化扫描,`mdns_recon` 可以与多线程中间层一起使用。 ## 扫描目标 ``` # ./mdns_recon.py [target] ``` ### 示例输出 ``` TARGET_IP - START [_services._dns-sd._udp.local]=== E ¬´√¨√ √®¬ ¬®¬ √©5¬ Kn¬ _services_dns-sd_udplocal _pdl-datastream_tcp√ _printer√ _ipp√ _http√ [_services._dns-sd._udp.local]=== [_pdl-datastream._tcp.local.]=== E ¬ø√¨√ √≠√ ¬®¬ √©5¬´√ _pdl-datastream_tcplocal RICOH IPSiO SP C810√ RNPBC3B0A√ txtvers=1qtotal=1pdl=application/postscript!product=(RICOH IPSiO SP C810 PS3)ty=RICOH IPSiO SP C810note=PaperMax=legal-A4priority=10 adminurl=http://RNPBC3B0A.local/Bind=FColor=T Collate=FCopies=TDuplex=F PaperCustom=FSort=FStaple=FPunch=FBinary=T Transparent=FTBCP=T√ [_pdl-datastream._tcp.local.]=== [_printer._tcp.local.]=== E √ √¨√ √≠√ ¬®¬ √©5¬¥¬ ¬ø¬ _printer_tcplocal RICOH IPSiO SP C810√ RNPBC3B0A√ txtvers=1qtotal=1rp=filetype_RPSpdl=application/postscript!product=(RICOH IPSiO SP C810 PS3)ty=RICOH IPSiO SP C810note=PaperMax=legal-A4priority=20 adminurl=http://RNPBC3B0A.local/Bind=FColor=T Collate=FCopies=TDuplex=F PaperCustom=FSort=FStaple=FPunch=FBinary=T Transparent=FTBCP=T√ [_printer._tcp.local.]=== [_ipp._tcp.local.]=== E ¬ø√¨√ √≠√ ¬®¬ √©5¬´¬ √§¬ _ipp_tcplocal RICOH IPSiO SP C810√ RNPBC3B0A√ txtvers=1qtotal=1 rp=printerpdl=application/postscript!product=(RICOH IPSiO SP C810 PS3)ty=RICOH IPSiO SP C810note=PaperMax=legal-A4priority=30 adminurl=http://RNPBC3B0A.local/Bind=FColor=T Collate=FCopies=TDuplex=F PaperCustom=FSort=FStaple=FPunch=FBinary=T Transparent=FTBCP=T√ [_ipp._tcp.local.]=== [_http._tcp.local.]=== None [_http._tcp.local.]=== {'_printer._tcp.local.': 456, '_services._dns-sd._udp.local': 171, '_pdl-datastream._tcp.local.': 447, '_ipp._tcp.local.': 447} TARGET_IP - END ``` ### 扫描范围 ``` # for oct in {1..254}; do echo "192.32.68.$oct"; done | xargs -I{} ./mdns_recon.py {} 192.32.68.4 - START [_services._dns-sd._udp.local]=== E fN¬ √±¬ r D√ ¬®¬ EJ1P√ ¬®¬ r D5√©6:√∏ _services_dns-sd_udplocal [_services._dns-sd._udp.local]=== {'_services._dns-sd._udp.local': 102} 192.32.68.4 - END 192.32.68.6 - START [_services._dns-sd._udp.local]=== E fH¬®3√ zr D√ ¬®¬ EJ1N√ ¬®¬ r D5√©6:√∂ _services_dns-sd_udplocal [_services._dns-sd._udp.local]=== {'_services._dns-sd._udp.local': 102} 192.32.68.6 - END 192.32.68.8 - START [_services._dns-sd._udp.local]=== E fe3¬™r D√ ¬®¬ EJ1L√ ¬®¬ r D5√©6:√¥ _services_dns-sd_udplocal [_services._dns-sd._udp.local]=== {'_services._dns-sd._udp.local': 102} 192.32.68.8 - END 192.32.68.10 - START [_services._dns-sd._udp.local]=== E fa/3¬≠√Ør D ¬®¬ EJ1J√ ¬®¬ r D 5√©6:√≤ _services_dns-sd_udplocal [_services._dns-sd._udp.local]=== {'_services._dns-sd._udp.local': 102} 192.32.68.10 - END ``` ### 扫描范围到文件 ``` # for oct in {1..254}; do echo "192.32.68.$oct"; done | xargs -I{} ./mdns_recon.py {} >> mdns_replies.txt ```
标签:Bonjour, CERT, DDoS放大攻击, DNS服务发现, mDNS, NAS安全, Unicast, 信息泄露, 反射攻击, 实时处理, 密码管理, 嵌入式设备安全, 广域网接口, 打印机安全, 插件系统, 物联网安全, 虚拟机镜像, 逆向工具, 错误配置