Как перебор пароля, который был хеширован несколько раз? - PullRequest
2 голосов
/ 14 июня 2011

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

$hash = sha1($pass1);

//creates a 3 character sequence
function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);

Теперь я, будучи администратором этого сервера и имея полный доступ к исходному коду и таблице паролей, а также инструменты администрирования, могу просто сбросить пароль пользователя на любой, какой я захочу, но радилучше понять безопасность, мне любопытно, как поступить так, как хакер.У меня есть программа под названием cain & abel, которая применяет грубую силу к определенному алгоритму хеширования, но как мне сделать что-то вроде взятия каждого пароля, его преобразования, объединения его в (известную) соль и повторного преобразования этого кода?Кажется, это было бы очень просто сделать, но я никогда не программировал на языке, подобном C ++, и я предполагаю, что это то, что необходимо.

РЕДАКТИРОВАТЬ:

Я должен указать следующее:

Это атака грубой силы в автономном режиме.

У меня есть база данных, полная хэшей и их соответствующих солей.

Соли для каждого пользователя, но я хочу атаковать только пароль одного пользователя за раз.

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

псевдокод:

$hash = sha1( 'password' );
$salt = '3Sf';
$hash = sha1( $salt.$hash);

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

$hash = sha1( 'password' );
$salt = '3Sf';
for($i; $i<1000; $i++){
    $hash = sha1( $salt.$hash);
}

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

ПРИМЕЧАНИЕ. Я никоим образом не утверждаю, что могу столкнуться с этой ситуацией, но я хотел бы знать, как это делается.

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Насколько мне известно, ни один широко распространенный инструмент для взлома хешей не поддерживает эту функцию.

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

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

Чтобы затем взломать хэши, он просто скопирует вашу функцию sha1 ($ salt. $ Hash) и начнет вводить в нее общие пароли. Это сэкономит время по сравнению с чисто грубым форсированием всех возможных комбинаций. Он брал бы $ salt из вашей БД и сравнивал результат хешированного-соленого-хешированного пароля с соленым хешем, хранящимся в той же БД. Если полученные хеши совпадают, пароль был взломан.

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

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

1 голос
/ 14 июня 2011

Слишком упрощенный вопрос.Есть много вещей, чтобы рассмотреть и слишком много, чтобы затронуть в одном посте, но вот несколько.1) Есть ли у хакера хранилище паролей?Если это так, атаки методом грубой силы могут быть более успешными, поскольку нет других смягчающих факторов, которые могли бы препятствовать продолжению атаки.2) Удалось ли хакеру проникнуть в вашу систему и раскрыть ваши солевые / хеширующие системы?Это значительно облегчит атаку грубой силой, особенно если 1 верно.3) Если 1 и 2 неверны, существуют ли системы смягчения для предотвращения / замедления атаки с использованием грубой силы, такой как блокировка учетной записи после нескольких неправильных паролей в строке и т. Д.

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

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