init commit
This commit is contained in:
196
SECURITY_ANALYSIS_REPORT.md
Normal file
196
SECURITY_ANALYSIS_REPORT.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# ДЕТАЛЬНЫЙ АНАЛИЗ СИСТЕМЫ 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**
|
||||
|
||||
---
|
||||
|
||||
**📋 ИТОГ:** Система функциональна, но требует серьезной доработки для продакшн использования из-за критических зависимостей от внешних сервисов и слабой системы безопасности.
|
||||
Reference in New Issue
Block a user