LINUX.ORG.RU

Обнаружена возможность обхода пароля в GRUB 1.97

 ,


0

0

Через две недели после релиза GRUB 1.97 была найдена ошибка позволяющая обойти пароль загрузчика.

Например, если у вас пароль «linuxorgru», то обойти можно было просто введя например «l» или «org» или любую часть строки (отчёт об ошибке в баг-трекере Debian).

Также в релизе GRUB 1.97.1 доступна поддержка GNU/Hurd и исправления сборки для MacOSX.

Релиз доступен для загрузки с FTP сервера проекта.

>>> Подробности

★★★★★

Проверено: maxcom ()

Люблю GRUB. :) Где еще можно встретить такой баг?

Ruth ★★
()
Ответ на: комментарий от anonmyous

*ptr1 == (ptr2 ? *ptr2 : ptr1[1])

Это ты только часть жести увидел. :)

*ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ptr2 != NULL

Вот это - точно жесть! :)))

Можно пояснение для непрограммистов, где смеяться?

dexpl ★★★★★
()
Ответ на: комментарий от k0valenk0_igor

> Очень надежно. И своевременно так... если перегружать сервер стоящий где-то там (в сервер-центре, скажем), когда ты где-то здесь.

ну и зачем в таком случае ставить пароли на загрузку вообще?

isden ★★★★★
()

У загрузчика винды даже названия нет, но справляется он со своими обязанностями на порядок лучше, чем это тормозное поделие.

zenden
()
Ответ на: комментарий от zenden

> У загрузчика винды даже названия нет, но справляется он со своими обязанностями на порядок лучше, чем это тормозное поделие.

а как там загрузить линух? как отредактировать параметры запуска системы из самого загрузщика?

EuroElessar
()
Ответ на: комментарий от EuroElessar

Это в обязанности загрузчика винды не входит. Да и кстати, grub не умеет грузить винду, хотя не спорю, он умеет запускать, и только запускать, загрузчик винды.

anonimus_nax
()
Ответ на: комментарий от wfrr

А я подозревал, что он есть, но не пользовался никогда

Cargo
()
Ответ на: комментарий от dexpl

>> *ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ptr2 != NULL

> Можно пояснение для непрограммистов, где смеяться?

Тут действительно жесть из двух частей. :)) Во-первых, если ptr2 будет пустым, то текущий символ из ptr1 сравнивается с первым символом из ptr1. :) А во вторых, всё это завязывание на проверку ptr2 не имеет смысла, т.к. условие сразу становится ложным, если ptr2 пустой. :) Вкратце, как я понял: ptr2 ? (*ptr1 == *ptr2) : FALSE

cruxish ★★★★
()
Ответ на: комментарий от zenden

>У загрузчика винды даже названия нет, но справляется он со своими обязанностями на порядок лучше, чем это тормозное поделие.

bootloader, не? :D загрузчику можно передавать параметры, правда только через boot.ini, что уже костыль и не имеет смысла практически. о последних загрузчиках не в курсе. прозреваю в них потроха loader из рипнутой системы (FreeBSD) и отдельный /boot (есть при установке автоматическое создание раздела метров в 100 не пойми зачем...)

anonymous
()
Ответ на: комментарий от anonymous

> загрузчику можно передавать параметры, правда только через boot.ini, что уже костыль и не имеет смысла практически.

GRUB можно передавать параметры, правда через menu.lst, что уже костыль и не имеет смысла практически.

cruxish ★★★★
()
Ответ на: комментарий от cruxish

> В GRUB можно передавать параметры, правда через menu.lst, что уже костыль и не имеет смысла практически.

В грубе у меня есть возможность передать параметры из командной строки, а не только из файла.

А в винде с кривым boot.ini без системы, где можно поправить его, ты ммм... сосёшь (:

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

> эээ, libc в GRUB? ну-ну...

А что оно даже с libc не слинковано? И вообще не с чем не слинковано? Все сами написали?

anonymous
()
Ответ на: комментарий от FatBastard

> Пароль в бивисе сбрасывается, а в грубе нет.

А надо в бивисе на винт пароль ставить, если паранойя. Сбрасывается только вместе с винтом. На угадывание не больше 10 попыток. Потом винт можно форматировать заново :) .

Vit ★★★★★
()
Ответ на: комментарий от PolarFox

> В грубе у меня есть возможность передать параметры из командной строки, а не только из файла.

Вы не поняли, суть была в том, что задавать параметры в каком-то файле - это костыль и не имеет смысла практически. ;)

cruxish ★★★★
()

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

Vit ★★★★★
()

>Например, если у вас пароль "linuxorgru", то обойти можно было просто введя например "l" или "org"

А если ввести opensourceru - прокатит?

anonymous
()
Ответ на: комментарий от anonymous

>Ваш пароль содержит строку onicm, я прав?

Тонко, но - нет. :)

jcd ★★★★★
()
Ответ на: комментарий от anonimus_nax

> Если к компу есть физический доступ, вскрыть его несложно, пароль на загрузчике не помеха. Если же его нет - то и на загрузчик пароль не нужен.

Если физического доступа нет, то удобнее один раз поставить пароль, чем ставить его несколько раз в каждой отдельной системе на данном компьютере.

anonymous
()
Ответ на: комментарий от yirk

> Не, а что, кто-то реально использует пароль в загрузчике? Зачем? Чтоб на логин не ставить?

чтоб юзер не мог дописать свои параметры к запуску ядра, не вписал init=/bin/bash и не поменял рутовый пароль :) Ну и в купе надо пароль на биос (на изменение устройства загрузки) ставить, иначе малоэффективно.

azure ★★
()
Ответ на: комментарий от legolegs

>>автодополнение по Tab не ожидается? Жжошь сцуко!

anonymous
()
Ответ на: комментарий от FatBastard

>Чтобы в отсутсвии тебя твое ведро не загрузили с init=/bin/sh

сдром, сеть и юсб разъемы ты тоже с собой уносишь?

А то ведь эти суки со своим грубом придут...

AVL2 ★★★★★
()
Ответ на: комментарий от azure

>Ну и в купе надо пароль на биос (на изменение устройства загрузки) ставить, иначе малоэффективно.

F12 отменили?

AVL2 ★★★★★
()
Ответ на: комментарий от cruxish

>> В грубе у меня есть возможность передать параметры из командной строки, а не только из файла.

>Вы не поняли, суть была в том, что задавать параметры в каком-то файле - это костыль и не имеет смысла практически. ;)

похудей уже!

речь была о том, что передавать ПАРАМЕТРЫ __ЗАГРУЗЧИКУ__ ЧЕРЕЗ ФАЙЛ - это МАРАЗМ! передача параметров через файлы аппликухам другого рода - это норма, но не загрузчику же?! и таки да "задавать параметры загрузки в файле - это костыль и не имеет смысла практически." понадобиться они могу единожды, а файло ковырять придется как минимум дважды.

спасибо за внимание!

anonymous
()
Ответ на: комментарий от legolegs

ВНЕЗАПНО: следующую версию GRUB планируется писать целиком в виде однострочника на Perl.

anonymous
()
Ответ на: комментарий от legolegs

Биос может защитить комп от загрузки. Причем если батарейка встроена в биос (а на ноутах это не редкость) то спасет только замена материнской платы

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от res

>Сравнивать и хранить нужно не сами пароли, а их хэши.

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

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> Тут вон на strcmp пытаются байты кода экономить

Если в загрузчике есть поддержка совершенно ненужных вещей вроде фоновых рисунков, то уж для реализации SHA-512 место должно найтись.

res
()
Ответ на: комментарий от res

>Если в загрузчике есть поддержка совершенно ненужных вещей вроде фоновых рисунков, то уж для реализации SHA-512 место должно найтись.

В принципе, соглашусь. Тогда другой аргумент: хеш вписывать в конфиг не удобно

legolegs ★★★★★
()
Ответ на: комментарий от Boomman

>Open sores разработчики молодцы в очередной раз, повеселили, да.

Острячок, у проприетарщиков такая тупизна после релиза и дюжины патчей остаётся. А тут - баг в бете уже нашли и секурно исправили.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> Тогда другой аргумент: хеш вписывать в конфиг не удобно А в /etc/shadow -- удобно?

adv
()
Ответ на: комментарий от res

> Сравнивать и хранить нужно не сами пароли, а их хэши.

legacy grub так умеет

azure ★★
()
Ответ на: комментарий от anonymous

[code]

int grub_auth_strcmp (const char *s1, const char *s2) {

int ret; grub_uint64_t end;

end = grub_get_time_ms () + 100; ret = grub_strcmp (s1, s2);

/* This prevents an attacker from deriving information about the password from the time it took to execute this function. */

while (grub_get_time_ms () < end);

return ret;

} <<<

чтото не нравитсья мне эта реализация :-\ .. а вдруг end попадёт на грань между концом времени и его началом (непомню там какой год) , а while() его перескочит.

тогда получитсяь что тупо зависло.

а если ret перепрыгнет грань конца-начало времён , а while() тогда при первойже итерации ни задержитсья не на секунду (и злоумышненник получит в этот миг нужные ему наносекундо-сведения)

а ведь в биосе можно поставить время любое. ну или если не поставить то просто малоли в какое время работает компьютер :-) [может будущее и смена времён уже наступила! :DDD . только не вызывайте опять людей в белых халатах :-) ]

вобщем ИМХО лучше уж такая реализация:

int grub_auth_strcmp (const char *s1, const char *s2) { 

const grub_uint64_t delay = 100;

int ret; 
grub_uint64_t begin;
grub_uint64_t curr_time;

begin = grub_get_time_ms (); 
ret = grub_strcmp (s1, s2);

/* This prevents an attacker from deriving information about the
 password from the time it took to execute this function. */ 


do {
    curr_time = grub_get_time_ms();
}
while(
    begin / delay + 0 == curr_time / delay ||
    begin / delay + 1 == curr_time / delay 
)

return ret;

}

ну вобщем както так :-)

// p.s. «+ 0» — для понятности алгоритма

mkfifo
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.