
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 .cmdline sin 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=1
exactamente una vez y reprodujeron el PCR 12 ca62dd5f...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.
Arreglar Bazzite no es una línea en build.sh. Requiere una ruta de medición
pre-kernel confiable, ya sea cambiando cómo arranca la imagen o adoptando una
base que ya arranca a través de systemd-stub.
Los experimentos reducen las opciones prácticas:
Un UKI ascendente de Fedora puede conservar su firma de distribución, pero un complemento de política de attestos separado aún necesita una clave de firma admitida por el firmware, Shim o MOK. Un kernel de terceros tiene la versión más grande del mismo problema. Las opciones de despliegue son:
El harness desechable de Fedora inscribe un certificado local de la ejecución en una DB UEFI copiada y prueba el mecanismo sin reclamar un modelo de despliegue. Todavía no hay un contrato aceptado de inscripción, revocación o recuperación de claves para el usuario final. Es tanto una cuestión de la parte que confía como de ingeniería.
Todavía no hay un comando de instalación soportado. En particular,
ghcr.io/plunder707/attestos:latest no está publicado. La vista previa actual
es solo para revisión del código fuente y reproducción aislada con QEMU/swtpm.
Ver BUILDING.md.
Containerfile imagen base y el único RUN que llama a build.sh
build_files/build.sh la capa de atestación
system_files/ agente, script de aprovisionamiento, unidades systemd
image-template.env nombre de imagen y organización del registro
.github/workflows/ canarios aislados de evidencia y solo construcción
Justfile objetivos locales de construcción y prueba
Todo lo que está fuera de build_files/ y system_files/ proviene de
ublue-os/image-template y es su
trabajo.
14e3a21 por la
ejecución 31143048491 de GitHub Actions; la construcción emitió dos
advertencias no fatales de lint del estado de DNF.bootc status
del agente en tiempo de ejecución en identidad de imagen verificada. La
afirmación es metadatos, no autoridad firmada; en sistemas sin bootc es
explícitamente unavailable.Las preguntas de medición en tiempo de ejecución requieren QEMU con OVMF y swtpm, lo que no necesita hardware adicional. El cableado y la mecánica del protocolo TPM crudo ya han pasado allí, pero arrancar la imagen construida y validar su registro de eventos y política siguen siendo experimentos separados. La aceptación del proveedor requiere una conversación con el proveedor.
Apache-2.0, en correspondencia con la plantilla sobre la que está construido.