GS-CSP (Cookie Steal Protection)

Демонстрационный адрес: http://109.205.56.148/


Оглавление

  1. Описание проекта
  2. Ключевая функциональность
  3. Структура репозитория
  4. Быстрый старт
    1. Установка через Docker Compose
    2. Запуск сервисов
    3. Проверка работоспособности
    4. Настройка конфигурации
  5. Сценарии использования
  6. Настройки и админ-панель
  7. Расширенная документация
  8. Контакты и авторство

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

GS-CSP (Cookie Steal Protection) — это прокси-сервис (Flask, Python), который защищает веб-приложения от кражи сессии (cookie). Основная идея:

  1. Система «накрывает» уязвимый или обычный веб-сервис и проксирует запросы от пользователя к сервису, обрабатывая их, уязвимый сервис напрямую доступен только в локальной сети, пользователь общается с ним через систему защиты.
  2. Все запросы к приложению идут через GS-CSP.
  3. GS-CSP анализирует cookie сессии, IP-адрес, User-Agent и другие факторы.
  4. При выявлении несоответствия (другой IP/UA), сессия блокируется, и пользователь вынужден заново авторизоваться.

Таким образом, злоумышленнику, даже получившему cookie, сложно использовать её, если исходные параметры отличны от ожидаемых.


Ключевая функциональность

  • Анализ сессий по IP и User-Agent (и другим факторам при желании).
  • Блокировка сессии при обнаружении несоответствий, + временный бан при повторных попытках.
  • Админ-панель /admin:
    • Просмотр активных сессий,
    • Ручная деактивация сессий,
    • Гибкая настройка (block_on_ip_change, block_on_ua_change, ban_minutes и пр.),
    • Просмотр логов.
  • Логирование всех событий: запросов, ответов, блокировок, переключения настроек и т.д.

Структура репозитория

Ниже приведено дерево каталога (без кеш-файлов __pycache__, .git и т.д.):

    gs-csp
    ├── README.md
    ├── docker-compose.yml
    ├── session_guard
    │   ├── Dockerfile
    │   ├── config.py
    │   ├── guard_app.py
    │   ├── protection.db
    │   ├── protection_schema.sql
    │   ├── requirements.txt
    │   ├── static
    │   │   └── guard_style.css
    │   └── templates
    │       ├── admin.html
    │       ├── admin_login.html
    │       ├── admin_logs.html
    │       ├── admin_manage.html
    │       └── base.html
    └── vulnerable_app
        ├── Dockerfile
        ├── app.py
        ├── database.db
        ├── requirements.txt
        ├── schema.sql
        ├── static
        │   ├── guard_style.css
        │   ├── script.js
        │   └── style.css
        └── templates
            ├── admin.html
            ├── base.html
            ├── login.html
            ├── notes.html
            └── register.html
  • session_guard/ — сам GS-CSP (надстройка/прокси).
  • vulnerable_app/ — пример уязвимого приложения (сервис заметок) для демонстрации.

Быстрый старт

1. Установка через Docker Compose

Убедитесь, что у вас установлены Docker и docker-compose. Затем:

git clone https://github.com/gs1x2/gs-csp
cd gs-csp
docker-compose build

2. Запуск сервисов

docker-compose up -d

Будут созданы и запущены два контейнера:

  • session_guard: порт 80 пробрасывается наружу,
  • vulnerable_app: порт 5000 доступен только внутри Docker-сети.

3. Проверка работоспособности

Откройте в браузере http://<ip-сервера>/ (порт 80). Вы увидите уязвимый сервис (сервис заметок), но уже через GS-CSP.

  • Админ-панель защиты: http://<ip-сервера>/admin
  • Логи: http://<ip-сервера>/admin/logs
  • Управление настройками: http://<ip-сервера>/admin/manage

4. Настройка конфигурации

Откройте файл /gs-csp/session_guard/config.py

  • В словаре ADMIN_USERS указываются учётные данные для доступа в админ-панель системы защиты
  • Важно указать секретный ключ уязвимого сервиса, без этого не будет корректно работать декодирование сессии
  • Словаь DEFAULT_SETTINGS дублирует вкладку manage в панели управления, параметры можно добавить там

Сценарии использования

  • Обычный пользователь → логинится, создаёт заметку → всё ок, IP/UA совпадают.
  • Злоумышленник украл cookie → IP/UA отличаются → GS-CSP блокирует сессию, злоумышленник не получает доступ.
  • Повторные попытки со заблокированной сессией → временный бан.
  • Мобильный пользователь может столкнуться с блокировкой, если у него часто меняется IP. Можно отключить block_on_ip_change.

Настройки и админ-панель

  1. Настройки блокировки:
    • block_on_ip_change (вкл/выкл),
    • block_on_ua_change (вкл/выкл),
    • ban_minutes_after_blocked (сколько минут длится бан).
  2. Список сессий: просмотр IP, UA, статус (активна ли?), время блокировки.
  3. Логи: все события (REQUEST, RESPONSE, BLOCK, CREATE_SESSION, DEACTIVATE и т.д.).
  4. Очистка БД (полный сброс сессий и логов).

Расширенная документация

Для очень подробного описания с примерами, сценариями, структурой данных и рекомендациями по безопасности — см. Полную документацию.
(Будет позже)

Основные темы:

  • Проблематика кражи сессий (XSS, социнжиниринг, трояны),
  • Архитектура GS-CSP,
  • Принцип проксирования и сравнения IP/UA,
  • Механизмы банов и блокировок,
  • Гибкая настройка и интеграция с любыми приложениями.

Контакты и авторство

  • Демонстрационный вариант развернут по адресу http://109.205.56.148/.
  • Помните, что никакая система несовершенна. Если есть вопросы, хотите доработать или нашли ошибки - пишите.

Спасибо за использование GS-CSP! Будьте уверены, что кража сессии не принесёт злоумышленникам лёгкого доступа к вашему приложению.