# Домашняя работа № 2 по предмету: «Безопасность вычислительных сетей»
## Описание лабораторной работы
Цель лабораторной работы — получить непосредственный опыт работы с уязвимостями, а также с атаками на эти уязвимости.

В этой лабораторной работе вы проведете несколько атак на TCP:

1. TCP SYN flood attack, and SYN cookies;
2. TCP reset attack;
3. TCP session hijacking attack.

В лабораторной работе четыре контейнера: три машины легитимных пользователей и одна машина атакующего.

![Lab Stand](img/image01.png)

## Задача 1 «TCP SYN flood attack».
`
Код отправляет поддельные пакеты TCP SYN со случайно сгенерированным исходным IP-адресом, исходным портом и порядковым номером.
Подождите хотя бы одну минуту, а затем попытайтесь подключиться к жертве с помощью Telnet. Получится ли у вас добиться успеха? Подключиться можно через хост машины Victim (все дальнейшие проверки следует проводить через нее).
`

Python-скрипт для атаки:

![alt text](img/opt1.png)

### Задача 1.1 
`net.ipv4.tcp_syncookies=0` - SYN Cookies на жертве (Victim) отключены.

#### Выполнение задачи:

1. Запустим скрипт на `seed-attacker` и посмотрим наличие подключений на `Victim`.

Листинг `seed-attacker`: 

![seed-attacker](img/image02.png)

Листинг `Victim`: 

![](img/image03.png)

2. Проверим возможность подключения к `Victim` с `HostB`

![](img/image04.png)

В данном случае, мы видим успешный вывод приглашения. Можно предположить, что атака не удалась, но зная, что возможности очереди машины зависят от её характеристик, не будет лишним попробовать запустить сразу несколько экземпляров скрипта на `seed-attacker` добавив операнд `&` к команде запуска:

`root@7552dc4712a7:/# ./volume/opt1.py &`

3. Запустим 15 экземпляров скрипта одновременно и проверим возможность подключения:

![alt text](img/image05.png)

4. Подключение выполняется, но с большими задержками (от 10 до 30 секунд), что является показателем успешной атаки. Атаку можно считать успешной.


#### Итог задачи 1.1
Атака при `net.ipv4.tcp_syncookies=0` производится **успешно**!

### Задача 1.2

`net.ipv4.tcp_syncookies=1` - SYN Cookies на жертве (Victim) включены.

Время провести попытку с включенным механизмом syncookies. Для этого пересоздадим контейнеры установив значение строки `net.ipv4.tcp_syncookies=1` в docker-compose.yaml

![alt text](img/image06.png)

#### Выполнение задачи

1. Перезапустим скрипты, воспроизводящие атаку и проверим наличие подключений на `Victim`.

seeder-attacker:

![alt text](img/image07.png)

Victim:

![alt text](img/image08.png)

2. Подключения на месте. Проверим возможность подключения по Telnet.

![alt text](img/image09.png)

Проведя несколько попыток подключения и мгновенно увидев баннер Telnet можем сделать вывод, что в этот раз атака не удалась.

#### Итог задачи 1.1
Атака при `net.ipv4.tcp_syncookies=1` производится **неудачно**.

### Итог задачи 1.

Механизм TCP SYN cookies позволяет серверу генерировать специальные сокращенные версии TCP-заголовков (cookies) в ответ на входящие запросы SYN, сохраняя минимум информации о соединении. Когда сервер получает подтверждение от клиента (ACK-пакет), он может восстановить полную информацию о соединении из сокращенной версии TCP-заголовка, инициированной в SYN-пакете.

Этот механизм позволяет серверу обрабатывать и отвечать на большое количество входящих соединений даже в условиях атаки SYN flood, так как он не хранит информацию о незавершенных соединениях в памяти, а использует специальные cookie для отслеживания состояния соединения.

TCP SYN cookies - это один из методов защиты от атак на уровне TCP, который повышает устойчивость серверов к подобным атакам и обеспечивает непрерывность работы сетевых служб.

## Задача 2. TCP reset attack 

1. Для выполнения атаки нам необходимо получить вводные данные. Для этого в момент подключения с `HostB` к `Victim` будем слушать трафик между ними с помощью `tcpdump`

Выполняем подключение с `HostB` к `Victim`

![alt text](img/image10.png)

"Слушаем" трафик с помощью `tcpdump`

![alt text](img/image11.png)

В логах трафика нам необходимо получить данные для наполнения скрипта -- `src`, `dst`, `sport`, `dport` и `seq`.
| **Параметр** | **Значение** | **Примечание** |
| --- | --- | --- |
| src | 10.3.0.3 | IP-адрес `HostB` |
| dst | 10.3.0.4 | IP-адрес `Victim` |
| sport | 40060 | Номер порта, с которого `HostB` устанавливает подключение |
| dport | 23 | Номер порта telnet на `Victim` |
| seq | 1838235189 | Номер следующей последовательности, который ожидает `Victim` от `HostB`  |

2. Подставим полученные данные в скрипт `opt2.py` для проведения атаки.


![alt text](img/image12.png)
3. Выполним атакующий скрипт
   

![alt text](img/image13.png)
4. Убедимся в наличии RST-пакета в `tcpdump`

![alt text](img/image14.png)
5. Проверим состояние соединения путём нажатия Enter в подключении `telnet`

![alt text](img/image15.png)

Согласно выводу, соединение было закрыто, атаку можно считать **успешной**.

### Итог задачи 2.
TCP RST (Reset) атака - это форма атаки на уровне TCP, которая может быть использована для нарушения установленных TCP-соединений между клиентом и сервером.

Принцип работы атаки заключается в отправке поддельных RST-пакетов (пакетов сброса соединения) от имени одной из сторон (обычно от сервера) для преждевременного завершения установленного TCP-соединения. Это может привести к разрыву соединения и прекращению обмена данными между клиентом и сервером.

Несмотря на вышеописанное, подготовка к такой атаке является довольно сложной на практике, ведь злоумышленник должен иметь доступ к трафику внутри сети для правильного составления атакующего пакета.



## Задача 3. TCP Session Hijacking attack

1. Аналогично заданию 2 установим Тelnet-сессию между узлами `HostB` и `Victim` и соберем исходные данные. Скелет кода похож на тот, который указан в задании 2, отличается лишь сегментом TCP и необходимостью добавления блока данных. 

Основываясь на данных из `tcpdump` заполним нашу таблицу:

![alt text](img/image16.png)

Таблица: 
| **Параметр** | **Значение** | **Примечание** |
| --- | --- | --- |
| src | 10.3.0.3 | IP-адрес `HostB` |
| dst | 10.3.0.4 | IP-адрес `Victim` |
| sport | 54402 | Номер порта, с которого `HostB` устанавливает подключение |
| dport | 23 | Номер порта telnet на `Victim` |
| seq | 4125627535 | Номер следующей последовательности, который ожидает `Victim` от `HostB`  |
| ack | 2474120203 |  |

2. Заполняем скрипт полученными данными

![alt text](img/image17.png)

3. Выполним атакующий скрипт

![alt text](img/image18.png)

4. Убедимся в наличии пакетов в tcpdump.

![alt text](img/image19.png)

5.  Проверив состояние нашего соединения между хостами `HostB` и `Victim` обнаруживаем, что соединение зависло и не реагирует на команды. Но как обстоят дела с папкой `1337` на хосте `Victim`?

![alt text](img/image20.png)

Видим свежесозданную папку с именем `1337`, сигнализирующую о том, что атака прошла **успешно**!

### Итог задачи 3.
TCP Session Hijacking (взятие сессии) - это форма атаки на уровне TCP, направленная на захват установленной сессии между клиентом и сервером с целью несанкционированного доступа к данным или выполнения действий от имени атакуемого пользователя.

Принцип работы атаки заключается во вмешательстве в установленное TCP-соединение между клиентом и сервером путем введения поддельных TCP-пакетов или захвата существующих пакетов для манипуляции сессией. Атакующий может попытаться взять контроль над сессией, изменить данные, выполнить команды от имени пользователя или даже завершить сессию.

В целом атака очень похожа на TCP RST-атаку по необходимым вводным данным. 

Для защиты от подобных атак могут применяться различные меры, такие как:
- Использование шифрования и цифровой подписи для защиты конфиденциальности и целостности данных во время передачи. (Например, использование SSHv2 вместо Telnet)
- Мониторинг сетевого трафика с целью обнаружения подозрительной активности или аномалий. (Сетевые снифферы с IDS, например PT Network Attack Discovery или Kaspersky Anti-Targetted Attack)
- Настройка сетевой защиты, включая файерволы, средства обнаружения вторжений и фильтрацию пакетов.

# Итог лабораторной работы
На этом лабораторная работа окончена, файл отчет в формате pdf во вложении.

Выполнил: Харитонов Марат Русланович, студенческий билет №М235314.
