Загрузочный сектор — это сектор постоянного устройства хранения данных (например, жесткого диска , дискеты , оптического диска и т. д.), содержащий машинный код , который загружается в оперативную память (ОЗУ) и затем выполняется встроенной прошивкой компьютерной системы (например, BIOS ).
Обычно первый сектор жесткого диска является загрузочным сектором, независимо от размера сектора (512 или 4096 байт) и типа раздела ( MBR или GPT ).
Целью определения одного конкретного сектора в качестве загрузочного является обеспечение взаимодействия между прошивками и различными операционными системами.
Целью последовательной загрузки сначала прошивки (например, BIOS), затем некоторого кода, содержащегося в загрузочном секторе, а затем, например, операционной системы, является максимальная гибкость.
На IBM PC-совместимой машине BIOS выбирает загрузочное устройство, затем копирует первый сектор с устройства (который может быть MBR , VBR или любым исполняемым кодом) в физическую память по адресу памяти 0x7C00. В других системах процесс может быть совершенно иным.
UEFI (не устаревшая загрузка через CSM) не полагается на загрузочные секторы, система UEFI загружает загрузчик ( файл приложения EFI на USB-диске или в системном разделе EFI ) напрямую. [1] Кроме того, спецификация UEFI также содержит «безопасную загрузку», которая по сути требует, чтобы код UEFI был подписан цифровой подписью .
В случае физического повреждения загрузочного сектора жесткий диск больше не будет загрузочным, если только он не используется с пользовательским BIOS, который определяет неповрежденный сектор как загрузочный. Однако, поскольку самый первый сектор дополнительно содержит данные о разделах жесткого диска, жесткий диск станет полностью непригодным для использования, за исключением случаев использования совместно с пользовательским программным обеспечением.
Диск может быть разделен на несколько разделов, и в обычных системах ожидается, что так и будет. Существует два определения того, как хранить информацию о разделах:
Наличие загрузчика, совместимого с IBM PC для процессоров x86, в загрузочном секторе по соглашению обозначается двухбайтовой шестнадцатеричной последовательностью 0x55 0xAA(называемой сигнатурой загрузочного сектора) в конце загрузочного сектора (смещения 0x1FEи 0x1FF). Эта сигнатура указывает на наличие по крайней мере фиктивного загрузчика, который можно безопасно выполнить, даже если он не сможет фактически загрузить операционную систему. Она не указывает на конкретную (или даже на наличие) файловую систему или операционную систему, хотя некоторые старые версии DOS 3 полагались на нее в своем процессе обнаружения носителей в формате FAT (более новые версии этого не делают). Загрузочный код для других платформ или процессоров не должен использовать эту сигнатуру, поскольку это может привести к сбою, когда BIOS передает выполнение в загрузочный сектор, предполагая, что он содержит допустимый исполняемый код. Тем не менее, некоторые носители для других платформ ошибочно содержат сигнатуру, в любом случае делая эту проверку не на 100% надежной на практике.
Подпись проверяется большинством системных BIOS, начиная с (по крайней мере) IBM PC/AT (но не оригинальным IBM PC и некоторыми другими машинами). Более того, она также проверяется большинством загрузчиков MBR перед передачей управления загрузочному сектору. Некоторые BIOS (например, IBM PC/AT) выполняют проверку только для фиксированных дисков/съемных накопителей, в то время как для дискет и супердискет достаточно начать с байта, большего или равного , 06hи первые девять слов не должны содержать того же значения, прежде чем загрузочный сектор будет принят как действительный, тем самым избегая явного теста на 0x55, 0xAAна дискетах. Поскольку старые загрузочные секторы (например, очень старые носители CP/M-86 и DOS) иногда не содержат эту подпись, несмотря на то, что они могут быть успешно загружены, проверку можно отключить в некоторых средах. Если код BIOS или MBR не обнаруживает действительный загрузочный сектор и, следовательно, не может передать выполнение коду загрузочного сектора, он попробует следующее загрузочное устройство в строке. Если все они терпят неудачу, обычно выводится сообщение об ошибке и вызывается INT 18h. Это либо запускает дополнительное резидентное программное обеспечение в ПЗУ ( ROM BASIC ), либо перезагружает систему через INT 19h после подтверждения пользователя, либо заставляет систему остановить процесс загрузки до следующего включения питания.
Системы, не соответствующие описанной выше конструкции:
На IBM PC-совместимых машинах BIOS игнорирует различие между VBR и MBR, а также разбиение на разделы. Прошивка просто загружает и запускает первый сектор запоминающего устройства. [3] Если устройство представляет собой гибкий диск или USB-флеш-накопитель , это будет VBR. Если устройство представляет собой жесткий диск, это будет MBR. Это код в MBR, который обычно понимает разбиение диска и, в свою очередь, отвечает за загрузку и запуск VBR того основного раздела, который установлен для загрузки ( активный раздел). Затем VBR загружает загрузчик второго этапа из другого места на диске.
Более того, все, что хранится в первом секторе дискеты, USB-устройства, жесткого диска или любого другого загрузочного устройства хранения данных, не требуется для немедленной загрузки любого кода начальной загрузки для ОС, если это вообще когда-либо происходит. BIOS просто передает управление всему, что там находится, пока сектор соответствует очень простой квалификации наличия сигнатуры загрузочной записи 0x55, 0xAA в его последних двух байтах. Вот почему легко заменить обычный код начальной загрузки, находящийся в MBR, более сложными загрузчиками, даже большими многофункциональными менеджерами загрузки (программами, хранящимися в другом месте на устройстве, которые могут работать без операционной системы), предоставляя пользователям ряд вариантов того, что произойдет дальше. При такой свободе злоупотребления часто происходят в форме вирусов загрузочного сектора.
Поскольку код в загрузочном секторе выполняется автоматически, загрузочные секторы исторически были распространенным вектором атак компьютерных вирусов .
Для борьбы с этим поведением системный BIOS часто включает опцию, запрещающую программному обеспечению записывать данные в первый сектор любых подключенных жестких дисков; таким образом, он может защитить главную загрузочную запись, содержащую таблицу разделов , от случайной перезаписи, но не загрузочные записи томов в загрузочных разделах. [4] В зависимости от BIOS попытки записи в защищенный сектор могут быть заблокированы с участием пользователя или без него. Однако большинство BIOS будут отображать всплывающее сообщение, предоставляя пользователю возможность переопределить настройку. Опция BIOS отключена по умолчанию, поскольку сообщение может отображаться некорректно в графическом режиме, а блокировка доступа к MBR может вызвать проблемы с программами настройки операционной системы или инструментами доступа к диску, шифрования или разбиения на разделы, такими как FDISK , которые, возможно, не были написаны с учетом такой возможности, что приведет к их некорректному завершению и, возможно, оставят разбиение диска в несогласованном состоянии. [nb 1]
Например, вредоносная программа NotPetya пытается получить права администратора в операционной системе, а затем пытается перезаписать загрузочный сектор компьютера. [5] [6] ЦРУ также разработало вредоносную программу, которая пытается изменить загрузочный сектор, чтобы загрузить дополнительные драйверы для использования другими вредоносными программами. [7] Другая вредоносная программа, которая перезаписывает загрузочный сектор, — это MEMZ.