This commit is contained in:
2026-03-26 09:18:16 +03:00
parent c62f6284d2
commit c373e8f5d9
5 changed files with 941 additions and 1 deletions

BIN
report/img/lab4-stand.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -177,6 +177,7 @@
\item Практическая работа №1. Анализ уязвимостей программного обеспечения. Данная практическая работа посвящена анализу уязвимостей программного обеспечения с использованием Банка данных угроз безопасности информации ФСТЭК России~\cite{fstec-bdu}. В ходе выполнения работы предусмотрено изучение структуры разделов «Угрозы» и «Уязвимости», а также поиск уязвимостей по заданным критериям. Особое внимание уделяется выявлению уязвимостей, соответствующих используемым версиям операционных систем личных устройств, и рассмотрению возможных мер по их устранению.
\item Практическая работа №2. Разработка и исследование системы аутентификации и авторизации. Данная практическая работа посвящена разработке системы доступа пользователей к конфиденциальным данным и исследованию стойкости паролей к атаке методом грубой силы. В ходе выполнения работы реализованы утилита управления пользователями, утилита доступа к конфиденциальным данным и программа перебора паролей, а также проведено экспериментальное исследование зависимости времени взлома от длины пароля.
\item Практическая работа №3. Реализация моделей дискреционного и мандатного управления доступом. Данная практическая работа посвящена расширению системы из работы №2 путём реализации моделей DAC (дискреционный доступ) и MAC (мандатный доступ) на основе модели Белла–Лападулы.
\item Практическая работа №4. Межсетевое экранирование средствами \texttt{iptables}. Данная практическая работа посвящена настройке межсетевого экрана в Linux, формированию политики фильтрации сетевого трафика и экспериментальной проверке пропуска разрешённых соединений и блокировки запрещённых пакетов с использованием \texttt{tcpdump}.
\end{enumerate}
\newpage
@@ -683,6 +684,278 @@ secret.txt:2
В ходе практической работы №3 на базе системы из работы №2 реализованы модели дискреционного и мандатного управления доступом. DAC реализован через список доступа (ACL) с владельцами объектов и командой \texttt{grant} для произвольного назначения прав. MAC реализован на основе модели Белла–Лападулы с тремя уровнями меток и проверкой свойств <<нет чтения сверху>> и <<нет записи вниз>>. Режимы проверки (BOTH, DAC\_ONLY, MAC\_ONLY) позволяют гибко настраивать систему; переключение доступно только администратору (root). Полученный опыт демонстрирует принципиальные различия между дискреционным и мандатным подходами к управлению доступом и их практическую реализацию в информационных системах.
\newpage
\section{Межсетевое экранирование средствами iptables}
\subsection{Актуальность темы}
Межсетевое экранирование является одним из базовых механизмов сетевой защиты информационных систем. Локальный хостовый межсетевой экран позволяет минимизировать поверхность атаки, явно разрешая только необходимый трафик и блокируя все остальные соединения по принципу <<запрещено всё, что не разрешено>>. Практическая настройка \texttt{iptables} в рамках курса <<Защита информации>> позволяет закрепить представление о пакетной фильтрации, ролях цепочек \texttt{INPUT}, \texttt{OUTPUT}, \texttt{FORWARD} и о проверке работоспособности правил на реальном стенде.
\subsection{Цели и задачи работы}
Цель работы: получение базовых знаний по настройке межсетевого экрана в ОС Linux и реализация заданной политики доступа.
Задачи работы:
\begin{enumerate}
\item Изучить межсетевой экран \texttt{iptables}: принципы обработки пакетов, основные цепочки, действия по умолчанию, параметры правил фильтрации.
\item Развернуть лабораторный стенд на базе виртуальных машин VirtualBox.
\item Реализовать заданную политику доступа: разрешить loopback, DNS, исходящий ping, входящий ping только от конкретного адреса, HTTP/HTTPS; заблокировать всё остальное.
\item Проверить корректность реализации политики.
\item Проконтролировать прохождение пакетов утилитой \texttt{tcpdump}.
\end{enumerate}
\subsection{Схема стенда}
Стенд реализован на базе двух виртуальных машин VirtualBox с ОС Ubuntu Server 22.04. Каждая машина имеет два сетевых адаптера:
\begin{itemize}
\item \textbf{Adapter~1 (NAT)} --- доступ в Интернет (DNS, HTTP/HTTPS, ICMP);
\item \textbf{Adapter~2 (Internal Network <<intnet>>)} --- изолированная сеть \texttt{192.168.100.0/24} для связи между машинами.
\end{itemize}
Схема стенда представлена на рисунке~\ref{fig:lab4-topology}, адресация узлов --- в таблице~\ref{tab:lab4-addr}.
\begin{figure}[H]
\centering
\includegraphics[width=0.85\linewidth]{img/lab4-stand.png}
\caption{Схема лабораторного стенда}
\label{fig:lab4-topology}
\end{figure}
\begin{table}[H]
\centering
\caption{Адресация узлов стенда}
\label{tab:lab4-addr}
\begin{tabularx}{\textwidth}{l l l X}
\toprule
Узел & Интерфейс & IP-адрес & Назначение \\
\midrule
\multirow{2}{*}{firewall-host} & enp0s3 (NAT) & 10.0.2.15/24 & Доступ в Интернет \\
& enp0s8 (intnet) & 192.168.100.1/24 & Внутренняя сеть \\
\midrule
\multirow{2}{*}{external-client} & enp0s3 (NAT) & 10.0.2.15/24 & Доступ в Интернет \\
& enp0s8 (intnet) & 192.168.100.2/24 & Внутренняя сеть \\
\bottomrule
\end{tabularx}
\end{table}
DNS-запросы обрабатываются службой \texttt{systemd-resolved} (\texttt{127.0.0.53}), перенаправляющей их DNS-серверу NAT-шлюза VirtualBox (\texttt{10.0.2.3}). Управление виртуальными машинами осуществлялось по SSH через проброс портов VirtualBox.
\subsection{Принципы обработки пакетов в \texttt{iptables}}
Утилита \texttt{iptables} организует правила фильтрации в виде таблиц и цепочек. В работе использовалась таблица \texttt{filter} (по умолчанию), содержащая три встроенные цепочки:
\begin{itemize}
\item \texttt{INPUT} --- входящие пакеты, адресованные локальным процессам;
\item \texttt{OUTPUT} --- исходящие пакеты локальных процессов;
\item \texttt{FORWARD} --- транзитные пакеты (маршрутизация).
\end{itemize}
Пакет последовательно сравнивается с правилами цепочки. При совпадении выполняется действие: \texttt{ACCEPT} (пропустить), \texttt{DROP} (молча отбросить) или \texttt{REJECT} (отбросить с уведомлением). Если ни одно правило не сработало, применяется политика по умолчанию.
Модуль \texttt{conntrack} позволяет отслеживать состояния соединений. Правило с параметром \texttt{-{}-ctstate ESTABLISHED,RELATED} пропускает ответные пакеты уже установленных соединений без необходимости создания отдельных правил для каждого обратного направления.
\subsection{Реализация политики фильтрации}
Перед настройкой все существующие правила были сброшены:
\begin{verbatim}
sudo iptables -F && sudo iptables -X
sudo iptables -t nat -F && sudo iptables -t mangle -F
\end{verbatim}
Примеры команд добавления правил:
Разрешение loopback-трафика (\texttt{-i~lo} --- входящий интерфейс loopback):
\begin{verbatim}
sudo iptables -A INPUT -i lo -j ACCEPT
\end{verbatim}
Разрешение DNS-запросов (\texttt{-p~udp}, порт~53):
\begin{verbatim}
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
\end{verbatim}
Разрешение входящего ping только от конкретного адреса (\texttt{-{}-icmp-type echo-request} --- тип~8, параметры \texttt{-s} и \texttt{-d} --- адреса источника и назначения):
\begin{verbatim}
sudo iptables -A INPUT -p icmp --icmp-type echo-request \
-s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
\end{verbatim}
Полный набор правил, реализующий заданную политику доступа:
{\footnotesize
\begin{verbatim}
# SSH (для сохранения удалённого доступа к стенду)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
# Уже установленные и связанные соединения
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# DNS (UDP и TCP, порт 53)
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT
# HTTP и HTTPS
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 443 -j ACCEPT
# Исходящий ping
sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# Входящий ping только от 192.168.100.2
sudo iptables -A INPUT -p icmp --icmp-type echo-request \
-s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply \
-s 192.168.100.1 -d 192.168.100.2 -j ACCEPT
# Политики по умолчанию
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
\end{verbatim}
}
Правило для SSH не входит в задание, но необходимо для сохранения удалённого доступа; оно добавлено до включения политик \texttt{DROP}.
Итоговое состояние таблицы \texttt{filter} (\texttt{iptables -L -n -v -{}-line-numbers}):
{\scriptsize
\begin{verbatim}
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot in source destination
1 162 10124 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 10 760 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 0 0 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp spt:53
5 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:53
6 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:80
7 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:443
8 0 0 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 0
9 0 0 ACCEPT icmp * 192.168.100.2 192.168.100.1 icmptype 8
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
Chain OUTPUT (policy DROP 4 packets, 304 bytes)
num pkts bytes target prot out source destination
1 119 21028 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:22
2 0 0 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 0 0 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
5 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
6 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
7 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
8 0 0 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 8
9 0 0 ACCEPT icmp * 192.168.100.1 192.168.100.2 icmptype 0
\end{verbatim}
}
\subsection{Проверка реализованной политики}
\textbf{DNS.} Команда \texttt{nslookup} на firewall-host успешно разрешает имена:
{\footnotesize
\begin{verbatim}
$ nslookup example.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: example.com
Address: 104.18.26.120
Name: example.com
Address: 104.18.27.120
\end{verbatim}
}
\textbf{HTTP/HTTPS.} Утилита \texttt{curl} успешно получает ответ от внешнего сервера как по HTTP, так и по HTTPS:
{\footnotesize
\begin{verbatim}
$ curl http://example.com
<!doctype html><html lang="en"><head><title>Example Domain
</title>...</html>
$ curl https://example.com
<!doctype html><html lang="en"><head><title>Example Domain
</title>...</html>
\end{verbatim}
}
\textbf{Исходящий ping.} Защищаемый хост пингует внешние адреса:
{\footnotesize
\begin{verbatim}
$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=255 time=12.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=255 time=11.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=255 time=11.3 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=255 time=11.4 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss
\end{verbatim}
}
\textbf{Входящий ping от разрешённого адреса.} С external-client (\texttt{192.168.100.2}) ping проходит:
{\footnotesize
\begin{verbatim}
arity@external-client:~$ ping -c 4 192.168.100.1
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.433 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.369 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.440 ms
64 bytes from 192.168.100.1: icmp_seq=4 ttl=64 time=0.398 ms
--- 192.168.100.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss
\end{verbatim}
}
\textbf{Блокировка запрещённого трафика.} Попытка TCP-соединения на порт~22 внешнего сервера не проходит (исходящий TCP разрешён только на порты 53, 80, 443):
{\footnotesize
\begin{verbatim}
$ nc -vz example.com 22
(нет ответа, соединение заблокировано, прервано по Ctrl+C)
\end{verbatim}
}
\subsection{Контроль трафика средствами \texttt{tcpdump}}
Для подтверждения прохождения пакетов использовалась утилита \texttt{tcpdump}. Ниже приведён вывод при выполнении \texttt{ping} от external-client к firewall-host:
{\footnotesize
\begin{verbatim}
$ sudo tcpdump -i any -n icmp
18:26:20.960046 enp0s8 In IP
192.168.100.2 > 192.168.100.1:
ICMP echo request, id 2, seq 1, length 64
18:26:20.960119 enp0s8 Out IP
192.168.100.1 > 192.168.100.2:
ICMP echo reply, id 2, seq 1, length 64
18:26:21.990542 enp0s8 In IP
192.168.100.2 > 192.168.100.1:
ICMP echo request, id 2, seq 2, length 64
18:26:21.990587 enp0s8 Out IP
192.168.100.1 > 192.168.100.2:
ICMP echo reply, id 2, seq 2, length 64
...
8 packets captured
\end{verbatim}
}
На интерфейсе \texttt{enp0s8} видны входящие ICMP echo-request от \texttt{192.168.100.2} и исходящие echo-reply, что подтверждает работу правила входящего ping от разрешённого адреса.
Аналогичным образом были зафиксированы DNS-пакеты (\texttt{sudo tcpdump -i any -n port 53}): запрос от \texttt{127.0.0.1} к \texttt{127.0.0.53} через loopback, перенаправление к \texttt{10.0.2.3} через \texttt{enp0s3} и получение ответа. При выполнении \texttt{curl http://example.com} вывод \texttt{tcpdump} с фильтром \texttt{tcp port 80} зафиксировал трёхстороннее TCP-рукопожатие (SYN, SYN-ACK, ACK), HTTP-запрос \texttt{GET / HTTP/1.1} и ответ \texttt{HTTP/1.1 200 OK}, подтверждая корректную работу правила для порта~80.
\subsection{Выводы}
В ходе практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализована схема с политикой \texttt{DROP} по умолчанию и разрешающими правилами для loopback, DNS, исходящего ping, входящего ping от адреса \texttt{192.168.100.2} и HTTP/HTTPS. Экспериментальная проверка подтвердила пропуск разрешённого трафика и блокировку соединений, не описанных в политике. Анализ трафика утилитой \texttt{tcpdump} продемонстрировал соответствие наблюдаемой сетевой активности заданным правилам фильтрации.
\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
@@ -693,6 +966,8 @@ secret.txt:2
В ходе выполнения практической работы №3 на базе системы из работы №2 реализованы модели дискреционного (DAC) и мандатного (MAC) управления доступом. DAC реализован через список доступа с владельцами объектов и командой выдачи прав; MAC — на основе модели Белла–Лападулы с тремя уровнями меток конфиденциальности. Реализация демонстрирует принципиальные различия между подходами и их практическое применение.
В ходе выполнения практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализованы правила фильтрации, разрешающие loopback-трафик, DNS, ICMP и HTTP/HTTPS, а все прочие соединения блокируются. Корректность работы правил подтверждена тестовыми соединениями и анализом пакетов утилитой \texttt{tcpdump}.
\newpage
\printbibliography[heading=bibintoc]
@@ -746,4 +1021,4 @@ secret.txt:2
\addcontentsline{toc}{section}{Приложение 8}
\lstinputlisting{../lab3/setup.sh}
\end{document}
\end{document}