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

196 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ДЕТАЛЬНЫЙ АНАЛИЗ СИСТЕМЫ 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 шифрованием
---
## 🔐 КРИПТОГРАФИЧЕСКАЯ СИСТЕМА
### Ключи шифрования (одинаковые в обеих платформах):
```csharp
// 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`** - Реализации для разных производителей
### Каналы связи:
```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**
---
**📋 ИТОГ:** Система функциональна, но требует серьезной доработки для продакшн использования из-за критических зависимостей от внешних сервисов и слабой системы безопасности.