sdlc1

0

Описание

# Secure File Manager Проект демонстрирует реализацию безопасного программного обеспечения на C# с акцентом на: - Предотвращение уязвимостей веб-безопасности (OWASP) - Безопасную работу с файловой системой - Интеграцию с реляционными базами данных - Многопоточную синхронизацию 🎓 Учебный проект для РТУ МИРЭА

Языки

  • C#100%
5 месяцев назад
5 месяцев назад
5 месяцев назад
6 месяцев назад
6 месяцев назад
5 месяцев назад
5 месяцев назад
5 месяцев назад
7 месяцев назад
README.md
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. ЛР1. Безопасный файловый менеджер
    Создать надёжный и защищённый файловый менеджер, соответствующий учебным требованиям по безопасной обработке данных и взаимодействию с реляционной БД.

  2. ЛР2. Сравнительное исследование алгоритмов хэширования
    Реализовать собственный инструмент подбора паролей (bruteforce), сравнить его с профессиональными утилитами (

    hashcat
    /
    John the Ripper
    ) и оценить реальную сложность подбора для разных алгоритмов (SHA‑1, MD5, bcrypt, Argon2id).

Основные цели по безопасности:

  • Защита от 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
      $2a$10...
      и Argon2id с
      m=65536,t=3,p=2
      ).
  • Вывод:
    • найденный пароль (или сообщение «не найден»);
    • время выполнения;
    • количество проверенных кандидатов;
    • запись результатов в таблицу
      Operations
      (тип
      BRUTEFORCE
      /
      BRUTEFORCE_CANCEL
      ).

На основе этих данных можно составить отчёт в виде таблиц (время/скорость подбора) и сравнить результаты с

hashcat
/
john
, как требуется по методическим материалам ЛР2.


🛡️ Реализованные меры безопасности (ЛР1)

УязвимостьРеализованная защита
Path TraversalВсе пути проходят через
SecurityService.SecurePath
с нормализацией и проверкой выхода за рабочую директорию; блокируются
..
, абсолютные пути и reparse‑точки.
Insecure DeserializationДля JSON используется строго типизированная десериализация с
MaxDepth
и ограничением размера; для XML полностью запрещён DTD, отключён
XmlResolver
, введён контроль глубины дерева.
ZIP BombВ
ZipService
ограничены: количество файлов, суммарный распакованный объём, размер архива и коэффициент сжатия; имена записей дополнительно проверяются.
Race ConditionКритические операции с файлами защищены
lock
в
FileService
, операции с БД —
lock
в
DatabaseService
.
SQL InjectionВсе запросы выполняются только через параметризованные команды (
SqliteCommand.Parameters
), конкатенация SQL‑строк с пользовательскими данными не используется.
ПаролиПароли пользователей хешируются алгоритмом Argon2id с индивидуальной криптографической солью и фиксированными параметрами памяти/итераций.
Хеш файловДля контроля целостности содержимого файлов используется SHA‑256‑хеш от их содержимого.
ЛогированиеКаждая значимая операция (успешная или с ошибкой) записывается в таблицу
Operations
с указанием пользователя, типа действия, деталей и статуса.

📁 Структура проекта

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

Код организован по слоям: модели данных, сервисы инфраструктуры и тонкий

Program.cs
, который связывает всё через консольное меню.


🛠️ Требования

  • .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
  • MSBuildEnableWorkloadResolver="false"
    отключает проблемный резолвер workloads только в текущем окне PowerShell.
  • dotnet build .\sdlc1.sln
    явно указывает решение, чтобы избежать ошибки MSB1011 (несколько файлов проектов в каталоге).
  • 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

При необходимости переменную

MSBuildEnableWorkloadResolver=false
можно добавить в постоянные переменные среды пользователя (Windows или shell‑конфиг в WSL), чтобы не задавать её каждый раз.

3. Первичный запуск

При первом запуске автоматически создаются:

  • база данных
    filemanager.db
    в корне проекта;
  • рабочая директория
    SecureFiles
    (если её не было).

После этого приложение предложит:

  • зарегистрировать нового пользователя;
  • выполнить вход под существующей учётной записью.

🧪 Как использовать модуль ЛР2 в приложении

  1. Авторизоваться в системе (регистрация/вход через главное меню).
  2. В главном меню выбрать пункт
    10. Лабораторная 2: подбор паролей
    .
  3. Выбрать алгоритм:
    • 1
      — SHA‑1
    • 2
      — MD5
    • 3
      — bcrypt
    • 4
      — Argon2id
  4. Ввести целевой хэш (из методички или собственный тестовый хэш).
  5. Задать алфавит, минимальную и максимальную длину, количество потоков.
  6. Запустить перебор, дождаться результатов или остановить перебор нажатием Enter.
  7. Снять показатели времени и количества проверенных паролей для отчёта, сравнить с результатами
    hashcat
    /
    John the Ripper
    .

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

  • Язык: C# (актуальная версия для .NET 9,
    LangVersion=latest
    ).
  • Платформа: .NET 9 (
    net9.0
    ) с включёнными nullable‑ссылочными типами и implicit‑using.
  • База данных: SQLite через пакет
    Microsoft.Data.Sqlite
    (готовые сборки для разных платформ и runtime‑пакеты
    SQLitePCLRaw
    ).
  • Хеширование паролей пользователей:
    Konscious.Security.Cryptography.Argon2
    (алгоритм Argon2id).
  • Хеширование файлов:
    System.Security.Cryptography.SHA256
    .
  • Bruteforce‑модуль (ЛР2):
    • SHA‑1 и MD5:
      System.Security.Cryptography
      (hex‑сравнение через
      CryptographicOperations.FixedTimeEquals
      ).
    • bcrypt: библиотека
      BCrypt.Net-Next
      .
    • Argon2id:
      Konscious.Security.Cryptography.Argon2
      с разбором параметров из PHC‑строки (
      m
      ,
      t
      ,
      p
      , salt, hash).
    • многопоточность:
      Parallel.ForEach
      ,
      CancellationToken
      ,
      Task.Run
      .
  • Архивы 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).