Кунг-фу enumeration. Собираем информацию об атакуемой системе

Содержание статьи

  • ARP
  • Выявление хостов за файрволом
  • Обнаружение хостов с несколькими IP
  • Определение аппаратной части удаленного хоста
  • Stale Network Address Configurations
  • Анализ IP.ttl
  • Определение ОС
  • Выявление помех
  • Обнаружение пути
  • Анализ IP.id
  • Определение использования трафика
  • Idle scan
  • TCP.options
  • Получение uptime
  • Выявление ОС
  • Определение количества балансировочных серверов
  • ICMP.type=13
  • Получение локального времени UTC
  • TCP.flags
  • Выявление помех
  • Определение ОС
  • IP.options
  • Разглашение хопов
  • Выводы

Раз­ведка и сбор дан­ных при пен­тесте — не одно и то же. Recon (раз­ведка) — это пас­сивные дей­ствия, а Enum (сбор дан­ных) — активные. Раз­ведка под­разуме­вает работу исклю­читель­но с откры­тыми источни­ками (OSINT), при этом целевая сис­тема никак не зат­рагива­ется, то есть все дей­ствия выпол­няют­ся ано­ним­но. А вот ког­да нас­тупа­ет этап enumeration, или сбо­ра дан­ных, мы начина­ем вза­имо­дей­ство­вать с целями. Об этом важ­ном эта­пе тес­тирова­ния на про­ник­новение мы сегод­ня и погово­рим.

Фра­за «Enumeration is the key» широко извес­тна в сре­де пен­тесте­ров. Вна­чале пен­тесте­ры обыч­но ска­ниру­ют пор­ты, опре­деляя служ­бы и выпол­няя спе­цифич­ные тес­ты для каж­дого. И тут начина­ющие час­то допус­кают гру­бые ошиб­ки, ведь ска­ниро­вание пор­тов может быть рас­ценено уда­лен­ной сто­роной как сетевая ата­ка.

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

Се­год­ня на сер­верах кру­тит­ся столь­ко раз­нооб­разных служб, что опи­сания всех при­емов для каж­дой из них хва­тило бы на целую кни­гу. Поэто­му сегод­ня мы кос­немся самых основ, того, на чем работа­ет каж­дый сер­вис, — сте­ка про­токо­лов TCP/IP. Думаю, ты край­не уди­вишь­ся, узнав, сколь­ко информа­ции реаль­но дос­тать, не под­нима­ясь выше уров­ня L2/L3/L4 и не имея дос­тупа к уда­лен­ному сер­веру, а прос­то зная его IP-адрес и отправ­ляя ему те или иные пакеты. Боль­шинс­тво при­емов при­мени­мо абсо­лют­но к любым узлам интерне­та.

Итак, исполь­зуя толь­ко лишь про­токо­лы сетево­го и тран­спортно­го уров­ней (IP, TCP и ICMP), мы смо­жем опре­делить:

  • опе­раци­онную сис­тему;
  • се­тевую активность (speed rate);
  • вре­мя неп­рерыв­ной работы опе­раци­онной сис­темы (uptime);
  • вре­мя на уда­лен­ном сер­вере;
  • сколь­ко сер­веров реаль­но находят­ся за IP-адре­сом;
  • сколь­ко балан­сировоч­ных сер­веров на пор­те;
  • при­над­лежат ли пор­ты одно­му сер­веру;
  • сколь­ко IP-адре­сов у сер­вера;
  • то­поло­гию мар­шру­та до цели;
  • лож­ные откры­тые пор­ты.

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

 

ARP

Обыч­но с ARP ассо­циируют­ся ата­ки перех­вата тра­фика, но мы взгля­нем на этот про­токол с дру­гой сто­роны.

В каж­дом ARP-пакете есть поле с src_mac.

И имен­но по содер­жимому это­го поля мы смо­жем отве­тить на ряд воп­росов.

 

Выявление хостов за файрволом

Ду­маешь, если уда­лен­ный узел не отве­чает на ping, то его там нет? Ког­да ты ини­циируешь любое обра­щение к узлу из текуще­го сетево­го сег­мента, будь то коман­да ping или обра­щение через бра­узер, твоя ОС сна­чала выпол­няет ARP-зап­рос, что­бы узнать MAC-адрес уда­лен­ного хос­та. И обыч­но фай­рво­лы (даже если они нас­тро­ены на пол­ную бло­киров­ку все­го вхо­дяще­го тра­фика) не тро­гают каналь­ные про­токо­лы (Ethernet), а так­же ARP, пос­коль­ку из‑за это­го может быть наруше­на работос­пособ­ность сети.

Нап­ример, име­ется хост из текуще­го сетево­го сег­мента, которо­го вро­де как нет, пос­коль­ку на ping он не отзы­вает­ся. Тем не менее в кеше при­сутс­тву­ет его MAC-адрес, сле­дова­тель­но, сетевой узел сущес­тву­ет.

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

Эта информа­ция может быть так­же полез­на в сетях, где нет DHCP, но тебе нуж­но акку­рат­но занять IP-адрес. Кро­ме того, она прос­то дает понима­ние, что тот или иной сер­вер не вык­лючен, а находит­ся за фай­рво­лом.

 

Обнаружение хостов с несколькими 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.

 

Stale Network Address Configurations

С 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-пакете есть поле ttl.

Его осо­бен­ность зак­люча­ется в том, что каж­дое сетевое устрой­ство, которое дос­тавля­ет твой IP-пакет до цели, вычита­ет из зна­чения это­го поля еди­ницу. Если устрой­ств по пути до цели мно­го, зна­чение IP.ttl будет умень­шать­ся по мере удли­нения мар­шру­та сле­дова­ния пакета. Как толь­ко содер­жимое поля IP.ttl ста­нет рав­ным нулю, пакет уда­лит­ся. Так реали­зова­на защита от зацик­ливания пакетов на пути сле­дова­ния. Отправ­ляющая сто­рона воль­на уста­нав­ливать любое зна­чение ttl, a уда­лен­ная сто­рона при этом отве­тит пакетом со сво­им IP.ttl.

 

Определение ОС

От­прав­ляющая сто­рона (твой ПК) уста­нав­лива­ет опре­делен­ное началь­ное зна­чение IP.ttl. Точ­но так же уда­лен­ная сто­рона в ответ отпра­вит тебе пакет со сво­им началь­ным IP.ttl (зна­чение которо­го может умень­шить­ся на дли­ну трас­сиров­ки). И это зна­чение спе­цифич­но для ОС.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *