Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Идентификация удаленного компьютера

Рубрика: Безопасность -> Аудит сети
Метки:
Четверг, 5 февраля 2009 г.
Просмотров: 7813

Nmap умеет не только сканировать порты. Он способен на идентификацию удаленного узла (обычно называют TCP fingerprinting). Хотя стандарт TCP/IP один для всех, но другие производители изменяют иные незначительные параметры, что позволяет определить их продукцию. Разобрав полученный ответ, nmap может определить операционную систему «жертвы».

     Вот некоторые отдельные параметры, которые nmар использует для идентификации удаленного узла:


  • Размер начального окна TCP(TCP initial window size) - в любом пакете есть поле "advertised window", высчитывающих, сколько дополнительных данных может принять отправитель без подтверждения. Размер данного окна свой для различных операционных систем. К примеру, у MS Windows 2000 build 2128 это окно равняется 8760 байтов, в то время как у MS Windows 2000 RC1-RC3 размер этого окна равен 16616 байтов.

  • Не фрагментировать (Don't Fragment) — некоторые операционные системы устанавливают флаг DF на отправляемых пакетах, другие - нет.
  • Значения TTL: значение TTL (Time To Live, Время жизни пакета) задает число маршрутизаторов, через которое может пройти пакет. Когда пакет проходит через маршрутизатор данное поле уменьшается на 1, если TTL=0, пакет отбрасывается. Значение TTL применяется для уничтожения «заблудившихся пакетов». Разные операционные системы устанавливают неодинаковые значения TTL: в частности, в Linux TTL=255, в Windows XP TTL=128, а отдельные версии FreeBSD устанавливают TTL равным 100.
  • Предугадывание по временной метке — используя ТСР-опцию timestamp (временная метка), можно определить, когда операционная система была в последний раз перезагружена. Не все ОС устанавливают временную метку (Linux ее устанавливает).
  • Анализ порядкового номера (предугадывание порядкового номера - это главная часть спуффинга ТСР-соединения). Nmap использует это значение для идентификации удаленного узла.
     Пример использования nmap для идентификацию удаленного компьютера:

# nmap -O -v 172.16.0.1

Starting Nmap 4.00 ( http://www.insecure.org/nmap/ )

Initiating ARP Ping Scan against 172.16.0.1 [1 port] at 13:04

The ARP Ping Scan took 0.01s to scan 1 total hosts.

DNS resolution of 1 IPs took 0.00s. Mode: Async [#: 1, OK: 1, NX: 0, DR: 0, SF: 0, TR: 1, CN: 0]

Discovered open port 22/tcp on 172.16.3.1

Discovered open port 80/tcp on 172.16.3.1

Discovered open port 53/tcp on 172.16.3.1

The SYN Stealth Scan took 0.08s to scan 1672 total ports.

For OSScan assuming port 22 is open, 1 is closed, and neither are firewalled

Host 172.16.0.1 appears to be up ... good.

Interesting ports on 172.16.0.1:

(The 1659 ports scanned but not shown below are in state: closed)

PORT STATE SERVICE

22/tcp open ssh

53/tcp open domain

80/tcp open http

MAC Address: 0D:0E:A6:23:4F:E1 (Asustek Computer)

Device type: general purpose

Running: Linux 2.4.X|2.5.X

OS details: Linux 2.4.0 - 2.5.20

Uptime 131.104 days (since Sat Sep 27 11:35:00 2008)

TCP Sequence Prediction: Class=random positive increments

Difficulty=2206195 (Good luck!)

IPID Sequence Generation: All zeros

Nmap finished: 1 IP address (1 host up) scanned in 2.674 seconds

Raw packets sent: 1688 (68.1KB) | Rcvd: 1686 (78KB)

Проверим достоверность показаний nmap:

# ssh 172.16.0.1 'uname -a; uptime'

root@172.16.0.1's password:***********

Linux Saturn 2.4.22 #1 Wed Jan 14 20:17:27 MSK 2004 i686 i686 i386 GNU/Linux

13:09:31 up 131 days, 2:34, 1 user, load average: 0.01, 0.01, 0.00

     Посмотрим на результаты, которые выдал nmap. Он определил операционную систему и ее версию: Linux 2.4.Х. А это уже серьезно. Используя эту информацию, крекер пойдет искать в Интернете эксплоит или описание уязвимостей для этой версии операционной системы. Также, nmap определил, сколько времени система работает (uptime), то есть с момента последней перезагрузки прошло 131.104(неплохо!). Эту информацию можно подтвердить, если зарегистрироваться в системе по ssh и ввести команды uname (говорит имя дистрибутива и его версию) и uptime (выводит uptime-информацию).

     Нынешние версии Linux имеют прекрасный механизм предотвращения предугадывания порядковых номеров. Nmap сообщает, что они изменяются произвольным инкрементом (random positive increments). Идентификация узла важна в плане безопасности, поскольку нам и так известна версия операционной системы и версии установленного программного обеспечения. Но идентификация узла крайне важна для крекера, который не знает этой информации. Поскольку многие эксплоиты основаны на версии ядра и версии установленного программного обеспечения, эта информация жизненно необходима для крекера - без нее он не сможет подобрать необходимый эксплоит.