refactored. 01-02-03 done

This commit is contained in:
Marat Kharitonov
2024-03-26 19:36:57 -04:00
parent 37b5fd1f40
commit 40899bcd4b
152 changed files with 647 additions and 0 deletions

View File

@@ -0,0 +1,234 @@
# Сетевая безопасность. Лабораторная работа №1 (HW)
## Ход работы
Для стенда мы будем использовать 2 виртуальные машины `Ubuntu Linux 22.04`:
| hostname | ip address |
| ----- | ----- |
| ubuntu | 192.168.103.100 |
| ubuntu2 | 192.168.103.101 |
`ubuntu` будет использоваться в качестве сервера, а `ubuntu2` -- в качестве клиента.
С помощью инструмента `iperf3` и замерим скорость передачи данных в условиях открытой сети.
![alt text](img/03.png)
Как видим, при отсутствии VPN скорость между хостами около 18 Гбит/с.
### Настройка OpenVPN
1. Для настройки OpenVPN установим необходимые пакеты на обе машины с помощью `sudo apt install openvpn`
`ubuntu`
![alt text](img/01.png)
`ubuntu2`
![alt text](img/02.png)
2. Настроим сервер OpenVPN на `ubuntu`
1. Создадим каталог `/etc/openvpn/easy-rsa` и скопируем в него исполняемый файл `easy-rsa`
```bash
root@ubuntu:/home/marker# mkdir /etc/openvpn/easy-rsa
root@ubuntu:/home/marker# cp -R /usr/share/easy-rsa /etc/openvpn/
root@ubuntu:/home/marker# cd /etc/openvpn/easy-rsa/
```
2. Выполним инициализацию PKI
```bash
./easyrsa init-pki
```
![alt text](img/10.png)
3. Выпустим корневой сертификат
```bash
./easyrsa build-ca
```
![alt text](img/11.png)
4. Сгенерируем последовательность Диффи-Хелмана (DH)
```bash
./easyrsa gen-dh
```
![alt text](img/12.png)
5. Создадим CRL
```bash
./easyrsa gen-crl
```
![alt text](img/13.png)
6. Сгенерируем ключ TLS-Auth
```bash
openvpn --genkey tls-auth /etc/openvpn/ta.key
```
![alt text](img/14.png)
7. Сгенерируем серверный сертификат
```bash
./easyrsa build-server-full server nopass
```
![alt text](img/15.png)
8. Скопируем криптографическую информацию в папку `/etc/openvpn/`
```bash
cp ./pki/ca.crt /etc/openvpn/ca.crt
cp ./pki/dh.pem /etc/openvpn/dh2048.pem
cp ./pki/crl.pem /etc/openvpn/crl.pem
cp ./pki/issued/server.crt /etc/openvpn/server.crt
cp ./pki/private/server.key /etc/openvpn/server.key
```
9. Создадим файл `/etc/openvpn/server.conf` и наполним его следующим:
```
port 1194
# TCP or UDP server?
;proto tcp
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher CHACHA20-POLY1305
data-ciphers CHACHA20-POLY1305
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
```
Таким образом мы указали, что мы будем работать по протоколу UDP на порту 1194, использовать ранее сгенерированные криптопоследовательности, а частной сетью будет `10.8.0.0/24` (у сервера будет адрес `10.8.0.1`)
10. Сгенерируем клиентский сертификат
```bash
./easyrsa build-client-full client nopass
```
![alt text](img/16.png)
11. Скопируем криптографическую информацию клиента в папку `/etc/openvpn/clients/client`
```bash
mkdir /etc/openvpn/clients
mkdir /etc/openvpn/clients/client
cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/clients/client/
cp /etc/openvpn/ta.key /etc/openvpn/clients/client/
cp /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/clients/client/
cp /etc/openvpn/easy-rsa/pki/private/client.key /etc/openvpn/clients/client/
```
12. Создадим файл конфигурации клиента `/etc/openvpn/clients/client/client.conf`
```
client
dev tun
;proto tcp
proto udp
remote 192.168.103.100 1194
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher CHACHA20-POLY1305
data-ciphers CHACHA20-POLY1305
verb 3
```
13. Папку с конфигурацией клиента и криптографической информацией передадим на машину `ubuntu2` с помощью `scp`
`scp /etc/openvpn/clients/client/* marker@192.168.103.101:/home/marker/client`
![alt text](img/17.png)
14. Запустим сервер и клиент.
![alt text](img/18.png)
15. Проверим наличие сетевых интерфейсов.
![alt text](img/19.png)
3. Проверим скорость соединения с помощью `iperf3`
![alt text](img/20.png)
Мы получили среднюю скорость около 850 Мбит/c. Теперь проверим, как этот результат изменится, в случае использования TCP.
4. Изменяем строку `proto udp` на `proto tcp` в конфигах сервера и клиента.
5. Перезапускаем сервер и клиент и проверяем скорость.
![alt text](img/21.png)
Мы получили среднюю скорость в 1.1 Гбит/с. Что довольно странно, учитывая, что мы используем TCP. Я предполагаю, что дело в том, что в данном тесте мы используем одно L2 пространство, где нет маршрутизирующих устройств, а при режиме UDP OpenVPN по сути просто инкапсулирует SSL/TLS в UDP, отсюда появляется значимый оверхед, который нивелируется в реальном использовании.
### Настройка Wireguard
1. С помощью `sudo apt install wireguard` установим необходимые пакеты на виртуальные машины
`ubuntu`:
![alt text](img/05.png)
`ubuntu2`:
![alt text](img/04.png)
2. С помощью утилиты `wg genkey` сгенерируем на машинах пары приватный-публичный ключ.
![alt text](img/06.png)
3. Составим конфиги для машин на основании полученных пар ключей.
![alt text](img/07.png)
4. Запустим демонов, которые поднимут указанные интерфейсы и проверим связность по VPN интерфейсам.
![alt text](img/08.png)
5. Мы обеспечили связность через VPN. Теперь замерим скорость между машинами с помощью `iperf3`
![alt text](img/09.png)
Средняя скорость 7.7 Гбит/с.
## Выводы
Итак, мы получили следующие результаты:
| VPN Protocol | Bitrate |
| ----- | ----- |
| OpenVPN (UDP) | 850 Mbps |
| OpenVPN (TCP) | 1.1 Gbps |
| Wireguard | 7.7 Gbps |
OpenVPN в режиме TCP показал более высокую скорость, но только в рамках стенда, как показывает практика режим UDP является более предпочтительным для обеспечения большей скорости передачи.
Wireguard обеспечивает значительно более высокую производительность благодаря своей более легковесной архитектуре, использованию более современных алгоритмов шифрования и механизмам оптимизации.
Wireguard работает поверх протокола UDP, чем и объясняется такая скорость, а легковесная архитектура позволяет максимизировать это преимущество.
**Выполнил:** Харитонов Марат Русланович, студенческий билет М235314.

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

View File

@@ -0,0 +1,81 @@
# Сетевая безопасность. Лабораторная работа №2 (HW)
## Ход работы
1. Установим пакет `knockd` на обе виртуальные машины
![alt text](img/01.png)
2. На машине `ubuntu` предварительно настроим `iptables`, разрешив только установленные соединения и SSH.
![alt text](img/02.png)
3. Проверим подключение c машины `ubuntu2`
![alt text](img/03.png)
Видим, что подключение отсутствует, при этом SSH сессия до машины не оборвалась, делаем вывод, что правила `iptables` настроены верно.
4. После настройки пакетного фильтра необходимо инициализировать службу knockd. Для этого в файле /etc/default/knockd изменим следующую опцию и присвоить ей значение “1”:
![alt text](img/04.png)
5. Создадим файл, заполненный `one-time sequence`, то есть набором одноразовых последовательностей, которые будут использовать для открытия порта.
![alt text](img/05.png)
6. Настроим демон `knockd` так, чтобы он использовал созданный файл для открытия доступа к порту.
`nano /etc/knockd.conf`
![alt text](img/06.png)
7. Сделаем автостарт службы и запустим её
```
systemctl enable knockd.service
systemctl start knockd.service
```
8. С помощью `nmap` проверим доступность порта `1194/tcp` на машине `ubuntu`
![alt text](img/10.png)
Видим, что `nmap` определяет порт как фильтрующийся.
9. На машине `ubuntu2` выполним команду `knock` и укажем адрес подключения и последовательность.
![alt text](img/07.png)
10. На машине `ubuntu` проверим наполнение `iptables` и содержимое файла `/etc/knockd/openvpn_ots`
![alt text](img/08.png)
Видим, что в `iptables` появилось разрешающее правило, а в `/etc/knockd/openvpn_ots` закомментировалась строка с использованной последовательностью.
11. Проверим подключение `openvpn` с `ubuntu2` к `ubuntu`
![alt text](img/09.png)
Видим, что подключение выполнилось успешно.
12. С помощью `nmap` ещё раз проверим доступность порта `1194/tcp` на машине `ubuntu`
![alt text](img/11.png)
Видим, что теперь порт доступен.
13. Воспользуемся второй последовательностью, и проанализируем лог `tcpdump`
![alt text](img/12.png)
Видим, что при использовании `knock` на адрес посылаются пакеты в указанной последовательности, на который целевой адрес не отвечает, но как мы видели ранее, в этот момент сервер делает запись в `iptables`, разрешающее подключение.
![alt text](img/13.png)
## Выводы
Port Knocking — это метод усиления защиты путем скрытия открытых портов от несанкционированного доступа с помощью сочетания «стуков» на определенные порты. Метод может обеспечиваться с помощью демона `knockd`, который имеет большое количество параметров, одним из которых является `one-time sequence`, то есть одноразовые последовательсти -- набор "стуков", который может быть использован для открытия портов только один раз.
**Выполнил:** Харитонов Марат Русланович, студенческий билет М235314.

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,52 @@
# Сетевая безопасность. Лабораторная работа №3 (HW)
## Ход работы
1. Установим на нашей точке доступа тип защиты сети на WPA2-PSK.
![alt text](img/01.png)
2. С помощью команды `airmon-ng start wlan0` установим интерфейс в режим монитора и проверим работу с помощью `airodump-ng`
![alt text](img/02.png)
Мы видим информацию о нашей сети на 12 канале.
3. Запустим `bettercap` и начнём слушать wifi-соединения.
`sudo bettercap --iface wlan0mon`
`wifi.recon on`
![alt text](img/03.png)
4. Выполним `wifi.show`, чтобы посмотреть список обнаруженных точек доступа.
![alt text](img/04.png)
5. С помощью `wifi.deauth <mac_address_of_AP>` попробуем выполнять отмену аутентификации клиента точки доступа, пока не поймаем полный хендшейк.
![alt text](img/05.png)
6. Успешно поймав хендшейк, переведем интерфейс в режим `managed` и сгенерируем wordlist с помощью `crunch`
![alt text](img/06.png)
7. Добавим реальный пароль от сети в wordlist и запустим подбор пароля.
![alt text](img/07.png)
8. Результат не заставил себя долго ждать.
![alt text](img/08.png)
P.S. Позже я решил попробовать использовать для перебора `hashcat`, который может использовать видеокарту для перебора.
Задав маску пароля, я пришёл к выводу, что подбор пароля из 8 символов, по маске `?l?l?l?l?d?d?d?d`, где `?l` -- символ в нижнем регистре, а `?d` -- цифра, займёт максимум 40 минут.
![alt text](img/09.png)
## Выводы
Выполненная работа говорит нам о том, что не стоит без опасения относиться к своей Wifi-сети, ведь простой пароль может быть подобран достаточно быстро, поэтому стоит как минимум использовать стойкий пароль, а желательно дополнять это ещё и использованием защитных механизмов.
**Выполнил:** Харитонов Марат Русланович, студенческий билет М235314.

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB