Create SECURITY.md

This commit is contained in:
Egor
2025-09-13 10:15:33 +03:00
committed by GitHub
parent 03fcb5f2f7
commit 7e0840ef09

384
SECURITY.md Normal file
View File

@@ -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 при необходимости
- Сотрудничество с исследователями безопасности
---
**Помните**: Безопасность - это постоянный процесс, а не одноразовая настройка. Регулярно обновляйте зависимости, следите за новостями безопасности и не стесняйтесь сообщать о подозрительной активности.