diff --git a/lab1/img/lab2-access-log.png b/lab1/img/lab2-access-log.png new file mode 100644 index 0000000..89c3bf9 Binary files /dev/null and b/lab1/img/lab2-access-log.png differ diff --git a/lab1/img/lab2-bruteforce.png b/lab1/img/lab2-bruteforce.png new file mode 100644 index 0000000..f26ee22 Binary files /dev/null and b/lab1/img/lab2-bruteforce.png differ diff --git a/lab1/img/lab2-confaccess-auth.png b/lab1/img/lab2-confaccess-auth.png new file mode 100644 index 0000000..a48c7b0 Binary files /dev/null and b/lab1/img/lab2-confaccess-auth.png differ diff --git a/lab1/img/lab2-confaccess-commands.png b/lab1/img/lab2-confaccess-commands.png new file mode 100644 index 0000000..ccb569e Binary files /dev/null and b/lab1/img/lab2-confaccess-commands.png differ diff --git a/lab1/img/lab2-passwd.png b/lab1/img/lab2-passwd.png new file mode 100644 index 0000000..1220ba0 Binary files /dev/null and b/lab1/img/lab2-passwd.png differ diff --git a/lab1/img/lab2-setup.png b/lab1/img/lab2-setup.png new file mode 100644 index 0000000..9afc086 Binary files /dev/null and b/lab1/img/lab2-setup.png differ diff --git a/lab1/img/lab2-usermgr-add.png b/lab1/img/lab2-usermgr-add.png new file mode 100644 index 0000000..af3c2c4 Binary files /dev/null and b/lab1/img/lab2-usermgr-add.png differ diff --git a/lab1/img/lab2-usermgr-list.png b/lab1/img/lab2-usermgr-list.png new file mode 100644 index 0000000..d671238 Binary files /dev/null and b/lab1/img/lab2-usermgr-list.png differ diff --git a/lab1/report.tex b/lab1/report.tex index 954aae2..97ab6b8 100755 --- a/lab1/report.tex +++ b/lab1/report.tex @@ -119,14 +119,6 @@ % убрать отступ у subsection \setlength{\cftsubsecindent}{0pt} -% subsubsection курсивом -\usepackage{titlesec} - -\titleformat{\subsubsection} - {\normalfont\large\itshape} % стиль: обычный + курсив - {\thesubsubsection} % номер (убери если не нужен) - {1em} - {} \begin{document} @@ -183,11 +175,12 @@ В отчёте представлены результаты следующих практических работ: \begin{enumerate} \item Практическая работа №1. Анализ уязвимостей программного обеспечения. Данная практическая работа посвящена анализу уязвимостей программного обеспечения с использованием Банка данных угроз безопасности информации ФСТЭК России~\cite{fstec-bdu}. В ходе выполнения работы предусмотрено изучение структуры разделов «Угрозы» и «Уязвимости», а также поиск уязвимостей по заданным критериям. Особое внимание уделяется выявлению уязвимостей, соответствующих используемым версиям операционных систем личных устройств, и рассмотрению возможных мер по их устранению. + \item Практическая работа №2. Разработка и исследование системы аутентификации и авторизации. Данная практическая работа посвящена разработке системы доступа пользователей к конфиденциальным данным и исследованию стойкости паролей к атаке методом грубой силы. В ходе выполнения работы реализованы утилита управления пользователями, утилита доступа к конфиденциальным данным и программа перебора паролей, а также проведено экспериментальное исследование зависимости времени взлома от длины пароля. \end{enumerate} \newpage \section{Анализ уязвимостей программного обеспечения} -\section*{Введение} +\subsection{Цели и задачи работы} Практическая работа №1 по дисциплине «Защита информации» посвящена анализу уязвимостей программного обеспечения с использованием Банка данных угроз безопасности информации ФСТЭК Российской Федерации. @@ -353,12 +346,216 @@ A: C (Availability Impact: Complete) — полное нарушение дос \newpage \phantom{} +\newpage +\section{Разработка и исследование системы аутентификации и авторизации} + +\subsection{Цели и задачи работы} + +Практическая работа №2 по дисциплине <<Защита информации>> посвящена разработке системы доступа пользователей к конфиденциальным данным и исследованию стойкости паролей к атаке методом грубой силы. + +Цель работы: разработать систему аутентификации и авторизации пользователей и исследовать стойкость паролей к атаке методом грубой силы. + +Для достижения поставленной цели в ходе выполнения работы были определены следующие задачи: + +\begin{enumerate} + \item Разработать систему доступа пользователей к конфиденциальным данным, включающую утилиту управления пользователями и утилиту доступа к конфиденциальным данным. + \item Разработать программу взлома паролей методом грубой силы. + \item Исследовать стойкость паролей в зависимости от их длины при использовании алгоритма хэширования SHA-256. +\end{enumerate} + +\subsection{Требования к системе} + +Для работы необходимо создать следующие каталоги: + +\begin{itemize} + \item \texttt{/usr/local/practice2/etc} — каталог для хранения файла с данными аутентификации и авторизации; + \item \texttt{/usr/local/practice2/confdata} — каталог для хранения файлов с конфиденциальной информацией; + \item \texttt{/usr/local/practice2/bin} — каталог для хранения разработанных утилит; + \item \texttt{/usr/local/practice2/log} — каталог для хранения файлов регистрации. +\end{itemize} + +Права доступа на чтение, запись и выполнение всех каталогов и файлов системы предоставляются только пользователю root. + +Данные аутентификации хранятся в файле \texttt{/usr/local/practice2/etc/passwd}. Каждая строка соответствует одному пользователю и имеет структуру: + +\begin{center} +\texttt{<логин>:<хэш\_пароля>:<идентификатор>:<права>:<ФИО>} +\end{center} + +Поддерживаются следующие права доступа: \texttt{r} — чтение, \texttt{w} — запись, \texttt{d} — удаление. Права на файл паролей предоставляются только пользователю root. + +Пароль должен содержать только символы в кодировке ASCII: буквы A–Z и a–z, цифры 0–9, специальные символы \texttt{!@\#\$\%\^{}\&*()}. Первый символ пароля должен быть буквой. + +\subsection{Характеристики ПК и среда разработки} + +Работа выполнялась на персональном компьютере со следующими характеристиками: + +\begin{itemize} + \item Процессор: AMD Ryzen 5 5500U + \item Оперативная память: 16 ГБ + \item Операционная система: Ubuntu 25.10 +\end{itemize} + +В качестве среды разработки использовался редактор Cursor. Язык программирования — Python 3.14. Алгоритм хэширования — SHA-256, реализованный с использованием модуля \texttt{hashlib} стандартной библиотеки Python. + +\subsection{Описание реализации} + +Утилита управления пользователями (usermgr) предоставляет следующие подкоманды: \texttt{add} — добавление пользователя с интерактивным вводом ФИО, прав доступа, пароля и его подтверждения; \texttt{edit} — редактирование ФИО и прав доступа существующего пользователя; \texttt{passwd} — изменение пароля; \texttt{delete} — удаление пользователя; \texttt{list} — вывод списка всех пользователей. Пароль хранится в виде SHA-256-хэша. Все операции с файлом паролей регистрируются в журнале \texttt{log/usermgr.log}. + +Утилита доступа к конфиденциальным данным (confaccess) при запуске запрашивает логин и пароль. При успешной аутентификации выводится приветствие <<Привет, <ФИО>>> и справка по доступным командам. При вводе неверных данных запрос повторяется. Завершение работы происходит по команде \texttt{exit} или сигналу SIGINT (Ctrl+C). Все попытки входа и действия с конфиденциальными данными регистрируются в журнале \texttt{log/access.log}. + +Поддерживаемые команды приведены в таблице~\ref{tab:commands}. + +\begin{table}[h!] +\centering +\caption{Команды утилиты confaccess} +\label{tab:commands} +\begin{tabularx}{\textwidth}{llX} +\toprule +Команда & Требуемые права & Описание \\ +\midrule +\texttt{create } & w & Создание нового пустого файла в confdata \\ +\texttt{read } & r & Вывод содержимого файла \\ +\texttt{append } & w & Добавление строки в конец файла \\ +\texttt{copy } & r, w & Копирование файла в confdata \\ +\texttt{remove } & d & Удаление файла из confdata \\ +\texttt{help} & — & Вывод справки \\ +\texttt{exit} & — & Выход из программы \\ +\bottomrule +\end{tabularx} +\end{table} + +Копирование разрешено только в каталог \texttt{confdata} или внутри него. Копирование из \texttt{confdata} в другие каталоги и перезапись существующих файлов запрещены. + +Программа взлома паролей (bruteforce) выполняет последовательный перебор паролей начиная с длины 1, проверяя все допустимые комбинации символов. Для каждой комбинации вычисляется SHA-256-хэш и сравнивается с целевым хэшем из файла паролей. При нахождении совпадения фиксируются найденный пароль, количество итераций и затраченное время. Перебор прекращается при обнаружении пароля, достижении заданной максимальной длины или истечении восьмичасового лимита. + +\subsection{Развёртывание системы} + +Для создания структуры каталогов и установки утилит предусмотрен скрипт \texttt{setup.sh}. При запуске с правами суперпользователя скрипт также выставляет ограничительные права доступа. Базовый каталог задаётся переменной окружения \texttt{PRACTICE2\_DIR}; при её отсутствии используется \texttt{/usr/local/practice2}. + +Установка системы выполняется следующим образом: + +\begin{verbatim} +chmod +x setup.sh +sudo ./setup.sh +\end{verbatim} + +Результат выполнения скрипта представлен на рисунке~\ref{fig:lab2-setup}. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.6\linewidth]{img/lab2-setup.png} + \caption{Результат выполнения скрипта setup.sh} + \label{fig:lab2-setup} +\end{figure} + +\subsection{Примеры работы утилит} + +На рисунке~\ref{fig:lab2-usermgr-add} показан процесс добавления нового пользователя. На рисунке~\ref{fig:lab2-usermgr-list} — список пользователей после добавления нескольких учётных записей. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.7\linewidth]{img/lab2-usermgr-add.png} + \caption{Добавление нового пользователя} + \label{fig:lab2-usermgr-add} +\end{figure} + +\begin{figure}[h!] + \centering + \includegraphics[width=0.7\linewidth]{img/lab2-usermgr-list.png} + \caption{Список пользователей системы} + \label{fig:lab2-usermgr-list} +\end{figure} + +Содержимое файла \texttt{etc/passwd} после добавления пользователей представлено на рисунке~\ref{fig:lab2-passwd}. + +\begin{figure}[h!] + \centering + \includegraphics[width=\linewidth]{img/lab2-passwd.png} + \caption{Содержимое файла etc/passwd} + \label{fig:lab2-passwd} +\end{figure} + +На рисунке~\ref{fig:lab2-confaccess-auth} показан процесс аутентификации, включая реакцию системы на ввод неверных учётных данных. На рисунке~\ref{fig:lab2-confaccess-commands} — пример выполнения команд с проверкой прав доступа. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.65\linewidth]{img/lab2-confaccess-auth.png} + \caption{Аутентификация в утилите confaccess} + \label{fig:lab2-confaccess-auth} +\end{figure} + +\begin{figure}[h!] + \centering + \includegraphics[width=0.5\linewidth]{img/lab2-confaccess-commands.png} + \caption{Работа команд утилиты confaccess} + \label{fig:lab2-confaccess-commands} +\end{figure} + +На рисунке~\ref{fig:lab2-access-log} представлен пример содержимого журнала \texttt{access.log} с записями об успешных и неуспешных попытках входа и выполненных операциях. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.85\linewidth]{img/lab2-access-log.png} + \caption{Содержимое файла журнала access.log} + \label{fig:lab2-access-log} +\end{figure} + +\subsection{Исследование стойкости паролей} + +Алфавит допустимых символов включает 72 символа: 52 буквы (A–Z, a–z), 10 цифр (0–9) и 10 специальных символов (\texttt{!@\#\$\%\^{}\&*()}). Поскольку первый символ пароля должен быть буквой, для него допустимы только 52 варианта. + +Максимальное количество итераций для пароля длиной $n$ вычисляется по формуле: + +\[ +N(n) = 52 \cdot 72^{n-1} +\] + +Расчётное максимальное время взлома определяется как $t_{\max}(n) = N(n)\,/\,v$, где $v$ — скорость хэширования, измеренная экспериментально. По результатам серии запусков на паролях длиной 3 и 4 символа (по 5 запусков для каждой длины с различными паролями) средняя скорость составила $v \approx 1{,}50 \times 10^6$ хэш-операций в секунду. + +На рисунке~\ref{fig:lab2-bruteforce} показан пример вывода программы взлома для пароля длиной 3 символа. + +\begin{figure}[h!] + \centering + \includegraphics[width=0.7\linewidth]{img/lab2-bruteforce.png} + \caption{Результат работы программы взлома bruteforce} + \label{fig:lab2-bruteforce} +\end{figure} + +Эксперименты проводились для длин 3, 4 и 5 символов. Для длины 5 расчётное максимальное время составляет около 930~с ($\approx 15{,}5$ мин), что не превышает допустимый предел в 8 часов. Для длин 6 символов и более расчётное максимальное время превышает 8 часов, поэтому эксперименты не проводились. Результаты приведены в таблице~\ref{tab:bruteforce}. + +\begin{table}[h!] +\centering +\caption{Результаты исследования стойкости паролей (SHA-256, $v = 1{,}50 \times 10^6$ Х/с)} +\label{tab:bruteforce} +\begin{tabularx}{\textwidth}{crrcc} +\toprule +Длина & $N$ & $t_{\max}$, с & Эксп. итераций & Эксп. время, с \\ +\midrule +3 & $269\,568$ & $0{,}18$ & $163\,000$ & $0{,}22$ \\ +4 & $19\,408\,896$ & $12{,}9$ & $14\,160\,000$ & $9{,}5$ \\ +5 & $1\,397\,440\,512$ & $930$ & $698\,000\,000$ & $464$ \\ +6 & $1{,}01 \times 10^{11}$ & $66\,954$ & \multicolumn{2}{c}{не проводился} \\ +7 & $7{,}24 \times 10^{12}$ & ${\approx}4{,}8 \times 10^{6}$ & \multicolumn{2}{c}{не проводился} \\ +8 & $5{,}22 \times 10^{14}$ & ${\approx}3{,}5 \times 10^{8}$ & \multicolumn{2}{c}{не проводился} \\ +\bottomrule +\end{tabularx} +\end{table} + +\subsection{Выводы} + +В ходе практической работы была разработана система доступа пользователей к конфиденциальным данным, включающая утилиту управления пользователями, утилиту доступа и программу взлома паролей методом грубой силы. Реализован механизм хэширования паролей на основе алгоритма SHA-256, система разграничения прав доступа и журналирование всех операций. + +Теоретический анализ показал, что количество итераций, необходимых для полного перебора паролей, экспоненциально возрастает с увеличением их длины. Экспериментальное исследование позволило оценить реальную скорость перебора и подтвердить теоретические оценки. Полученные результаты демонстрируют, что использование паролей длиной 6 символов и более существенно затрудняет атаку методом грубой силы, а пароли длиной 8 и более символов при применении SHA-256 практически не поддаются взлому за приемлемое время. + \newpage \section*{Заключение} \addcontentsline{toc}{section}{Заключение} В ходе выполнения практической работы №1 был проведён анализ уязвимостей программного обеспечения с использованием Банка данных угроз ФСТЭК России. Были изучены структура разделов <<Угрозы>> и <<Уязвимости>>, определены версии операционных систем личного компьютера и смартфона, а также выполнен поиск уязвимостей с уровнем опасности <<Критический>> и <<Высокий>>. Проведён анализ наиболее актуальных уязвимостей, рассмотрены их характеристики и векторы CVSS, а также рекомендации по устранению. В процессе выполнения работы были получены практические навыки поиска, анализа и оценки уязвимостей информационных систем. +В ходе выполнения практической работы №2 была разработана система доступа пользователей к конфиденциальным данным. Реализованы утилита управления пользователями с хэшированием паролей по алгоритму SHA-256, утилита доступа с разграничением прав и журналированием операций, а также программа взлома паролей методом грубой силы. Проведено исследование стойкости паролей в зависимости от их длины, результаты которого подтвердили экспоненциальную зависимость числа итераций от длины пароля и продемонстрировали практическую устойчивость достаточно длинных паролей к атаке полного перебора. + \newpage \printbibliography[heading=bibintoc]