Skip to content

ids79/anti-bruteforce

Repository files navigation

Общее описание

Сервис предназначен для борьбы с подбором паролей при авторизации в какой-либо системе.

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

Предполагается, что сервис используется только для server-server, т.е. скрыт от конечного пользователя.

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

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

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

Для подсчета и ограничения частоты запросов, используется алгоритм leaky bucket.

Сервис поддерживает множество bucket-ов, по одному на каждый логин/пароль/ip.

Bucket-ы хранятся в памяти сервиса. Дополнительно реализован алгоритм удаление просроченных записей и бакетов целиком.

Сервис поддерживает White/black листы. White/black листы содержат списки адресов сетей, которые обрабатываются более простым способом:

  • Если входящий IP в whitelist, то сервис безусловно разрешает безусловно,
  • Если - в blacklist, то безусловно отклоняет безусловно.

Архитектура

Микросервис состоит из:

  • API HTTP,
  • CLI клиента, работающего по интерфейсу grpc,
  • базы данных postgres для хранения black/white списков.

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

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

http://localhost:8081/auth/?ip=10.10.10.10&login=ids&pass=123
Передача параметров методом GET: ip, login pass
Ответ:

  • 1, если считает что запрос нормальный.
  • 0, если считает что происходит bruteforce.

Сброс bucketa:

http://localhost:8081/reset-bucket/?ip=10.10.10.10&login=ids&pass=123
Должен очистить bucket-ы соответствующие переданным ip, login и ip.
Передача параметров методом GET: ip, login pass.
Возможна передача не всех параметров.

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

http://localhost:8081/add-black-list/?ip=10.10.10.50&mask=25
Добавить в blacklist подсеть с указанным IP и маской.
Передача параметров методом GET: ip, mask.

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

http://localhost:8081/add-black-list/?ip=10.10.10.50
Удалить из blacklist подсеть с указанным IP.
Передача параметров методом GET: ip.

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

http://localhost:8081/add-white-list/?ip=10.10.10.50&mask=25
Добавить в whitelist подсеть с указанным IP и маской.
Передача параметров методом GET: ip, mask.

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

http://localhost:8081/add-white-list/?ip=10.10.10.50
Удалить из whitelist подсеть с указанным IP.
Передача параметров методом GET: ip.

  • Пример подсети: 192.1.1.0/25 - представляет собой адрес 192.1.1.0 с маской 255.255.255.128
  • Во время работы сервиса при поступлении очередного IP адреса, сервис проходится по подсетям в черных и белых списках и вычисляет, принадлежит ли IP одной из них.

Получения списка whitelist и blacklist:

http://localhost:8081/get-list/?type=w
Получить список подсетей blacklist или whitelist в зависимости от значения параметра type.
"b" - blacklist, "w" - whitelist.
Передача параметров методом GET: type.
Список получаемых значений в формате json:

  • "IP": "10.10.10.250",
  • "Mask": "25",
  • "IPfrom": "10.10.10.128",
  • "IPto": "10.10.10.255"

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

expire-limit - время жизни попытки подключения в секундах (по умолчанию 60)
tick-interval - время в миллисекундах между периодами проверки и удаления просроченных попыток подключений (по умолчанию 500)
[bruteforce-limits]
try-for-login = 10 - лимит по логинам
try-for-pass = 100 - лимит по паролям
try-for-ip = 1000 - лимит по ip адресам
Лимиты по достижению которых, сервис считает попытку брутфорсом.

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

Реализован command-line интерфейс в виде отдельного запускаемого модуля для ручного администрирования сервиса. CLI сервис работает через GRPC интерфейс.

Методы CLI сервиса:

addb 10.10.10.10/25 - добавление подсети в blacklist
delb 10.10.10.10/25 - удаление подсети в blacklist
addw 10.10.10.10/25 - добавление подсети в whitelist
delw 10.10.10.10/25 - удаление подсети в whitelist
resi 10.10.10.10 - сброс backet по указанному ip адресу
resl ids - сброс backet по указанному login
resp 123 - сброс backet по указанному password
getb - получить список подсетей из blacklist
getw - получить список подсетей из whitelist

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

Создание исполняемых файлов сервисов выполняется командой make run в директории с проектом.
В директории /bin будут созданы исполняемые файлы сервисов:

  • bruteforce - основной сервис anti-bruteforce,
  • cli - интерфейс командной строки для управления сервисом.

\configs\config.toml - конфигурация сервиса (по умолчанию).

Развертывание микросервиса с необходимым окружением осуществляться командой make up в директории с проектом.
При выполнении команды будет создано два docker контейнера:

  • сервис anti-bruteforce,
  • инстанс БД postgres.

Также будет выполнена инициализация БД.

Удаление микросервиса осуществляться командой make down в директории с проектом.

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

Для выполнения интеграционного тестирования необходимо выполнить команду make integation-test в директории с проектом.
При выполнении команды будут подняты все рабочие сервисы + сервис с алгоритмами тестирования.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published