Configuración de arranque (BCD)¶
Qué es el almacén BCD¶
Windows Vista y versiones posteriores guardan su configuración de arranque en un hive del Registro,
el almacén BCD: \Boot\BCD en sistemas BIOS y \EFI\Microsoft\Boot\BCD en la partición del
sistema EFI de los sistemas UEFI. bcdedit y el instalador de Windows lo modifican; el
administrador de arranque lo lee en cada arranque.
El almacén contiene objetos, cada uno con el nombre de un GUID:
- el administrador de arranque de Windows (
{bootmgr}), con la entrada predeterminada, el orden de presentación y el tiempo de espera del menú; en sistemas UEFI, también el administrador de arranque del firmware ({fwbootmgr}) con el orden de arranque del firmware; - un cargador de arranque de Windows por cada instalación de Windows (incluido el entorno de recuperación), una aplicación de reanudación (hibernación) y el comprobador de memoria;
- objetos de configuración heredada (
{globalsettings},{bootloadersettings}, …) cuyas opciones heredan los demás; - objetos de dispositivo (opciones de ramdisk del entorno de recuperación).
Cada objeto tiene elementos: una descripción, un dispositivo y una ruta, y opciones como
recoveryenabled, bootstatuspolicy, testsigning, nointegritychecks y safeboot.
Dos tipos de ataque los modifican:
- El ransomware desactiva la recuperación para que el sistema no pueda repararse:
bcdedit /set {default} recoveryenabled Noybcdedit /set {default} bootstatuspolicy ignoreallfailures. Algunas familias establecensafebootpara que Windows se reinicie en modo seguro, donde los productos de seguridad no se ejecutan. - Los rootkits y controladores sin firmar pueden usar
testsigning ononointegritychecks onpara debilitar las comprobaciones durante el arranque. Estas opciones por sí solas no prueban que se haya ejecutado un rootkit.
Mejor conclusión: en el momento de la recopilación, esta entrada de arranque tenía esta opción. La hora de última escritura de la clave del elemento es el momento en que se escribió la opción por última vez.
Ubicación¶
\Boot\BCD BIOS systems (the system partition)
\EFI\Microsoft\Boot\BCD UEFI systems (the EFI system partition)
C:\Windows\System32\config\BCD-Template the template new stores are made from
Objects\{GUID}\Description Type
Objects\{GUID}\Elements\<type> Element
El tipo de un elemento consta de 8 dígitos hexadecimales: su clase (1 todas las aplicaciones, 2
un tipo de aplicación, 3 dispositivos), su formato (1 dispositivo, 2 cadena, 3 objeto, 4
lista de objetos, 5 entero, 6 booleano, 7 lista de enteros) y su número. El comando nombra
los elementos tal como los documenta Microsoft (BcdLibraryBoolean_AutoRecoveryEnabled).
Las herramientas de recopilación a menudo no copian el almacén: la partición del sistema EFI no
está montada y \Boot está oculto. Recopílelo explícitamente o monte la partición. -d también
lee BCD-Template (HiveType indica cuál es); la plantilla es el punto de partida de Windows, no
el almacén con el que arranca.
Precauciones para el analista¶
- Las opciones se heredan. Un cargador de arranque hereda de los objetos de su
BcdLibraryObjectList_InheritedObjects(normalmente{bootloadersettings}, que hereda de{globalsettings}).RecoveryEnabled,TestSigning,NoIntegrityChecks,SafeBootyBootStatusPolicyson valores almacenados resueltos (propios o, en su defecto, heredados), eInheritedindica cuáles proceden de otro objeto. La herencia se sigue como máximo ocho niveles, con los ciclos acotados. Un objeto referenciado puede faltar en un almacén parcial. Los campos vacíos no establecen un valor predeterminado efectivo de Windows. El firmware y el arranque seguro (Secure Boot) también pueden impedir que una opción almacenada surta efecto. - No establecido no significa desactivado. Un
RecoveryEnabledvacío significa que el elemento no existe; se aplica el valor predeterminado de Windows. - Las horas son por elemento. La hora de la clave de cada elemento (
key_last_writtenenElements) es el momento en que se escribió por última vez. Windows reescribe algunos elementos durante las actualizaciones; compárela con las horas de los demás elementos. - Los dispositivos se decodifican parcialmente. Una partición GPT se indica mediante los GUID de
su partición y de su disco; un ramdisk, mediante su objeto de opciones. Los demás dispositivos
solo conservan sus bytes (
data_raw). - Los elementos no documentados (
0x15000065, la clase0x4…) no tienen nombre y conservan sus bytes.
Análisis con Juntei¶
Usage: juntei parse-registry bcd <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find BCD hives and BCD-Template
-f, --file <FILE> Parse one BCD hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry bcd -f BCD -o bcd.csv
juntei parse-registry bcd -d evidence/ -t jsonl \
| jq 'select(.TestSigning == true or .NoIntegrityChecks == true or .RecoveryEnabled == false)'
El resumen enumera la entrada predeterminada de cada almacén y todas las opciones de firma de
prueba, comprobación de integridad, recuperación, directiva de estado de arranque (cualquier
Ignore…) y modo seguro, con la hora en que se establecieron o el objeto del que se heredan.
Campos de salida¶
| Campo | Interpretación |
|---|---|
Host, SourcePath, HiveType |
Host, el hive y BCD o BCD-Template. |
ObjectGUID, ObjectType, ObjectTypeName |
El GUID del objeto, su tipo (0x10200003) y qué es (Windows boot loader, inherited settings for Windows boot loader, …). |
Description, Path, Device |
La descripción, la ruta de la aplicación y su dispositivo (una partición y un disco GPT, o el objeto de opciones de un ramdisk). |
IsDefault, DisplayOrder |
Si el administrador de arranque de Windows lo arranca de forma predeterminada y su posición en el menú de arranque. |
RecoveryEnabled, TestSigning, NoIntegrityChecks |
recoveryenabled, testsigning, nointegritychecks, tal como se resuelven a partir del almacén. |
SafeBoot, BootStatusPolicy |
safeboot (Minimal, Network, DsRepair) y bootstatuspolicy (IgnoreAllFailures, …), con el número. |
Inherited |
Cuáles de estas opciones proceden de otro objeto y de cuál. |
Elements |
Todos los elementos: su tipo, nombre, valor, bytes (para dispositivos, tipos no documentados y datos que no se decodifican) y hora de la clave. |
KeyLastWrittenUTC |
Última escritura de la clave del objeto. |
TransactionLogStatus, LogsApplied |
Contexto de la recuperación del Registro. |
Problems |
Objetos sin tipo y elementos cuyos datos no se ajustan a su formato. |
Estrategia de investigación¶
- Revise la entrada predeterminada y todos los cargadores de arranque en busca de
TestSigning,NoIntegrityChecks,RecoveryEnabled = false, unaBootStatusPolicyIgnore…ySafeBoot. - Utilice las horas de los elementos para fechar el cambio y correlaciónelas con
bcdedit.exeen Prefetch, Amcache, los eventos de creación de procesos (4688, Sysmon 1) y el registro de eventos System. - Busque entradas de arranque o dispositivos que no deberían existir (otra ruta de cargador, un ramdisk) y cambios en la entrada predeterminada o en el orden de presentación.
- Compare el almacén con
BCD-Templatey con otro sistema de la misma compilación.