Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Разведка и сбор данных при пентесте — не одно и то же. Recon (разведка) — это пассивные действия, а Enum (сбор данных) — активные. Разведка подразумевает работу исключительно с открытыми источниками (OSINT), при этом целевая система никак не затрагивается, то есть все действия выполняются анонимно. А вот когда наступает этап enumeration, или сбора данных, мы начинаем взаимодействовать с целями. Об этом важном этапе тестирования на проникновение мы сегодня и поговорим.
Фраза «Enumeration is the key» широко известна в среде пентестеров. Вначале пентестеры обычно сканируют порты, определяя службы и выполняя специфичные тесты для каждого. И тут начинающие часто допускают грубые ошибки, ведь сканирование портов может быть расценено удаленной стороной как сетевая атака.
Enumeration — это целое искусство. Оно заключается в умении легитимно, без использования каких‑либо уязвимостей, а полагаясь исключительно на поведение приложения вытащить из исследуемого сервиса или открытого порта столько информации, сколько возможно. И чем больше такой информации получит хакер, тем проще ему будет на следующих этапах.
Сегодня на серверах крутится столько разнообразных служб, что описания всех приемов для каждой из них хватило бы на целую книгу. Поэтому сегодня мы коснемся самых основ, того, на чем работает каждый сервис, — стека протоколов TCP/IP. Думаю, ты крайне удивишься, узнав, сколько информации реально достать, не поднимаясь выше уровня L2/L3/L4 и не имея доступа к удаленному серверу, а просто зная его IP-адрес и отправляя ему те или иные пакеты. Большинство приемов применимо абсолютно к любым узлам интернета.
Итак, используя только лишь протоколы сетевого и транспортного уровней (IP, TCP и ICMP), мы сможем определить:
В статье я буду показывать все примеры двумя способами: с помощью базового инструментария и с использованием собственного набора скриптов. В коде этих скриптов ты найдешь полезные примеры использования библиотеки для крафтинга пакетов scapy, чтобы при необходимости кастомизировать их под свою задачу.
Обычно с ARP ассоциируются атаки перехвата трафика, но мы взглянем на этот протокол с другой стороны.
В каждом ARP-пакете есть поле с src_mac
.
И именно по содержимому этого поля мы сможем ответить на ряд вопросов.
Думаешь, если удаленный узел не отвечает на ping, то его там нет? Когда ты инициируешь любое обращение к узлу из текущего сетевого сегмента, будь то команда ping
или обращение через браузер, твоя ОС сначала выполняет ARP-запрос, чтобы узнать MAC-адрес удаленного хоста. И обычно файрволы (даже если они настроены на полную блокировку всего входящего трафика) не трогают канальные протоколы (Ethernet), а также ARP, поскольку из‑за этого может быть нарушена работоспособность сети.
Например, имеется хост из текущего сетевого сегмента, которого вроде как нет, поскольку на ping он не отзывается. Тем не менее в кеше присутствует его MAC-адрес, следовательно, сетевой узел существует.
Чтобы обнаружить подобные скрытые узлы во всем сетевом сегменте, можно использовать скрипт, который автоматически выполняет описанные выше действия.
Эта информация может быть также полезна в сетях, где нет DHCP, но тебе нужно аккуратно занять IP-адрес. Кроме того, она просто дает понимание, что тот или иной сервер не выключен, а находится за файрволом.
То, что в сетевом сегменте мы можем видеть MAC-адреса удаленных узлов, позволяет выявить системы с несколькими IP-адресами.
Все просто: если нескольким IP-адресам соответствует один MAC, с большой долей вероятности находится узел, сетевой карте которого присвоено несколько IP-адресов (alias). Стоит отметить, что так мы не увидим dual-homed-машины (несколько сетевых карт). Как их можно обнаружить, я расскажу чуть позже.
Первые три октета MAC-адреса резервируются за производителями оборудования и потому достаточно точно могут идентифицировать железо.
Хорошо видно, что рядом с нами в сети присутствуют четыре IP-камеры и четыре сетевых устройства. Информация об этом находится в OUI-базах (/usr/share/arp-scan/ieee-oui.txt
, /usr/share/airgraph-ng/oui.txt
).
В зависимости от MAC-адреса удаленного узла мы можем сделать еще и достаточно точный вывод о том, физический перед нами сервер или виртуальный. Например, популярная в Enterprise-секторе VMware по умолчанию использует MAC-адреса вида 00:50:56:xx:xx:xx
.
С ARP связана еще одна не столь очевидная атака под названием SNAC, которая выявляет устаревшие информационные потоки. Учитывая, что для непосредственной коммуникации узлов в локальных сетях требуется запрашиваемый по ARP MAC-адрес, и при этом запрашиваемый широковещательно (так что его слышат все), мы можем узнать, а все ли запрашиваемые узлы реально существуют.
Так как ARP-ответ уже не идет широковещательно, а отправляется непосредственно запрашиваемой стороне, его мы не услышим. Поэтому скрипт выполняет повторный ARP-запрос, чтобы проверить, реально ли существует в текущем сетевом сегменте запрашиваемый хост. Если да, он подсвечивается зеленым, как действующий информационный поток, если нет — красным, как недействующий. Во время работы скрипт постоянно обновляет граф, визуализирующий эти самые информационные потоки.
Просто анализируя ARP, можем видеть, что некто (через шлюз 192.168.8.1
), расположенный в другом сетевом сегменте, пытался соединиться с несуществующими хостами. Или например, что сразу три узла (82, 79 и 83) связываются с хостом 192.168.8.73
.
Вполне очевидным действием будет занять свободный, но запрашиваемый IP-адрес, присвоив своей сетевой карте сколько нужно адресов. Результатом может стать абсолютно что угодно, любой информационный поток вплоть до разглашения паролей (например, если присвоенный адрес принадлежит серверу MS SQL) или хешей (если это адрес сетевого диска). Впрочем, это уже отдельная история.
SNAC крайне сложно увидеть невооруженным взглядом, ведь часто причиной успешной атаки становится всеми забытый конфиг. В то же время угроза не столь очевидна, когда у сервера меняется IP-адрес: мало кто задумывается о том, что его может занять атакующий.
SNAC просто незаменим при атаках на так называемые стенды, когда исследуемые узлы просто выдергиваются из продуктивных сетей, разрывая информационные потоки.
В любом IP-пакете есть поле ttl
.
Его особенность заключается в том, что каждое сетевое устройство, которое доставляет твой IP-пакет до цели, вычитает из значения этого поля единицу. Если устройств по пути до цели много, значение IP.ttl
будет уменьшаться по мере удлинения маршрута следования пакета. Как только содержимое поля IP.ttl
станет равным нулю, пакет удалится. Так реализована защита от зацикливания пакетов на пути следования. Отправляющая сторона вольна устанавливать любое значение ttl
, a удаленная сторона при этом ответит пакетом со своим IP.ttl
.
Отправляющая сторона (твой ПК) устанавливает определенное начальное значение IP.ttl
. Точно так же удаленная сторона в ответ отправит тебе пакет со своим начальным IP.ttl
(значение которого может уменьшиться на длину трассировки). И это значение специфично для ОС.
Источник: xakep.ru