LINUX.ORG.RU

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

 ,


0

0

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

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

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

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

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

★★★★★

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

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

Старая истина - пишите программы понятней и проще, и будет щастье. А хакеры всё изощряются... ну и нарываются время от времени.

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

Это же Бэта. А Убунта -- как раз для тестирования и предназначена.

adv
()

А смысл пароля в загрузчике? Лучше уж в биос-сетап, и вообще, даешь груб в биосы!

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

>А смысл пароля в загрузчике? Лучше уж в биос-сетап

> не пойму что-то. Как пароль на биос защитит загрузчик?

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

> int grub_auth_strcmp (const char *user_input, const char *template)
> {

> int ok = 1;

> const char *ptr1, *ptr2;

> for (ptr1 = user_input, ptr2 = template; *ptr1; ptr1++)

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

> ptr2++;

> else

> ok = 0;

>

> return !ok;

> }


Это какой-то буллщит господа! Макконнелл со своим "Совершенным кодом", увидев такое, хватается за голову трясущимися руками, открывая молча рот, не находя слов! И только одна мысль крутится у него в голове - "Как хорошо, что в микрософт так не пишут!".

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

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

> А зачем нужен замок на двери, если могут влезть в окно?

Это не замок на двери. Это табличка с надписью "осторожно, злая собака". Причём, при этом собаки нет. Пароль на загрузчике - не нужен.

anonimus_nax
()

grub2 в своем репертуаре.

А сколько еще подобных косяков там осталось...

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

>Это табличка с надписью "осторожно, злая собака". Причём, при этом собаки нет. Пароль на загрузчике - не нужен.

Многих отпугнёт и табличка.А в данном случае, якобы "ненужность" -не оправдание кривизны реализации.

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

Offtop: Интересно: в Убунте 9.10 обещали Grub 2, в реалии там Grub 1,97. Отсюда математический вывод Grub 2 = Grub 1,97?

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

>Макконнелл со своим "Совершенным кодом", увидев такое, хватается за голову трясущимися руками, открывая молча рот, не находя слов! И только одна мысль крутится у него в голове - "Как хорошо, что в микрософт так не пишут!".

Очень толсто.

anonymous
()
Ответ на: комментарий от anonymous
/* 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);

Чота я не осилил трюк.

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

>>И только одна мысль крутится у него в голове - "Как хорошо, что в микрософт так не пишут!".

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

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

Всё просто. Простой strcmp отработает мгновенно, если первый же символ неверен. Если первый верен, а неверен второй – то чуть дольше. Если первый неправильный 3-й, то ещё дольше. И т.д.

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

Время проверки пароля будет в любом случае не меньше 100 мс, даже если пароль из 1 символа. Какой длины строки можно сверить за 100 мс я не знаю, да и это сильно зависит от железа. Хотя, будто кто-то заметит разницу между 10 мс и 30 мс, к примеру... Идея довольно странная, в общем.

anonimus_nax
()

Просто хочется взять и у$%ать. Это каким надо быть укурком, что бы писать сравнение строк таким способом? Если так реализована простейшая функция, то что там с более-менее сложным кодом? Раскладывают конфиги на ряды Фурье? И не надо мне говорить, что это бета. За такой код надо убивать. Точка.

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

> Многих отпугнёт и табличка.А в данном случае, якобы "ненужность" -не оправдание кривизны реализации.

Согласен, табличка может отпугнут. Правда пароли на рута и все другие логины в таком случае тоже должны отпугнуть. И я не оправдываю это решето, я сам вообще использую lilo, мне его функционала вполне хватает. Загрузчик должен загружать ОС, зачем в него ещё кучу всякого хлама пихать?

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

>>Отсюда математический вывод Grub 2 = Grub 1,97?

Ну почти 2. Всё-таки 1,97 ближе к 2, чем к 1. Математически. А так у них извращённая система нумерации. Раньше груб 0.9х был.

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

> будто кто-то заметит разницу между 10 мс и 30 мс, к примеру

Скорее 0.1 и 0.3 мкс. В загрузчике вряд ли актуально, так как измерить можно разве что подключившись осциллографом к процессору :)

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

> Загрузчик должен загружать ОС, зачем в него ещё кучу всякого хлама пихать?

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

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

Не придирайся, я для примера сказал. И да, других способов измерения кроме "на глаз", в загрузчике я не знаю, поэтому и привёл такой пример.

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

>> Загрузчик должен загружать ОС, зачем в него ещё кучу всякого хлама пихать?

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

1) Отсутствие необходимости переустанавливать загрузчик после правки - спорный вопрос. С одной стороны действительно удобство, с другой стороны из-за этого в загрузчик надо тянуть код для работы с различными файловыми системами, что явно не идёт на пользу загрузчику.

2) Передача параметров ядру - можно и через lilo сделать, если надо. А если не нужно, то лучше вообще выключить.

anonimus_nax
()

Какое счастье, что мой пароль не linuxorgru!

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

> Скорее 0.1 и 0.3 мкс. В загрузчике вряд ли актуально, так как измерить можно разве что подключившись осциллографом к процессору :)

Это точно легче вынуть хард и прочесть где там пароль прописан.

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

>За такой код надо убивать

А реализация grub_strcmp() лучше выглядит?

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

> Передача параметров ядру - можно и через lilo сделать

Прямо из меню загрузчика, без правки конфига? (lilo не разу в жизни не видел, просто троллю)

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

> Прямо из меню загрузчика, без правки конфига? (lilo не разу в жизни не видел, просто троллю)

Да. По крайней мере я пробовал параметры root, init, ro/rw. Остальное не знаю. Но другое ядро без правки конфига там нельзя выбрать, если оно заранее не прописано.

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

>Не, а что, кто-то реально использует пароль в загрузчике? Зачем? Чтоб на логин не ставить?
а при логине сносится за время загрузки ядра. В загрузчике указываются определенные параметры ядру и пароль не требуется.
так-что надо сейф использовать. либо шифровать.

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

Но всё равно при физическом доступе можно будет легко вскрыть линукс. Простая загрузочная флешка или диск типа LiveCD, сброс пароля рута и всё, все дела. И ни пароль на загрузчике не спасёт (просто загрузчик не запустят, если надо - его можно и переписать), ни пароль на руте (его сбросить можно), ни пароль на биосе (тоже сбрасывается). Правда такой взлом бесследным не назвать.

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

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

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

При этом не работала сеть.

Nxx ★★★★★
()

поэтому пароль нужно ставить из спецсимволов, которых нет на клавиатуре, в смысле... эээ ну вы меня поняли :)

Correctnoe_imya_polzovatelya ★★★★★
()

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

Все нормально было - автодополнение, была надежда, что на рута подобное тоже допилят. Теперь все похерят :(

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

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

Все это хорошо, но ИМХО правильнее отдать это EFI.

adv
()

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

Гонево. Только начало строки. Для данного пароля -- "l", "li", "lin", "linu", "linux", "linuxo", "linuxor", "linuxorg", "linuxorgr", "linuxorgru".

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

>Таки да, сейф или шифрование могут помочь. Но уж явно не пароль на загрузчике.

Сейф без пароля на загрузчике не имеет смысла.

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

> Простая загрузочная флешка или диск типа LiveCD, сброс пароля рута и всё, все дела. И ни пароль на загрузчике не спасёт (просто загрузчик не запустят, если надо - его можно и переписать), ни пароль на руте (его сбросить можно), ни пароль на биосе (тоже сбрасывается). Правда такой взлом бесследным не назвать.

Все еще проще. Берем СТАРЫЙ граб, заливаем его на флешку/болванку/дискету/netboot, входим в консоль, прописываем что-то вроде kernel (hd0,0)/vmlinuz init=/bin/sh и молча грузимся. Дада, с оригинальным ядром. Дада, никакого пароля у нас не спросят. Да, мы сразу в оригинальном окружении будет.

Спасет только шифрование.

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

> Во-вторых, а зачем нужен пароль на загрузчик?

Офис, класс, машиный зал...

sv75 ★★★★★
()

вот это ошибочка. лучше бы индусов за еду наняли

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

>> *ptr1 == (ptr2 ? *ptr2 : ptr1[1])
> Жесть. :))
Это ты только часть жести увидел. :)
Подумай теперь вот над этим:
*ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ptr2 != NULL
Вот это - точно жесть! :)))

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

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

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

> ptr1[1] А если пароль из одного символа, то оно с '\0' будет сравнивать?

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