# Практическая работа №2 по дисциплине «Защита информации» **Тема работы:** «Разработка и исследование системы аутентификации и авторизации» **Преподаватель:** Силиненко А.В. **Email:** [a_silinenko@mail.ru](mailto:a_silinenko@mail.ru) --- ## 1. Цели работы * Разработать систему доступа пользователей к конфиденциальным данным; * Исследовать стойкость паролей к атаке методом грубой силы. --- ## 2. Задачи работы ### 2.1. При необходимости установить на компьютер целевую ОС (Linux или MacOS), в которой производится разработка и использование системы. ### 2.2. Разработать систему доступа пользователей к конфиденциальным данным, включающую: * Выделенный каталог для хранения всех файлов системы; * Утилиту для работы с данными аутентификации и авторизации (паролями и правами доступа); * Утилиту доступа к конфиденциальным данным, обеспечивающую аутентификацию и авторизацию пользователя. ### 2.3. Разработать программу взлома паролей методом грубой силы и исследовать стойкость паролей в зависимости от длины пароля и алгоритма хэширования. --- ## 3. Требования к работе ### 3.1. ОС Работа выполняется в ОС **Linux** или **MacOS**. Необходим доступ с правами суперпользователя. Если доступа нет — установить гипервизор **VirtualBox** ([https://www.virtualbox.org/](https://www.virtualbox.org/)) и развернуть гостевую ОС. Допускается установка ОС как второй системы без VirtualBox. --- ### 3.2. Структура каталогов Необходимо создать дерево каталогов: ``` /usr/local/practice2/ ├── etc # хранение данных аутентификации и авторизации ├── confdata # хранение конфиденциальных файлов ├── bin # разработанные утилиты └── log # файлы регистрации ``` **Права доступа:** чтение, запись и выполнение только для пользователя `root`. --- ### 3.3. Требования к утилите управления пользователями #### Файл хранения данных Файл: ``` /usr/local/practice2/etc/passwd ``` Структура записи: ``` <логин>:<хэш_пароля>:<идентификатор>:<права>:<ФИО> ``` Одна строка — один пользователь. **Права на файл:** чтение и запись только для `root`. #### Права доступа * `r` — чтение * `w` — запись * `d` — удаление #### Требования к функционалу Утилита должна обеспечивать: * Добавление нового пользователя: * логин * ФИО * права доступа * пароль + подтверждение * Проверку корректности данных * Хранение пароля в виде **хэш-значения** * Использование алгоритма хэширования согласно индивидуальному заданию * Редактирование существующего пользователя * Изменение пароля * Удаление пользователя * Регистрацию всех действий с файлом `passwd` #### Требования к паролю * Кодировка: ASCII * Разрешены: * A–Z * a–z * 0–9 * `!@#$%^&*()` * Первый символ не может быть цифрой или спецсимволом --- ### 3.4. Требования к утилите доступа к конфиденциальным данным #### Авторизация При запуске: 1. Запрос логина 2. Запрос пароля 3. Проверка корректности Если данные корректны: * Вывод: `Привет, <ФИО>` * Краткая справка * Приглашение к вводу команд Если данные некорректны: * Повторный запрос Остановка — по сигналу **SIGINT (Ctrl+C)**. --- ### Поддерживаемые команды | Команда | Описание | Требуемые права | | -------- | ------------------------ | --------------- | | `read` | Вывод содержимого файла | r | | `append` | Добавление данных в файл | w | | `copy` | Копирование файла | r + w | | `remove` | Удаление файла | d | | `exit` | Выход | — | | `help` | Справка | — | #### Ограничения copy * Разрешено копирование: * в каталог `confdata` * внутри `confdata` * Запрещено: * из `confdata` в другие каталоги * перезапись существующих файлов внутри `confdata` #### Дополнительные требования * Утилита доступна для запуска всем пользователям ОС * Все действия с конфиденциальными данными логируются --- ### 3.5. Программа взлома паролей Должна: * Запускать утилиту доступа * Перебирать пароли методом brute force * Учитывать используемый алгоритм хэширования * Фиксировать: * время перебора * количество итераций до взлома --- ### 3.6. Общие требования * Язык программирования — любой * Код должен быть снабжен комментариями --- ### 3.7. Требования к исследованию Провести исследование для длин паролей: ``` 3, 4, 5, 6, 7, 8 символов ``` Необходимо: * Рассчитать максимальное количество итераций * По экспериментам (3–4 символа) оценить время для 5–8 * Проверить теорию экспериментально * Прервать эксперимент, если длительность > 8 часов * Проводить тестирование без активных задач на ПК --- ## 4. Требования к отчету В отчете необходимо указать: * Актуальность темы * Цель и задачи * Требования к системе * Характеристики ПК (процессор, память) * ОС и среду разработки * Используемый язык * Алгоритм хэширования * Примеры сборки (если применимо) * Примеры работы утилит * Пример расчета количества итераций и времени взлома * Таблицу или график с результатами: * рассчитанное количество итераций и время * полученные экспериментальные данные * Выводы --- ## 5. Справочная информация ### Поддержка алгоритмов хэширования **Linux:** * `md5sum` * `sha1sum` * `sha256sum` * `sha512sum` * `b2sum` * библиотека `openssl` **C++:** * `std::hash` **Python:** * модуль `hashlib` **Java:** * `java.security.MessageDigest` * Spring Security **Go:** * пакет `hash` --- Примечание: Brute Force должен запускать утилиту из-под себя и через неё пытаться подобрать пароль, он не должен лезть в файл напрямую.