Главная > Бездна | Чтиво > Уплывающие md5 хэши

Уплывающие md5 хэши

08.06.2012 0 коммент. » Просмотры: 2 076

Security

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

Оригинал тут: md5() + соль. Хранение паролей в базе данных. Комментарий №24.

Добавлять по очереди то соль, то воду, то ещё чего, можно до бесконечности... Не вижу смысла.
Первая проблема - это, короткий, "не извращённый" (и часто состоящий только из цифр) пароль пользователя. Взлом заключается в сравнении украденного хеша и хеша из "радужной таблицы". Размеры таблицы - не бесконечны. Скажем при переборе всех паролей из 6 символов (т. е. перепробовав все возможные символы в таком пароле, например 0-9, a-z, A-Z, всего 62 символа) получаем 62^6 (62 символа в 6-ой степени) = 56'800'235'584 хешей. Каждый длиной 32 байта, значит места на диске для хранения таблицы нужно 56'800'235'584 * 32 = 1'817'607'538'688 т. е. примерно 2 Тбайта. Это не очень много , но и пароль у нас был длиной всего в 6 символов, и именно такие короткие пароли (ну или чуть длиннее 9 -12 символов, но тогда генерируются и хранятся хеши паролей по словарю, т. е. по списку чаще используемых узерами паролей, это обычные слова, цифры ну и т. д., т. е. не "извращённые" пароли) . А теперь посчитайте сколько хешей будет при длине пароля в 32 символа. Но заставлять узера вводить и помнить пароль из 32-ух символов, конечно же не реально, поэтому просто-напросто прогоняем реальный пароль узера 2 раза, например функцией md5();. После первого прогона мы получаем пароль, при чём не простой, а "извращённый", и длиной в 32 байта. А при втором прогоне, уже пароля из 32-х символов, получаем новый хеш, который и сохраняем. Теперь, что бы путём перебора определить из имеющегося хеша предыдущий хещ, а за тем по найденому предыдущему хешу - реальный пароль узера, нужна будет, мягко говоря, "бесконечная" таблица хешей..................
Вот так, примерно!

Но это всё была присказка!!! а сказка - впереди...

Теперь возвращаемся к нашей главной проблеме, КОРОТКИЕ И ПРОСТЫЕ ПАРОЛИ узеров.

Что мне нужно, что бы "взломать" выше описанный способ "хренения" паролей. А главное - что я уже ИМЕЮ для этого?
А имею я совсем НЕ МАЛО! Можно сказать, что у меня уже есть пароль узера!!! А точнее говоря - у меня уже есть все пароли большинства узеров!!! А почему? да всё потому же! "короткие и простые пароли узеров".

Теперь, что я делаю...
1. Я регюсь на взламываемом сайте.
2. Взламываю БД или то место, где хранятся хеши паролей. (это условие данной темы)
3. Нахожу свой хеш. (по моему имени узера)

-. Зачем мне нужны первые три шага?
+. Для того, чтобы определить, каким образом получают хещ на сайте. Т. е. я перебираю возможные варианты:
md5($pass);
md5(md5($pass));
md5(md5(md5($pass)));
sha1(md5(crypt($pass)));
... и т. д., пока не получу мой хеш!
Если программер использовал просто md5(md5($pass));, то мне легче.

4. "Формула" получения хеша у меня есть, теперь мне нужна прога которая сгенерирует
все хеши ПО ДАННОЙ формуле (скачаю или сам напишу), и не много времени (если в секунду 1'000'000 хешей, то для 56'800'235'584 хешей это около 20 часов, НО это считайте МАКСИМУМ, а если по словарю перебирать или только пароли из цифр, то времени на порядок меньше потребуется).
И ВСЁ! Все пароли длиной до 6-и символов у меня "в кармане"!

И так! Этот метод взломали, теперь ПРО СОЛЬ...

Ломаем метод автора статьи...

-. Выполняю первые 3 шага.

Теперь, если я взломал БД и получил хеши паролей, то я также и получил каждую "солинку"!!!

И что я делаю???
Да всё тоже самое!!!

Просто теперь при поиске "формулы" получения хеша я добавляю эту соль, при чём всеми возможными вариантами!

md5(md5($pass.$salt));
md5(md5($pass).$salt);
md5(sha1($salt.crypt($pass)));
... и т. д..
Ну а далее думаю уже догадываетесь... Генерю все хеши добавляя соль УЖЕ в правильное место и используя правильную формулу.

НО здесь как видите уже есть один "худенький" плюсик.
Речь уже идёт не о взломе всех паролей, а о взломе одиночного аккаутна, соль то для каждого узера своя, а значит генерировать таблицу придётся для каждого узера заного. Во как!
А почему плюсик "худенький"???
Да опять же всё потому, что "ПРОСТЫЕ И КОРОТКИЕ ПАРОЛИ"!!! (на верное я вам уже надоел?!... терпи'те!)

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

даты типа 010101; (длина 6 символов, всего их от 01 января 1901 года, до 22 апреля 2011 где то 365*110=36500 !!! ВСЕГО ТО ?!! и это я ещё щедрый, а можно смело убрать первые лет 50 и последнии лет 10-15.

Так же, даты когда узер пишет что то типа 111977; (1 января 1977 года, т. е. варианты без нулей)

Так же варианты с 7-и значными датами и с 8-и значными...

"Год у меня был... 3 - за побег... 5 - за дет-сад... ну сколько за старуха дадут? ну пусть 10 лет... И я из-за каких-то 16 лет........................." =)))

Ну пусть у нас получилось всего 1'000'000 вариантов даты рождения! Если машина генерирует 1'000'000 хешей в секунду - получается я буду вскрывать по узеру в секунду, а если двигаться от младших к старшим, то ещё быстрее!!!

И что у нас получилось? Мы вскрыли за один час - 3600 узеров "с СОЛЬЮ"!!!!!!!!

И вся прелесть в том, что и соль НЕ ПОМОГЛА! А почему??? Вижу по лицу, уже догадались. =)))
последний раз: "ПРОСТЫЕ И КОРОТКИЕ ПАРОЛИ"!!!

"И что же?" - скажете вы - "значит нет надёжного метода???".

И ПРАВИЛЬНО скажете!

Вы ищете в интернете надёжный метод или как вы ещё любите "часто используемый метод", и при этом вы УЖЕ СОВЕРШАЕТЕ ОШИБКУ! потому, как "то, что знают двое - знают все!" и как вы знаете "то, что один человек построил - другой завсегда поломать сможет".

Ну так и что же делать???

А всё просто, "ХОЧЕШЬ ЖИТЬ - УМЕЙ ВЕРТЕТЬСЯ!"

Не используйте общеизвестные приёмы, или изменяйте их на свой манер, отпиливайте, приклеивайте, меняйте местами, копируйте, придумывайте что то своё, и т. д. и т. п.. Думайте своей головой. И вообще, подумайте, а стоит ли овчина выделки?!! Нужна ли вам эта бетонная крепость, или можно и и так прожить в деревянной... Даже если вы напишете код, который будет чередовать функции хеширования 10-20 раз, например в файле "enter.php". Во первых: что мне помешает написать программку которая будет перебирать все варианты чередования функций md5, sha1, crypt, и т.д., и в итоге будет находить нужную последовательность за считанные секунды. А во вторых: где гарантия, что я не заставлю сервер не выполнить ваш файл "enter.php", а просто прочитать его, или найти в вашем сайте ещё какую дырку и получить исходный код файла. И тогда хоть ваш код чередует 1000 раз, да и всё что угодно, я просто повторю ваш код при генерации таблицы хешей и результат будет тот же, а все ваши старания понапрасну... =(((

Так что, надёжной защиты нет. Бывает лишь более надёжная защита, и бывает хакер который хитрее Вас, кстати, который не обязательно умнее Вас!

Автор: | Рейтинг: 4/5 | Теги: ,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>