Снятие отпечатков операционной системы (ОС) с помощью p0F

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
152
Депозит
-8.95$
Я уже много раз говорил и повторю ещё раз: хорошая разведка — ключ к успешному взлому! Без неё вы, вероятно, зря потратите время. Бывали случаи, когда хакеры тратили дни и недели на разведку, прежде чем начать взламывать/эксплуатировать систему или сеть. Это потому, что у вас может быть только одна попытка, и если она окажется неудачной, всё кончено.

6a4a49_2393b97557c74270bec4e3f6a8cec025mv2-1.webp


Пожалуй, самая базовая информация, необходимая перед взломом, — это операционная система (ОС). Надеюсь, само собой разумеется, что эксплойт для Linux не сработает в Windows и, скорее всего, не сработает в OS X от Apple. Более того, эксплойт для Windows XP вряд ли сработает в Windows 10. Эксплойты очень специфичны, и вам нужно иметь достоверную информацию, прежде чем выбирать подход к взлому.

В этом руководстве мы воспользуемся подходом для получения достоверных результатов определения операционной системы целевой машины. Это пассивный подход, основанный на различиях в реализации стека TCP/IP в каждой операционной системе. Поняв эти различия, мы сможем определить, какая ОС отправила каждый пакет, передаваемый по интернету.

При использовании nmap мы знаем, что можно использовать ключ -O, чтобы nmap выдал нам «предположение» ОС. Если вы часто пользовались nmap, то наверняка заметили, что он не очень точен. Он не только часто «предполагает» неверную версию, но и может быть обманут маршрутизаторами, коммутаторами и балансировщиками нагрузки.

В этом уроке мы рассмотрим инструмент, известный как p0f. Его название — аббревиатура от «passive operating system fingerprinting» (пассивный сбор отпечатков операционной системы). В отличие от nmap и некоторых других сборщиков отпечатков операционных систем, которые отправляют пакеты целевой системе и оценивают её реакцию, p0f работает пассивно. Он основан на понимании того, как каждый стек TCP/IP операционной системы реализует и формирует свои пакеты для определения ОС отправителя. Таким образом, он полностью пассивен. Нам не нужно взаимодействовать с целевой системой пакетами или чем-либо ещё. Это позволяет нам оставаться незамеченными, определяя целевую операционную систему.

Реализация стека TCP/IP

Существует множество способов определить операционную систему целевой системы. Например, некоторые порты и службы будут открыты только в системах Windows (1433, SQL Server и 137, NetBios), а некоторые порты — только в системах Linux (631, IPP). Такой метод идентификации, по крайней мере, разделит мир на два основных лагеря, но он довольно ограничен. Во-первых, в некоторых системах Windows эти порты не открыты, а в некоторых системах Linux — нет. Во-вторых, иногда информации о том, к какому основному лагерю принадлежит ОС, недостаточно. Нам необходимо более точное понимание версии ОС, иногда вплоть до уровня пакета обновления.

Существуют инструменты, такие как xprobe2, которые выполняют множество зондирующих тестов системы, а затем оценивают реакцию системы для определения операционной системы. Эти инструменты очень шумные и не слишком скрытные, но в целом работают хорошо, если их отпечатки актуальны. Что, если мы хотим определить ОС, не прикасаясь к системе и не рискуя быть обнаруженными? Сможем ли мы это сделать?

Ответ — однозначное «да»! Несколько лет назад Михал Залевски разработал инструмент p0F, или пассивный цифровой отпечаток операционной системы.

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

Четыре ключевых поля заголовков TCP/IP, которые имеют решающее значение для идентификации ОС:

  • Условия использования
  • ТТЛ
  • ДФ
  • Размер окна
На диаграмме ниже я обвел эти поля в заголовке IP (TOS, TTL и DF) и в заголовке TCP (размер окна).

6a4a49_5413a9cf56d44995aca73e8c342ff69emv2-1.gif


Давайте рассмотрим каждое из этих направлений.

Во-первых, тип обслуживания в заголовке IP или TOS. Это поле может иметь четыре (4) различных значения;

  • Минимизировать задержку
  • Увеличить пропускную способность
  • Максимизировать надежность
  • Минимизировать денежные затраты
Во-вторых, поле «Флаги» . Его не следует путать с флагами TCP (S, A, F, U, P, R). Этот флаг может быть установлен как D или M — «не фрагментировать» или «больше фрагментов». Таким образом IP сигнализирует получателю о наличии дополнительных фрагментов пакетов. Если получатель получает пакеты с установленным флагом M, получатель может задержать их и собрать в полноценный пакет.

Третье, TTL ( время жизни ) . Это поле указывает, сколько переходов должен совершить пакет до истечения срока его действия. В системах Windows это значение обычно равно 32, а в системах Linux — 64, хотя оно может варьироваться.

Наконец, «Окно» или «Размер окна» . Это определяет объём буфера, доступного TCP-стеку для буферизации пакетов. Помните, что одно из преимуществ TCP — управление потоком. Если одна сторона отправляет пакеты слишком быстро, чтобы другая успела их обработать, отправитель может буферизировать пакеты. Размер окна определяет размер этого буфера. Это поле само по себе несёт больше информации об отправителе, чем любое другое поле в любом заголовке. Практически каждая операционная система имеет свой размер окна.

Теперь, когда мы понимаем, что делает p0f, давайте применим его на некоторых пакетах.

p0F

p0F предустановлен в Kali, поэтому нет необходимости скачивать и устанавливать его. p0F недоступен из графического интерфейса Kali, но он встроен и доступен через командную строку. Поскольку его исполняемые файлы находятся в каталоге /usr/bin, а /usr/bin прописан в нашей переменной PATH, мы можем получить к нему доступ из командной строки из любой точки Kali. Давайте посмотрим на его файл справки, введя (обратите внимание, что средний символ — это цифра ноль 0, а не буква o);

кали > p0f -h

6a4a49_53db02aa06ae4b14ab588463448b054fmv2-1.webp


Как видите выше, файл справки p0f краткий, но полный. В первой строфе описываются параметры сетевого интерфейса, во второй — режим работы, а в третьей — параметры производительности.

В простейшем случае вы можете запустить p0f, просто введя команду, а затем -i (интерфейс), а затем имя интерфейса, который вы хотите, чтобы p0f прослушивал, в данном случае eth0;

kali > p0f -i eth0

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

Давайте попробуем перейти на нашу систему Kali (возможно, вы захотите запустить веб-сервер Apache) из системы Windows 7 с браузером Firefox.

6a4a49_ae4e0a132a974a66a443ebfa3228026cmv2-1.webp


Как видите, сначала p0f открывается, затем загружает 320 сигнатур, прослушивает eth0 и входит в основной цикл событий. Обнаружив пакет на интерфейсе, он начинает его декодировать. Сначала он сообщает IP-адрес и порт, с которых он приходит, а также установленный флаг TCP (SYN). Затем он сообщает, какая ОС соответствует отпечатку этого пакета (Windows 7 или 8). В следующей строфе он сообщает тип соединения (Ethernet или модем) и MTU (1500).

6a4a49_700fd73a726f4bffbadf54a283b715afmv2.webp


Если прокрутить немного вниз, то мы увидим указанную выше информацию, описывающую используемый нами браузер (Firefox 10.x или новее), язык (английский) и его исходную подпись.

Из этой же системы, если мы используем Microsoft Internet Explorer 9 для отправки пакетов в наш Kali, вы можете увидеть, что p0f способен идентифицировать браузер как «MSIE 8 или новее».

6a4a49_88d8db46a497497481d21c633078aee5mv2.webp


Давайте попробуем отправить пакеты из другой системы Kali. Kali построена на Debian Linux с ядром Linux. В зависимости от используемой версии Kali, используется ядро версии 3.12 или 3.14. Если p0f верен, он должен определить, что этот пакет поступил из системы Linux.

6a4a49_55b7e3c3f17c4c1daf4d84119dd6f7e5mv2.webp


Как видно на скриншоте выше, p0f смог определить, что установлена ОС «Linux 3.11 и новее». Довольно точно, не правда ли?

В моём руководстве по hping3 я упоминал, что у TCP есть поле, в котором хранится время безотказной работы с момента последней перезагрузки. С помощью hping3 мы можем получить это поле и преобразовать его в дни, часы, минуты и секунды. Как вы помните, это можно использовать для определения времени с момента установки исправления в системе, а следовательно, и для оценки уязвимостей, к которым она уязвима.

p0f также может получать данные о времени безотказной работы. Если просмотреть вывод декодирования Kali, то можно увидеть, что p0f определил, что система работает 6 дней, 16 часов и 16 минут. Очень полезная информация! По времени безотказной работы часто можно определить, были ли установлены исправления в системе. Поскольку исправления часто требуют перезагрузки, все выпущенные исправления не были реализованы в течение этого периода. Это означает, что новые эксплойты, в которых уязвимость была исправлена, по-прежнему будут работать!

6a4a49_4b82b6f87f7d443c8e58097f9ab13c22mv2-1.webp


Кроме того, p0f также определил браузер из системы Kali (IceWeasel в Kali построен на Firefox), который мы использовали, как показано ниже.

6a4a49_cc50a68a5e0d4f2aa486f6ca7a211c30mv2-1.webp


p0F — отличный инструмент для определения операционной системы цели, и он ОЧЕНЬ точен, в отличие от некоторых конкурирующих инструментов в этой области. Он также может предоставить нам идентификацию браузера цели (что может быть критически важно для эксплуатации уязвимости) и время её работы, что часто может подсказать нам, когда система была последний раз обновлена. Это ещё один бесценный инструмент в арсенале профессионального хакера.
 
Назад
Сверху Снизу