\documentclass[a4paper, final]{article}
%\usepackage{literat} % Нормальные шрифты
\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{amsmath}
\usepackage[left=25mm, top=20mm, right=20mm, bottom=20mm, footskip=10mm]{geometry}
\usepackage{ragged2e} %для растягивания по ширине
\usepackage{setspace} %для межстрочного интервала
\usepackage{moreverb} %для работы с листингами
\usepackage{indentfirst} % для абзацного отступа
\usepackage{moreverb} %для печати в листинге исходного кода программ
\usepackage{pdfpages} %для вставки других pdf файлов
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{afterpage}
\usepackage{longtable}
\usepackage{float}

% Рекомендуется для biblatex (кавычки/локализация цитат и т.п.)
\usepackage{csquotes}

% ГОСТ-стили для biblatex
\usepackage[
  backend=biber,
  bibstyle=gost-numeric, % ссылки вида: [1]
  citestyle=gost-numeric,
  sorting=none % порядок в списке = по первому цитированию
]{biblatex}

% Все источники хранятся в отдельном файле
\addbibresource{refs.bib}

\renewcommand*{\bibfont}{\small}

% \usepackage[paper=A4,DIV=12]{typearea}
\usepackage{pdflscape}
% \usepackage{lscape}

\usepackage{array}
\usepackage{multirow}

\renewcommand\verbatimtabsize{4\relax}
\renewcommand\listingoffset{0.2em} %отступ от номеров строк в листинге
\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице
\usepackage[font=small, singlelinecheck=false, justification=centering, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы
\usepackage{listings} %листинги
\usepackage{xcolor} % цвета
% \usepackage{hyperref}% для гиперссылок
\usepackage{enumitem} %для перечислений

\newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}}


\setlist[enumerate,itemize]{leftmargin=1.2cm} %отступ в перечислениях

% \hypersetup{colorlinks,
    % allcolors=[RGB]{010 090 200}} %красивые гиперссылки (не красные)

% подгружаемые языки — подробнее в документации listings (это всё для листингов)
\lstloadlanguages{ SQL}
% включаем кириллицу и добавляем кое−какие опции
\lstset{tabsize=2,
    breaklines,
    basicstyle=\footnotesize,
    columns=fullflexible,
    flexiblecolumns,
    numbers=left,
    numberstyle={\footnotesize},
    keywordstyle=\color{blue},
    inputencoding=cp1251,
    extendedchars=true
}
\lstdefinelanguage{MyC}{
    language=SQL,
%    ndkeywordstyle=\color{darkgray}\bfseries,
%    identifierstyle=\color{black},
%    morecomment=[n]{/**}{*/},
%    commentstyle=\color{blue}\ttfamily,
%    stringstyle=\color{red}\ttfamily,
%    morestring=[b]",
%    showstringspaces=false,
%    morecomment=[l][\color{gray}]{//},
    keepspaces=true,
    escapechar=\%,
    texcl=true
}

\textheight=24cm % высота текста
\textwidth=16cm % ширина текста
\oddsidemargin=0pt % отступ от левого края
\topmargin=-1.5cm % отступ от верхнего края
\parindent=24pt % абзацный отступ
\parskip=5pt % интервал между абзацами
\tolerance=2000 % терпимость к "жидким" строкам
\flushbottom % выравнивание высоты страниц


% Настройка листингов
\lstset{
    language=python,
    extendedchars=\true,
    inputencoding=utf8,
    keepspaces=true,
    % captionpos=b, % подписи листингов снизу
}

% Настройка содержания
\usepackage{tocloft}
\usepackage[hidelinks]{hyperref}

% section в содержании НЕ жирным
\renewcommand{\cftsecfont}{\normalfont}
\renewcommand{\cftsecpagefont}{\normalfont}

% убрать отступ у subsection
\setlength{\cftsubsecindent}{0pt}



\begin{document}
% ТИТУЛЬНЫЙ ЛИСТ
\begin{center}
    \hfill \break
    \hfill \break
    \normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ\\
        федеральное государственное автономное образовательное учреждение высшего образования \\
        САНКТ-ПЕТЕРБУРГСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ПЕТРА ВЕЛИКОГО\\[10pt]}
    \normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt] 
    \normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt] 
    \normalsize{Направление: 02.03.01 <<Математика и компьютерные науки>>}\\
    
    \hfill \break
    \hfill \break
    \hfill \break
    \large{Отчёт по практическим работам по дисциплине}\\
    \large{<<Защита информации>>}\\
    
    \hfill \break
    \hfill \break
    \hfill \break
\end{center}

\small{ 
    \begin{tabular}{lrrl}
        \!\!\!Студент, & \hspace{2cm} & & \\
        \!\!\!группы 5130201/20101 & \hspace{2cm} & \underline{\hspace{3cm}} & Тищенко А. А. \\\\
        \!\!\!Руководитель & \hspace{2cm} & & \\
        \!\!\! & \hspace{2cm} & \underline{\hspace{3cm}} & Силиненко А. В. \\\\
        &&\hspace{4cm}
    \end{tabular}
    \begin{flushright}
        <<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2026г.
    \end{flushright}
}

\hfill \break
\hfill \break
\begin{center} \small{Санкт-Петербург, 2026} \end{center}
\thispagestyle{empty} % выключаем отображение номера для этой страницы

\newpage
\tableofcontents
\thispagestyle{empty} % выключаем отображение номера для этой страницы

\newpage
\section*{Введение}
\addcontentsline{toc}{section}{Введение}

В рамках курса <<Защита информации>> было выполнено несколько практических работ, по результатам которых был составлен данный отчёт, содержащий информацию по всем практическим работам. Отчетная информация по каждой работе – это отдельный раздел в общем отчете.

В отчёте представлены результаты следующих практических работ:
\begin{enumerate}
    \item Практическая работа №1. Анализ уязвимостей программного обеспечения. Данная практическая работа посвящена анализу уязвимостей программного обеспечения с использованием Банка данных угроз безопасности информации ФСТЭК России~\cite{fstec-bdu}. В ходе выполнения работы предусмотрено изучение структуры разделов «Угрозы» и «Уязвимости», а также поиск уязвимостей по заданным критериям. Особое внимание уделяется выявлению уязвимостей, соответствующих используемым версиям операционных систем личных устройств, и рассмотрению возможных мер по их устранению.
    \item Практическая работа №2. Разработка и исследование системы аутентификации и авторизации. Данная практическая работа посвящена разработке системы доступа пользователей к конфиденциальным данным и исследованию стойкости паролей к атаке методом грубой силы. В ходе выполнения работы реализованы утилита управления пользователями, утилита доступа к конфиденциальным данным и программа перебора паролей, а также проведено экспериментальное исследование зависимости времени взлома от длины пароля.
\end{enumerate}

\newpage
\section{Анализ уязвимостей программного обеспечения}
\subsection{Цели и задачи работы}

Практическая работа №1 по дисциплине «Защита информации» посвящена анализу уязвимостей программного обеспечения с использованием Банка данных угроз безопасности информации ФСТЭК Российской Федерации.

Цель работы: получение практических навыков работы с Банком данных угроз ФСТЭК России~\cite{fstec-bdu}, содержащим сведения об угрозах безопасности информации и уязвимостях программного обеспечения.

Для достижения поставленной цели в ходе выполнения работы были определены следующие задачи:

\begin{enumerate}
    \item Ознакомление со структурой раздела <<Угрозы>> Банка данных угроз безопасности информации ФСТЭК России.
    \item Ознакомление со структурой раздела <<Уязвимости>> Банка данных угроз.
    \item Поиск информации в разделе <<Уязвимости>> по заданным критериям.
    \item Определение версий операционных систем, используемых на личном смартфоне и персональном компьютере.
    \item Поиск уязвимостей с уровнем опасности <<Критический>> и <<Высокий>>, соответствующих используемым версиям операционных систем, а также анализ и применение рекомендованных мер по их устранению.
\end{enumerate}

Выполнение данной работы позволяет сформировать практические навыки анализа актуальных угроз и уязвимостей, а также повысить уровень понимания механизмов обеспечения информационной безопасности современных информационных систем.

\subsection{Знакомство с разделом <<Угрозы>> Банка угроз}
Раздел <<Угрозы>> Банка данных угроз безопасности информации ФСТЭК России предназначен для систематизированного представления сведений об актуальных угрозах безопасности информации. Данный раздел содержит структурированную информацию, позволяющую оценить характер угроз, возможные последствия их реализации и способы противодействия.

Раздел включает в себя следующие основные аспекты:

\begin{enumerate}
    \item Классификация угроз: угрозы распределяются по различным категориям в зависимости от источника возникновения, способа реализации и объекта воздействия. Это позволяет упорядочить информацию и упростить её анализ.
    
    \item Описание угроз: для каждой угрозы приводится развернутое описание, включающее возможные сценарии реализации, цели нарушителя и потенциальные последствия для информационной системы.
    
    \item Объекты воздействия: указываются типы информационных систем, ресурсов или процессов, на которые может быть направлена угроза.
    
    \item Уровень опасности: каждой угрозе присваивается определённый уровень опасности, отражающий степень потенциального ущерба при её реализации.
    
    \item Рекомендации по противодействию: приводятся общие меры и подходы, направленные на предупреждение реализации угрозы или снижение возможных негативных последствий.
\end{enumerate}

\subsection{Знакомство с разделом <<Уязвимости>> Банка угроз}

Раздел <<Уязвимости>> Банка данных угроз безопасности информации ФСТЭК России предназначен для получения сведений об актуальных уязвимостях программного обеспечения и их характеристиках. В рамках работы были рассмотрены подразделы: <<Список уязвимостей>>, <<Наиболее опасные уязвимости>> и <<Инфографика>>.

Список уязвимостей представляет собой структурированный перечень выявленных уязвимостей в программном обеспечении. Для каждой уязвимости указывается идентификатор, наименование, описание, затронутое программное обеспечение и его версии, уровень опасности, а также оценка по шкале CVSS. Уязвимости классифицируются по уровню критичности (критический, высокий, средний и др.), что позволяет определить приоритетность их устранения. Также приводятся рекомендации по устранению или минимизации последствий эксплуатации уязвимости.

Подраздел <<Наиболее опасные уязвимости>> содержит перечень уязвимостей с наивысшим уровнем опасности. Как правило, к ним относятся уязвимости, позволяющие выполнить удалённое выполнение кода, повысить привилегии, обойти механизмы аутентификации или получить несанкционированный доступ к информации. Данный раздел позволяет оперативно определить наиболее критичные риски для информационных систем (см. рис.~\ref{fig:top_vuln}).

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.7\linewidth]{img/top_vulnerabilities.png}
   \caption{Пример отображения наиболее опасных уязвимостей}
   \label{fig:top_vuln}
\end{figure}

Подраздел <<Инфографика>> предназначен для наглядного представления статистических данных по уязвимостям. В нём отображается распределение уязвимостей по уровням опасности, типам ошибок, видам программного обеспечения и производителям. Инфографика позволяет визуально оценить текущее состояние защищённости программных продуктов и выявить наиболее проблемные направления (см. рис.~\ref{fig:stats_vuln}).

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.7\linewidth]{img/vulnerability_stats.png}
   \caption{Пример статистического распределения уязвимостей}
   \label{fig:stats_vuln}
\end{figure}

\newpage
\subsection{Версии ОС, используемые в личных устройствах}

На личном компьютере используется операционная система Ubuntu 25.10 (см. рис.~\ref{fig:laptop-os-version}).

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.5\linewidth]{img/laptop-os-version.png}
   \caption{Версия операционной системы личного компьютера}
   \label{fig:laptop-os-version}
\end{figure}

На личном мобильном устройстве используется операционная система Android 11 с графической оболочкой MIUI Global 12.5.14, сборка 12.5.14.0 RKURUXM (см. рис.~\ref{fig:mobile-os-version}).

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.5\linewidth]{img/mobile-os-version.jpg}
   \caption{Версия операционной системы личного мобильного устройства}
   \label{fig:mobile-os-version}
\end{figure}

\subsection{Уязвимости ОС личного компьютера}

Для поиска уязвимостей ОС личного компьютера на сайте Банка данных угроз безопасности информации ФСТЭК России были использованы следующие критерии:
\begin{enumerate}
    \item Операционная система: Ubuntu 25.10.
    \item Уровень опасности: высокий.
\end{enumerate}
Использовался уровень опасности <<высокий>>, так как критических уязвимостей для данной ОС не найдено.

По заданным критериям было найдено 10 уязвимостей (см. рис.~\ref{fig:laptop-vulnerabilities}).

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.8\linewidth]{img/laptop-vulnerabilities.png}
   \caption{Уязвимости ОС личного компьютера}
   \label{fig:laptop-vulnerabilities}
\end{figure}

Наиболее свежей является уязвимость BDU:2025-15300 <<Уязвимость интерфейсов cpu\_latency\_qos\_add, remove, update\_request модуля drivers/ufs/core/ufs-sysfs.c драйвера поддержки устройств SCSI ядра операционной системы Linux связана с ошибками синхронизации при использовании общего ресурса («Ситуация гонки»). Эксплуатация уязвимости может позволить нарушителю, действующему удаленно, вызвать отказ в обслуживании>>. Развёрнутое описание уязвимости представлено на рисунке~\ref{fig:laptop-vulnerabilities-details}.

Базовый вектор уязвимости CVSS 2.0: AV:A/AC:L/Au:S/C:C/I:C/A:C.

AV: A (Access Vector: Adjacent Network) — параметр, указывающий на то, что атакующий должен находиться в той же локальной сети или в непосредственной сетевой близости (например, в одной Wi-Fi сети) для реализации атаки.  

AC: L (Access Complexity: Low) — низкая сложность эксплуатации уязвимости. Для успешной атаки не требуется выполнения сложных условий или специальной подготовки среды.  

Au: S (Authentication: Single) — для осуществления атаки требуется прохождение аутентификации один раз. Это означает, что атакующий должен обладать учетной записью или иным способом пройти проверку подлинности.  

C: C (Confidentiality Impact: Complete) — полное нарушение конфиденциальности. Уязвимость позволяет получить полный доступ к защищаемой информации.  

I: C (Integrity Impact: Complete) — полное нарушение целостности. Злоумышленник может изменять или уничтожать данные без ограничений.  

A: C (Availability Impact: Complete) — полное нарушение доступности. Эксплуатация уязвимости может привести к отказу в обслуживании или полной недоступности системы.

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.9\linewidth]{img/laptop-vulnerabilities-details.png}
   \caption{Развёрнутое описание уязвимости BDU:2025-15300}
   \label{fig:laptop-vulnerabilities-details}
\end{figure}

Уязвимость была устранена в версии 25.10-6.17.0-14.14, поэтому для её устранения достаточно было обновить ОС до этой версии.

\newpage
\subsection{Уязвимости ОС личного мобильного устройства}

Для поиска уязвимостей ОС личного мобильного устройства на сайте Банка данных угроз безопасности информации ФСТЭК России были использованы следующие критерии:
\begin{enumerate}
    \item Операционная система: Android 11.
    \item Уровень опасности: критический.
\end{enumerate}

По заданным критериям была найдена 1 уязвимость (см. рис.~\ref{fig:mobile-vulnerabilities}).

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.8\linewidth]{img/mobile-vulnerabilities.png}
   \caption{Уязвимости ОС личного мобильного устройства}
   \label{fig:mobile-vulnerabilities}
\end{figure}

Развёрнутое описание уязвимости BDU:2023-08587 <<Уязвимость функции \\ callback\_thread\_event (com\_android\_bluetooth\_btservice\_AdapterService.cpp) операционной системы Android связана с использованием памяти после её освобождения. Эксплуатация уязвимости может позволить нарушителю, действующему удалённо, выполнить произвольный код>>, представлено на рисунке~\ref{fig:mobile-vulnerabilities-details}.

Базовый вектор уязвимости CVSS 2.0: AV:N/AC:L/Au:N/C:C/I:C/A:C.

AV: N (Access Vector: Network) — параметр, указывающий на то, что атакующий может осуществить атаку удалённо через сеть (например, через Интернет), без необходимости физического доступа или нахождения в локальной сети.  

AC: L (Access Complexity: Low) — низкая сложность эксплуатации уязвимости. Для успешной атаки не требуется специальных условий или сложной подготовки.  

Au: N (Authentication: None) — для эксплуатации уязвимости не требуется аутентификация. Атакующий может выполнить атаку без наличия учетной записи или прохождения процедуры входа в систему.  

C: C (Confidentiality Impact: Complete) — полное нарушение конфиденциальности. Уязвимость позволяет злоумышленнику получить полный доступ к конфиденциальной информации.  

I: C (Integrity Impact: Complete) — полное нарушение целостности. Атакующий может изменять, подменять или удалять данные без ограничений.  

A: C (Availability Impact: Complete) — полное нарушение доступности. Эксплуатация уязвимости может привести к полной недоступности системы или отказу в обслуживании.

\begin{figure}[h!]
   \centering
   \includegraphics[width=0.9\linewidth]{img/mobile-vulnerabilities-details.png}
   \caption{Развёрнутое описание уязвимости BDU:2023-08587}
   \label{fig:mobile-vulnerabilities-details}
\end{figure}

\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, исходный код в приложении 1) предоставляет следующие подкоманды: \texttt{add} — добавление пользователя с интерактивным вводом ФИО, прав доступа, пароля и его подтверждения; \texttt{edit} — редактирование ФИО и прав доступа существующего пользователя; \texttt{passwd} — изменение пароля; \texttt{delete} — удаление пользователя; \texttt{list} — вывод списка всех пользователей. Пароль хранится в виде SHA-256-хэша. Все операции с файлом паролей регистрируются в журнале \texttt{log/usermgr.log}.

Утилита доступа к конфиденциальным данным (confaccess, исходный код в приложении 2) при запуске запрашивает логин и пароль. При успешной аутентификации выводится приветствие <<Привет, <ФИО>>> и справка по доступным командам. При вводе неверных данных запрос повторяется. Завершение работы происходит по команде \texttt{exit} или сигналу SIGINT (Ctrl+C). Все попытки входа и действия с конфиденциальными данными регистрируются в журнале \texttt{log/access.log}. Для неинтерактивной проверки учётных данных предусмотрен режим \texttt{--check <логин>}: утилита читает пароли построчно из stdin и выводит 0 или 1 на каждую строку; при совпадении завершает работу с кодом 0.

Поддерживаемые команды приведены в таблице~\ref{tab:commands}.

\begin{table}[h!]
\centering
\caption{Команды утилиты confaccess}
\label{tab:commands}
\begin{tabularx}{\textwidth}{llX}
\toprule
Команда & Требуемые права & Описание \\
\midrule
\texttt{create <file>} & w & Создание нового пустого файла в confdata \\
\texttt{read <file>} & r & Вывод содержимого файла \\
\texttt{append <file> <text>} & w & Добавление строки в конец файла \\
\texttt{copy <src> <dst>} & r, w & Копирование файла в confdata \\
\texttt{remove <file>} & d & Удаление файла из confdata \\
\texttt{help} & — & Вывод справки \\
\texttt{exit} & — & Выход из программы \\
\bottomrule
\end{tabularx}
\end{table}

Копирование разрешено только в каталог \texttt{confdata} или внутри него. Копирование из \texttt{confdata} в другие каталоги и перезапись существующих файлов запрещены.

Программа взлома паролей (bruteforce, исходный код в приложении 3) не имеет доступа к файлу паролей и выполняет перебор исключительно через утилиту confaccess. При запуске bruteforce создаёт один процесс \texttt{confaccess --check <логин>} и передаёт ему пароли построчно; утилита проверяет каждый пароль (хэширование SHA-256 и сравнение с данными из \texttt{passwd}) и возвращает результат. Перебор выполняется последовательно, начиная с длины 1. При нахождении совпадения фиксируются найденный пароль, количество итераций и затраченное время. Перебор прекращается при обнаружении пароля, достижении заданной максимальной длины или истечении восьмичасового лимита.

\subsection{Развёртывание системы}

Для создания структуры каталогов и установки утилит предусмотрен скрипт \texttt{setup.sh} (приложение 4). При запуске с правами суперпользователя скрипт также выставляет ограничительные права доступа. Базовый каталог задаётся переменной окружения \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.6\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$ — скорость проверки паролей через утилиту confaccess, измеренная экспериментально. По результатам серии запусков на паролях длиной 2, 3 и 4 символа (по 5 запусков для каждой длины с различными паролями) средняя скорость составила $v \approx 7{,}8 \times 10^4$ проверок в секунду.

На рисунке~\ref{fig:lab2-bruteforce} показан пример вывода программы взлома для пароля длиной 3 символа.

\begin{figure}[h!]
    \centering
    \includegraphics[width=0.5\linewidth]{img/lab2-bruteforce.png}
    \caption{Результат работы программы взлома bruteforce}
    \label{fig:lab2-bruteforce}
\end{figure}

Эксперименты проводились для длин 2, 3 и 4 символов. Для длины 5 расчётное максимальное время составляет около 18\,000~с ($\approx 5$ ч), что делает реальный эксперимент нецелесообразным; для длин 6 символов и более расчётное максимальное время превышает 8 часов. Результаты приведены в таблице~\ref{tab:bruteforce}.

\begin{table}[h!]
\centering
\caption{Результаты исследования стойкости паролей (SHA-256, $v = 7{,}8 \times 10^4$ проверок/с)}
\label{tab:bruteforce}
\begin{tabularx}{\textwidth}{crrcc}
\toprule
Длина & $N$ & $t_{\max}$, с & Эксп. итераций & Эксп. время, с \\
\midrule
2 & $3\,744$                  & $0{,}048$               & $1\,847$                  & $0{,}024$ \\
3 & $269\,568$                & $3{,}5$                 & $134\,847$                 & $1{,}73$ \\
4 & $19\,408\,896$           & $249$                   & $11\,623\,412$           & $149$    \\
5 & $1\,397\,440\,512$       & $17\,916$               & \multicolumn{2}{c}{не проводился} \\
6 & $1{,}01 \times 10^{11}$  & $1{,}29 \times 10^6$    & \multicolumn{2}{c}{не проводился} \\
7 & $7{,}24 \times 10^{12}$  & ${\approx}9{,}3 \times 10^{7}$ & \multicolumn{2}{c}{не проводился} \\
8 & $5{,}22 \times 10^{14}$  & ${\approx}6{,}7 \times 10^{9}$ & \multicolumn{2}{c}{не проводился} \\
\bottomrule
\end{tabularx}
\end{table}

\subsection{Выводы}

В ходе практической работы была разработана система доступа пользователей к конфиденциальным данным, включающая утилиту управления пользователями, утилиту доступа и программу взлома паролей методом грубой силы. Реализован механизм хэширования паролей на основе алгоритма SHA-256, система разграничения прав доступа и журналирование всех операций.

Теоретический анализ показал, что количество итераций, необходимых для полного перебора паролей, экспоненциально возрастает с увеличением их длины. Экспериментальное исследование позволило оценить реальную скорость перебора и подтвердить теоретические оценки. Полученные результаты демонстрируют, что использование паролей длиной 6 символов и более существенно затрудняет атаку методом грубой силы.


\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}

В ходе выполнения практической работы №1 был проведён анализ уязвимостей программного обеспечения с использованием Банка данных угроз ФСТЭК России. Были изучены структура разделов <<Угрозы>> и <<Уязвимости>>, определены версии операционных систем личного компьютера и смартфона, а также выполнен поиск уязвимостей с уровнем опасности <<Критический>> и <<Высокий>>. Проведён анализ наиболее актуальных уязвимостей, рассмотрены их характеристики и векторы CVSS, а также рекомендации по устранению. В процессе выполнения работы были получены практические навыки поиска, анализа и оценки уязвимостей информационных систем.

В ходе выполнения практической работы №2 была разработана система доступа пользователей к конфиденциальным данным. Реализованы утилита управления пользователями с хэшированием паролей по алгоритму SHA-256, утилита доступа с разграничением прав и журналированием операций, а также программа взлома паролей методом грубой силы. Проведено исследование стойкости паролей в зависимости от их длины, результаты которого подтвердили экспоненциальную зависимость числа итераций от длины пароля и продемонстрировали практическую устойчивость достаточно длинных паролей к атаке полного перебора.

\newpage
\printbibliography[heading=bibintoc]

\newpage
\section*{Приложение 1}
\addcontentsline{toc}{section}{Приложение 1}
\label{app:usermgr}
\lstinputlisting{../lab2/usermgr.py}

\newpage
\section*{Приложение 2}
\addcontentsline{toc}{section}{Приложение 2}
\lstinputlisting{../lab2/access.py}

\newpage
\section*{Приложение 3}
\addcontentsline{toc}{section}{Приложение 3}
\label{app:bruteforce}
\lstinputlisting{../lab2/bruteforce.py}

\newpage
\section*{Приложение 4}
\addcontentsline{toc}{section}{Приложение 4}
\lstinputlisting{../lab2/setup.sh}

\end{document}