ИССЛЕДОВАНИЕ ВОЗМОЖНОСТИ УДАЛЕННОЙ ИДЕНТИФИКАЦИИ СЕТЕВЫХ УСТРОЙСТВ Студеникин Р.В. Факультет ВМиК МГУ им. М.В. Ломоносова, Россия 119992, Москва, ГСП-2, Ленинские горы, МГУ, 2-й уч. корпус, ф-т ВМиК, Email: italiano@lvk.cs.msu.su Аннотация Данная статья посвящена вопросу возможности удалённой идентификации сетевых устройств в сетях TCP/IP/Ethernet. Приведено описание метода идентификации на ограниченном наборе параметров и результаты применения метода на компьютерах тестовой сети. Введение Значительную часть компьютерных сетей составляет пользовательское оборудование и сервера. Пользовательское оборудование – это обычно рабочие станции, ноутбуки, наладонники. Разумеется есть и другие устройства. А все устройства в сети содержат большое количество идентифицирующей их информации – различные имена, адреса разных уровней и так далее. Тем не менее, большинство этих характеристик легко изменить, подделать и ни одна из них не может на 100% идентифицировать устройство. Поэтому возник вопрос, возможно ли удалённо отличать друг от друга сетевые устройства. То есть, можно ли, получив эти параметры от нескольких машин, и сохранив их, к примеру, в отдельные файлы, после повторного сканирования одной из них, указать среди сохранённых файлов тот, в котором содержатся параметры этой же машины. Задача удаленной идентификации сетевых устройств представляет интерес во многих областях. Например, это задача отслеживания перемещения пользовательских компьютеров в пределах корпоративной сети. В ряде случаев у администраторов частных сетей нет возможности устанавливать программные "метки" на пользовательские компьютеры (понятно, что можно было бы однозначно идентифицировать узел, установив на него специальную прошивку в область BIOS или некий специализированный сетевой сервис, хотя в этом случае метод неустойчив к изменению программной или аппаратной конфигурации соответственно. Т.е. даже использование меток не всегда может помочь однозначно идентифицировать узел). Такой сетью может являться сеть университета, университетского кампуса, сети "домового" провайдера доступа в Интернет. Другая область применения - дополнительная проверка аутентичности пользователей при удаленном доступе к некоторым сервисам корпоративной сети. Например, есть сервер терминального доступа, на который пользователи могут получить терминал с использованием SSH. При этом можно использовать стандартные способы аутентификации – пароль, публичный ключ (тем или иным способом - аппаратные ключи, файлы на диске), одноразовые пароли и т.д. (то, что например предоставляет PAM в unix-like системах). Но всегда есть опасность, что паролем или ключом завладеет кто-то, кроме законного владельца. В таких случаях может оказаться полезным отслеживать идентичность тех физических компьютеров, с которых происходит терминальный доступ и, например, оповещать администратора сервера в тех случаях, когда пользователь пытается зайти с ранее неизвестного компьютера. Также следует учитывать, что в таких условиях тот же IP-адрес или доменное имя узла не могут служить его однозначным идентификатором, т.к. могут быть подделаны злоумышленником. Ещё один пример (возможно, не очень юридически корректный) - слежка за мобильными пользователями в масштабах глобальной или региональной сети. Здесь важно учитывать, что интерес для слежки могут предоставлять узлы, которые долгое время находятся в пользовании конкретных людей и можно сопоставить устройство его пользователю - мобильные телефоны, ноутбуки, коммуникаторы и т.п. Во всех таких случаях задача сводится к вопросу - можно ли по активности устройства в сети однозначно его опознать. При этом мы имеем существенные ограничения на возможности наблюдателя: наблюдатель может только взаимодействовать с устройством в рамках поддерживаемых этим устройством сетевых протоколов, либо прослушивать сетевой трафик, генерируемый устройством (и трафик в обратном направлении - от различных узлов сети к устройству). В данной статье проведено описание результатов исследования возможности удаленной идентификации методом удаленного сканирования - то есть при помощи активных сканирующих "проб" - запросов к сетевым устройствам и анализу получаемых ответов. Профиль устройства Для решения поставленной задачи был предложен следующий метод: для каждого устройства в сети нужно описать его профиль и сохранить в отдельном файле. Такой набор файлов будем называть базой профилей. Затем, проведя сканирование одного из устройств, попробовать, с некоторой разумной вероятностью, указать соответсвующий этому устройству профиль из сформированной базы. Для описания параметров профиля удобно расписать их по уровням OSI модели: 1. Физический уровень Активных нет. 2. Канальный - время отклика - MAC 3. Сетевой - список всех протоколов, поддерживаемых хостом, которые могут работать поверх IP и при этом подразумевают диалог(всего 138) - время отклика для каждого из протоколов - реакция на ICMP сообщения. 4. Транспортный - время установления соединения для каждого из протоколов, его предусматривающих - параметры TCP (можно получить при помощи сканера nmap): закон изменения ISN хоста определение TCP- опций(SYN пакет на открытый порт) результат обработки NULL-пакета, посланного на открытый порт тест обработки SYN|FIN|PSH|URG-пакета, посланного на открытый порт тест обработки ACK-пакета, посланного на открытый порт тест обработки SYN-пакета, посланного на закрытый порт тест обработки ACK-пакета, посланного на закрытый порт тест обработки FIN|PSH|URG-пакета, посланного на закрытый порт - параметры UDP 5. Прикладной - список открытых портов - время отклика - версия сервиса(её определяет сканер Nmap) Алгоритм После того как мы определились с параметрами, входящими в профиль, можно начать описание алгоритма идентификации. Задача идентификации разбивается на две подзадачи: 1) Дано: Сеть, то есть граф G=(V,E). V-множество узлов сети, E-множество связей между ними(физических соединений). Необходимо: Для каждого v из V построить профиль. 2) Дано: некоторый узел v' и база профилей B. Необходимо: определить вектор параметров v' и определить, насколько v' соответствует каждому профилю из B. Система идентификации представляет собой программное решение вышеописанных подзадач задачи идентификации и состоит из следующих элементов: двух База профилей База профилей представляет собой набор файлов с профилями, описывающими устройства исследуемой сети. Сканер В качестве сканера был выбран сетевой сканер nmap. Используется для активного сканирования удалённого устройства с целью получения параметров для формирования профиля устройства. Модуль анализа результатов сканирования и идентификации Модуль анализа данных сканирования и идентификации представляет собой программный модуль, написанный на языке С++ для операционной системы Linux. 1. Решение первой подзадачи задачи удалённой идентификации представлено в виде режима работы пополнения базы профилей устройств. На вход программе в виде параметра поступает имя(или ip-адрес) устройства v, после чего происходит сканирование указанного устройства, разбор результатов сканирования(формирование профиля P устройства) и вывод профиля в указанный отдельный файл. Эту операцию необходимо провести для каждого v из V. 2. Решение второй подзадачи задачи удалённой идентификации представлено в виде режима идентификации устройства: На вход программе в виде параметра поступает имя устройства(или его ip-адрес), после чего происходит сканирование указанного устройства, разбор результатов сканирования(формирование вектора параметров v'). После этого происходит сравнение полученного вектора параметров со всеми профилями из базы профилей. Сравнение представляет собой последовательное сравнение каждого параметра xi из v' c соответствующими параметрами профиля. В данном случае профиль устройства и вектор параметров устройства – совпадающие понятия, поскольку профилем устройства является именно некоторая точка в пространстве параметров. Описание и результаты экспериментов Поскольку исследуемый метод идентификации предполагает сравнение полученного профиля устройства с профилями из заранее составленной базы, то для начала нужно построить эту самую базу профилей. Для этих целей из arp таблицы сервера тестовой сети были получены ip-адреса устройств, после чего все устройства были просканированы и результаты сканирования сохранены в разные файлы. Из всей сети удалось просканировать 18 устройств. В результате сканирования было обнаружено, что 5 из них имеют абсолютно идентичные профили(один открытый порт и одинаковую реакцию на tcp-пакеты), а 4 устройства не имеют ни одного открытого порта, и, соответственно, проведение полного tcpсканирования невозможно. Очевидно, что отличать эти профили не представляется возможным, поэтому при проведении эксперимента они были просто отброшены и дальнейшее исследование проводилось без них. Т.е. в базе оказалось 9 профилей устройств. На основе отброшенных профилей были сформулированы граничные условия применимости системы для данной сети: 1. У сканируемого устройства должно быть открыто как минимум 4 порта. 2. У сканируемого устройства должна быть реакция как минимум на 3 теста, проводимых сканером nmap. Еще раз хочется подчеркнуть, что эти условия справедливы только для исследуемой сети и, возможно, в другой сети их придется изменить. Через 3 дня 9 устройств были просканированы заново и опробована функция идентификации. В результате эксперимента все 9 устройств были удачно сопоставлены своим профилям(т.е. идентифицированы). Но, при идентификации одного устройства результат ф-ии идентификации для 2-х профилей, не описываемых данное устройство был выше нормы, а именно 0.73. В это же время, для профиля, описывающего данное устройство результат был 0.89. Для всех остальных устройств такой близости профилей не наблюдалось. Второй эксперимент был проведен через месяц после формирования базы профилей. В этом эксперименте также удачно были идентифицированы все 9 устройств, но, для 2-х из них, функция идентификации показала результат 0.65-0.67 при работе с профилями, описывающими соответствующие устройства. Однако следует заметить, что при работе с профилями, не описывающими идентифицируемое устройство, результат для всех кроме одного профиля был в районе 0.050.23, для одного – 0.4. Успеху эксперимента содействовали 2 факта: 1. Слишком мало устройств участвовало в эксперименте. 2. Большинство устройств содержали избыточное количество информации. Стоит также заметить, что в эксперименте не учавствовали устройства с практически «голой» операционной системой. Возможно, если бы эксперимент проводился на другой сети, то пришлось бы отфильтровать гораздо больший процент устройств(хотя и так отфильтровано 50%). Также, неизвестно, каков был бы результат, если после отфильтровывания осталось хотя бы 100 машин. Заключение Как показали эксперименты, 50% просканированных устройств, отфильтровываются. А это немалая часть. Но успех эксперимента с оставшимися устройствами также нельзя считать доказательством возможности идентификации узлов, которые не отфильтровываются граничными условиями, за неимением достаточного количества статистических данных. Хотя, в то же время, этим экспериментом показано, что метод идентификации применим в некоторых небольших сетях. В связи с тем, что процент отфильтрованных машин довольно велик, напрашивается вывод: требуется расширение набора входящих в профиль параметров, либо использование пассивного сканирования. Литература [1] J. Postel, RFC 792 - «Internet Control Message Protocol», DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION // September 1981 [2] J. Klensin, RFC 2821 - «Simple Mail Transfer Protocol» // April 2001 [3] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee, RFC 2616 «Hypertext Transfer Protocol – HTTP/1.1» // June 1999 [4] J. Postel, J. Reynolds, RFC 959 - «File Transfer Protocol» // October 1985 [5] Cisco Systems, Inc, «Программа сетевой академии Cisco CCNA 1 и 2. Вспомогательное руководство, 3-е издание» // «Вильямс» 2005г [6] Xylan Corporation, «Модель OSI», http://www.citforum.ru/nets/switche/osi.shtml //1997 [7] Wikipedia, the free encyclopedia, «OSI model», http://en.wikipedia.org/wiki/OSI_model [8] Брежнев А.Ф., Смелянский Р.Л., «Семейство протоколов TCP/IP» http://www.markitt.ru/FWO/tcpip/ // 1994 [9] Fyodor<fyodor@insecure.org>, Алексей Волков<alex@nmap.ru>, «Определение операционной системы удаленного хоста», http://www.insecure.org/nmap/nmap-fingerprintingarticle-ru.html // 1997-2000 [10] Wikipedia, the free encyclopedia, «List of TCP and UDP port numbers», http://en.wikipedia.org/wiki/TCP_and_UDP_port_numbers [11] Bernard Aboba <bernarda@microsoft.com>, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk>, Barry Howard <Howard@NMFECC.LLNL.GOV>, «Protocol Numbers», http://www.iana.org/assignments/protocol-numbers // last updated 28 March 2006