Кибербезопасность. Сетевой транспорт
Углубленный транспортный и канальный уровни
Компьютерные системы часто нуждаются в взаимодействии с другими системами; это делается путем помещения их в одну сеть. Существует несколько различных технологий, позволяющих компьютерам обмениваться данными по разным сетям. В этом разделе мы углубимся в протоколы, которые используются в большинстве сетей.
Используемые нами сети состоят из нескольких протоколов, некоторые из которых относятся к этому классу. В сетях также используется много других протоколов, каждый из которых может иметь риски безопасности, связанные с ними.
TCP ("Transmission Control Protocol" - "Протокол управления передачей")
Так же, как IP использует IP-адреса для адресации, TCP и UDP используют порты. Порт, обозначенный числом от 0 до 65535, определяет, какая сетевая служба должна обрабатывать запрос.
На картинке ниже мы можем увидеть TCP-пакет и то, как он будет выглядеть для любого, кто проверяет трафик в сети.
Мы можем видеть график, показывающий 16 бит для портов источника и назначения, это то же самое для UDP. Номера последовательности и подтверждения используются в 3-Way-Handshake (трехстороннем рукопожатии) и для надежной передачи данных. Мы также можем видеть контрольные биты, используемые для обозначения того, что это за пакет. Другие заголовки также играют важную роль, но за пределами курса безопасности.
TCP 3-Way-Handshake - 3-стороннее рукопожатие
TCP использует трехстороннее рукопожатие, чтобы две системы могли взаимодействовать. Рукопожатие использует 32 бита чисел ГПСЧ ("генератор псевдослучайных чисел"), чтобы установить рукопожатие. Рукопожатие означает, что обе стороны намерены общаться.
Вот рисунок для иллюстрации:
Объяснение того, как TCP участвует в обмене данными:
- Клиент инициирует обмен данными, отправляя пакет с битом управления SYN, установленным в заголовке, номером PRNG в поле порядкового номера и целевым портом назначения. Сетевой уровень (уровень 3) позволяет отправлять пакет в удаленную систему. Этот пакет называется SYN-пакетом.
- Сервер получает пакет, считывает порядковый номер от клиента и формирует ответ. Ответ устанавливает поле Acknowledgment (Подтверждение) с номером Sequencer (Последовательность) клиента с добавленным к нему номером 1. Кроме того, ответ содержит набор управляющих битов SYN и ACK, а порядковый номер установлен на номер сервера PRNG. Этот пакет называется пакетом SYN/ACK.
- Клиент получает пакет SYN-ACK и для завершения квитирования возвращает пакет с установленным битом управления ACK. Последний пакет также подтверждает номер ГПСЧ от сервера, возвращая его в поле Acknowledgment (Подтверждение) заголовка.
Этот процесс обычно называют трехсторонним рукопожатием SYN, SYN/ACK, ACK.
На следующем рисунке мы видим, как два хоста выполняют трехстороннее рукопожатие:
На снимке экрана показан инструмент Wireshark, используемый для захвата и проверки пакетов. Wireshark - очень хорошая утилита, потому что она позволяет нам визуализировать пакеты и исследовать их более глубоко. На снимке экрана показаны 3 пакета, представляющие трехстороннее рукопожатие. Обратите внимание на столбцы источника и назначения, представляющие взаимодействующие стороны. В поле "Информация" отображается порт источника и назначения, включая (в квадратных скобках) SYN, SYN/ACK и ACK.
На следующем снимке экрана показаны данные, передаваемые между сторонами после трехстороннего рукопожатия. Данные внутри пакета TCP были выделены в нижней части изображения.
Сообщение для учеников W3School показано на скриншоте выше. Видишь?
Spoofing Traffic - Спуфинг (обман) трафика
Сегодня существует несколько ограничений для сетей, позволяющих создавать пакеты по своему усмотрению. Кто угодно может создавать пакеты с любым из полей заголовков, установленным на любое желаемое значение. Это называется спуфингом, позволяющим злоумышленникам отправлять трафик от имени других.
Протокол TCP имеет встроенную безопасность, но он полагается на мощь генераторов чисел PRNG ("Pseudo Random Number Generator" - "Генератор псевдослучайных чисел"). Если порядковые номера взаимодействующих сторон можно угадать, безопасность TCP может быть скомпрометирована в том смысле, что злоумышленник может участвовать в ложных сообщениях через TCP.
Многие протоколы легко подделать, но TCP предлагает некоторую устойчивость к этому. Такие протоколы, как UDP и ICMP, не обеспечивают аналогичной защиты.
Подмена пакетов обычно выполняется злоумышленниками с полномочиями root/system, то есть наивысшими привилегиями в операционной системе. Причина в том, что операционные системы предписывают использование API, что заставляет пользователя соблюдать правила связи, указанные в RFC ("Request For Comments" - "Запрос комментариев"). Если злоумышленник не имеет наивысших привилегий, он не сможет создавать свои собственные пакеты в сети.
UDP ("User Datagram Protocol" - "Протокол пользовательских датаграмм")
UDP используется для трафика, который не требует устойчивости и безопасности TCP, как правило, таких приложений, как VOIP, но в современном мире большее количество приложений используют UDP для поддержки быстрой передачи пакетов с отказоустойчивостью и безопасностью, встроенными в более высокие уровни модели OSI; QUIC является примером этого.
Глядя на заголовок UDP, мы видим, что используются те же порты источника и назначения, но нет порядковых номеров или управляющих битов. Протокол имеет гораздо меньше накладных расходов, что приводит к более быстрой передаче данных.
Поскольку UDP не имеет таких функций, как трехстороннее рукопожатие, UDP можно легко подделать.
Коммутируемые сети
Системы подключаются к LAN ("Local Area Network" - "Локальная сеть") через коммутатор. Коммутаторы используют для адресации MAC-адреса ("Media Access Control" - "Управление доступом к среде"), а не более известный IP-адрес. Коммутатор пересылает трафик через локальные сети, то есть в вашу домашнюю сеть или в филиалы вашей организации. MAC-адреса разработаны так, чтобы быть уникальными, но любой может изменить свой MAC-адрес, если у него есть права администратора.
MAC-адрес, определяемый 6 октетами, например: FC:F8:AE:12:34:56
Первые три октета представляют организацию, которая произвела устройство для связи, и называется OUI ("Organizational Unique Identifier" - "Уникальный идентификатор организации"). Вышеупомянутый MAC-адрес назначен Intel Corporate. Вы можете искать MAC-адреса во многих местах, например: https://www.adminsub.net/mac-address-finder/intel.
Последние три октета определяются производителем.
ARP
ARP ("Address Resolution Protocol" - "Протокол разрешения адресов") - это протокол, который позволяет компьютерным системам знать, какой MAC-адрес принадлежит какому IP-адресу. Если трафик необходимо маршрутизировать, компьютерная система будет перенаправлять трафик на шлюз по умолчанию, настроенный в системе.
ARP, как и DNS, - это протокол, преобразующий один адрес в другой. Каждый раз, когда система пытается связаться с IP-адресом, находящимся в локальной сети, она проверяет свой кэш ARP, чтобы узнать, не было ли разрешено недавно.
Вы можете проверить свой собственный ARP. Просто запустите команду arp -a
как в Linux, так и в Windows. Это показывает, с какими системами ваша система недавно взаимодействовала.
Alice: Кто-нибудь знает MAC-адрес 192.168.10.10?
Bob: Конечно, Alice, это мой MAC-адрес.
VLAN ("Virtual LAN" - "Виртуальная локальная сеть")
VLAN, часто называемая частной VLAN, позволяет коммутатору встраивать теги (или идентификатор VLAN) во фрейм. Затем несколько коммутаторов могут гарантировать, что компьютерные системы в локальной сети могут связываться только с определенными другими системами, то есть с другими системами с тем же идентификатором VLAN.