Грубая сила подтверждения кода? - PullRequest
2 голосов
/ 12 августа 2010

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

По сути, длина кода составляет 12 символов, последние 4 исправлены, и в нем используются только шестнадцатеричные символы 0-9 и af

Итак, моя теория такова, что хакер знает имя пользователя, которое он может перехватить, используя Код подтверждения, что делает пароль пользователя бесполезным.

Любой знает, с чего начать.программа, подобная этой?

Я знаю, что это программный вопрос с кодом, но я чувствую, что его можно опубликовать.Если нет, пожалуйста, направьте меня на форум по программированию .net, где я могу задать свои вопросы.

Ответы [ 8 ]

2 голосов
/ 12 августа 2010

Существует 2 ^ 32 ≈ 4 миллиарда кодов подтверждения, поэтому для грубой силы требуется в среднем 2 миллиарда попыток. Если их можно попробовать только онлайн, этого достаточно, при условии, что число кодов подтверждения, которые могут быть проверены атакованным, значительно меньше 2 миллиардов.

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

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

2 голосов
/ 12 августа 2010

С 12 символами в диапазоне [0-9a-f] существует 281474976710656 возможных кодов подтверждения.Предполагая, что хакер может делать 1000 попыток в секунду (что маловероятно), потребуется 281474976710 секунд, чтобы попробовать все возможности.Это примерно 8925 лет ... Я не думаю, что пользователю будет важно, если хакер взломает его аккаунт через 8925 лет;)

Просто чтобы быть уверенным, вы можете связать срок действия с кодом подтверждения,Сделайте его действительным только в течение 24 часов, 3 дней или как хотите

2 голосов
/ 12 августа 2010

Существует 281474976710655 возможных комбинаций с заданной длиной кода.Даже если потребуется 1 секунда, чтобы попытаться выполнить один код, потребуется несколько лет, чтобы его перебор ...

Тем не менее, если вы хотите попробовать, вам нужно написать что-то вроде:

for (Int64 i = 0; i < 281474976710655; i++) {
    string code = i.ToString ("X12");

    //write code here to attempt this code
}
2 голосов
/ 12 августа 2010

Я знаю, что это, вероятно, не будет принятым ответом, но это кажется достаточно безопасным, с 16 возможными позициями на символ.

16^12 = 2.81474977 × 1014
2 голосов
/ 12 августа 2010

Прежде всего, если коды подтверждения действительно случайны, будет 16 12 = 281474976710656 возможных кодов & mdash; каждый из них одинаково вероятен. Это может занять некоторое время, чтобы перебор.

В любом случае, если вы хотите показать своему боссу, как такая штука может быть грубой, вам просто нужен цикл, который сгенерирует все возможные коды и попробует их по одному. Вот пример на C:

int code[12];
for (int i=0; i<12; i++) code[i] = 0;
while (1) {
    for (int i=11; i>=0; i--) {
        code[i]++;
        if (code[i] < 16) break;
        else code[i] = 0;
    }
    for (int i=0; i<12; i++) printf("%x", code[i]);
    printf("\n");
}
2 голосов
/ 12 августа 2010

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

Даже если, как вы говорите, изменяются только первые 8 символов (4 байта), эта комбинация все равно составляет 4 миллиарда.Если предположить, что 100 попыток в секунду, для перебора потребуется около 16 месяцев.Я искренне надеюсь, что администраторы вашего сервера обнаружат такую ​​атаку в течение более одного года.

Дополнительная безопасность будет введена, как предположил Томас, позволяя кодам истекать через неделю или около того.

1 голос
/ 20 апреля 2012

Я знаю, это старый вопрос - но я только что нашел это.

Другой способ думать об этом, даже если хакерский брут форсит код, вы получаете «результат», что новое электронное письмо отправляется исходному пользователю с новым случайным паролем - так что все, что достиг хакер, это сброс пароль для пользователя, который на самом деле ему не помогает!

Таким образом, поэтому вопрос комбинированных кодов, попыток грубой силы - излишни.

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