храните пароли в сберегательных файлах
Oct. 31st, 2009 02:58 pm(уныло):
— Меня зовут Версус, и у меня проблема.
(нестройный хор):
— Здравствуй, Версу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. Настроить всё и надеяться, что за неделю пароль найдется. Или заплатить кому, у кого железо помощнее?
— Меня зовут Версус, и у меня проблема.
(нестройный хор):
— Здравствуй, Версу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. Настроить всё и надеяться, что за неделю пароль найдется. Или заплатить кому, у кого железо помощнее?
no subject
Date: 2009-11-03 11:57 am (UTC)no subject
Date: 2009-11-03 12:15 pm (UTC)но желание взломать моё паролехранилище не исчезло :-)