llivejo: (Default)
[personal profile] llivejo
(уныло):
— Меня зовут Версус, и у меня проблема.
(нестройный хор):
— Здравствуй, Версуc...

У сисадминов много паролей, положение обязывает. Даже личные пароли должны быть разными для пущей безопасности, а уж корпоративные точно не повторяются, да еще и меняются всё время. Сотни, если не тысячи их. В памяти такое держать невозможно, записывать в открытом виде — небезопасно, хранить в зашифрованном виде и перешифровывать каждый раз при изменениях — неудобно. Остается использовать какой-нибудь менеджер паролей, который можно держать на постоянно доступном носителе или устройстве. Удобно, безопасно. Запомнил один в меру сложный мастер-пароль, а остальные смотреть и менять легко и приятно.

Ближе к делу. Когда-то давным-давно я сконфигурил некоторые корпоративные железки, выставил пароль на них, записал в менеджер паролей, которым в то время у меня был Keyring for PalmOS. Палм-то тогда интенсивно использовался, сначала Palm Pilot, купленный на Молотке в 1999-м, потом Palm m100. Это сейчас в любом телефоне календарь есть, а тогда незаменимая вещь была: напоминалки, контакты, тексты, пароли.

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

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

И всё. Мастер-пароль давно забыт, в файле-базе Keys-Gtkr.pdb хранится только 20-байтный hash в виде [4 байта salt и 16 байт md5($salt.$passwd)], для проверки правильности введенного мастер-пароля. Сами записи шифруются по алгоритму 3DES ключом, полученным из мастер-пароля.

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

3DES тоже еще крепок, нет атак, которые позволяют сократить пространство перебора его 112-битного ключа, а это ~1034, даже несмотря на known plaintext. Не получается. Самый быстрый способ — «в лоб», причем 3DES медленнее, перебирать надо MD5, им целостность больших файлов проверяют, значит быстрый. Попутно выяснилось, что не так прост md5crypt, которым пароли нынче шифруют, FreeBSD-совместимые, те самые, что в /etc/shadow лежат, да-да, и в любом линуксе тоже. Так вот, этот md5crypt - это тысяча раз MD5, c подстановками пароля и соли по ходу дела.

Значит, брутфорс. Про тот старый мастер-пароль ничего не помню. Помню только что геморройно было его росчерками-граффити вводить. Маловероятно, что он был больше 12 символов, но уж 8 никак не меньше, я ж параноик. Символы пунктуации вряд ли в нем были, но заглавные буквы и цифры - наверняка. Итого по меньшей мере 628, около 4.5 * 1014 вариантов.

Стал искать переборщики паролей, вспомнил о John The Ripper. Нашел свежие патчи к нему, умеющие перебирать именно нужный мне вариант md5($salt.$passwd), там это называется "md5_gen(4)". Скорость перебора близка к обычному raw MD5 — делов-то, перед пробуемым паролем несколько байт неизменяемой соли вставить. Жаль только вот, что даже на двухядерном современном процессоре быстрее чем 2.4 миллиона паролей в секунду перебрать не получится, значит для полного перебора даже восьмибуквенного пароля нужно больше тысячи дней. FAIL.

Поискал, как можно распараллелить перебор. Посмотрел на MPI-патчи, решил что больше десятка машин не смогу на это дело подрядить, все равно не меньше ста дней получается. Где-то в обсуждении наткнулся на упоминание использования проца видеокарты в брутфорсе. Поискал, нашел MD5-переборщик, на видеокарте Nvidia перебирающий 350 миллионов паролей в секунду. Это совсем другое дело, неделя на полный перебор!

Однако моего варианта md5($salt.$passwd) он не умеет, исходников нет, автор не отвечает. Посмотрел на аналоги с открытым кодом, Vernoux GPU md5_crack, olcrack, ни у кого такого нет. У платного Extreme GPU Bruteforcer есть, 155 миллионов паролей в секунду.

Вот, думаю что делать. Купить GeForce GTX 250 за сто евро и Extreme GPU Bruteforcer за €40. Настроить всё и надеяться, что за неделю пароль найдется. Или заплатить кому, у кого железо помощнее?

Date: 2009-11-01 04:24 am (UTC)
From: [identity profile] alogic.livejournal.com
В кои то веки появилась производственная необходимость купить крутую видеокарту и он ещё думает:)

Date: 2009-11-05 12:18 pm (UTC)
From: [identity profile] andy-shev.livejournal.com
Труд работника бесплатен?

Date: 2009-11-03 11:57 am (UTC)
ext_957162: (Default)
From: [identity profile] alex-007.livejournal.com
А посмотреть в нете, может к тем девайсам уже есть какие-то дырки по получению рутового доступа (100% фирмваря не обновлялась). Хотя, возможно в открытом доступе такого и не будет, а разработчики ничего не скажут...

December 2020

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930 31  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 16th, 2026 06:06 pm
Powered by Dreamwidth Studios