DF-5666 / introspect.sh
#!/bin/sh # DF-5666 guest-live introspection for sys/platform/pc64/x86_64/bios.c # # Questions answered, with the expected decisive output: # (1) What does pc64 bios.c provide? -> bios_sigsearch is a live kernel text symbol # (2) Who reaches it, and when? -> ipmi(4) only; NOT in X86_64_GENERIC; module-only, # not loaded on this guest => function never executes # in the default configuration # (3) Buffer math / scan window reality -> the scanned physical window 0xe0000-0xfffff is # mapped, firmware-controlled, and (on SeaBIOS) # contains a valid 16-byte-aligned "_SM_" anchor at # 0xf59c0 — exactly what the sole in-tree caller # (constant args 0xf0000,"_SM_",4,0x10,0) would match # (4) Attacker model -> data in the window is firmware-written ROM/reserved # area; no user-controlled input reaches any argument # # Host-side usage: # dfbsd-qemu/vm.sh run_root "$(cat introspect.sh)" # (this exact invocation produced introspection.log) echo '== (0) guest ==' uname -a echo '== (1) bios_sigsearch is a live symbol in /boot/kernel/kernel ==' nm /boot/kernel/kernel | grep bios_sigsearch echo '(no bios16/bios32 symbols expected:)' nm /boot/kernel/kernel | grep -E 'bios16|bios32' || echo ' none - pc64 bios.c provides only bios_sigsearch (stub comment at bios.c:30-34)' echo '== (2) reachability: ipmi(4) is module-only and not loaded ==' kldstat -v 2>/dev/null | grep -i ipmi && echo ' ipmi LOADED' || echo ' ipmi not loaded (kldstat -v)' ls -la /boot/kernel/ipmi.ko 2>/dev/null || echo ' no ipmi.ko' grep -c ipmi /usr/src/sys/config/X86_64_GENERIC 2>/dev/null && echo ' ipmi IS in GENERIC config' || echo ' ipmi NOT compiled into X86_64_GENERIC => bios_sigsearch does not run at boot' ls /dev/ipmi* 2>/dev/null || echo ' no /dev/ipmi* node' echo '== (3) the scanned window 0xe0000-0xfffff (firmware data, mapped) ==' echo '-- first 16 bytes at 0xf0000 (dd bs=16 skip=61440 = 0xf0000/16) --' dd if=/dev/mem bs=16 skip=61440 count=1 2>/dev/null | hexdump -C echo '-- "_SM_" / "_DMI_" / SeaBIOS anchors inside 0xf0000-0x100000 --' dd if=/dev/mem bs=64k skip=14 count=2 2>/dev/null | hexdump -C | grep -E '_SM_|_DMI_|SeaBIOS' | head -8 echo '== (4) no SMBIOS/ipmi consumers active in this boot ==' dmesg | grep -iE 'smbios|ipmi' | head -5 || true sysctl -a 2>/dev/null | grep -i smbios || echo ' no smbios sysctl on pc64 (sole consumer is ipmi_smbios.c)' echo '== done ==' |