Обучение кибербезопасности и этичному хакерству: виды IP-адресов и способы обхода фаерволлов
Иван Глинкин, эксперт по инфраструктурному тестированию Бастион, об IP-адресах и обходе защиты Firewall’ов
713 открытий3К показов
Всем привет! Я, Иван Глинкин, эксперт по инфраструктурному тестированию в Бастионе, и автор канала HydrAttack, продолжаю цикл обучающих материалов для начинающих белых хакеров. Мы уже изучили компьютерные сети, их типы и топологии. Сегодня расскажу вам об IP-адресах — важнейших инструментах для белого хакера. Именно они позволяют найти уязвимость в системе, проверить защищённость сети, провести тестовое проникновение и т.д. Также в статье рассмотрю способы обхода защиты фаерволов, связанных с сетевыми параметрами и IP-адресами.
IP-адреса
IP-адреса используются для уникальной идентификации устройств в сети. Они делятся на два основных типа:
- IPv4 (Internet Protocol version 4) — протокол,
используемый для передачи данных в сетях, включая интернет. Это основной протокол для большинства сетевых коммуникаций. - IPv6 (Internet Protocol version 6) — протокол, разработанный для замены IPv4 с целью решения проблемы исчерпания адресного пространства и предоставления новых возможностей для сетевых технологий. Был разработан в 1990-х годах и стандартизирован в 1998 году. Но с
учётом распространённости NAT и неудобства его использования, так
и не стал популярным, хоть сетевые устройства и поддерживают шестую
версию.
Рассмотрим каждый из них подробнее, а в рамках IPv4 зацепим ещё маски подсети и NAT.
IPv4
Представлен в формате 32-битного адреса и записывается обычно в десятичном виде с разделением на четыре октета (например, 192.168.1.1). Каждый октет — это 8 бит, что позволяет представлять значения от 0 до 255. Таким образом, диапазон возможных адресов варьируется от 0.0.0.0 до 255.255.255.255. Количество адресов составляет примерно 4,3 миллиарда штук.
Если записывать IPv4-адрес в двоичном виде, мы получим следующее: 192.168.1.1: 11000000.10101000.00000001.00000001
IPv4-адреса делятся на несколько классов и категорий в зависимости от их назначения:
● Класс A содержит адреса от 0.0.0.0 до 127.255.255.255. Используется для крупных сетей.
● Класс B содержит адреса от 128.0.0.0 до 191.255.255.255. Используется для средних сетей.
● Класс C содержит адреса от 192.0.0.0 до 223.255.255.255. Используется для малых сетей.
● Класс D содержит адреса от 224.0.0.0 до 239.255.255.255. Используется для многоточечных рассылок (multicast).
● Класс E содержит адреса от 240.0.0.0 до 255.255.255.255. Резервируется для экспериментальных целей.
Внутри данных категорий живут частные адреса. Они определены для использования внутри локальных сетей и в большинстве случаев не маршрутизируются в интернете.
Частные адреса включают:
● Класс A: 10.0.0.0 до 10.255.255.255;
● Класс B: 172.16.0.0 до 172.31.255.255;
● Класс C: 192.168.0.0 до 192.168.255.255.
Маска подсети
Этот механизм используется в IP-сетях для разделения адреса на сетевую и хостовую части. Маска подсети позволяет маршрутизаторам и устройствам определять, какая часть IP-адреса относится к сети, а какая к конкретному устройству (хосту) в этой сети.
Маска подсети представляет 32-битное значение (для IPv4) и обычно записывается в том же формате, что и IP-адрес, например, 255.255.255.0. Альтернативно маска может быть записана в нотации CIDR (Classless Inter-Domain Routing), где указывается количество бит, отведённых под сетевую часть, например, /24.
Маска подсети позволяет определить, какой сети принадлежит конкретный IP-адрес, что особенно полезно при маршрутизации трафика и настройке локальных сетей. Она также помогает организовать и изолировать трафик между разными сегментами ИТ-инфраструктуры. Например, в корпоративной среде можно разделить трафик между отделами, создав разные подсети. Кроме того, применение масок подсети позволяет более эффективно использовать доступные IP-адреса. Можно выделять адреса в зависимости от нужд сети, например, крупная структура требует больше хостов, чем маленькая.
Маска подсети выполняет побитовую операцию с IP-адресом. Биты, маски которые равны 1, указывают на сетевую часть. А биты, равные 0 — на хостовую часть.
Например, IP-адрес 192.168.1.10 в двоичном виде выглядит так: 11000000.10101000.00000001.00001010, а маска подсети так: 255.255.255.0 (в двоичном виде: 11111111.11111111.11111111.00000000). Результатом определения сетевого адреса, проще говоря AND-операции, является 11000000.10101000.00000001.00000000, что соответствует 192.168.1.0.
Примеры масок подсети:
● Маска /24 (или 255.255.255.0) — 256 адресов в подсети (от 0 до 255), где 254 адреса доступны для хостов (первый адрес — сетевой, последний — широковещательный). Пример сети: 192.168.1.0/24.
● Маска /16 (или 255.255.0.0) — 65,536 адресов в подсети. Пример сети: 10.0.0.0/16.
● Маска /8 (или 255.0.0.0) — 16,777,216 адресов в подсети. Пример сети: 172.16.0.0/8.
Теперь поговорим о NAT.
NetworkAddress Translation (NAT)
Это метод преобразования IP-адресов, который используют для управления и маршрутизации трафика в IPv4-сетях. NAT позволяет нескольким устройствам в локальной сети использовать один публичный IP-адрес для доступа к интернету.
Поскольку количество доступных IPv4-адресов ограничено, NAT позволяет использовать один публичный IP-адрес для подключения нескольких устройств в локальной сети, тем самым экономя адресное пространство. Кроме того, NAT скрывает внутренние IP-адреса устройств от внешних сетей, что затрудняет хакерам доступ к этим устройствам, из-за чего злоумышленники используют reverse shell вместо bind shell, о чем поговорим в других статьях. Внешний мир видит только публичный IP-адрес, что добавляет ещё один уровень защиты. Также NAT может использоваться для балансировки нагрузки и управления трафиком, направляя его на различные внутренние хосты.
Как же работает NAT? Когда устройство в локальной сети, допустим с IP-адресом 192.168.1.2, отправляет запрос в интернет, маршрутизатор NAT заменяет внутренний адрес на свой публичный IP-адрес, например, 203.0.113.5 и записывает эту информацию в таблицу NAT. Когда сервер в интернете отвечает на запрос, он отправляет данные на публичный IP-адрес 203.0.113.5. Маршрутизатор NAT использует таблицу NAT, чтобы определить, какому внутреннему устройству следует направить ответ, например, обратно к 192.168.1.2.
Таблица NAT обновляется с каждым новым соединением. Когда соединение закрывается, запись может быть удалена через заданное время.
IPv6
Адрес IPv6 состоит из 128 бит (16 байт), что позволяет создать огромное количество уникальных комбинаций. Он представляется в шестнадцатеричном формате и записывается в виде восьми групп по четыре символа, разделённых двоеточиями, например: 2001:0db8:85a3:0000:0000:8a2e:0370:7334.
IPv6-адрес может быть описан в сокращенном виде. Нулями, стоящими в начале группы, можно пренебречь — 2001:0db8:0000:0000:0000:0000:0000:0001 можно записать как 2001:db8:0:0:0:0:0:1. Последовательные группы из нулей заменяются двойным двоеточием, но это можно делать только один раз: в адресе 2001:0db8:0000:0000:0000:0000:0001 можно записать как 2001:db8::1.
IPv6 поддерживает как статическую, так и автоматическую конфигурацию адресов, что упрощает процесс подключения устройств к сети. IPv6 изначально разработан с учётом требований безопасности и поддерживает протокол IPsec, обеспечивающий шифрование и аутентификацию данных, а также улучшенную поддержку для управления трафиком и приоритезации данных.
Поскольку большинство сетей и устройств по-прежнему используют IPv4, необходимо создать механизмы для обеспечения совместимости, такие как двойной стек (Dual stack), NAT64 и туннелирование. Кроме того, многие администраторы и пользователи не знакомы с IPv6, что требует дополнительного обучения и внедрения новых инструментов и технологий.
Обход защиты Firewall’ов
Все компании, вне зависимости от количества работников, структуры, направленности и страны, защищают свою IT-инфраструктуру как от внешних злоумышленников, так и от внутренних. Первое, что делают сетевые инженеры, системные администраторы и кибербезопасники — это настраивают правила на фаерволах. Неважно, будет это целая развёрнутая IT-инфраструктура с базами данных и 1С-серверами, внутренняя сеть или просто одностраничный веб-сайт — всё подлежит защите.
Давайте поговорим об обходе файервола путем использования IPv6. Многие организации блокируют IPv4-трафик, но не уделяют достаточного внимания IPv6, что открывает дверь для различных атак. Необходимо убедиться, что тестируемая сеть действительно использует IPv6 в своей инфраструктуре, а не просто включает на уровне ОС.
В случае с открытым IPv6, вы можете найти службы, которые не защищены на том же уровне, что и их аналоги на IPv4. Например, некоторые службы могут быть уязвимы к атакам из-за недостаточной конфигурации firewall или IPS/IDS для IPv6.
IPv6 дает возможность провести ряд атак MITM, особенно если в сети некорректно настроен ICMPv6. Злоумышленник выдаёт себя за маршрутизатор, отправляя поддельные RA-пакеты, таким образом перенаправляя трафик через себя. Если используется DHCPv6 для назначения адресов, можно попытаться подделать DHCP-сервер или клиент, перехватывая и изменяя трафик.
Хакинг через IPv6 открывает уникальные возможности, так как многие сети недостаточно защищены для этого протокола. Обычные методы, такие как сканирование, эксплуатация уязвимостей и атаки «человек посередине», могут быть применены, но требуют адаптации для работы с особенностями IPv6. Основной вызов заключается в огромном адресном пространстве, что требует умелого применения техники разведки и сканирования.
Ещё один интересный способ обхода ограничений – использование написания IP-адресов в непривычном виде. Давайте рассмотрим это на примере localhost — 127.0.0.1.
Десятичный формат с разделением точками. Это стандартный, классический формат, в котором каждая из четырех октет (байтов) адреса записывается в десятичной системе через точки:
Здесь каждый октет представляет собой число от 0 до 255, а адрес состоит из четырёх октетов, как уже было раскрыто выше.
Десятичный формат. IPv4-адрес можно представить как единое число в десятичной системе исчисления. Например, 127.0.0.1 может быть преобразован в единое десятичное значение — для этого нужно преобразовать каждую часть адреса в двоичный код и затем собрать всё в единое число:
127.0.0.1 = (127 * 256^3) + (0 * 256^2) + (0 * 256^1) + (1 * 256^0) = 2130706433
В десятичном формате адрес 127.0.0.1 будет выглядеть так:
2130706433
Шестнадцатеричный формат. Адрес также можно записать в виде шестнадцатеричного числа, где каждый октет представляется как пара шестнадцатеричных цифр. Преобразуем каждый октет в шестнадцатеричное значение:
127 в шестнадцатеричной системе = 7F
0 в шестнадцатеричной системе = 00
1 в шестнадцатеричной системе = 01
В шестнадцатеричном формате адрес будет записан так:
0x7F000001
Или можно разделить октеты точками для лучшей читаемости:
Восьмеричный формат
IPv4-адрес можно записать в виде восьмеричных чисел (основа 8). Для этого нужно преобразовать каждый октет в восьмеричную систему:
127 в восьмеричной системе = 177
0 в восьмеричной системе = 0
1 в восьмеричной системе = 1
Восьмеричная запись адреса может быть записана так:
Смешанные форматы. IPv4-адрес может быть записан в разных комбинациях десятичного, восьмеричного и шестнадцатеричного форматов для каждой части адреса.
Десятичная/шестнадцатеричная комбинация:
Десятичная/восьмеричная комбинация:
Чистый двоичный формат (binary). В двоичном виде каждый октет записывается как 8-битное двоичное число:
127.0.0.1 = 01111111.00000000.00000000.00000001
Пример всех форматов для адреса 127.0.0.1
● Десятичный с точками: 127.0.0.1
● Целочисленный десятичный: 2130706433
● Шестнадцатеричный: 0x7F000001
● Восьмеричный: 0177.0000.0000.0001
● Двоичный: 01111111000000000000000000000001
Мы поговорили о типах IP-адресов (IPv4 и IPv6), о том, зачем нужна маска подсети и коснулись технологии преобразования адресов Network Address Translation. Также рассмотрели базовые методы обхода файерволов с использованием особенностей IPv6.
Представление об устройстве IP-адресов необходимо, однако одних теоретических знания недостаточно. Для реального понимания устройства ИТ-инфраструктуры необходимы постоянная практика и общение с сообществом.
Следите за следующими статьями и пишите ваши вопросы и впечатления в комментариях.
713 открытий3К показов






