98bb16cc99
- capture-host-evidence: Rust tool (26 tests) collects lspci, iomem, cpuinfo, lsusb, firmware, bridge/BAR topology, baselines verification, iGPU instructions, MADT analysis. Collectors have root-file fallback for capture-root.sh integration. - capture-root.sh: sudo helper for acpidump, dmidecode, dmesg, nvme id-ctrl, USB debug, full lspci. Raw ACPI binaries → ~/redbear-evidence-raw/ (outside repo). - madt.rs: full MADT parser (14 tests) with real-parse integration when raw-apic.dat is available. Synthetic report when root not yet available. - redact.rs: auto-redacts serial numbers, MACs, UUIDs. Secret scan zero hits on all 8 committed evidence files. - baselines.toml: F2 immutable diff baselines with operator-specified SHAs. - Evidence: AMDIF031 CONFIRMED in iomem (address zeroed non-root), Raphael iGPU (1002:164e) NOT ENUMERATED (BIOS-disabled, NVIDIA RTX 4080 dGPU present), `/sys/class/graphics/fb0` reports nvidia-drmdrmfb. Plan: .omo/plans/ryzen-7000-x670e-compat.md todo 3
126 lines
5.5 KiB
Bash
Executable File
126 lines
5.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# capture-root.sh — X670E root-evidence capture helper
|
|
#
|
|
# Run with: sudo ./local/scripts/capture-host-evidence/capture-root.sh
|
|
#
|
|
# Captures artifacts that need root (acpidump, dmidecode, dmesg, iomem, nvme, usb debug).
|
|
# Raw acpidump binaries go to ~/redbear-evidence-raw/ (OUTSIDE the repo).
|
|
# Redacted/decompiled excerpts + sha256 manifest go to the evidence dir.
|
|
# After running, re-run the Rust tool: cargo run --manifest-path local/scripts/capture-host-evidence/Cargo.toml
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
EVIDENCE_DIR="$REPO_ROOT/local/docs/evidence/ryzen-x670e"
|
|
RAW_DIR="$HOME/redbear-evidence-raw"
|
|
TIMESTAMP="$(date +%Y-%m-%dT%H:%M:%S%z)"
|
|
|
|
# Guard: must be root
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "ERROR: This script must be run as root (sudo)."
|
|
echo " sudo $0"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== X670E Root Evidence Capture ==="
|
|
echo "Timestamp: $TIMESTAMP"
|
|
echo "Evidence dir: $EVIDENCE_DIR"
|
|
echo "Raw dump dir: $RAW_DIR"
|
|
echo ""
|
|
|
|
mkdir -p "$EVIDENCE_DIR" "$RAW_DIR"
|
|
|
|
# ─── ACPI tables ────────────────────────────────────────────────
|
|
echo "[1/7] acpidump -b (all tables → $RAW_DIR)"
|
|
cd "$RAW_DIR"
|
|
acpidump -b 2>&1 || true
|
|
ls -la *.dat 2>/dev/null | head -20
|
|
echo ""
|
|
|
|
# Compute SHA-256 of each raw table
|
|
echo "# ACPI Raw Table Hashes" > "$RAW_DIR/RAW-MANIFEST.md"
|
|
echo "# Captured: $TIMESTAMP" >> "$RAW_DIR/RAW-MANIFEST.md"
|
|
echo "" >> "$RAW_DIR/RAW-MANIFEST.md"
|
|
for f in *.dat; do
|
|
if [ -f "$f" ]; then
|
|
sha256=$(sha256sum "$f" | awk '{print $1}')
|
|
echo "- $f: sha256:$sha256" >> "$RAW_DIR/RAW-MANIFEST.md"
|
|
fi
|
|
done
|
|
|
|
# Copy the APIC table for MADT parsing by the Rust tool
|
|
if [ -f "apic.dat" ]; then
|
|
cp apic.dat "$EVIDENCE_DIR/raw-apic.dat"
|
|
echo " APIC table copied to evidence dir for MADT parsing: $EVIDENCE_DIR/raw-apic.dat"
|
|
fi
|
|
|
|
# Decompile key tables with iasl for redacted excerpts
|
|
for tbl in DSDT SSDT1 SSDT2 SSDT3 SSDT4; do
|
|
if [ -f "${tbl}.dat" ]; then
|
|
iasl -d "${tbl}.dat" 2>/dev/null && \
|
|
cp "${tbl}.dsl" "$EVIDENCE_DIR/${tbl}.dsl" && \
|
|
echo " Decompiled ${tbl}.dat → $EVIDENCE_DIR/${tbl}.dsl" || \
|
|
echo " iasl failed for ${tbl}.dat (may be fine)"
|
|
fi
|
|
done
|
|
|
|
# ─── dmidecode (redacted in repo) ────────────────────────────────
|
|
echo "[2/7] dmidecode"
|
|
dmidecode > "$EVIDENCE_DIR/dmidecode-raw.txt"
|
|
echo " Saved raw dmidecode to $EVIDENCE_DIR/dmidecode-raw.txt"
|
|
echo " (Re-run capture-host-evidence tool to redact serials/UUIDs)"
|
|
|
|
# ─── dmesg (amdgpu/drm lines) ────────────────────────────────────
|
|
echo "[3/7] dmesg (amdgpu/drm/fb lines)"
|
|
dmesg | grep -iE 'amdgpu|drm|fb|efifb|simplefb|nvidia' > "$EVIDENCE_DIR/dmesg-display.txt" || echo "# No amdgpu/drm lines found" > "$EVIDENCE_DIR/dmesg-display.txt"
|
|
echo " Saved filtered dmesg to $EVIDENCE_DIR/dmesg-display.txt"
|
|
|
|
# ─── /proc/iomem (full) ──────────────────────────────────────────
|
|
echo "[4/7] /proc/iomem (full, root)"
|
|
cat /proc/iomem > "$EVIDENCE_DIR/iomem.txt"
|
|
echo " Saved full /proc/iomem to $EVIDENCE_DIR/iomem.txt"
|
|
# Report AMDIF031 region
|
|
grep -i 'AMDIF031\|0xfb300000' "$EVIDENCE_DIR/iomem.txt" | head -10 || echo " AMDIF031 NOT FOUND in iomem"
|
|
|
|
# ─── nvme id-ctrl (HMB fields) ──────────────────────────────────
|
|
echo "[5/7] nvme id-ctrl (HMB fields)"
|
|
for dev in /dev/nvme0 /dev/nvme1; do
|
|
if [ -e "$dev" ]; then
|
|
echo "# $dev" >> "$EVIDENCE_DIR/nvme-id-ctrl.txt"
|
|
nvme id-ctrl "$dev" | grep -iE 'hmpre|hmmin|hmminds|hmmaxd|hmb|host memory' >> "$EVIDENCE_DIR/nvme-id-ctrl.txt" 2>&1 || \
|
|
echo "# $dev: nvme id-ctrl failed or no HMB fields" >> "$EVIDENCE_DIR/nvme-id-ctrl.txt"
|
|
else
|
|
echo "# $dev: device not found" >> "$EVIDENCE_DIR/nvme-id-ctrl.txt"
|
|
fi
|
|
done
|
|
echo " Saved HMB-relevant fields to $EVIDENCE_DIR/nvme-id-ctrl.txt"
|
|
|
|
# ─── USB debug devices ──────────────────────────────────────────
|
|
echo "[6/7] /sys/kernel/debug/usb/devices"
|
|
if [ -f "/sys/kernel/debug/usb/devices" ]; then
|
|
cat /sys/kernel/debug/usb/devices > "$EVIDENCE_DIR/usb-debug-devices.txt"
|
|
echo " Saved to $EVIDENCE_DIR/usb-debug-devices.txt"
|
|
else
|
|
mount -t debugfs none /sys/kernel/debug 2>/dev/null || true
|
|
cat /sys/kernel/debug/usb/devices > "$EVIDENCE_DIR/usb-debug-devices.txt" || \
|
|
echo "# debugfs not available" > "$EVIDENCE_DIR/usb-debug-devices.txt"
|
|
echo " (mounted debugfs then captured)"
|
|
fi
|
|
|
|
# ─── lspci full config space (root) ──────────────────────────────
|
|
echo "[7/7] lspci -nnvvv -xxxx (full extended config space)"
|
|
lspci -nnvvv -xxxx > "$EVIDENCE_DIR/lspci-xxxx.txt"
|
|
echo " Saved extended config space to $EVIDENCE_DIR/lspci-xxxx.txt"
|
|
|
|
echo ""
|
|
echo "=== Root capture complete ==="
|
|
echo "Raw ACPI tables: $RAW_DIR"
|
|
echo "Manifest: $RAW_DIR/RAW-MANIFEST.md"
|
|
echo "Evidence dir: $EVIDENCE_DIR"
|
|
echo ""
|
|
echo "NEXT: Re-run the Rust tool to redact + analyze + secret-scan:"
|
|
echo " cargo run --manifest-path local/scripts/capture-host-evidence/Cargo.toml"
|
|
echo ""
|
|
echo "Then commit evidence + tool. Do NOT commit raw acpidump binaries."
|