LINUX.ORG.RU

Серьезная (возможно уязвимость) проблема в механизме ввода и последующей обработки осью пароля ( например шифрования диска)


0

1

Товарищи, Предлагаю обсудить следующую проблему.

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

пароль - aabcdd.
При установке ос какие то одинаковые подряд идущие символы вводим очень быстро.
После установки, начале загрузки и запросе пароля для расшифровки диска с ос получается следующее.
Введя в нормальном темпе пароль - aabcdd - мы получаем - пароль не верен.
но если ввести в нем (возможно любые/точно любые подряд идущие одинаковые ) символы очень быстро например aa, либо dd. то пароль принимается и происходит загрузка и расшифровка.(замечено было в Suse 12.1, но видимо актуально и в других).
пароль лишь пример - это относится и к паролям вида abc99deFFgh и т.п.

то есть...
aabcdee(нормальная скорость ввода) - false.
(aa)(быстро)bcdee - true
aabcd(ee)(быстро) - true
------------------

с точки зрения программирования, при отсутсвии ошибок в коде, такого происходить не должно. Как минимум таким образом можно по нелепости утратить полностью доступ к ос и ко всем данным. Это уже неприятно. Но самая главная непонятка не в этом. А в том почему подходит второй вариант введения пароля в примере.
Можно было бы все списать на то что при быстром нажатии одной и той же кнопки ось символ вводит лишь один, или что то вроде - вводится пустой(например 0x00) и в результате у нас просто ошибочный пароль. Но это не так! Можно ввести быстро любую часть пароля и тогда то хэш совпадает...
Одним из объяснений может быть следующее - при быстром вводе происходит сбой, например NPE - и пароль становится NULL (или что то в этом духе), и из за сбоя генерируется хэш на NULL пароль. Соотвественно в дальнейшем быстро вводя пароль вы повторяете этот баг - получается что информация зашифрована «условно пустым» паролем, то есть по сути как если бы вы вобще не вводили пароля. Однако пароль отличный от исходного нс быстро введенными символами не подходит. Ни времени ни желания в исходниках оси копаться нет и разбиратся как там это устроено, поэтому и пишу здесь, так как проблема может быть очень серьезной. Возможно там пароль для большей безопастности перед хэшированием, разбавляется солью, причем той, которая зависит от исходного пароля (а вернее того что было введено) - это единственое объяснение которое приходит на ум.


Я сейчас представил, что кто-то заходит на форум людей нетрадиционной ориентации и в первых строчках своего сообщения пишет: «Сразу говорю, что я не такой.»
Лучше бы написал о своём опыте использования linux, а тут бы сами решили, на сколько ты «линуксист».

CYB3R ★★★★★
()

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

anonymous_sama ★★★★★
()

Кстати, сейчас дочитал твой пост до конца. По-моему, ты фигню сморозил.

CYB3R ★★★★★
()

наверное «очень безопасно» работать с NULL/«»/дефолт подобными паролями на самом деле, считая что система добросовестно использует мудренный пароль =\ ...
хотя конечно я считаю что все таки есть логическое объяснение этому. слишком уж серьезная дыра получается. да еще в части ядра, которая по идее должна быть общей и схожа у многих никсов.

star4
() автор топика
Ответ на: комментарий от redixin

а если без троллинга и лишних флудподобных постов?
я тоже считаю это полной фигней, но она лично у меня имеет место. считаете что я это придумал? мда...

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

Если не верите, просто попробуйте это сделать сами... не долго в той же виртуалке проверить. Но я ставил не в виртаулке и возможно тут нужен именно настоящий ввод с клавиатуры.
Сразу замечу - своя ошибка/невнимательность тут исключена.

star4
() автор топика
Ответ на: комментарий от ckotinko

Да не может настолько серьёзный баг быть незамеченным столько лет. Спиши всё на невнимательность ТСа.

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

anonymous_sama

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

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

Сразу замечу - своя ошибка/невнимательность тут исключена

ходят слухи, что виной именно она самая родимая

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

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

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

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

И давно ядро стало заниматься проверкой паролей?

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

даже 2+2 не всегда равно 4.
разумеется я мог где то ошибку сам допустить, но это шанс стремящийся к нулю...
ну вы сами представьте...
задал я пароль aabbcdeefgh
сколько ни ввожу в нормальном темпе - не подходит.
но стоит ввести очень быстро нажав подряд aa или bb или ee или две из них или все три - то всегда подходит.
это проверялось не один десяток раз.

star4
() автор топика
Ответ на: комментарий от ckotinko

в иксах сколько лет стояла проверка if(getuid() && getgid)

А подробнее? Любопытно, однако.

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

Расскажи поподробнее, интересно, что было, но не гуглится.

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

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

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

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

А вы глупостей не пишите, и «придираться» не будут.

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

наберите в текстовик не глядя с десяток раз быстро свой пароль

потом посмотрите какой у вас пароль на самом деле

я не шучу

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

тем более что помню, что где то было(не помню где, но помню что форма ввода прилично тормозила тогда), что нажимая на одну клавишу быстро вылетало две цифры вместо одной. но это было очень давно и я не уверен что с этой же клавой.
об этом я уже думал. может клава какая то сбойная.. в это можно поверить. но если так почему aa(быстро)bcc(нормально) - ok , и aab(нормально)cc(быстро) - ok. все другие варианты - fail.

star4
() автор топика

А «очень быстро» - это как? Например, если я удерживаю букву а, то она начинает быстро повторяться - быстрее, чем я мог бы вводить руками, но недостаточно быстро, чтобы процессор не успевал обработать ввод.

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

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

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

star4
() автор топика
Ответ на: комментарий от Kiborg

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

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

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

так вот добавлю, что суть не в ошибке вида вида pass == input(когда на самом деле pass != input) . диск шифруется, (ну по крайней мере должен шифроваться), а значит хэш точно совпадает.

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

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

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

да кстати еще вариант, который может быть. ошибка в получении хэша.
может хэширование не предусматривает наличие какого то спецсимвола(например не все 256 можно использовать, какие то зарезервированы)? который выдает клавиатура например (тот же 0х00) при быстром нажатии(или не усваивает ос опять же из за быстрог нажатия). тогда возможный вариант развития -> пароль со спецсимволом, котрого там быть не должно, отправляется на функцию получения хэша, та возвращает ошибочный хэш, и этот левый/пустой/ хэш как ни в чем не бывало и используется в дальнейшем.


хотя вариантов много, а на поиске и фиксе багов(но не линукса разумеется) собаку съел Х_Х.

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

star4
() автор топика
Ответ на: комментарий от Trashman

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

star4
() автор топика
Ответ на: комментарий от YYY

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

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

тоесть хочешь сказать, что перед монтированием, если медленно вводить правильный пароль, то он не принимается, а если его ввести быстро, то все ок?

это так толсто, что я не верю что это на лоре

redixin ★★★★
()

Соберите себе initramfs со статически собранной отладочной версией cryptsetup, загрузитесь с него и попытайтесь воспроизвести проблему, читая отладочные сообщения.

Можно даже на время тестирования добавить в код вывод на экран введённого пароля, полученной функции от него и т.д.

AITap ★★★★★
()

star4

Сразу говорю, что я не линуксист.

КЛБ

star4

признак бекдура

КЛБ

star4

Суть в следующем - если у вас в пароле есть одинаковые подряд идущие символы, то введя их очень быстро мы получаем неоднозначность(пример):

не выбирайте такие пароли (их труднее запоминать, кстати)

star4

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

бред. локальный рут может сменить что угодно, в какой угодно системе.

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

мда... у вас тут двач какой то... слышал о лоре неплохие отзывы, да только давно это было.
ну да ладно.

redixin - я все расписал подробно.
AITap - я написал что не собираюсь ковырятся, лишь подробно описал ситуацию. зачем давать такие банальные советы? это очевидно.
drBatty - вообще нокоммент.. локальный рут сможет расшифровать закриптованный диск? ну ты написал... :D идиот какой то.
опсик - 5 раз написал что я не стал разбиратся в чем проблема, а ты мне предлагаешь еще с камерой сидеть и выложить как я мучаю комп быстрым и медленным вводом?)))

всем спасибо, все свободны.
вобщем одно балабальство у вас тут, товарищи. спасибо этому дому, пойдем к другому xD.

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

хотя на будующее для троллинга буду иметь в виду. у вас тут для троллей хорошо, как в сказках Толкиена.

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

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

Поэтому вопрос: а если быстро набирать не две одинаковые клавиши, а две разные, что изменится?

Kiborg ★★★
()

распиши по шагам - что и как делал (какой дистр какая виртуалка, какая гостевой дистр). чем подробней - тем лучше - больше шансов воспроизвести.

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

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

балабольство — твоё заявление «5 раз написал что я не стал разбиратся в чем проблема».

поэтому: пруф или не было.

opsik
()

Позырь настройки своего клавикорда )))

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

Минусанул тебе в карму.
Если продолжишь в том же духе, то скоро не сможешь писать никуда кроме L-O-R

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

она лично у меня имеет место

посмотрел на свои криптоконтейнеры LUKS, попробовал вводить быстро-медленно - похрену, если пароль неверный - не пускает. Кури, где накосячил и БОЛЬШЕ так не делай

Pinkbyte ★★★★★
()

премного извиняюсь, но, по-моему, Вы курите какой-то некачественный канабис %)

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

я написал что не собираюсь ковырятся, лишь подробно описал ситуацию

А кому надо ковыряться? Ни у кого, кроме тебя, ошибка не воспроизводится.

geekless ★★
()

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

PS: пасс зачетный.

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