Код для lab2
This commit is contained in:
277
lab2/lab2.md
Normal file
277
lab2/lab2.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# Практическая работа №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`
|
||||
Reference in New Issue
Block a user