mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-02 18:20:24 +00:00
383 lines
15 KiB
Markdown
383 lines
15 KiB
Markdown
# 🔐 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 8080/tcp # Unified FastAPI сервер доступен только из внутренней сети
|
||
```
|
||
|
||
### 📊 Мониторинг безопасности
|
||
|
||
**Автоматические проверки:**
|
||
- Мониторинг неудачных попыток аутентификации
|
||
- Отслеживание подозрительной активности
|
||
- Проверка целостности платежей
|
||
- Мониторинг состояния внешних сервисов
|
||
|
||
**Алерты:**
|
||
- Множественные неудачные попытки входа
|
||
- Неожиданные изменения в конфигурации
|
||
- Критические ошибки в платежных системах
|
||
- Недоступность 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 секреты - генерируйте случайные значения
|
||
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:8080:8080" # Только 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 при необходимости
|
||
- Сотрудничество с исследователями безопасности
|
||
|
||
---
|
||
|
||
**Помните**: Безопасность - это постоянный процесс, а не одноразовая настройка. Регулярно обновляйте зависимости, следите за новостями безопасности и не стесняйтесь сообщать о подозрительной активности.
|