Skip to content

service is designed to combat password guessing when logging into any system

Notifications You must be signed in to change notification settings

fatalem0/antibruteforce

Repository files navigation

Antibruteforce

Общее описание проекта

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

Алгоритм работы

Сервис ограничивает частоту попыток авторизации для различных комбинаций параметров, например:

  • не более N = 10 попыток в минуту для данного логина.
  • не более M = 100 попыток в минуту для данного пароля (защита от обратного brute-force).
  • не более K = 1000 попыток в минуту для данного IP (число большое, т.к. NAT).

Для подсчета и ограничения частоты запросов, можно использовать например алгоритм leaky bucket. Или иные аналогичные: https://en.wikipedia.org/wiki/Rate_limiting Причем сервис будет поддерживать множество bucket-ов, по одному на каждый логин/пароль/ip. Bucket-ы можно хранить

  • в памяти (в таком случае нужно продумать удаление неактивных bucket-ов, что бы избежать утечек памяти)
  • во внешнем хранилище (например redis или СУБД, в таком случае нужно продумать производительность)

White/black листы содержат списки адресов сетей, которые обрабатываются более простым способом. Если входящий ip в whitelist - сервис безусловно разрешает авторизацию (ok=true), если в blacklist - отклоняет (ok=false).

Архитектура

Микросервис состоит из API, базы данных для хранения настроек и black/white списков. Опционально - хранилище для bucket-ов. Сервис должен предоставлять GRPC или REST API.

Описание методов API

Попытка авторизации

Запрос:

  • login
  • password
  • ip

Ответ:

  • ok (true/false) - сервис должен возвращать ok=true, если считает что запрос нормальный и ok=false, если считает что происходит bruteforce.

Сброс bucket

  • login
  • ip Должен очистить bucket-ы соответствующие переданным login и ip

Добавление IP в blacklist

  • subnet (ip + mask)

Удаление IP из blacklist

  • subnet (ip + mask)

Добавление IP в whitelist

  • subnet (ip + mask)

Удаление IP из whitelist

  • subnet (ip + mask)

Конфигурация

Основные параметры конфигурации: N, M, K - лимиты по достижению которых, сервис считает попытку брутфорсом.

Command-Line интерфейс

Необходимо так же разработать command-line интерфейс для ручного администрирования сервиса. Через CLI должна быть возможность вызвать сброс бакета и управлять whitelist/blacklist-ом. CLI работает через GRPC интерфейс.

Развертывание

Развертывание микросервиса осуществляться командой docker-compose up в директории с проектом.

Тестирование

Рекомендуется выделить модуль обработки одного bucket и протестировать его с помощью unit-тестов. Так же необходимо написать интеграционные тесты, которые поднимаю сервис и все необходимые базы в docker-compose и проверяют все вызовы API.

About

service is designed to combat password guessing when logging into any system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published