sdlc1
Описание
# Secure File Manager Проект демонстрирует реализацию безопасного программного обеспечения на C# с акцентом на: - Предотвращение уязвимостей веб-безопасности (OWASP) - Безопасную работу с файловой системой - Интеграцию с реляционными базами данных - Многопоточную синхронизацию 🎓 Учебный проект для РТУ МИРЭА
Релизы3
Языки
- C#100%
sdlc1/
├── Models/
│ ├── User.cs
│ ├── FileRecord.cs
│ ├── Operation.cs
│ └── HashAlgorithmKind.cs
├── Services/
│ ├── DatabaseService.cs
│ ├── FileService.cs
│ ├── SecurityService.cs
│ ├── JsonService.cs
│ ├── XmlService.cs
│ ├── ZipService.cs
│ ├── HashBruteforceService.cs
│ └── LoggingService.cs
├── SecureFiles/
│ ├── TestFolder/
│ ├── Extracted/
│ └── тестовые файлы (txt/json/xml/zip)
├── Program.cs
├── SecureFileManager.csproj
├── sdlc1.sln
└── README.md
🔒 Безопасный файловый менеджер
Secure File Manager — консольное приложение на C#, разработанное в рамках практических заданий по курсу «Разработка безопасного программного обеспечения» в РТУ МИРЭА.
Приложение реализует безопасную работу с файлами (текст, JSON, XML, ZIP) с учётом типовых уязвимостей, ведением аудита операций в локальной SQLite‑базе данных и модулем сравнительного исследования алгоритмов хэширования (ЛР2).
🎯 Цели проекта
-
ЛР1. Безопасный файловый менеджер
Создать надёжный и защищённый файловый менеджер, соответствующий учебным требованиям по безопасной обработке данных и взаимодействию с реляционной БД. -
ЛР2. Сравнительное исследование алгоритмов хэширования
Реализовать собственный инструмент подбора паролей (bruteforce), сравнить его с профессиональными утилитами (/hashcat) и оценить реальную сложность подбора для разных алгоритмов (SHA‑1, MD5, bcrypt, Argon2id).John the Ripper
Основные цели по безопасности:
- Защита от Path Traversal (обход путей).
- Предотвращение небезопасной десериализации (JSON/XML).
- Обнаружение и блокировка ZIP‑бомб.
- Исключение Race Conditions при конкурентном доступе к файлам и БД.
- Полная защита от SQL‑инъекций через параметризованные запросы.
- Аутентификация пользователей с хешированием паролей (Argon2id).
- Атомарность операций и подробное логирование действий пользователей.
🧩 Основные возможности (ЛР1)
- 📁 Просмотр дисков и базовой информации о файловой системе (через
в меню приложения).DriveInfo.GetDrives() - 📂 Навигация по рабочей директории и просмотр списка пользовательских файлов в каталоге
.SecureFiles - 📝 Чтение, создание, редактирование и удаление текстовых файлов в пределах безопасной директории.
- 📦 Работа с JSON: безопасное чтение, валидация структуры, ограничение глубины и размера, запись с нормализацией.
- 📄 Работа с XML: чтение/запись с запретом DTD/XXE, ограничением глубины и числа символов.
- 🗜️ Создание и извлечение ZIP‑архивов с защитой от ZIP‑бомб и проверкой имён файлов.
- 👤 Регистрация и аутентификация пользователей с хранением паролей в виде Argon2‑хешей с солью.
- 📊 Логирование всех операций в SQLite‑базу (таблица
, привязка к пользователю и файлу).Operations
🧪 Модуль ЛР2: подбор паролей (bruteforce)
В рамках ЛР2 в проект интегрирован отдельный модуль подбора паролей по хэшу (bruteforce), доступный из главного меню как пункт:
10. Лабораторная 2: подбор паролей
Функциональность модуля:
- Поддерживаемые алгоритмы:
- SHA‑1
- MD5
- bcrypt
- Argon2id (формат PHC, параметры m/t/p читаются из строки хэша).
- Ввод с консоли:
- целевой хэш (в hex для SHA‑1/MD5, строка для bcrypt/Argon2id);
- алфавит (
,0123456789и т.п.);abcdefghijklmnopqrstuvwxyz0123456789 - диапазон длины пароля (min/max);
- максимальное число потоков (используется
).Parallel.ForEach
- Перебор:
- многопоточный перебор всех комбинаций заданной длины с возможностью прерывания по Enter;
- подсчёт числа проверенных кандидатов и общего времени подбора;
- поддержка сложных тестовых хэшей из методички (включая bcrypt
и Argon2id с$2a$10...).m=65536,t=3,p=2
- Вывод:
- найденный пароль (или сообщение «не найден»);
- время выполнения;
- количество проверенных кандидатов;
- запись результатов в таблицу
(типOperations/BRUTEFORCE).BRUTEFORCE_CANCEL
На основе этих данных можно составить отчёт в виде таблиц (время/скорость подбора) и сравнить результаты с /, как требуется по методическим материалам ЛР2.
🛡️ Реализованные меры безопасности (ЛР1)
| Уязвимость | Реализованная защита |
|---|---|
| Path Traversal | Все пути проходят через с нормализацией и проверкой выхода за рабочую директорию; блокируются , абсолютные пути и reparse‑точки. |
| Insecure Deserialization | Для JSON используется строго типизированная десериализация с и ограничением размера; для XML полностью запрещён DTD, отключён , введён контроль глубины дерева. |
| ZIP Bomb | В ограничены: количество файлов, суммарный распакованный объём, размер архива и коэффициент сжатия; имена записей дополнительно проверяются. |
| Race Condition | Критические операции с файлами защищены в , операции с БД — в . |
| SQL Injection | Все запросы выполняются только через параметризованные команды (), конкатенация SQL‑строк с пользовательскими данными не используется. |
| Пароли | Пароли пользователей хешируются алгоритмом Argon2id с индивидуальной криптографической солью и фиксированными параметрами памяти/итераций. |
| Хеш файлов | Для контроля целостности содержимого файлов используется SHA‑256‑хеш от их содержимого. |
| Логирование | Каждая значимая операция (успешная или с ошибкой) записывается в таблицу с указанием пользователя, типа действия, деталей и статуса. |
📁 Структура проекта
SecureFileManager/
├── Models/ # Модели данных: User, FileRecord, Operation, HashAlgorithmKind
├── Services/ # Сервисы: БД, безопасность, файлы, JSON, XML, ZIP, bruteforce, логирование
├── SecureFiles/ # Рабочая директория для пользовательских файлов
├── Program.cs # Точка входа, меню и сценарии использования (ЛР1 + ЛР2)
├── SecureFileManager.csproj # Конфигурация проекта (.NET 9)
└── sdlc1.sln # Решение Visual Studio / Rider
Код организован по слоям: модели данных, сервисы инфраструктуры и тонкий , который связывает всё через консольное меню.
🛠️ Требования
- .NET SDK 9.0 (TargetFramework:
).net9.0 - ОС: Windows 11 / Linux (в том числе Astra Linux); возможно использование через WSL (Ubuntu), если установлен .NET SDK под WSL.
- Для сборки из командной строки требуется корректно установленный
вdotnet.PATH
▶️ Сборка и запуск
1. Клонирование репозитория
git clone <URL_репозитория>
cd sdlc1
(в учебном сценарии репозиторий может быть размещён в любой внутренней системе контроля версий).
2. Особенность .NET 9 и workloads (Windows 11 / WSL)
В некоторых версиях .NET 9 SDK механизм workloads может выдавать ошибки вида:
- The SDK 'Microsoft.NET.SDK.WorkloadAutoImportPropsLocator' specified could not be found
- WorkloadManifestCompositionException: Не найдена зависимость манифеста рабочей нагрузки "Microsoft.NET.Workload.Emscripten.net6" ...
Так как приложение — обычная консольная утилита без MAUI/Android/iOS/wasm, workloads не нужны, поэтому их резолвер можно отключить.
Windows 11 (PowerShell)
Выполнить в каталоге проекта:
$env:MSBuildEnableWorkloadResolver = "false"
dotnet build .\sdlc1.sln
dotnet run --project .\SecureFileManager.csproj
отключает проблемный резолвер workloads только в текущем окне PowerShell.MSBuildEnableWorkloadResolver="false"явно указывает решение, чтобы избежать ошибки MSB1011 (несколько файлов проектов в каталоге).dotnet build .\sdlc1.slnзапускает именно консольный проект файлового менеджера.dotnet run --project .\SecureFileManager.csproj
WSL (Ubuntu)
cd /mnt/c/Users/<имя_пользователя>/Downloads/sdlc1
export MSBuildEnableWorkloadResolver=false
dotnet build ./sdlc1.sln
dotnet run --project ./SecureFileManager.csproj
При необходимости переменную можно добавить в постоянные переменные среды пользователя (Windows или shell‑конфиг в WSL), чтобы не задавать её каждый раз.
3. Первичный запуск
При первом запуске автоматически создаются:
- база данных
в корне проекта;filemanager.db - рабочая директория
(если её не было).SecureFiles
После этого приложение предложит:
- зарегистрировать нового пользователя;
- выполнить вход под существующей учётной записью.
🧪 Как использовать модуль ЛР2 в приложении
- Авторизоваться в системе (регистрация/вход через главное меню).
- В главном меню выбрать пункт
.10. Лабораторная 2: подбор паролей - Выбрать алгоритм:
— SHA‑11— MD52— bcrypt3— Argon2id4
- Ввести целевой хэш (из методички или собственный тестовый хэш).
- Задать алфавит, минимальную и максимальную длину, количество потоков.
- Запустить перебор, дождаться результатов или остановить перебор нажатием Enter.
- Снять показатели времени и количества проверенных паролей для отчёта, сравнить с результатами
/hashcat.John the Ripper
📚 Используемые технологии
- Язык: C# (актуальная версия для .NET 9,
).LangVersion=latest - Платформа: .NET 9 (
) с включёнными nullable‑ссылочными типами и implicit‑using.net9.0 - База данных: SQLite через пакет
(готовые сборки для разных платформ и runtime‑пакетыMicrosoft.Data.Sqlite).SQLitePCLRaw - Хеширование паролей пользователей:
(алгоритм Argon2id).Konscious.Security.Cryptography.Argon2 - Хеширование файлов:
.System.Security.Cryptography.SHA256 - Bruteforce‑модуль (ЛР2):
- SHA‑1 и MD5:
(hex‑сравнение черезSystem.Security.Cryptography).CryptographicOperations.FixedTimeEquals - bcrypt: библиотека
.BCrypt.Net-Next - Argon2id:
с разбором параметров из PHC‑строки (Konscious.Security.Cryptography.Argon2,m,t, salt, hash).p - многопоточность:
,Parallel.ForEach,CancellationToken.Task.Run
- SHA‑1 и MD5:
- Архивы ZIP:
иSystem.IO.Compressionс ограничениями размера и коэффициента сжатия.ZipFile - JSON:
с ограничением глубины (System.Text.Json), размера и запретом лишних конструкций.MaxDepth - XML:
/System.XmlсSystem.Xml.Linq,DtdProcessing=Prohibitи контролем глубиныXmlResolver=null.MaxXmlDepth
📄 Статус и назначение
Проект разработан в учебных целях для демонстрации практик безопасного программирования и практической оценки стойкости хэш‑алгоритмов.
Структура кода и набор защитных механизмов соответствуют требованиям практических заданий по дисциплине «Разработка безопасного программного обеспечения» в РТУ МИРЭА (Path Traversal, Insecure Deserialization, ZIP‑бомбы, Race Conditions, SQL‑инъекции, аутентификация, аудит), а также требованиям по ЛР2 (собственный bruteforce, сравнение с профессиональными утилитами, измерение времени подбора).
Курс: «Разработка безопасного программного обеспечения»
Преподаватель: Латыпова Ольга
Год: 2025
Методические материалы: локальная сеть РТУ МИРЭА и портал online-edu.mirea.ru (раздел практикума по SDL).