Cuándo usamos el registro de Windows

El registro de Windows es una base de datos que contiene la configuración del sistema. Por ello, interviene en muchas ocasiones mientras usamos el sistema operativo. Por ejemplo, cada cambio que hacemos sobre el perfil de la cuenta de usuario, se producen cambios en el registro. Cada vez que se inicia una cuenta de usuario, el sistema consulta el registro de Windows.

Pero el registro no solo contiene información sobre los perfiles de usario. Contiene mucha otra información, como configuraciones de hardware, asociaciones entre ficheros y programas, o la última configuración del sistema que funcionó correctamente.

Muchas de las ventanas de configuración de Windows, son en realidad una interfaz para el registro.

Registro virtualizado

El registro de Windows Vista y posteriores, está virtualizado. Se trata de un sistema de seguridad para garantizar que un usuario sin privilegios suficientes produzca cambios en el registro que pueda deteriorarlo.

El mecanismo detrás de esto, se llama UAC (User Access Control), que veremos en temas posteriores.

Cada aplicación tiene asoicado un token de seguridad, al igual que los usuarios, que pueden ser de usuario estándar o de administrador (para ejecución elevada). Cuando una aplicación se ejecuta con un token de usuario estándar, el sistema no accede al registro, sino a una copia privada del registro. La próxima vez que la aplicación acceda al registro, el sistema le mostrará la copia privada. A esto le llamamos virtualización del registro.

La intención detrás de esto, es imitar a los sistemas UNIX, como linux, en sus características nativas de seguridad relacionadas con las cuentas de usuario. De este modo, se garantiza que el registro se mantendrá a salvo de usuarios inexpertos.

Registro transaccional

El registro de Windows Vista, y por tanto de Windows Server 2008, tiene similitudes con una base de datos transaccional. Esto quiere decir que las modificaciones del registro se producen en forma de operaciones atómicas (transacciones), que siempre pueden desacerse (rollback), dotando al registro de integridad.

Asociado al registro se encuentran unos ficheros "log", que almacena los cambios que se van produciendo. De este modo el sistema puede seguir hacia atrás los cambios para desacerlos.

El sistema no muestra los cambios hasta que no se ha completado una transacción (commit transaction).

Editando el registro

Aunque no es recomendable editar directamente el registro, en ocasiones es preciso hacerlo. Por ejemplo, si se visita el enlace https://kc.mcafee.com/corporate/index?page=content&id=KB66055, se observa como McAfee da un procedimiento para desinstalar uno de sus productos manualmente.

Para editar el registro, se utiliza el programa regedit.exe.

Una vez abierto regedit.exe, podemos observar dos paneles. El panel izquierdo muestra el arbol de claves. El panel derecho muestra las entradas de las claves.

Estructura del registro

El registro tiene una estructura jerárquica. Se compone de claves y entradas. Una clave es un contenedor al que se le asigna un nombre distintivo. Las claves pueden contener otras claves (llamadas subclaves) así como entradas. Una entrada es un nodo terminal, con un nombre distintivo, que permite almacenar cierta información.

En la imagen anterior se observa en el panel izquierdo el árbol de claves del registro, de modo que la clave ServerManager está contenida dentro de la clave Microsoft, que a su vez está contenida en la clave Software que a su vez está contenida en la clave HKLM. En el panel derecho, se pueden observar varias entradas, como DoNotOpenServerManageratLogon. Para hacer referencia correctamente a esta entrada, se debe mostrar la ruta completa, es decir:

HKLM\Software\Microsoft\ServerManager\DoNotOpenServerManageratlogon

Las entradas del registro tienen tres campos, que son Nombre, Tipo de dato y Datos. El nombre permite distinguir una entrada de los otras entradas. Entraremos en detalle sobre los otros campos más adelante.

Las claves principales, son llamadas claves raíz. En el ejemplo anterior, la clave raíz es HKLM. Se trata de las claves de más alto nivel. De ellas derivan el resto de claves. Existen 5 claves raíz: HKLM, HKU, HKCR, HKCC y HKCU. En la práctica, las únicas claves que residen físicamente en el disco duro, son HKLM y HKU y las otras claves raíz se obtienen a partir de secciones de éstas.

HKLM (Host Key Local Machine)

Contiene información acerca del equipo, su hardware, los controladores de dispositivos y las opciones de configuración (tanto de seguridad como del software instalado) que afectan a todos los usuarios del sistema. Las claves principales que contiene son las siguientes:

  • Components: Almacena Updates y Características de Windows.
  • Hardware: Información sobre el hardware del sistema. Es reconstruido en cada reinicio.
    • ACPI (Advanced Conf. Power Interf.): Información sobre Plug&Play BIOS y Administración de energía.
    • Description: Información sobre características del hardware.
    • Devicemap: Asociaciones Driver - Dispositivo.
    • Resource Map: Mapas de HAL, P&P manager y recursos.
  • SAM (Security Account Manager): Información de cuentas (inaccesible desde regedit)
  • Security: Credenciales de logeo, directivas, configuración de seguridad sobre servicios, y una copia del SAM.
  • Software: Configuración de aplicaciones, rutas de ejecutables, configuraciones por defecto e información de "registrado" de aplicaciones.
    • Classes: Asociaciones de ficheros y clases OLE
    • Clients: Información sobre protocolos y shells usadas por aplicaciones cliente (Ej. LDAP)
    • Microsoft: Información sobre aplicaciones de Microsoft, componentes de windows, configuraciones e información de registrado del software.
    • ODBC (Open DataBase Connection): Información sobre ODBC
    • Policies: Información sobre directivas para aplicaciones y componentes instalados en el sistema.
  • System: Drivers, parámetros de inicio y otras configuraciones.
    • Current control set: Configuración del último reinicio con éxito. Se almacenan también versiones anteriores: Current Control Set 001, Current Control Set 002

Es importante conocer las claves donde se ubican las aplicaciones que se inician automáticamente. El malware suele añadir entradas en ellas:

  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run: ejecuta el comando cada vez que inicia el sistema.
  • HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce: ejecuta el comando una sola vez y borra la entrada nada más ejecutarlo.

Por ejemplo podemos añadir en HKLM\Software\Microsoft\Windows\CurrentVersion\Run una entrada nueva llamada "MiRun", de tipo SZ, y que ejecute el programa "iexplore.exe" nada más iniciar.

Vamos a averiguar como desactivar el rastreador de eventos de apagado a través del registro... A googlear

Hay dos maneras de hacer esto.

O bien desde la directiva local, ejecutando gpedit.msc y después modificando la directiva Directiva Equipo local\Configuración del equipo\Plantillas administrativas\Sistema\Mostrar rastreador de eventos de apagado.

La otra opción es crear las entradas del registro siguientes:

HKLM\Software\Policies\Microsoft\Windows NT\Reliability\ShutdownReasonOn (tipo REG_DWORD) HKLM\Software\Policies\Microsoft\Windows NT\Reliability\ShutdownReasonUI (tipo REG_DWORD)

HKU (Host Key Users)

La clave HKLM contiene información sobre la configuración de los usuarios. Existen cuatro claves comunes a cualquier registro:

  • .DEFAULT: Configuración por defecto para todo usuario que se loguea por primera vez en el sistema.
  • S-1-5-18: Well-known SID relativo al usuario Sistema Local.
  • S-1-5-19: Well-known SID relativo al usuario Servicio Local.
  • S-1-5-10: Well-known SID relativo al usuario Servicio de Red.

NOTA: Un SID es un Security Identificer. Se trata de un número único que emplea el sistema para identificar a los usuarios. Cuando el identificador de seguridad está estandarizado, se le llama Well-known o "bien conocido", en el sentido de que en cualquier sistema tiene el mismo significado.

Además, hay otras claves relativas a los usuarios de escritorio.

  • S-1-5--500: Cuenta del administrador local del sistema.
  • S-1-5--1xxx: Cuenta de los usuarios locales del sistema.

HKCR (Host Key Classes Root)

Esta clave del registro contiene asociaciones entre programas y extensiones de fichero, de forma que por defecto el sistema abrirá un cierto tipo de fichero con la aplicación definida. En realidad esta clave es un subconjunto de la claves HKLM y HKCU, en concreto de HKLM\Software\Classes y HKCU\Software\Classes.

En este subárbol existen dos tipos de datos:

  • Información de asociación de archivos.
  • Datos de configuración para objetos COM.

Esta sección es en realidad un alias y deriva sus datos desde dos orígenes:

  • HKEY_LOCAL_MACHINE\Software\Classes
  • HKEY_LOCAL_MACHINE\Software\Classes

De esta forma se permite el registro de clases por usuario. Esta funcionalidad implica que los equipos con usuarios múltiples pueden poseer diferente información para las clases registradas cuando un usuario específico instala el software.

HKCC (Host Key Current Config)

Esta clave contiene la configuración actual del sistema. En realidad se trata de un subconjunto de la clave HKLM, en concreto de la clave HKLM\System\CurrentControlSet\Hardware Profiles\Current.

HKCU (Host Key Current User)

Contiene la información de configuración para el usuario que tiene iniciada una sesión actualmente en el sistema. Contiene entradas que afectan al sistema operativo, las aplicaciones y las directivas. Dichas entradas estan contenidos en el archivo NTUSER.DAT en concreto de la clave HKU\

Cómo se almacena el registro

El sistema operativo almacena el registro en forma de ficheros. Estos ficheros solo son editables desde la herramienta regedit.exe. Su ubicación es C:\Windows\System32\Config\. En este directorio podemos encontrar tres tipos principales de ficheros:

Ficheros almacén (Hive en inglés): Registro propiamente dicho.

Ficheros Sav: Estos ficheros se generan al hacer copias post-instalación del registro, al promocionar un servidor a controlador de dominio, por ejemplo. Gracias a ellos se puede volver a un estado inicial del registro (al degradar un controlador de dominio). Entraremos en este tema en capítulos posteriores.

Ficheros Log: Cuando se produce un cambio en el registro, se anota primero estos cambios en el fichero log, una vez completadas la anotaciones se realizan los cambios en el fichero almacén. Si el sistema cae durante cambio en el registro, usa el fichero log para realizar el rollback.

Los ficheros que se pueden observar en el directorio C:\Windows\System32\Config\ se corresponden con alguna sección del registro, a saber:

  • .DEFAULT corresponde a HKU\.DEFAULT
  • SAM corresponde a HKLM\SAM
  • SECURITY corresponde a HKLM\SECURITY
  • SOFTWARE corresponde a HKLM\SOFTWARE
  • SYSTEM corresponde a HKLM\SYSTEM

Además, existen otras partes del registro que se almacenan en C:\Users\[nombre_usuario]

  • NTUSER.DAT corresponde con HKU\[User_SID]

[username]\NTUSER.DAT

Los datos restantes del registro están almacenados en los perfiles de usuario individuales, con el nombre por defecto Ntuser.dat.

NOTA: los ficheros ntuser.dat son en realidad la parte del resgistro cargada en HKCU (Current_User). Cuando no hay un usuario logueado, en HKCU está el contenido de HKU\.Default.

Tipos de registro

Las entradas del registro tienen un campo llamado tipo. Este campo describe qué tipo de información almacena la entrada. Podemos encontrar 7 tipos diferentes:

REG_BINARY: Son datos de tipo binario sin procesar y se representan en formato hexadecimal. Se utiliza principalmente para almacenar información de componentes de hardware.

REG_DWORD: Son datos representados por un número de cuatro bytes, presentados en formato binario, hexadecimal o decimal. Utilizado para la mayoría de información sobre controladores de dispositivos y servicios.

REG_QWORD: Son datos representados por un número de cuatro bytes, presentados en formato binario, hexadecimal o decimal.

REG_EXPAND_SZ: Cadenas de longitud variable. Puede contener variables de entorno (como %SystemDrive%) que se expanden, y de ahí el nombre del tipo.

REG_MULTI_SZ: Cadena múltiple de datos.

REG_SZ: Es una cadena de texto de longitud fija. La notacion sz (String/Zero) es debido a que las entradas se terminan con un byte cero al final. Regedit ocultaría el 0 de la terminación de los datos.

REG_FULL_RESOURCE_DESCRIPTOR: Utilizada para almacenar una lista de recursos para componentes de hardware, por loq estaría compuesto por series de matrices anidadas.

Los tipos que puede modificar un operador humano son REG_DWORD, REG_QWORD, REG_EXPAND_SZ, REG_MULTI_SZ y REG_SZ. El resto no deben ser manipulados manualmente.

Trabajando con el registro

Es fundamental entender, que para modificar el registro hay que estar seguro de lo que se está haciendo. La mejor manera de garantizarlo es seguir siempre las instrucciones de la Knowledge base de Microsoft, o de fabricantes de software de confianza. Un artículo de ejemplo en la knowledge base lo podemos encontrar en la dirección http://support.microsoft.com/kb/900926.

De cualquier modo, antes de hacer una modificación en el registro es conveniente disponer de una copia de seguridad de todo el registro o de la parte que vamos a modificar.

Muy habitualmente hay que modificar una entrada del registro del que solo se tiene su nombre, pero no la ruta completa al mismo. En estos casos resulta muy útil la búsqueda de entradas cuyo nombre coincida con el que buscamos. Para buscar una entrada, basta con acceder al menú Edición de regedit.exe y seleccionar la opción Buscar. En la barra de estado (barra inferior de regedit) se puede observar la ruta completa a cada elemento encontrado, pudiendo de este modo discriminar si es o no la entrada que estamos buscando. Para seguir buscando más coincidencias en el registro, podemos utilizar la tecla F3.

Práctica. Busca el valor del registro Wallpaper. Ahora cambia el fondo del escritorio, y vuelve a buscar en el registro el valor Wallpaper.

Para modificar una entrada del registro, hay que hacer doble clic sobre la entrada a modificar. Al hacer esto, el sistema muestra un editor que permite modificar la información que almacena la entrada.

Cuando la entrada es múltiple, es decir, de tipo REG_MULTI_SZ, las diferentes informaciones se separarán por el signo ";".

Regedit provee una opción para exportar una parte del registro o el registro completo. Para exportar el contenido de una clave, se selecciona en primer lugar la clave a exportar. Después se selecciona la opción Exportar del menú Archivo. Hay que tener en cuenta, que el registro se exporta a un fichero de extensión reg.

Si posteriormente se desea restablecer la clave exportada a su estado original, basta con hacer doble clic sobre el fichero exportado.

El hecho de que la extensión del fichero de exportación del registro (.reg) sea ejecutable puede ser un inconveniente. Accidentalmenente se puede devolver el registro a un estado antiguo. Si se desea minimizar este problema, se puede cambiar la extensión del fichero .reg temporalmente a la extensión .hiv, que no es ejecutable, y es autodescriptiva (hive en inglés significa colmena o almacén).

Modificación offline del registro

En ocasiones puede ser necesario editar el registro cuando el sistema está fuera de servicio. Para conseguir esto, debemos lanzar en primer lugar la consola de recuperación (desde el CD de instalación de Windows). Una vez iniciada la consola, seguimos los siguientes pasos:

  • ejecutamos el comando regedit.
  • Hacemos clic sobre la clave raíz HKEY_LOCAL_MACHINE.
  • Hacer clic en la entrada del menú Archivo\Cargar subárbol, y seleccionar el archivo que almacena la clave del registro que buscamos:
    • HKEY_LOCAL_MACHINE \SAM = %windir%\system32\config\SAM
    • HKEY_LOCAL_MACHINE \SYSTEM = %windir%\system32\config\SYSTEM
    • HKEY_LOCAL_MACHINE \SOFTWARE = %windir%\system32\config\SOFTWARE
    • HKEY_USERS \.Default = %windir%\system32\config\DEFAULT
    • HKEY_CURRENT_USER = %userprofile%\ntuser.dat
  • Asignar un nombre arbitario (por ejemplo "MiClave") cuando se pregunte. Un nuevo nodo será creado bajo la clave raíz HKEY_LOCAL_MACHINE
  • Ya podremos editar la parte del registro que hemos cargado, bajo la clave HKEY_LOCAL_MACHINE\MiClave

Práctica: Crea un archivo llamado C:\test.bat con el siguiente contenidos:

ECHO OFF ECHO "Registro modificado" PAUSE

Edita el registro desde el CD de instalación de Windows y añade un nuevo registro para ejecutar en el inicio el programa "test.bat".

Copia de estado del sistema

No es habitual hacer exportaciones completas del registro ya que esto puede dar problemas. Siempre es mejor usar herramientas de backup.

La copia de estado del sistema, es una copia que incluye registros y ficheros esenciales para la recuperación del sistema. De cualquier modo una copia de seguridad completa del sistema siempre incluye siempre el estado del sistema.

Puede ser muy útil si el registro se deteriora o pierde parte de su información y está especialmente indicado en controladores de dominio cuya base de datos LDAP se ha corrompido.

Para hacer una copia de estado del sistema hay que añadir antes la característica de copia de seguridad. Para crear la copia hay que ejecutar el siguiente comando:

wbadmin start systemstatebackup -backuptarget:d:

Para consultar las copias realizadas:

wbadmin get versions

Este comando nos mostrará las diferentes copia de estado del sistema realizadas. Cada copia del sistema muestra datos de fecha, destino de la copia, identificador y cobertura de la copia. Para restaurar una copia, debemos fijarnos en la entrada mostrado en "Identificador de versión".

Para restaurar copia del estado del sistema, usaremos el siguiente comando:

wbadmin start systemstaterecovery -version:11/2/2011-09:00

suponiendo que 03/31/2010-09:00 es el identificador de versión.

MSCONFIG

Existen diferentes cuestiones que hemos visto sobre el arranque (por ejemplo mediante bcdedit) que pueden ser realizadas mediante la interfaz del programa msconfig.exe. Si ejecutamos dicho programa obtendremos una ventana con 5 pestañas: General, Arranque, Servicios, Inicio de Windows, y Herramientas. Para conocer lo que ofrece cada una de las opciones, podemos hacer clic sobre el botón "Ayuda".

Si aplicamos algunos cambios en la pestaña "Arranque" y revisamos el almacén BCD podemos ver lo que realmente ha cambiado.

En la pestaña "Inicio de Windows" podemos ver que está la entrada que añadimos en HKLM\Software\Microsoft\Windows\CurrentVersion\Run.