diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..63b4197b --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,384 @@ +# 🔐 Security Policy + +## Supported Versions + +Мы обеспечиваем поддержку безопасности для следующих версий: + +| Version | Supported | +| ------- | ------------------ | +| 2.x.x | ✅ Yes | +| 1.x.x | ❌ No | +| < 1.0 | ❌ No | + +## Reporting a Vulnerability + +### 🚨 Критические уязвимости + +Для сообщений о критических уязвимостях безопасности: + +**НЕ создавайте публичные Issues или Pull Requests** + +Вместо этого: +1. Свяжитесь с [@fringg](https://t.me/fringg) напрямую в Telegram +2. Укажите в сообщении "SECURITY VULNERABILITY" в начале +3. Опишите уязвимость детально +4. Дайте время на исправление (обычно 90 дней) + +### 📧 Контактная информация + +- **Telegram**: [@fringg](https://t.me/fringg) +- **Response Time**: 24-48 часов +- **Fix Timeline**: 7-30 дней (в зависимости от критичности) + +### 🔍 Что считается уязвимостью безопасности + +**Критические уязвимости:** +- SQL инъекции +- Remote Code Execution (RCE) +- Обход аутентификации +- Несанкционированный доступ к данным пользователей +- Утечка API ключей или токенов +- Bypass платежных проверок + +**Средние уязвимости:** +- Cross-Site Scripting (XSS) в веб-компонентах +- Небезопасная десериализация +- Недостаточная валидация входных данных +- Rate limiting bypass + +**Низкие уязвимости:** +- Information disclosure +- DoS атаки +- Проблемы с логированием чувствительных данных + +### 📝 Информация для включения в отчет + +1. **Описание уязвимости** + - Тип уязвимости + - Затронутые компоненты + - Потенциальное воздействие + +2. **Шаги воспроизведения** + - Детальные инструкции + - Скриншоты или видео (если применимо) + - Тестовые данные + +3. **Proof of Concept** + - Работающий эксплойт (если безопасно) + - Логи или вывод команд + +4. **Предлагаемые исправления** + - Возможные решения + - Альтернативные подходы + +## Security Measures + +### 🛡️ Текущие меры защиты + +**Аутентификация и авторизация:** +- Проверка админ ID через ADMIN_IDS +- Валидация всех пользовательских данных +- Защита от несанкционированного доступа к админ функциям + +**Защита API:** +- Поддержка различных методов аутентификации Remnawave +- Безопасная передача куки для защищенных панелей +- Rate limiting для предотвращения злоупотреблений +- Timeout для внешних запросов + +**Защита данных:** +- Хеширование чувствительной информации +- Безопасное хранение API ключей +- Логирование без записи чувствительных данных +- Регулярные бекапы с возможностью восстановления + +**Платежная безопасность:** +- Валидация webhook подписей +- Проверка сумм платежей +- Защита от duplicate payments +- Безопасная обработка платежных данных + +**Инфраструктурная безопасность:** +- Docker контейнеризация +- Изоляция сетевого трафика +- Минимальные права доступа +- Регулярные обновления зависимостей + +### 🔒 Конфиденциальные данные + +**Что НЕ логируется:** +- API ключи и токены +- Пароли и секретные ключи +- Персональные данные пользователей +- Детали платежных транзакций +- Webhook секреты + +**Защита в коде:** +```python +# ✅ Правильно +logger.info(f"User {user_id} created subscription") +logger.debug(f"Payment webhook received for order {order_id}") + +# ❌ Неправильно +logger.info(f"API key: {api_key}") +logger.debug(f"Webhook payload: {webhook_data}") +``` + +### 🌐 Сетевая безопасность + +**HTTPS обязателен:** +- Все внешние API вызовы через HTTPS +- Webhook endpoints защищены TLS +- Проверка SSL сертификатов + +**Firewall конфигурация:** +```bash +# Открыть только необходимые порты +ufw allow 80/tcp # HTTP (redirect to HTTPS) +ufw allow 443/tcp # HTTPS +ufw deny 8081/tcp # Webhook порты (только через reverse proxy) +ufw deny 8082/tcp +``` + +### 📊 Мониторинг безопасности + +**Автоматические проверки:** +- Мониторинг неудачных попыток аутентификации +- Отслеживание подозрительной активности +- Проверка целостности платежей +- Мониторинг состояния внешних сервисов + +**Алерты:** +- Множественные неудачные попытки входа +- Неожиданные изменения в конфигурации +- Критические ошибки в платежных системах +- Недоступность Remnawave API + +## Best Practices for Developers + +### 🔐 Безопасное программирование + +**Input Validation:** +```python +# ✅ Правильно +def validate_user_id(user_id: str) -> int: + if not user_id.isdigit(): + raise ValueError("Invalid user ID format") + uid = int(user_id) + if uid <= 0: + raise ValueError("User ID must be positive") + return uid + +# ❌ Неправильно +def get_user(user_id): + return session.execute(f"SELECT * FROM users WHERE id = {user_id}") +``` + +**SQL Injection Prevention:** +```python +# ✅ Правильно - используйте SQLAlchemy ORM +async def get_user_subscriptions(user_id: int): + result = await session.execute( + select(Subscription).where(Subscription.user_id == user_id) + ) + return result.scalars().all() + +# ❌ Неправильно - raw SQL без параметров +async def get_user_subscriptions(user_id: int): + result = await session.execute( + f"SELECT * FROM subscriptions WHERE user_id = {user_id}" + ) +``` + +**API Keys Management:** +```python +# ✅ Правильно +class Config: + REMNAWAVE_API_KEY: str = os.getenv("REMNAWAVE_API_KEY", "") + + def validate_required_env(self): + if not self.REMNAWAVE_API_KEY: + raise ValueError("REMNAWAVE_API_KEY is required") + +# ❌ Неправильно +API_KEY = "your_api_key_here" # Никогда не хардкодьте ключи +``` + +**Error Handling:** +```python +# ✅ Правильно - не раскрывайте внутреннюю информацию +try: + result = await remnawave_api.create_subscription(data) +except RemnaWaveAPIError as e: + logger.error(f"RemnaWave API error: {e}") + await message.answer("Временные проблемы с сервисом. Попробуйте позже.") + +# ❌ Неправильно - раскрытие внутренних деталей +except Exception as e: + await message.answer(f"Error: {str(e)}") +``` + +### 🔍 Code Review Security Checklist + +- [ ] Нет хардкода API ключей или паролей +- [ ] Все пользовательские данные валидируются +- [ ] SQL запросы используют параметризированные запросы +- [ ] Ошибки логируются без раскрытия чувствительной информации +- [ ] Внешние запросы используют таймауты +- [ ] Webhook подписи проверяются +- [ ] Rate limiting применяется где необходимо +- [ ] Авторизация проверяется для защищенных операций + +### 📋 Environment Variables Security + +**Обязательные переменные:** +```env +# Критически важные - должны быть установлены +BOT_TOKEN=your_bot_token +REMNAWAVE_API_KEY=your_api_key +ADMIN_IDS=123456789,987654321 + +# Webhook секреты - генерируйте случайные значения +YOOKASSA_WEBHOOK_SECRET=random_secret_here +TRIBUTE_WEBHOOK_SECRET=another_random_secret +CRYPTOBOT_WEBHOOK_SECRET=yet_another_secret +``` + +**Генерация безопасных секретов:** +```bash +# Генерация случайного секрета +openssl rand -hex 32 + +# Или используйте Python +python -c "import secrets; print(secrets.token_hex(32))" +``` + +### 🐳 Docker Security + +**Dockerfile best practices:** +```dockerfile +# Не запускайтесь под root +RUN groupadd -r appuser && useradd -r -g appuser appuser +USER appuser + +# Минимальные права на файлы +COPY --chown=appuser:appuser . /app + +# Удаляйте ненужные пакеты +RUN apt-get remove --purge -y build-essential && \ + apt-get autoremove -y && \ + apt-get clean +``` + +**docker-compose.yml security:** +```yaml +services: + bot: + # Ограничьте ресурсы + deploy: + resources: + limits: + memory: 512M + cpus: '0.5' + + # Не пробрасывайте порты наружу без необходимости + ports: + - "127.0.0.1:8081:8081" # Только localhost + + # Read-only root filesystem + read_only: true + tmpfs: + - /tmp +``` + +## Security Updates + +### 📅 График обновлений + +- **Критические уязвимости**: Исправляются в течение 24-48 часов +- **Высокий приоритет**: Исправляются в течение 7 дней +- **Средний приоритет**: Исправляются в течение 30 дней +- **Низкий приоритет**: Исправляются в следующем планируемом релизе + +### 🔄 Процесс обновления + +1. **Уведомление**: Администраторы получают уведомление о доступных обновлениях +2. **Тестирование**: Обновления тестируются в изолированной среде +3. **Развертывание**: Постепенное развертывание с возможностью отката +4. **Мониторинг**: Наблюдение за стабильностью после обновления + +### 📢 Уведомления о безопасности + +Подпишитесь на уведомления: +- **Telegram**: [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi) +- **GitHub**: Watch repository для получения уведомлений о релизах +- **RSS**: Следите за GitHub Releases + +## Compliance and Standards + +### 📜 Соответствие стандартам + +**GDPR Compliance:** +- Минимизация сбора данных +- Право на удаление данных +- Уведомление о нарушениях безопасности +- Согласие на обработку данных + +**PCI DSS (для платежей):** +- Не храним данные банковских карт +- Используем сертифицированные платежные провайдеры +- Шифрование чувствительных данных +- Регулярные аудиты безопасности + +### 🛡️ Third-party Security + +**Используемые сервисы:** +- **Telegram API**: Официальный API с высоким уровнем безопасности +- **Remnawave**: VPN панель с собственными мерами безопасности +- **YooKassa**: PCI DSS сертифицированный платежный провайдер +- **CryptoBot**: Криптовалютные платежи с блокчейн безопасностью + +**Регулярные проверки:** +- Мониторинг безопасности dependencies +- Обновление библиотек и зависимостей +- Проверка CVE для используемых компонентов + +## Incident Response + +### 🚨 В случае инцидента безопасности + +1. **Немедленно**: + - Изолируйте затронутую систему + - Сохраните логи и доказательства + - Уведомите команду разработки + +2. **В течение часа**: + - Оцените масштаб инцидента + - Определите затронутых пользователей + - Начните процедуры восстановления + +3. **В течение дня**: + - Устраните уязвимость + - Восстановите нормальную работу + - Уведомите пользователей (если необходимо) + +4. **После инцидента**: + - Проведите post-mortem анализ + - Обновите процедуры безопасности + - Внедрите дополнительные защитные меры + +### 📊 Отчетность + +**Внутренние отчеты:** +- Еженедельные отчеты о безопасности +- Ежемесячные аудиты логов +- Квартальные обзоры политик безопасности + +**Внешние уведомления:** +- Уведомление пользователей о критических обновлениях +- Публикация Security Advisories при необходимости +- Сотрудничество с исследователями безопасности + +--- + +**Помните**: Безопасность - это постоянный процесс, а не одноразовая настройка. Регулярно обновляйте зависимости, следите за новостями безопасности и не стесняйтесь сообщать о подозрительной активности.