В терминологии специалистов по безопасности имеется выражение fingerprints - "отпечатки пальцев". Этот термин обозначает особенности операционной системы в реализации TCP/IP, а также прикладных протоколов. "Отпечатки пальцев" собираются комплексным исследованием системы. Приведу некоторые из методов, используемых в создании fingerprint'а системы.
Метод снятия отпечатка с сервиса telnet
#!Perl
use Socket;
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$addr=sockaddr_in(23,inet_aton('127.0.0.1'));
print "Connection...\t";
if(connect(SOCK, $addr)){
print "OK!\n";
sysread(SOCK, $finger, 200);
print "Fingerprint: ";
print join(" ",map {ord($_)} split(//, $finger));
}else{
print "Error!\n";
}
close(SOCK);
С помощью вот такого нехитрого скрипта я получаю следующий результат при сканировании самого себя:
Connection... OK!
Fingerprint: 255 253 37 255 251 1 255 253 3 255 253 31 255 253 0 255 251 0
Эти числа - не что иное, как опции telnet-сессии, проанализировав которые, можно "положить в карман" первый элемент мозаичной картины на тему версии операционной системы. Бороться с данным явлением можно, используя "правильные" настройки сервиса telnet (или заменяя при необходимости стандартный сервер вообще). Дефолтные настройки (по умолчанию) администратор просто обязан изменять. Кроме того, здесь можно опять же замаскироваться под настройки другой реализации telnet.
Вышеописанный механизм определения ОС "предоставляется" не только telnet, но и другими сервисами. Однако эти методы не так информативны и не дают 100% гарантии определения ОС. При квалифицированном подходе администратора данные "возможности" можно устранить, а то и применить в средствах маскировки. Однако все эти "отпечатки" относятся, скорее, к дополнительному программному обеспечению, нежели к самой операционной системе...
Настоящие отпечатки пальцев
Настоящие fingerprint'ы операционная система оставляет при реализации протокола TCP/IP, а точнее, при приеме TCP-пакетов и ответе на них. Каждая операционная система по-своему реагирует на "TCP-команды", посылаемые компьютером-"собеседником". Вот примеры таких различий:
1. Реакция на пакет FIN. По стандарту, описанному в документе RFC 793, сервер должен ответить на пакет FIN (завершение соединения), посланный без попытки к установлению соединения (без SYN, ACK), пакетом RST. Однако некоторые операционные системы (Windows, CISCO, HP/UX, IRIX, и другие) не посылают ничего в ответ на FIN.
2. При пересылке каждого TCP-пакета между двумя компьютерами в пакете происходит изменение числового идентификатора ISN, который служит для "правильного" порядка получения сообщений и для сохранения защищенного виртуального канала между хостами. Главная задача этого идентификатора - все время изменяться. В различных операционных системах эта задача решена по-разному. И это дает дополнительную возможность к определению системы (а также ее версии). Вот несколько примеров:
Старые весрии UNIX изменяют ISN постоянным увеличением последнего на число 64.
Solaris, FreeBSD, IRIX и др. реализуют приращение ISN случайным образом.
Linux v.>2.0, OpenVMS устанавливают ISN вообще случайно.
В системах Windows увеличение ISN происходит небольшими приращениями, зависящими от времени.
Концентраторы 3Com, принтеры Apple LaserWriter устанавливают постоянный ISN (0803h и 0C7001h соответственно).
3. Анализ поля Window в заголовке TCP-пакета, полученного от сервера, в некоторых случаях может однозначно охарактеризовать операционную систему последнего.
Например, операционная система AIX имеет значение поля Window - 3F25h (единственная).
Windows NT5, ***BSD имеют поле Window, равное 402Eh.
4. Реакция на нестандартные ситуации. При отправке запроса FIN/PSH/URG-пакет со своим ISN в поле ISS, большая часть операционных систем ответит пакетом, в поле ACK которого установит прибывший ISN. А ОС Windows, например, установят в поле ACK ответного пакета ISN+1
Список примеров можно еще долго продолжать. В нем будут и особенности TCP-пакетов систем и особенности ICMP, IP, и многие другие параметры систем. Бесспорным лидером в распознавании систем является технология nmap [
www.insecure.org] (и ее последователи). Программное обеспечение nmap (RuNmap
www.nmap.ru)создано для комплексного исследования удаленных систем различными способами, в том числе и низкоуровневым анализом.
Конечно, при существовании таких технологий, многими исследователями ведется работа по созданию технологий противодействия. Во-первых, это настройки системы (что, в общем-то, очевидно), а во-вторых, дополнительные утилиты, как, например, Fingerprint Fucking Tool от PKcrew (
www.pkcrew.org) для FreeBSD.
З.Ы.
Администраторы в средствах защиты своего сервера всегда отстают от технологий хакеров как минимум на один шаг. Однако это не повод для пессимизма. Нападениям можно противостоять, если выбрать правильный подход к решению задачи обеспечения безопасности. В Сети вы можете найти массу документации по настройке любых операционных систем, в частности по теме изменений различных параметров типа TTL, MaxSegmentSize, ToS, и тому подобных, которые могут выдать вашу систему.
З.Ы.Ы.
Данная статья представлена исключительно для ознакомления. Автор не несет ответственности за любые действия, совершенные читателем после прочтения этой статьи.