Pull to refresh

Comments 95

UFO just landed and posted this here
Можете подсказать статьи или советы на хранение паролей в базе, в том числе хотелось бы сравнение устойчивости распознавания хешей?
UFO just landed and posted this here
Вот такие ссылки надо в конце статьи делать, спасибо.
Желтые заголовки, громкие крики, но не поучают)
где гарантия, что я не заставлю сервер не выполнить ваш файл «enter.php», а просто прочитать его, или найти в вашем сайте ещё какую дырку и получить исходный код файла

Мда.

А где гарантия, что я не взломаю ваш ДЦ и не украду ваш сервер?
Если хакер получил БД на чтение это уже эпический ппц. Вопрос только в том, как он его получил.
Я не понимаю как он может получить возможность выполнения произвольных команд на моём проекте. С учетом того, что я не жопорукий.
Я не понимаю как он может получить возможность выполнения произвольных команд на моём проекте.

Понимание может возникнуть по следам расследования взлома. А может и не возникнуть — дыра так и останется открытой. Разумеется, я не телепат оценивать чью-либо квалификацию дистанционно, да и не всеведущий анонимус, чтобы перечислить все способы обойти защиту, но было бы рациональней учитывать любую возможность (тем более, что окружающий мир — тоже меняется, и то, что казалось невозможным вчера, сегодня вдруг оказывается неприятно доступным). И в последнюю очередь стоит расслабляться, если пробегают мысли «уж я то я защищён».
Всё это понятно. Баги в ORM/человеческий фактор. Я лишь указал, что аргументы по ссылке не такие уж и аргументы.
В конце концов просьбу в обосновании любого довода можно свести к закону Мерфи.

Мне лично абсолютно параллельно, что увели 500900 аккаунтов на ресурсе(будь это хоть Google), больше волнует как они это сделали. Может там у ребят не фильтровалась одна чертова sql`ка и суперхакер случайно натолкнулся. Я так однажды получил full-access к одному серьному магазино из-за бага в API.
В конце концов просьбу в обосновании любого довода можно свести к закону Мерфи.

Можно, конечно, и на Мерфи сослаться, причём не обязательно с отговоркой про случайность — при систематическом «тестировании» сервиса ботами, при тотальной проверке всех возможных путей, из простой вероятности это уже превращается в предельный случай — так или иначе найдут. Но и закон Мерфи — даже не знаю, у самого был случай: небольшой сайт, ничего сложного, всё что можно вылизано от и до, всё перепроверено — читаю как-то логи, смотрю — SQL, повторил этот запрос — успешная SQL-инъекция, оказалось кто-то с первой попытки (других подобных запросов не было) нашёл на сайте единственную формочку, где параметры валидировались некорректно. Но я ведь был уверен. С тех пор я не уверен никогда — уверенность дорогое удовольствие. Кстати, и на хабре недавно пробегала интересная статья на похожу тему.

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

Невероятность многих событий — слишком переоценивается. И признаться, иногда очень хочется оценить свой труд повыше — греет оно как-то душу. Но «плохое» случается не по «закону подлости», а по закону неизбежности — рано или поздно найдут то, о чём раньше не мог и подумать, а теперь уже не можешь и исправить.
Комментарий конечно хорош, но выводы из него сделаны неправильные. Понятно что против простых паролей бороться никак нельзя (ну кроме как проверкой сложности сразу при вводе пароля, но если у вас не банк то пользователи будут очень недовольны), но, мне кажется, суть не в том чтобы защитить пароли всех клиентов от взлома, а чтобы МАКСИМАЛЬНО постараться защитить их.
А для этого (учитывая скорости перебора паролей на GPU) нужно не извращаться с хешами, а использовать bcrypt, scrypt или PDBKF2.
Как так «против простых паролей бороться никак нельзя»… Разве добавление соли не спасает, не делает пароль непростым?

1) постоянная соль, одна на проект
2) рандомная соль, своя для каждого ппроля (хранится в БД — странный способ, учитывая что по сценарию базу у нас увели)
3) соль на основе пароля (берём энный байт...)
Так, давайте разбираться.
Вариант 1 наиболее плох. Принято считать, что злоумышленник не только увел у вас БД, но и имеет доступ к коду. То есть хранится у вас соль в БД или в коде — принципиальной разницы нет. Но если у вас одна соль и она известна злоумышленнику — это собственно аналогично отсутсвию соли вообще, потому что за 1 проход брутфорса можно проверить сразу все хеши в БД.
Если же соль переменная — это лучше, так как злоумышленнику придется вычислять хеш для каждого пользователя.
Большой разницы рандомная ли там соль при этом или как то зависит от пароля/логина нет — но по канону принято использовать рандомную соль. :)
Другое дело что даже со случайной солью современные брутфорсеры на GPU могут перебирать парочку — другую миллиардов хешей в секунду (Для MD5). То есть 10 символьный цифровой пароль будет вскрыт секунд за 10 — и тут не спасет никакая соль.
Используя более сложные хеши процесс можно замедлить раз в 10. Ну пусть в 100 — но и тогда мы получим 6 часов — тоже вполне себе нормальное время. Плюс скорость GPU все время растет и растет быстро (пока, по крайней мере).
Поэтому люди придумали более сложные способы хеширования. Bcrypt нарример можно настроить чтобы он на современном компьютере вычислял хеш скажем 100 мс — то есть 10 хешей в сек. Пусть злоумышленник ускорит перебор на GPU в 1000 раз — до 10000 хешей в секунду. Тогда 10 символьный цифровой пароль будет ломаться 1 000 000 секунд = чуть меньше двух лет грубо. :)
От пароля «1234» и это не спасет, но уже лучше.
1. — ?! Ну есть у нас соль — как это поможет вычислить/брутфористь md5(salt+pwd)? Прямым перебором?
Вы будете смеяться — но да. Посмотрите слайды к свежему докладу по этому поводу.
Особенно впечатляет вот эта табличка — image
Я уже молчу про перебор по словарю.
37-й комментарий, в качестве ответа на 24-й и 36-й, ИМХО, не менее ценный: «System security should not depend on the secrecy of the implementation or its components» (Безопасность системы не должна зависеть от секретности реализации или элементов). Почему-то об этом очень часто забывают.

А по поводу описанных конструкций типа md5(md5('пароль').'соль') для повышения защищенности обычного md5('пароль'.'соль'), так существует же специально созданный для таких целей алгоритм HMAC, где в качестве сообщения будет выступать пароль, а в качестве ключа — соль.
Верно. А если еще вычислять HMAC много раз для затруднения брутфорса мы получим стандарт «PBKDF2» :)
Самое главное здесь — не надо изобретать велосипед с неизвестными свойствами, когда есть проверенные алгоритмы с известными характеристиками.

В частности, PHP позволяет без лишних телодвижений использовать bcrypt:
$bcrypt = crypt($pass, '$2a$'.$cost.'$'.$salt);

где $cost — т.н. стоимость вычислений алгоритма. Может быть от 04 до 31. Чем больше значение, тем дольше будет вычисляться хэш. В частности, на моем Intel® Core™ i3-2310M CPU @ 2.10GHz × 4, 4 ГБ ОП, ОС ArchLinux x64, со стоимостью 4, в секунду вычисляется примерно, по грубой оценке, 525 значений. Стоимость 11 дает уже около 5 значений хэш-функции в сукунду. Общее правило: увеличение стоимости на 1 снижает производительность функции вдвое.

Для сравнения, MD5 дает примерно 1729332 значения в секунду, а HMAC с алгоритмом MD5 дает 625117 значений в секунду.

Вы можете грубо оценить производительность алгоритмов на своем компьютере, используя этот простой скрипт:
#!/usr/bin/php
<?php

$pass = 'password';
$salt = '0aB1cD2eF3gH4iJ5kL6mN7';

//md5
$time = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    $md5 = md5($pass.$salt);
}
$time = microtime(true) - $time;

echo "MD5: $md5\n";
echo "Time: ", 100000 / $time, " iterations/s\n\n";


//md5 hmac
$time = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    $hmac = hash_hmac('md5', $pass, $salt);
}
$time = microtime(true) - $time;

echo "HMAC(md5): $md5\n";
echo "Time: ", 100000 / $time, " iterations/s\n\n";


//bcrypt
for ($cost = 4; $cost <= 31; $cost++) {
    $time = microtime(true);
    for ($i = 0; $i < 1000; $i++) {

        $bcrypt = crypt($pass, '$2a$'.str_pad((string) $cost, 2, '0', STR_PAD_LEFT).'$'.$salt);
    }
    $time = microtime(true) - $time;

    echo "bcrypt($cost): $bcrypt\n";
    echo "Time: ", 1000 / $time, " iterations/s\n\n";
}
В коде ошибка: в 25-й строке (echo «HMAC(md5): $md5\n»;) надо $md5 заменить на $hmac.
Я сам являюсь горячим сторонником использования bcrypt, но все таки каким никаким, а стандартом PKCS #5 v2.0 (RFC 2898) является как раз PDKBF2 — так что для некоторых неизвесто что еще является «велосипедом с квадратными колесами». :)
Можно и PDKBF2. Я ж говорю, самое главное здесь — не надо изобретать алгоритм с неизвестными свойствами, когда есть проверенные алгоритмы с известными характеристиками. Если, конечно, изобретатель не является квалифицированным специалистом в области криптографии.

Просто ведь начинают выдумывать всякие md5(pass + md5(md5(pass + salt) + salt)), да еще и считают эти конструкции ну просто мега-защищенными…
Оно не противоположное, оно дополняющее. Автор комментария пишет, что «от этого хуже точно не будет», но он нигде не говорит о том, что будет лучше ;)
25-й комментарий там сильно лучше, имхо =)
Комментарий 24 упускает из виду то, что давно изобретено — вычислительно-сложные хеш-функции. Описанные, например, в PBKDF2.
Я вот так предлагаю, если по быстрому.

Если хотите заморочиться, то ничего лучше bcrypt нету.
В MD5 с солью тоже хорошего мало.
У меня лет 7 назад был такой случай:
чел закрывал работу программы мастер-паролем.
Мастер-паролем хранился в файле. Вместо того чтобы придумать сколь угодно простенькое шифрование он решил записывать пароль plain-текстом, но задом наперёд.
А в качестве мастер-пароля он использовал слово-палиндром!

Весело лето начинается.

Надеюсь, они не лягут сейчас. Когда я писал о взломе ЛастПасс, все дружно рубанулись менять пароли, в результате чего накрылась временно еще и возможность залогиниться, чтобы поменять пароль.

А вообще, немного порадовался, что постоянно пользуюсь всего какими-то тремя-четырьмя сервисами…
Не тот сайт, от которого надо срочно менять пароль.
UFO just landed and posted this here
Если он один на все сайты, то скорее всего не этот сайт окажется в верху списка «срочно поменять пароль».
Вполне достаточно иметь два пароля — один для мусора типа ластфм, линкедина и прочих мусоросетей, и один для аккаунтов которые действительно чувствительны к потере инфы, типа личного Gmail, где может быть все что угодно, от лицензий на продукты до паролей на корпоративные аккаунты.
В Gmail для этого используется отличная двухэтапная аутентификация.
Говорите, пожалуйста, за себя. «Вполне достаточно» и «всякий мусор» — очень субьективные понятия. Кому-то будет «вполне достаточно» одного логина, без паролей вообще. Кому-то акаунт на Фейсбуке будет важнее онлайн-банкинга.
Тем временем факт остаётся фактом: два пароля лучше одного, но хуже трёх.

У меня на каждый сайт/сервис/команию уникальный пароль. Хранятся в незашифрованном виде в голове. Способ хорошо описан тут: habrahabr.ru/post/145166/
Знаете, после того как sic доказал, что возможен подбор паролей типа qCkiYSJ625, мне все эти комбинаторные методы кажутся ненадежными.
пока, все-таки это скорее исключение, а не правило, что такие пароли находятся. Но, на будущее, конечно уже стоит иметь в виду, при вычислительной мощности всего в сотни раз большей моего компьютера — это станет делом обыденным.
Почитал с удовольствием, спасибо за статью.

Но эта статья совершенно не противоречит факту, что уникальный пароль на каждый сервис — безопаснее. Это правда в 100% случаев.

К тому же способ, которым пользуюсь я, не делает пароль менее надёжным — можно придумать пароль любой сложности, и всё равно его усложнить, добавив к нему кастомные префиксы, суффиксы и окончания, как-то зависящие от домена, сгенерированные по известному только вам «алгоритму». Алгоритм можно придумывать настолько сложный, насколько у вас есть фантазии.

Менее надёжным от этого уж точно ничего не станет, а вот угнав пароль от одного сервиса, доступ к другому очень усложнится.
«Известный только вам» алгоритм увеличивает сложность пароля незначительно. При условии, что один из таких паролей стал известен злоумышленнику, остальные пароли (с другими префиксами и суффиксами) автоматически становятся менее надежными. И их, в принципе, неплохо было бы тоже сменить.
«Известный только вам» алгоритм увеличивает сложность пароля незначительно.

Вы не поняли. Пароль должен быть сложным сам по себе. Идея такого «алгоритма изменения пароля» не в том, чтобы сделать пароль сложнее, а в том, чтобы сделать его уникальным. При этом пароль автоматически становится сложее, а вот значительно или нет — зависит уже от вашей фантазии. Но даже при полном её отсутствии, результат всегда будет надёжнее, чем оригинал.

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

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

Впрочем, о чём мы тут спорим? Я лишь заявил, что уникальный пароль на каждый сайт — безопаснее одного пароля на все сайты. Думаю, с этим вы спорить не будете.
Дальше я привёл пример, как можно организовать уникальный пароль на каждый сайт, и легко помнить их все.
Способ работает от «добавить к паролю первые две буквы домена», до математических вычислений, которые вы сможете выполнить только при наличии графического калькулятора. Главное понить, что нужно делать.
Всегда есть группа юзеров, использующих однообразные маски паролей, поэтому для них критична потеря любого такого пароля.

Конечно, ОЧЕНЬ вряд ли, что злые хакеры будут тратить время на подбор других паролей такого юзера, но здоровую паранойю никто не отменял.
Да на ластфм уже давно(4 часа :D ) объява висит с просьбой сменить пароль. Сменил благополучно)
Стесняюсь спросить, а вам зачем? :)
ну, раз спросили, то не стесняетесь.

а какая разница, если они без юзернейном?)
в блоге lastpass есть другая интересная запись, что по следам LinkedIn, благополучно утекла база eHarmony, якобы все тем же русским! (кому же еще?) хакерам
UFO just landed and posted this here
А при чем тут оно? Мне кажется, что скорее это намек на «Империю Зла».
И что с этого? Интересно кому нужен пароль от моего Last Fm аккаунта?
UFO just landed and posted this here
Блин, вот поэтому приходится регистировать на всех сайтах с простейшим паролем, кто знает может они воообще в открытом виде его хранят.
Каким образом это увеличивает безопасность?
Я так понимаю, что этот простейший пароль не подходит к почте и прочим важным местам.
Да, это было бы логично, но тут вопрос в другом: почему использование простого пароля стало неизбежностью?

Ведь не факт, что раньше взломают именно тот сайт, где твой пароль наружу. Если пароль сложен, а аккаунт действительно не слишком ценный — его могут и не забрутфорсить — за ненадобностью. А использовать слишком простой пароль — это уже гарантировать взлом по любому направлению, даже если на всех сайтах (ну хотя бы в этой сказке) и хороший алгоритм защиты.
Это все правильно, только придумывать и помнить 100500 разных хороших паролей не слишком удобно. Мозги не резиновые. Поэтому там, где это не критично, люди используют одинаковый простой пароль, а сложные оставляют для важной инфы. Да, я в курсе про разные хранилки паролей, но это тоже далеко не всегда удобно.

Собственно, об увеличении безопасности в результате использования простых паролей речи и не было. Это просто удобнее.
Разве речь идёт 1 vs 100500?
Тема была «простой» vs «сложный» общеупотребительный пароль
А вдруг у вас на почте тот же пароль
Ага! Шансона ещё какого-нибудь наскроблят! :)
Блин! Убедили. Пошел менять пароль.
Вот что значит у русских хакеров начались летние каникулы :D
егэ сдали, можно развлекаться
Давайте уже пароли от google, а то соцсети, понимаешь всякие :)
Было бы логичным приберечь его на сладкое, а то кто будет после гугла читать новости про всякие соцсети? :)
Интересный комментарий на реддите (извиняюсь). Парень который заправляет DEFCON cracking contest, рассказал что слив был еще в 2011. База хешей появилась на одном из кряко-форумов и впоследствии была удалена. Утекло 17,3 миллиона уникальных MD5-хешей из которых расшифровано 95% (как минимум этим парнем). В довесок приводится небольшой список самых часто используемых паролей:

cat ./wordlist/lastfm.dict | tr A-Z a-z | sed -e 's/[0-9]//g' | sort | egrep -i .{4} | uniq -c | sort -nr | more
9558 lastfm
8260 last
4792 love
4746 alex
3450 mike
2921 june
2750 chris
2727 music
2691 blue
2646 password
2534 qwerty
2515 july
2495 angel
2466 john
2423 matt
2286 pass
2228 james
2200 april
2174 david
2132 jack
2056 nick
1998 daniel
1923 anna
Спасибо, с парсером я не подружился.
Пароль lastfm на сайте lastfm — это, конечно, гениально.
Возможно это тенденция… vkontakte, twitter, facebook… Зачем помнить пароль от сервиса? :)
Статья недавно была, как формировать пароль из доменного имени: habrahabr.ru/post/145166/ Здесь та же идея, только реализация попроще :)
Это нормально для разового использования на сервисе, не содержащем важных данных.

Лично у меня есть подобный простой пароль-заглушка для разовых регистраций в разных местах, там где даже пускать кипасс и генерировать пароль лень, а потеря регистрации ничем не грозит. Last.fm как раз такой сервис, правда аккаунтом там я дорожу, жалко скробблинга, и пароль там как раз сгенеренный.
password аж на 10 месте? о_О
Зашел на ластфм, просят поменять пароль т.е. если слив был аж в 2011 году, то получается, что они об этом узнали только сейчас, минимум через 6 месяцев, всё это время можно было постоянно сливать пароли, ужас, ужас.
Можно предположить, что даже в ситуации, когда слива и не было, но поползли слухи — как ни крути, смена пароля — лучшая стратегия. И в плане безопасности (мало ли) и в плане уважения со стороны пользователей.
здесь всего 1,5млн. уникальных хэшей и не от last.fm, а от eharmony.com
Как раз собирался обновить пароль на всех сайтах (пора бы уже), да всё руки не доходили. Спасибо хакерам!
Не солишь MD5 — Давай досвидания!
Начнём с того что использовать супербыстрый MD5 к которому уже сгенерированы огромные радужные таблицы изначально неразумно.
У меня на ластфме было паролем словарное слово, которое и так во всех словарях должно быть. Соответственно, от утечки паролей я не теряю вообще ничего %)
Жаль, что мало кто описывает обратную сторону.
Представим себе небольшой стартап, который надо запустить здесь и сейчас! Тратится минимум кадров и сил на это, главное успеть запустить. При этом выбирается md5() для шифрования паролей.
Портал разрастается, юзеров все больше и больше, и уже за несколько млн.
Встал вопрос о защите паролей. Нельзя взять и добавить каждому юзеру соль. Это или костыль, типа двойных проверок
1) проверяем с солью — все ок — пускаем
2) проверяем с солью — bad — проверяем без соли — ok -> обновляем пароль в базе, выставляя хэш с солью
Или так же костыль, типа перехэширования паролей с солью, а при логине — хэш от пароля, хэш от хэша в пред. шаге с солью
Особенно такие решения тяжело принимаются в больших организациях.
Но это конечно надо, никто не спорит. Но попробуйте сами, работая над подобным крупным проектом.
Думаю, если объяснить понятно последствия простого md5 и указать на репутацию — переезд на новое хеширование будет воспринят хорошо.
Ну а чем плохи двойные проверки?
На Реддите, где обсуждалась эта тема (про утечку паролей Lastfm) кто то поинтересовался как обстоят дела с єтим на Реддите и в ответ получил ссылку на исходный код, в котором так и сделано — сейчас используется bcrypt, если нет — проверяется sha-1 с солью и потом sha-1 без соли, которые использовались до этого.
И ничего, все довольны, безопасность на высоте.
Можно просто сделать:
my_super_secure_hash_method ( $salt_and_pepper, md5 ( $password ) );

и пройтись по старым паролям.
Загляньте в исходники скробблера и прекратите молоть чепуху. Соль есть. Солью является имя пользователя.
Тогда возникает вопрос как в сеть утекли несоленые хеши?
А как вы на глаз различаете соленые хеши от несоленых?
По памяти. Радужные Таблицы они такие… радужные.
Ну тут самих хешей нет, нечего отличать, это инсайдерская инфа. А в теме про утечку в Linkedin отличили очень просто — поиском хеша известных простых паролей, типа «password», «secret» и т.д.
После «утечки» они перешли на «соленые» хеши, нэ?
Ну да, молодцы, хотя конечно самое время закрывать амбар когда корову украли. :)
Я могу показаться занудой, но как доверять всем этим «облакам» если даже такие крупные игроки как last.fm и myspace не могут защитить своих пользоваталей. Пока не будет какого-то единого, надежного способа авторизироваться на сайте, прохожу облака мимо
Недавно пришло сообщение от Libre.fm
Они упомянули что недавно утекли пароли у last.fm, linkedin и сказали что сбросили всем пользователям пароли на случай если вдруг они использовали тот-же пароль что и на тех пострадавших сайтах.
Мне кажется что просто и у них слили пароли вот они и сбросили всем.
Sign up to leave a comment.

Articles