Un sector de arranque es el sector de un dispositivo de almacenamiento de datos persistentes (por ejemplo, un disco duro , un disquete , un disco óptico , etc.) que contiene código de máquina que se cargará en la memoria de acceso aleatorio (RAM) y luego será ejecutado por el firmware integrado de un sistema informático (por ejemplo, el BIOS ).
Generalmente, el primer sector del disco duro es el sector de arranque, independientemente del tamaño del sector (512 o 4096 bytes) y del tipo de partición ( MBR o GPT ).
El propósito de definir un sector particular como sector de arranque es la interoperabilidad entre el firmware y varios sistemas operativos.
El propósito de cargar en cadena primero un firmware (por ejemplo, el BIOS), luego algún código contenido en el sector de arranque y luego, por ejemplo, un sistema operativo, es lograr la máxima flexibilidad.
En una máquina compatible con IBM PC , el BIOS selecciona un dispositivo de arranque y luego copia el primer sector del dispositivo (que puede ser un MBR , VBR o cualquier código ejecutable) en la memoria física en la dirección de memoria 0x7C00. En otros sistemas, el proceso puede ser bastante diferente.
La UEFI (no el arranque heredado a través de CSM) no depende de sectores de arranque, el sistema UEFI carga el cargador de arranque ( archivo de aplicación EFI en el disco USB o en la partición del sistema EFI ) directamente. [1] Además, la especificación UEFI también contiene "arranque seguro", que básicamente quiere que el código UEFI esté firmado digitalmente .
En caso de que un sector de arranque sufra daños físicos, el disco duro ya no podrá arrancar, a menos que se utilice con un BIOS personalizado que defina un sector no dañado como sector de arranque. Sin embargo, dado que el primer sector también contiene datos sobre la partición del disco duro, este quedará totalmente inutilizable, a menos que se utilice junto con un software personalizado.
Un disco puede dividirse en varias particiones y, en los sistemas convencionales, así se espera. Existen dos definiciones sobre cómo almacenar la información relativa a la partición:
La presencia de un cargador de arranque compatible con IBM PC para CPU x86 en el sector de arranque se indica por convención mediante una secuencia hexadecimal de dos bytes 0x55 0xAA(llamada firma del sector de arranque) al final del sector de arranque (desplazamientos 0x1FEy 0x1FF). Esta firma indica la presencia de al menos un cargador de arranque ficticio que es seguro ejecutar, incluso si no puede cargar realmente un sistema operativo. No indica un sistema de archivos o un sistema operativo en particular (ni siquiera la presencia de uno), aunque algunas versiones antiguas de DOS 3 dependían de ella en su proceso para detectar medios formateados en FAT (las versiones más nuevas no lo hacen). El código de arranque para otras plataformas o CPU no debería utilizar esta firma, ya que puede provocar un fallo cuando el BIOS pasa la ejecución al sector de arranque asumiendo que contiene código ejecutable válido. Sin embargo, algunos medios para otras plataformas contienen erróneamente la firma, de todos modos, lo que hace que esta comprobación no sea 100% fiable en la práctica.
La mayoría de los BIOS de sistemas, desde (al menos) el IBM PC/AT (pero no el IBM PC original y algunas otras máquinas), comprueban la firma . Más aún, también la comprueban la mayoría de los cargadores de arranque MBR antes de pasar el control al sector de arranque. Algunos BIOS (como el IBM PC/AT) realizan la comprobación sólo para discos fijos/unidades extraíbles, mientras que para disquetes y superfloppies, es suficiente empezar con un byte mayor o igual a 06hy que las primeras nueve palabras no contengan el mismo valor, antes de que el sector de arranque se acepte como válido, evitando así la prueba explícita de 0x55, 0xAAen disquetes. Dado que los sectores de arranque antiguos (por ejemplo, los medios CP/M-86 y DOS muy antiguos) a veces no presentan esta firma a pesar del hecho de que se pueden arrancar correctamente, la comprobación se puede desactivar en algunos entornos. Si el BIOS o el código MBR no detecta un sector de arranque válido y, por lo tanto, no puede pasar la ejecución al código del sector de arranque, intentará con el siguiente dispositivo de arranque de la fila. Si todos fallan, normalmente mostrará un mensaje de error e invocará la INT 18h. Esto iniciará el software residente opcional en la ROM ( ROM BASIC ), reiniciará el sistema mediante INT 19h después de la confirmación del usuario o hará que el sistema detenga el proceso de arranque hasta el próximo encendido.
Los sistemas que no siguen el diseño descrito anteriormente son:
En las máquinas compatibles con IBM PC , el BIOS ignora la distinción entre VBR y MBR, y la partición. El firmware simplemente carga y ejecuta el primer sector del dispositivo de almacenamiento. [3] Si el dispositivo es un disquete o una unidad flash USB , será un VBR. Si el dispositivo es un disco duro, será un MBR. Es el código en el MBR el que generalmente entiende la partición del disco y, a su vez, es responsable de cargar y ejecutar el VBR de cualquier partición primaria que esté configurada para arrancar (la partición activa ). Luego, el VBR carga un cargador de arranque de segunda etapa desde otra ubicación en el disco.
Además, lo que se almacena en el primer sector de un disquete, dispositivo USB, disco duro o cualquier otro dispositivo de almacenamiento de arranque no necesita cargar inmediatamente ningún código de arranque para un sistema operativo, si es que lo hace alguna vez. La BIOS simplemente pasa el control a lo que exista allí, siempre que el sector cumpla con la simple calificación de tener la firma de registro de arranque de 0x55, 0xAA en sus dos últimos bytes. Por eso es fácil reemplazar el código de arranque habitual que se encuentra en un MBR con cargadores más complejos, incluso grandes administradores de arranque multifuncionales (programas almacenados en otra parte del dispositivo que pueden ejecutarse sin un sistema operativo), lo que permite a los usuarios una serie de opciones sobre lo que ocurre a continuación. Con este tipo de libertad, el abuso a menudo ocurre en forma de virus del sector de arranque.
Dado que el código en el sector de arranque se ejecuta automáticamente, los sectores de arranque han sido históricamente un vector de ataque común para los virus informáticos .
Para combatir este comportamiento, el BIOS del sistema a menudo incluye una opción para evitar que el software escriba en el primer sector de cualquier disco duro conectado; de este modo, podría proteger el registro de arranque maestro que contiene la tabla de particiones de ser sobrescrito accidentalmente, pero no los registros de arranque de volumen en las particiones de arranque. [4] Dependiendo del BIOS, los intentos de escribir en el sector protegido pueden bloquearse con o sin interacción del usuario. Sin embargo, la mayoría de los BIOS mostrarán un mensaje emergente que le dará al usuario la oportunidad de anular la configuración. La opción del BIOS está deshabilitada de forma predeterminada porque el mensaje puede no mostrarse correctamente en modo gráfico y bloquear el acceso al MBR puede causar problemas con los programas de configuración del sistema operativo o con herramientas de acceso al disco, cifrado o particionamiento como FDISK , que pueden no haber sido escritas para tener en cuenta esa posibilidad, lo que hace que se cancelen sin gracia y posiblemente dejen la partición del disco en un estado inconsistente. [nb 1]
Como ejemplo, el malware NotPetya intenta obtener privilegios administrativos en un sistema operativo y luego intentaría sobrescribir el sector de arranque de una computadora. [5] [6] La CIA también ha desarrollado malware que intenta modificar el sector de arranque para cargar controladores adicionales para que los use otro malware. [7] Otro malware que sobrescribe el sector de arranque es MEMZ.