Skip to content

BruteMors/Anti-bruteforce-service

Repository files navigation

Anti-bruteforce-service

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

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

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

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

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

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

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

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

Для подсчета и ограничения частоты запросов, используется алгоритм leaky bucket. https://en.wikipedia.org/wiki/Leaky_bucket

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

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

  • Если входящий IP в whitelist, то сервис безусловно разрешает авторизацию (ok=true);
  • Если - в blacklist, то отклоняет (ok=false).

В сервисе присутствует возможность сброса bucket-а для конкретной пары логин/ip

Архитектура

Микросервис построен с использованием принципов Clean architecture и предоставляет GRPC API и HTTP API (задается через переменную среды), cli для администрирования через консоль, база данных для black/white списков построена на основе PostgresSQL.

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

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

Проверяет возможность авторизации с использованием заданных значений запроса.

Запрос:

POST "/auth/check"
{
    "login": "mylogin",
    "password": "mypass",
    "ip": "192.168.1.1"
}

Ответ:

200 OK
ok=true

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

Сброс bucket

Очищает bucket-ы, соответствующие переданным login и ip.

Запрос:

DELETE "/auth/bucket"
{
    "login": "mylogin",
    "ip": "192.168.1.1"
}

Ответ:

200 OK
resetLogin=true
resetIp=true

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

Запрос:

POST "/auth/blacklist"
{
    "ip": "192.1.1.0",
    "mask": "255.255.255.128"
}

Ответ:

204 No Content

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

Запрос:

DELETE "/auth/blacklist"
{
    "ip": "192.1.1.0",
    "mask": "255.255.255.128"
}

Ответ:

204 No Content

Получение списка IP в blacklist

Запрос:

GET "/auth/blacklist"

Ответ:

200 OK
[
    {
        "ip": "192.1.2.0",
        "mask": "255.255.255.128"
    },
    {
        "ip": "192.1.4.0",
        "mask": "255.255.255.128"
    }
]

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

Запрос:

POST "/auth/whitelist"
{
    "ip": "192.1.1.0",
    "mask": "255.255.255.128"
}

Ответ:

204 No Content

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

Запрос:

DELETE "/auth/whitelist"
{
    "ip": "192.1.1.0",
    "mask": "255.255.255.128"
}

Ответ:

204 No Content

Получение списка IP в whitelist

Запрос:

GET "/auth/whitelist"

Ответ:

200 OK
[
    {
        "ip": "192.1.2.0",
        "mask": "255.255.255.128"
    },
    {
        "ip": "192.1.4.0",
        "mask": "255.255.255.128"
    }
]

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

Развертывание микросервиса осуществляется командой:

make run 

(внутри docker compose up) в директории с проектом.

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

На основную логику работы микросервиса написаны интеграционные и unit тесты. Запуск осуществляется коммандой:

make test 

About

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

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors