Files
SuperVPN/Docs/SECURITY_ANALYSIS_REPORT.md
2025-10-12 11:06:25 +09:00

8.4 KiB
Raw Blame History

ДЕТАЛЬНЫЙ АНАЛИЗ СИСТЕМЫ VIDEOREADER

Дата анализа: 9 октября 2025 г.
Статус: ПОЛНЫЙ АНАЛИЗ ЗАВЕРШЕН


🎯 КРАТКОЕ РЕЗЮМЕ

Обнаружена система удаленного видеонаблюдения состоящая из:

  • PC-клиент (VideoReader.exe) - приемник видео
  • Android-приложение (com.nvav.srv.recorder) - источник видео
  • Центральный сигналинг-сервер (vidser.top) - координация подключений

⚠️ КРИТИЧНО: Система использует жестко зашитые серверы третьих лиц!


🌐 ОБНАРУЖЕННЫЕ СЕРВЕРНЫЕ ПОДКЛЮЧЕНИЯ

1. Основной сигналинг сервер

🔗 Домен: vidser.top
📍 IP получение: https://vidser.top/ip/get-ip-kr.php?port={canal}
🔌 Порт данных: 3033 TCP
📊 Фолбек IP: 158.247.241.191

2. Детали подключения

  • PC приложение: Получает IP через HTTP запрос к vidser.top
  • Android приложение: Аналогично получает IP и подключается
  • Канал связи: Номер канала (45-55) для идентификации пары устройств
  • Протокол: Зашифрованный TCP с AES шифрованием

🔐 КРИПТОГРАФИЧЕСКАЯ СИСТЕМА

Ключи шифрования (одинаковые в обеих платформах):

// PC (C#)
keyByte = MD5("73!2#qweaSdzxc4r")
ivByte = MD5("0_=op[l:',./vf73")

// Android (Java) - ИДЕНТИЧНО
keyByte = MD5("73!2#qweaSdzxc4r");
ivByte = MD5("0_=op[l:',./vf73");

Алгоритм шифрования:

  • Алгоритм: AES-128-CBC
  • Padding: PKCS5/PKCS7
  • Все данные (кроме служебных) шифруются

📡 ПРОТОКОЛ ВЗАИМОДЕЙСТВИЯ

Структура подключения:

  1. Получение IP адреса:

    • HTTP GET: https://vidser.top/ip/get-ip-kr.php?port={channel}
    • Ответ: 4 байта - IP адрес в бинарном виде
  2. TCP подключение к серверу:

    • PC: port 3033, первый байт = 0, второй байт = номер канала
    • Android: port 3033, первый байт = 1, второй байт = номер канала

Формат пакетов:

[1 байт: длина заголовка] [N байт: размер данных] [Зашифрованные данные] [1 байт: тип]

Типы сообщений:

  • Тип 0: Heartbeat/ping сообщения
  • Тип 2+: Видеоданные и команды

🏗️ АРХИТЕКТУРА СИСТЕМЫ

┌─────────────────┐    HTTPS    ┌─────────────────┐
│   PC Client     │◄────────────┤   vidser.top    │
│  VideoReader    │   Get IP    │  Signaling      │
└─────────────────┘             │   Server        │
         │                      └─────────────────┘
         │                               ▲
         │ TCP:3033                      │ HTTPS
         │ Channel:XX                    │ Get IP
         │ Type:0 (receiver)             │
         ▼                               │
┌─────────────────┐             ┌─────────────────┐
│  Media Relay    │             │ Android Client  │
│    Server       │◄────────────┤  NVAV Recorder  │
│  (Unknown IP)   │  TCP:3033   │                 │
└─────────────────┘  Channel:XX  └─────────────────┘
                     Type:1 (sender)

📱 ANDROID ПРИЛОЖЕНИЕ - ДЕТАЛИ

Пакет: com.nvav.srv.recorder

Основные классы:

  • InOut.java - Сетевое взаимодействие (аналог InOutSocket.cs)
  • MActivity.java - Главная активность
  • ChenalC.java - Хранение номера канала
  • ICameraRecord.java - Интерфейс записи камеры
  • Camera*.java - Реализации для разных производителей

Каналы связи:

static int[] chenals = {0, 55, 54, 53, 51, 49, 48, 52, 50, 47, 46, 45};
static final String[] key_ch = {"0000", "1111", "533D", "9A32", "DC8F", 
                                 "1095", "4167", "2E43", "701B", "2BA9", 
                                 "2BB4", "1F0E"};

Функциональность:

  • Запись видео с камеры
  • Сжатие и шифрование
  • Передача через TCP сокет
  • Поддержка различных производителей Android устройств

💻 PC ПРИЛОЖЕНИЕ - ДЕТАЛИ

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

  • Form1.cs (3941 строка) - Главная форма с UI
  • InOutSocket.cs - Сетевой клиент
  • Decoder.cs - Декодирование видео
  • SaveVideo.cs - Сохранение на диск

Возможности:

  • Прием зашифрованного видеопотока
  • Декодирование через FFmpeg
  • Отображение в реальном времени
  • Сохранение записей
  • Работа с QR-кодами (для настройки?)

⚠️ УЯЗВИМОСТИ И РИСКИ

🔴 Критические риски:

  1. Зависимость от внешнего сервера (vidser.top)
  2. Жестко зашитые ключи шифрования
  3. Отсутствие аутентификации пользователей
  4. Нет проверки сертификатов SSL

🟡 Потенциальные проблемы:

  1. Сервер может логировать все соединения
  2. Отсутствие end-to-end шифрования между устройствами
  3. Простой канальный алгоритм (подбор каналов)
  4. Нет защиты от подключения посторонних

🔧 ТЕХНИЧЕСКОЕ ЗАКЛЮЧЕНИЕ

Принцип работы:

  1. Android устройство запускает приложение-рекордер
  2. PC приложение запускается для просмотра
  3. Оба получают IP медиа-сервера через vidser.top
  4. Устанавливается прямое соединение через промежуточный сервер
  5. Видеопоток передается в зашифрованном виде

Используемые технологии:

  • C# .NET Framework 4.7.2 (PC)
  • Java Android SDK (мобильное)
  • FFmpeg (кодирование/декодирование)
  • AES шифрование
  • TCP сокеты

🚀 РЕКОМЕНДАЦИИ ПО УЛУЧШЕНИЮ

Немедленные действия:

  1. Заменить внешний сигналинг сервер на собственный
  2. Реализовать динамические ключи шифрования
  3. Добавить аутентификацию пользователей
  4. Использовать TLS для всех соединений

Архитектурные улучшения:

  1. WebRTC вместо прямых TCP соединений
  2. P2P соединения для снижения нагрузки на сервер
  3. Микросервисная архитектура
  4. Kubernetes deployment

📋 ИТОГ: Система функциональна, но требует серьезной доработки для продакшн использования из-за критических зависимостей от внешних сервисов и слабой системы безопасности.