DF-0650 / run.sh
#!/bin/sh # Run script for DF-0650 PoC. # Must be run as root (raw socket requires SYSCAP_NONET_RAW). # Captures emitted packets on vtnet0 and shows the leaked ip_dst values. set -e cd "$(dirname "$0")" if [ "$(id -u)" != "0" ]; then echo "DF-0650: must be run as root (raw socket required)" >&2 exit 1 fi # Configure ipfw to log all emitted packets by destination bucket. ipfw -q flush 2>/dev/null || true ipfw -q add 1000 allow ip from any to any ipfw -q add 100 count log ip from 10.0.2.0/24 to 10.0.2.0/24 # sa_len=7: 10.0.2.255 ipfw -q add 200 count log ip from 10.0.2.0/24 to 10.0.255.255/16 # sa_len=6: 10.0.255.255 ipfw -q add 300 count log ip from 10.0.2.0/24 to 10.255.255.255/8 # sa_len=5: 10.255.255.255 ipfw -q add 400 count log ip from 10.0.2.0/24 to 255.255.255.255/32 # sa_len=2..4: 255.255.255.255 ipfw -q add 500 count log ip from 10.0.2.0/24 to any mkdir -p /tmp/df0650 tcpdump -i vtnet0 -nn -w /tmp/df0650/vt.pcap 'ip and not port 22' 2>/tmp/df0650/td.err & TD=$! sleep 1 ./df0650_poc 8 2>&1 sleep 3 kill $TD 2>/dev/null wait $TD 2>/dev/null echo "=== ipfw counts (each shows leaked-dst packets matched) ===" ipfw -a list echo "=== tcpdump on vtnet0 (sorted) ===" tcpdump -nn -r /tmp/df0650/vt.pcap 2>/dev/null | sort | uniq -c | sort -rn | head -20 echo "RUN_EXIT=$?" |