• Категории
  • Подписка
  • Разместить статью
04/11/10 2 2203 Определение типа ОС
-

Активное исследование стека

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

Определение операционной системы с помощью nmap

Утилита nmap (читайте статью – «Обзор возможностей и базовых приемов применения сканера nmap»), обладает встроенной возможностью иден­тификации типа сканируемой операционной системы. В настоящее время nmap позволяет осуществить наиболее точное определение типа и версии операционной системы. Список сиг­натур операционных систем регулярно обновляется. В том случае, когда утилита не обнаружи­вает точного соответствия с сохраненными сигнатурами, она предоставляет список действий, необходимых для сохранения новой сигнатуры в базе данных. После этого в будущих версиях утилиты новая сигнатура будет доступна всем желающим. На данный момент в базе данных nmap хранилось более 600 сигнатур, описывающих буквально все — от сетевого обору­дования до проигрывателей МРЗ. Для определения типа операционной системы nmap ис­пользует внушительный список тестов:

  • изучение начальной последовательности;
  • отправка SYN-пакета на открытый порт с набором различных параметров TCP;
  • отправка NULL-пакета (без установленных флагов) с набором различных параметров на открытый порт;
  • отправка пакета с установленными флагами SYN | FIN | URG | PSH и набором различных параметров TCP на открытый порт;
  • отправка ACK-пакета с набором различных параметров TCP на открытый порт;
  • отправка SYN-пакета на закрытый порт с набором различных параметров TCP;
  • отправка ACK-пакета с набором различных параметров TCP на закрытый порт;
  • отправка пакета с установленными флагами FIN, PSH, URG и набором различных параметров TCP на закрытый порт;
  • отправка UDP-пакета на закрытый порт.

Для идентификации типа операционной системы с помощью nmap в консоли достаточно указать параметр –O:

# nmap -vv -sS  -O localhost
 
Starting Nmap 5.21 ( http://nmap.org ) at 2010-11-03 22:32 EET
Warning: Hostname localhost resolves to 2 IPs. Using 127.0.0.1.
Initiating SYN Stealth Scan at 22:32
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 3306/tcp on 127.0.0.1
Discovered open port 139/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Discovered open port 445/tcp on 127.0.0.1
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 631/tcp on 127.0.0.1
Completed SYN Stealth Scan at 22:32, 0.09s elapsed (1000 total ports)
Initiating OS detection (try #1) against localhost (127.0.0.1)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000066s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
rDNS record for 127.0.0.1: localhost.localdomain
Scanned at 2010-11-03 22:32:04 EET for 1s
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
631/tcp  open  ipp
3306/tcp open  mysql
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.17 - 2.6.24
TCP/IP fingerprint:
OS:SCAN(V=5.21%D=11/3%OT=22%CT=1%CU=34487%PV=N%DS=0%DC=L%G=Y%TM=4CD1C6C6%P=
OS:i686-pc-linux-gnu)SEQ(SP=CB%GCD=1%ISR=D2%TI=Z%CI=Z%II=I%TS=U)OPS(O1=M400
OS:C%O2=M400C%O3=M400C%O4=M400C%O5=M400C%O6=M400C)WIN(W1=8018%W2=8018%W3=80
OS:18%W4=8018%W5=8018%W6=8018)ECN(R=Y%DF=Y%T=40%W=8018%O=M400C%CC=N%Q=)T1(R
OS:=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=Y%T=40%W=8018%S=O%A=
OS:S+%F=AS%O=M400C%RD=0%Q=)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R
OS:=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F
OS:=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%
OS:T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD
OS:=S)
 
Network Distance: 0 hops
TCP Sequence Prediction: Difficulty=203 (Good luck!)
IP ID Sequence Generation: All zeros
 
Read data files from: /usr/share/nmap
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.61 seconds
 Raw packets sent: 1019 (45.598KB) | Rcvd: 2047 (87.048KB)

В разделе отчета TCP/IP fingerprint отображается подробная информация, полученная nmap в ответ на выполненные тесты. Если nmap не в состоянии найти соответствие с сигнату­рами из базы данных, то она выдает адрес URL, на который можно отправить полученную сиг­натуру для ее добавления в новые версии nmap.

Кроме того, nmap проверяет не только открытые, но и закрытые порты. Поэтому результаты выполнения nmap более подробны и надежны. Да, и потому, что nmap является средством сканирования, нет необходимости задавать определен­ные порты для тестирования, nmap определит их самостоятельно.

Единственной проблемой при идентификации операционной системы с помощью nmap является распознавание версии Windows.

Утилита xprobe

Принцип работы утилиты xprobe, предназначенной для определения версии операцион­ной системы удаленного хоста, которая вместо протокола TCP для определе­ния операционных систем использует возможности IСМР.

В первую очередь утилита xprobe отправляет UDP-пакет на порт с большим номером (по умолчанию на порт 32132) тестируемого хоста. Предполагается, что этот порт не используется никакой службой и тестируемый хост возвратит ICMP-пакет с сообщением об ошибке. По по­лученным битам этого ответного пакета xprobe может сузить круг возможных операционных систем. Дополнительные пакеты позволяют уточнить тип и версию операционной системы удаленного хоста. Отправка новых пакетов осуществляется до тех пор, пока у xprobe не останется никаких правил, по которым бы можно было отличить конкретную опе­рационную систему.

# xprobe2 -v localhost
 
Xprobe2 v.0.3 Copyright (c) 2002-2005 fyodor@o0o.nu, ofir@sys-security.com, meder@o0o.nu
 
[+] Target is localhost
[+] Loading modules.
[+] Following modules are loaded:
[x] [1] ping:icmp_ping  -  ICMP echo discovery module
[x] [2] ping:tcp_ping  -  TCP-based ping discovery module
[x] [3] ping:udp_ping  -  UDP-based ping discovery module
[x] [4] infogather:ttl_calc  -  TCP and UDP based TTL distance calculation
[x] [5] infogather:portscan  -  TCP and UDP PortScanner
[x] [6] fingerprint:icmp_echo  -  ICMP Echo request fingerprinting module
[x] [7] fingerprint:icmp_tstamp  -  ICMP Timestamp request fingerprinting module
[x] [8] fingerprint:icmp_amask  -  ICMP Address mask request fingerprinting module
[x] [9] fingerprint:icmp_port_unreach  -  ICMP port unreachable fingerprinting module
[x] [10] fingerprint:tcp_hshake  -  TCP Handshake fingerprinting module
[x] [11] fingerprint:tcp_rst  -  TCP RST fingerprinting module
[x] [12] fingerprint:smb  -  SMB fingerprinting module
[x] [13] fingerprint:snmp  -  SNMPv2c fingerprinting module
[+] 13 modules registered
[+] Initializing scan engine
[+] Running scan engine
[-] ping:tcp_ping module: no closed/open TCP ports known on 127.0.0.1. Module test failed
[-] ping:udp_ping module: no closed/open UDP ports known on 127.0.0.1. Module test failed
[-] No distance calculation. 127.0.0.1 appears to be dead or no ports known
[+] Host: 127.0.0.1 is up (Guess probability: 50%)
[+] Target: 127.0.0.1 is alive. Round-Trip Time: 0.00013 sec
[+] Selected safe Round-Trip Time value is: 0.00025 sec
[-] fingerprint:tcp_hshake Module execution aborted (no open TCP ports known)
[-] fingerprint:smb need either TCP port 139 or 445 to run
[-] fingerprint:snmp: need UDP port 161 open
[+] Primary guess:
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.22" (Guess probability: 100%)
[+] Other guesses:
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.23" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.21" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.20" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.19" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.24" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.25" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.26" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.27" (Guess probability: 100%)
[+] Host 127.0.0.1 Running OS: "Linux Kernel 2.4.28" (Guess probability: 100%)
[+] Cleaning up scan engine
[+] Modules deinitialized
[+] Execution completed.

С помощью отправки ICMP-запроса об отметке времени (Timestamp) утилита xprobe смогла определить, что интересующий ком­пьютер, скорее всего, работает под управлением Linux Kernel 2.4.22, но не исключаются и другие версии. В данном случае ОС определена не верно, как мне кажется по одной единственно причине — обновление сигнатур закончилось в 2005 году, хотя в репозиториях она до сих есть, зачем даже не знаю.

Работа утилиты xprobe невозможна без получения ответа на начальный UDP-пакет, так как она использует результаты этого теста для предварительных выводов об операционной сис­теме удаленного хоста.

Не исключаю и других способов определения операционной системы.

Как бороться с активным исследованием стека

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

Для защиты от действий утилиты xprobe будет достаточно заблокировать отправку ответ­ных ICMP-сообщений при получении UDP-пакетов на закрытый порт. Правда, это может привести к блокированию работы других служб. Поэтому этот метод не рекомендуется применять при широком использовании программного обеспечения, базирующегося на возможно­стях протокола UDP.

Средства наподобие iPLog (программа-регистратор пакетов), доступные на сайте ojnk.sourceforge.net (см. ojnk.sourceforge.net), позволяют отправлять ответные пакеты, которые предназначены для дезинформации утилиты nmap, что приведет к ошибочному определению операционной системы. Чтобы обмануть все известные программы активного исследования стека, можно ус­тановить программу iPPersonality (доступна по адресу ippersonality.sourceforge.net (см. ippersonality.sourceforge.net) только для версии ядра 2.4), которая, взаимодействуя с утилитами netfilter и iptables, позволяет имитировать любую операционную систему.

Хотя возможности этих средств могут показаться довольно интересными, но везде есть свои недостатки. Необходимо взвесить все за и против при использовании таких программ. Предоставление хакерам заведомо ложной информации заслу­живает похвалы, но не стоит ради этого наносить ущерб собственному компьютеру. Реализация стека TCP/IP для Linux продолжает совершенст­воваться, поэтому всякие изменения могут привести к несовместимости стандартов или снижению производительности сети.


2 комментария на «“Активное исследование стека”»

  1. Ника:

    очень хорошая статья, спасибо!

  2. Оказывается так легко посмотреть какая ОС стоит на нужном компе, и не нужны не какие сервисы для определение

Добавить комментарий

Яндекс.Метрика