284 lines
8.8 KiB
Markdown
284 lines
8.8 KiB
Markdown
# Практическая работа №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 должен запускать утилиту из-под себя и через неё пытаться подобрать пароль, он не должен лезть в файл напрямую. |