Вопросы безопасности сетевых протоколов

Безопасность: надёжность и секретность.

  1. Ненадёжная природа всемирной сети и борьба с ней
    • Повышение связности
    • Резервирование ресурсов (например, IPv6) и оverprovisioning
    • Репликация и «приближение» сервисов
    • ЗБЧ
  2. Секретность и Интернет ☺
    • Проблемы аутентичности данных
    • Проблемы скрытия данных

Чрезмерно упрощённая классификация видов атак:

История сетевых протоколов в свете защиты данных

  1. «Просто» протоколы: TELNET, FTP, SMTP, POP, … (см. dsniff), Basic HTTP Auth

  2. Security through obscurity и другие наивные методы шифрования (например, обмен ключами в начале сеанса): MIT-MAGIC-COOKIE-1 и т. п.
    • Проблема «прозрачного» обмена ключами. Например, MMC-1 предназначены для локальных клиентов: ключ записывается в файл (из которого его читает сервер), а подключение происходит по сети к тому же серверу

  3. Введение алгоритмов шифрования:
    • в уровень представления согласно модели ISO/OSI (примерно работал SSL-1.0): сначала защищённый канал, потом — прикладной протокол

    • в прикладной протокол: HTTPS, STARTTLS в почтовых и некоторых других прикладных протоколах и т. п.

    • в «межъящичное пространство» TCP/IP TLS, более

  4. Использование асимметричного шифрования
  5. Как шифрованные тоннели победили шифрованный payload.
    • Пассивный анализ
    • Лёгкая дешифрация мелких/стандартных пакетов
    • Даже если шифровать только payload, перестаёт работать разумный контент-анализатор (например, NAT)
  6. «Полицейские и воры» в современной криптографии (см. Возможные атаки на TLS, История атак на TLS/SSL)

Несекретность протоколов «первого поколения»

Давно нигде не применяются.

простейший сервер в BASIC HTTP auth

Симметричное шифрование

Симметричное шифрование:

Учётные данные: дайджест вместо пароля

Если шифрование используется для аутентификации, можно обмениваться не ключами, а т. н. дайджестами — невосстановимыми хешами достаточно большого размера.

Пример: HTTP Digest Access Authentication

Если вы храните на сервере какие-то данные и сравниваете ответ пользователя с ними, то эти данные и есть пароль

Асимметричное шифрование

Проблема надёжности первоначального обмена ключами

Если вся значимая информация доступна для перехвата (чтения и воспроизведения) стороннему наблюдателю (например, и открытый ключ, и шифруемые им данные передаются в одном сеансе), возможна т. н. «Атака посредника» (man-in-the-middle, MItM):

Пример MItM-атаки в классической литературе

Использование SSH

См. LecturesCMC/LinuxApplicationDevelopment2021/00_GitSsh

SSL-сертификаты и цепочка доверия

SSH редко требует передачи ключа, можно потратиться на сравнение хешей вручную.

Другое дело HTTPS:

Пример для socat (чуть-чуть усложняя создание самоподписанного сертификата)

Запустим сервер

# socat openssl-listen:1234,reuseaddr,fork,cert=srv.crt,key=srv.key,verify=0 EXEC:/usr/bin/cal

Запустим клиент:

# socat openssl:server_name:1234,cafile=rootCA.crt -

<!> Если указать не такой server_name, как в сертификате, поверка не пройдёт!

<!> Вся эта цепочка также подвержена MItM — необходимо перехватить обычный канал связи и тот, по которому передаётся подписанный сертификат (помечено >:> )

Д/З

  1. Суть: настроить клиент и сервер с использованием SSL, но подменить по дороге сертификат
  2. Преднастройка площадки:
    • Сеть: client - router - srv

    • router

      • Пересылка пакетов
      • Таблица с именем mitm правил nftables, которые перехватывают входящий трафик, адресованный srv по портам R и S, и перенаправляют их локально на соответствующие порты

        • <!> nftables пока не запускаем

      • Простейший сценарий mitm.sh, который ходит по SSL к srv за датой (не проверяя сертификат), подменяет в ней 2026 год на 1337 и выводит на стандартный вывод

        • (нажмите «Комментарии» в шапке страницы, чтобы прочитать спойлер)

  3. Отчёт
    1. report 12 srv

      • Генерируем CA — ключ, затем — сертификат rootCA.crt

      • Запускаем в фоне socat, который отдаёт rootCA.crt по сети на порту R без шифрования

      • Генерируем SSL-сертификат, подписанный этим rootCA.crt

      • ls

      • Запускаем socat, который отдаёт по SSL date по порту S с подписанным сертификатом

    2. На client

      • Получаем rootCA.crt с сервера, порт R

        • (нажмите «Комментарии» в шапке страницы, чтобы прочитать спойлер)

      • ls

      • Получаем дату с сервера, порт S (с проверкой сертификата)

    3. На router

      • ip -br -4 a

      • sh mitm.sh

      • cat mitm.sh

      • Генерируем свой ключ и сертификат ArootCA.crt

        • (нажмите «Комментарии» в шапке страницы, чтобы прочитать спойлер)

      • Генерируем и подписываем сертификат для сервиса подмены.
      • ls

      • Запускаем в фоне socat, который отдаёт ArootCA.crt по сети на порту R без шифрования

      • Запускаем в фоне socat, который принимает подключения по SSL с ключом, подписанным ArootCA.crt, а в качестве обработчика запускает mitm.sh

      • Запускаем nftables

      • nft list table ip mitm

    4. На client (продолжение)

      • Переименовываем rootCA.crt в OldrootCA.crt

      • Получаем rootCA.crt с сервера, порт R (это окажется ArootCA.crt)

      • diff -sq rootCA.crt OldrootCA.crt

      • Получаем ArootCA.crt с маршрутизатора, порт R

      • diff -sq rootCA.crt ArootCA.crt

      • Получаем дату с сервера, порт S (с проверкой сертификата)

        • Убеждаемся, что год теперь 1337 (начало Столетней войны между Англией и Францией)

  4. Три отчёта (названия сохранить, должно быть: report.12.srv, report.12.router, eport.12.client) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

    • В теме письма должно встречаться слово LinuxNetwork2026

LecturesCMC/LinuxNetwork2026/12_NetworkSecurity (последним исправлял пользователь FrBrGeorge 2026-05-07 21:07:02)