Пароли AWARD BIOS

Установка пароля BIOS является весьма популярным методом ограничения доступа к вычислительным ресурсам. Именно эти пароли становятся первой преградой на пути у потенциального взломщика (или пользователя, который забыл свой пароль). В данной статье речь пойдет о методах, позволяющих злоумышленникам обойти защиту подобного рода, а законным пользователям - осознать потенциальные угрозы и принять надлежащие меры защиты.


1. Аппаратное удаление паролей

Методы аппаратного удаления паролей известны, наверное, всем - отключение батарейки CMOS, закорачивание ее выводов при помощи подручных предметов, использование специально для этого предназначенной перемычки ("CMOS Clean Jumper") и т.д. При всей своей простоте данный метод имеет несколько недостатков, существенно ограничивающих область его применения. Во-первых, на сборку-разборку требуется много времени (да и как разобрать машину на глазах у ее владельца?); во-вторых, владелец машины сразу же обнаружит подобное вмешательство. Однако данный способ является "единственной надеждой" (см. пункт 3) человека, установившего пароль на загрузку машины ("BIOS FEATURES SETUP => Security Option = System"), а затем забывшего этот пароль.


2. Программное удаление паролей

Этим методом может воспользоваться взломщик, получивший доступ к машине под каким-либо благовидным предлогом. В отличие от предыдущего метода, в данном случае взлом не привлекает особого внимания и может быть проделан "на глазах" у владельца.

 

Пароли (и связанная с ними информация) хранятся в CMOS-памяти. Чтобы получить доступ к байту CMOS'а, его адрес (число в диапазоне от 00h до 7Fh) записывается в порт 70h, а значение считывается из порта 71h (либо записывается в этот порт).


2.1. Пароль администратора ("SUPERVISOR PASSWORD")

Информация, связанная с паролем администратора, хранится в CMOS по адресам 11h, 1Ch и 1Dh, 2Eh и 2Fh. (см. таблицу).

Адрес Комментарий
11h Первый бит определяет, включен или выключен пароль администратора
(0 — выключен, 1 — включен). Нулевой бит определяет режим
использования пароля (1 — «System», 0 — «Setup»).
1Ch и 1Dh 16-битный хэш-код пароля (1Ch — младший байт, 1Dh — старший байт).
Алгоритм вычисления этого хэш-кода будет описан в пункте 4.
2Eh и 2Fh Контрольная сумма байт с адресами от 10h до 2Dh
(вычисляется путем сложения этих байт).

Алгоритм отключения пароля администратора достаточно прост. Из CMOS считываются байты с адресами 11h, 2Eh и 2Fh. Если первый бит байта 11h установлен, сбрасываем его, записываем модифицированное значение в CMOS, корректируем контрольную сумму (отнимаем 2) и записываем модифицированное значение в CMOS. Простейшая программа, выполняющая вышеописанные действия, занимает всего 55 байт:

B0 11 E8 22 00 0F BA F1 01 73 1B E8 22 00 B0 2E E8 14 00 86 E9 FE C0 E8 0D 00 49 49 E8 11 00 FE C8 86 E9 E8 0A 00 C3 50 E6 70 E4 71 8A C8 58 C3 E6 70 8A C1 E6 71 C3

Ею можно воспользоваться, даже если у атакуемой машины отключены дисководы (мера, достаточно популярная в различных учебных заведениях) - достаточно набрать ее машинный код в любом HEX-редакторе, имеющемся на атакуемой машине, сохранить его с расширением.COM и выполнить полученный файл.


2.2. Пароль пользователя ("USER PASSWORD")

Информация, связанная с паролем пользователя, хранится в CMOS по адресам 4Dh, 4Eh и 4Fh, 7Dh и 7Eh. (см. таблицу 2).

Адрес Комментарий
4Fh Нулевой бит определяет, включен или выключен пароль пользователя
(0 — выключен, 1 — включен).
4Dh и 4Eh 16-битный хэш-код пароля (4Dh — младший байт, 4Eh — старший байт).
7Dh и 7Eh Вторая контрольная сумма CMOS.

Алгоритм отключения данного пароля сходен с вышеописанным.


3. Инженерный пароль

Инженерный пароль позволяет получить доступ к машине, не вводя пароля, определенного пользователем. Для AWARD BIOS известно почти два десятка таких паролей - "AWARD_SW", "AWARD_WG", "j262", "j256", "Syxz", "Wodj", "lkwpeter" и т.д. Инженерный пароль хранится не в CMOS, а в BIOS по адресу F000:EC60h либо по смещению 1EC60h от начала файла ORIGINAL.TMP - распакованной "прошивки" BIOS. Существует два формата хранения пароля:


3.1. "Старый" формат

Пароль хранится в виде 16-битного хэш-кода (См. пункт 4) по адресу F000:EC60h (признаком данного формата является наличие слова 1461h по адресу F000:EC62). При использовании этого формата пароль не уникален - все вышеперечисленные примеры паролей имеют одинаковый хэш-код 1EAAh, то есть с точки зрения BIOS они эквивалентны.


3.2. "Новый" формат

Пароль хранится в зашифрованном виде в строке длиной 8 байт по адресу F000:EC60h (если пароль короче 8 байт, неиспользуемые байты равны 0), признаком нового формата является наличие байта 14h по адресу F000:EC68h). Для шифрования пароля в каждом его байте три старших бита обмениваются местами с тремя младшими битами, а 3 и 4 биты остаются на своих местах. Пароль, хранимый в этом формате, уникален (но легко поддается дешифровке).

Однако многие производители материнских плат по какой-то непонятной причине используют новый формат, а данные пишут в старом - в результате инженерный пароль фактически отсутствует (его невозможно ввести с клавиатуры). В принципе, можно самоcтоятельно зашифровать какой-нибудь пароль (например, тот же "AWARD_SW"), вписать его в распакованную "прошивку" BIOS'а и перезаписать Flash-BIOS, но подобные эксперименты сопряжены с определенным риском. Тем не менее, в случае успеха данный метод поможет избежать неприятностей, связанных с забывчивостью и различного рода "шутниками".


4. Декодирование пароля

Уже несколько раз было упомянуто, что пароль BIOS хранится в виде хэш-кода. В данном пункте будет рассмотрена процедура, с помощью которой вычисляется этот хэш-код, а также алгоритм, позволяющий подобрать пароль по известному хэш-коду.


4.1. Хэширование

Алгоритм, при помощи которого символьный пароль (максимальная длина пароля - 8 символов) "сворачивается" в 16-битный хэш-код, достаточно прост и может быть представлен следующим кодом:

DWORD QHash = 0;int iPtr = 0;int Shift = 1;
for (iPtr = lstrlen(PassWord)-1; iPtr!= -1; iPtr-)
{
 QHash = (QHash+PassWord[iPtr]*Shift) % 65535;
 Shift*=4;
}
return QHash == 0? 65535: QHash;


4.2. Вычисление пароля по известному хэш-коду

Сразу можно заметить, что восстановить введенный пользователем пароль невозможно (если его длина превышает 1 символ), возможно лишь сгенерировать последовательность символов, хэш-код которой будет равен хэш-коду пароля пользователя. Первое, что приходит в голову - последовательно генерировать пароли из 1, 2, 3...8 символов и сверять их хэш-коды с хэш-кодом, прочитанным из CMOS. Реализация этого метода достаточно проста, но он имеет серьезный недостаток: на поиск пароля затрачивается много времени.

Существует и более быстрый способ, позволяющий решить эту задачу (подбор паролей для всех вариантов хэш-кодов занимает около 2 секунд на Pentium 150 MHz). Рассмотрим применение этого метода на примере хэш-кода 1EAAh (при генерации пароля будут использованы символы от "0" (48) до "z"(122)). Первый шаг алгоритма состоит в определении минимальной длины пароля. Значение 1EAAh (десятичное 7850) лежит в промежутке от Min[4] до Max[4] - это значит, что минимальная длина генерируемого пароля для хэш-кода 7850 при использовании вышеуказанного алфавита равна 4 символам (если значение хэш-кода не попадает ни в один из промежутков, следует добавлять к нему число 65535 до тех пор, пока условие не будет выполняться). Символ пароля Pi подбирается таким образом, чтобы выполнялось неравенство Min[i-1] <= Hash Pi*22i <="Max[i-1]." После подбора i-того символа хэш-код перерасчитывается следующим образом: Hash="Hash" Pi*22i. (см. таблицу 3).

Промежутки Min[i], Max[i] для алфавита «0»...«z».
i 1 2 3 4 5 6 7 8
Min[i] 48 240 1008 4080 16368 65520 262128 1048560
Max[i] 122 610 2562 10370 41602 166530 666242 2665090

Для хэш-кода 1EAAh подбор символов пароля происходит следующим образом:

  1. 1008 <= 7850 P3*64 <="2562" (P3="106" ("j");
  2. 240 <= 1066 P2*16 <="610" (P2="51" ("3");
  3. 48 <= 250 P1*4 <="122" (P1="50" ("2");
  4. P0 = 250 - P1*4 (P0 = 50 ("2").

Итак, пароль "j322" при хешировании "свернется" в хэш-код 1EAAh, что нетрудно проверить. Реализация вышеописанного алгоритма очень проста - весь код занимает менее 50 строк на C++.


5. Выводы

Из сказанного следует, что, вопреки мнению некоторых пользователей, пароля BIOS явно недостаточно для обеспечения безопасности компьютеров. В качестве дополнительных мер, затрудняющих проведение атак на пароли BIOS, можно указать:

  1. использование специальных механических устройств, препятствующих вскрытию корпуса компьютера;
  2. отключение клавиатуры при помощи надежного замка;
  3. применение хранителя экрана, защищенного паролем.

Кроме того, следует помнить, что пароль BIOS никак не защищает данные - злоумышленник может просто снять винчестер и просмотреть его содержимое на своей машине. Для защиты данных требуется использовать специализированное ПО (например, PGP или BestCrypt).

Александр БЫЧЕНКОВ,
eris-by@mail.ru

Версия для печатиВерсия для печати

Номер: 

48 за 1999 год

Рубрика: 

Защита информации
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Аватар пользователя Демонов Евгений
А вот похоже что ни все BIOS-ы хранят пароли по указанным адресам вот например у матер ASUS P3V4X у меня не получилось. Те по адресам 11h и 4fh у меня вообще нуль - хотя пароль точно еть. А информация по адресам 4dh 4eh и 1ch 1dh содержит не хэш-код.
Аватар пользователя Savely
Во-первых, ASUS (один из немногих) сильно перерабатывает стандартный Award BIOS.

Во-вторых, в статье, как я понял, обсуждался Award версии 4.51, а здесь, насколько я знаю - 6.0...

Аватар пользователя Дунаевский Максим
Ни один из стандартных паролей для AWARD у меня тоже не сработал. Что делать, не знаю, а админский пароль хочется.