
Bazzite más una capa de atestación de arranque TPM. Trabajo en progreso: compilaciones sin verificar, mecanismo UKI sin resolver. Especificación: github.com/plunder707/attested-gaming
Harness experimental de imagen y evidencia de arranque atestiguado para Linux, con el fin de probar qué podría verificar un proveedor de anti-trampas en lugar de depender de una lista de permisos basada en el nombre de la distribución.
El mecanismo, el modelo de amenaza y la especificación para el proveedor viven en plunder707/attested-gaming. Este repositorio es la imagen que produce la evidencia.
ESTADO: VISTA PREVIA DE MECÁNICA DE CÓDIGO FUENTE. NO INSTALABLE NI CONFIABLE PARA PRODUCCIÓN.
Las ejecuciones de GitHub Actions 31157890393 y 31159951490 construyeron un QCOW2 derivado de Bazzite, lo arrancaron bajo QEMU/OVMF con swtpm y sin red invitada, aprovisionaron identificadores persistentes de EK/AK y verificaron una cita (quote) cruda sobre los PCR 7, 11, 12 y 15 de SHA-256 desde dentro del invitado. Su recibo acotado tiene SHA-256
ad5ef12592cb5f4d1dfa8f0da88148931d48f0e6018924b2de4c766e1523ddaf. Un flujo de trabajo verificador separado 31160003873 ejercitó el commit final del agenteb918392de este repositorio contra un TPM de software aislado y superó la inscripción de AK, la verificación de cita cruda, el rechazo de reproducción, el rechazo de manipulación de firma y el cableado de TPM QEMU/OVMF.El resultado arrancado también confirma el bloqueo de política de Bazzite: no había ningún archivo UKI ni señal de systemd-stub, faltaban los argumentos de bloqueo previstos, y los PCR 11 y 15 seguían en cero. El PCR 12 también estaba en cero, pero eso no es un fallo independiente: la línea de comandos UKI integrada pertenece al PCR 11, mientras que el PCR 12 registra entradas de línea de comandos externas y puede permanecer correctamente en cero cuando no se suministra ninguna. La inscripción de claves de Secure Boot, la medición de línea de comandos respaldada por UKI, la procedencia del hardware, la reproducción del registro de eventos, la vinculación del transporte y la admisión por política de arranque siguen sin resolverse. Ninguna de las dos ejecuciones en verde establece un sistema de atestación de producción funcional.
Un control positivo separado de imagen sellada de Fedora pasó dos veces en run 31218059725 y de nuevo en la cabecera de la fuente fusionada en run 31219745053. Demuestra que el harness puede arrancar un UKI inmutable firmado por el proyecto ascendente, incorporar la ruta seleccionada por el firmware y el hash del archivo cargado a la inspección previa al arranque, observar un PCR 11 distinto de cero y rechazar una mutación de
.cmdlinesin firmar. Esto es solo un control del harness: todas las marcas de confianza de fabricante, política y producción siguen siendo falsas, y no hace instalable la vista previa de Bazzite.El carril separado de complemento de política PCR 12 firmado pasó después dos veces en run 31234464516. El UKI ascendente y el PCR 11 permanecieron byte-idénticos; ambos arranques firmados aplicaron
lockdown=confidentiality module.sig_enforce=1exactamente una vez y reprodujeron el PCR 12ca62dd5f...a8f5; la manipulación posterior a la firma fue rechazada y se volvió a la línea base de PCR 12 en cero. Esto prueba un mecanismo acotado, no una jerarquía de claves desplegable ni una política de confianza del sistema operativo.Este código fuente está disponible para revisión y emulación reproducible. No se publica ninguna imagen GHCR y no es una distribución confiable instalable.
El experimento completado de Bazzite se especifica en
BOOTED_IMAGE_CANARY.md. Las instrucciones de
reproducción y construcción desde el código fuente están en
BUILDING.md. La evidencia base del UKI y sus criterios
independientes de admisión se registran en
UKI_BASE_DECISION.md. El experimento firmado del
complemento de política PCR 12 se especifica por separado en
FEDORA_PCR12_ADDON_CANARY.md.
El orden de hitos y las reglas de parada se controlan en
ROADMAP.md.
El control del harness de UKI cargado por separado se especifica en
FEDORA_SEALED_POSITIVE_CONTROL.md.
No se elimina nada y no se parchea nada. Se añaden cuatro cosas encima:
tpm2-tools y tpm2-tss, que el agente necesita en tiempo de ejecución./usr/lib/attestos/cmdline con
lockdown=confidentiality y module.sig_enforce=1.attestos-provision, una unidad de una sola pasada que crea
identificadores persistentes distintos de EK y AK RSA dentro del TPM y lee
el certificado de respaldo del almacenamiento NV cuando existe.attestos-agent, activado por socket en bucle local, que responde a un
desafío estricto de identidad, activación o cita attestos.tpm/v1 con
evidencia TPM cruda. El agente nunca emite un veredicto de confianza.Bazzite se deriva de Fedora, y la familia Fedora es lo que las listas de permisos de anti-trampas bloquean actualmente. Demostrar que la atestación funciona aquí es el caso que vale la pena demostrar. Construir sobre SteamOS no demostraría nada, porque SteamOS ya está permitido, por lo que una demo exitosa allí conseguiría un acceso que ya tiene.
Bazzite también está diseñado para ser superpuesto en capas. Es una imagen OCI, así que este repositorio es un Containerfile y una Acción de GitHub en lugar de una distribución con espejos e instaladores detrás.
Esta es la parte que decide si todo esto significa algo.
lockdown=confidentiality bloquea /dev/mem, los kprobes contra un kernel en
ejecución y la carga de módulos sin firmar. Esa garantía no vale nada si la
política vive solo en una configuración de cargador de arranque que el usuario
puede editar. De lo contrario, un usuario puede eliminar los argumentos, arrancar
la misma medición de kernel y presentar una cita que no dice nada sobre la
política ausente.
Una imagen de kernel unificada (UKI) vincula kernel, initrd y su línea de comandos integrada en un único binario PE firmado medido en el PCR 11. Un complemento de línea de comandos de systemd firmado por separado puede extender política adicional al PCR 12 dejando ese UKI ascendente sin cambios. Cualquiera de las dos rutas debe unirse al artefacto cargado exacto y ser reproducida por el verificador; la presencia de un archivo o un PCR distinto de cero no basta.
Bazzite no usa UKI, y esto ahora está confirmado en lugar de sospechado. Su Containerfile excluye activamente los paquetes de kernel UKI:
dnf5 -y config-manager setopt "*fedora*".exclude="mesa-* kernel-core-* \
kernel-modules-* kernel-uki-virt-* steam"
systemd-ukify no aparece en ningún lugar del repositorio. Así que el archivo
cmdline que esta imagen incluye es actualmente una declaración de intención y
nada más: sin un UKI no hay nada que lo selle, un usuario puede editarlo en el
cargador de arranque, y el PCR 11 no mide lo que el diseño supone que mide.