lab4
This commit is contained in:
BIN
report/img/lab4-stand.png
Normal file
BIN
report/img/lab4-stand.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user