У меня следующий вопрос: если установить чистую Win7, то можно видеть следующие открытые порты:
TCP 135 LISTENING svchost.exe
TCP 139 LISTENING system
TCP 445 LISTENING system
TCP 49152 LISTENING wininit.exe
TCP 49153 LISTENING svchost.exe
TCP 49154 LISTENING svchost.exe
TCP 49155 LISTENING services.exe
TCP 49156 LISTENING lsass.exe
вопрос в том, как узнать по каким протоколам (уровня выше транспортного) могут принимать пакеты эти порты?
Первое, что приходит в голову — установить на виртуалку какую-либо ОС (например XP) или сесть за другую машину в той же сети, запустить на ней сниффер (например Wireshark) и попытаться пообщаться между машинами. Под общением понимается — зайти в расшаренные папки первой машины (где Win7), т.е. просмотр, переименование, копирование, перемещение, запуск файлов. Далее можно в Wireshark посмотреть, какие протоколы были задействованы (было выявлено только 3 протокола — Lanman, по которому даже RFC нет, NetBIOS и SMB2). Но проблема в том, какие еще действия можно выполнить, для того, чтобы расширить этот список протоколов? Что еще кроме просмотра, копирования и т.д. файлов можно сделать?
И второй вопрос: для чего нужны динамические порты 49152-49156? Зачем, например, процессу для служб Windows — svchost.exe его использовать? При том, что он к нему уже привязан 135 порт?
Спасибо.
P.S. Google излазан вдоль и поперек...
Re: Протоколы по умолчанию
От:
Аноним
Дата:
02.11.11 11:21
Оценка:
Процесс svchost часто не один, разные процессы хостят разные сервисы. По dll подгруженным в процесс svchost можно пытаться понять какие именно сервисы хостит конкретный процесс и предположить, зачем он наоткрывал эти порты.
Здравствуйте, Den_Kos, Вы писали:
D_K>вопрос в том, как узнать по каким протоколам (уровня выше транспортного) могут принимать пакеты эти порты?
Только эвристическими методами, а еще заглядыванием в IANA — http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml
Хотя номера портов закрепляются за определенными протоколами (80 — HTTP, 20/21 — FTP, и так далее),
жесткое соответствие может быть нарушено. Через тот же 80 порт запросто может пойти что-то другое, нежели HTTP.
D_K>И второй вопрос: для чего нужны динамические порты 49152-49156?
Динамические порты — это иногда очень удобно.
Например, у меня есть программа, которая принимает команды по TCP и выполняет некие действия.
Вместо того, чтобы привязывать ее к определенному порту, "зашивая" ее номер внутри программы, я
позволяю операционной системе назначить для этого любой незанятый порт. Вдобавок получаю гарантию
того, что данный порт свободен и не используется другой программой.
D_K>Зачем, например, процессу для служб Windows — svchost.exe его использовать? При том, что он к нему уже привязан 135 порт?
TCP/UDP используются не только для веб-технологий.
Иногда это единственный разумный вариант для какой-то задачи обеспечения коммуникаций внутри
одной машины. Так что ситуация, когда одна программа забирает себе два и более портов, вполне нормальна.
Здравствуйте, Den_Kos, Вы писали:
D_K>Всем доброго времени суток!
D_K>У меня следующий вопрос: если установить чистую Win7, то можно видеть следующие открытые порты: D_K> TCP 135 LISTENING svchost.exe D_K> TCP 139 LISTENING system D_K> TCP 445 LISTENING system D_K> TCP 49152 LISTENING wininit.exe D_K> TCP 49153 LISTENING svchost.exe D_K> TCP 49154 LISTENING svchost.exe D_K> TCP 49155 LISTENING services.exe D_K> TCP 49156 LISTENING lsass.exe
D_K>вопрос в том, как узнать по каким протоколам (уровня выше транспортного) могут принимать пакеты эти порты?
Ну как бы номера портов известные — по ним и узнать...
D_K>И второй вопрос: для чего нужны динамические порты 49152-49156? Зачем, например, процессу для служб Windows — svchost.exe его использовать?
svchost — это процесс, в котором живет много сервисов. Какой-то сервис использует порт 135, какой-то 49152 — тут ничего загадочного.
Сами порты 49xxx — это слушающие RPC интерфейсы, которые используют транспорт TCP. Если интересно, что это конкретно за RCP — найди аналог rpcdump под семерку (из Resource Kit'а для 2003-й не подошел на моей семерке).
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Den_Kos, Вы писали:
O>Динамические порты — это иногда очень удобно. O>Например, у меня есть программа, которая принимает команды по TCP и выполняет некие действия.
Идея понятна, однако каков смысл заранее иметь список открытых портов для будущего использования стороннего ПО(если я правильно вас понял)? Ведь это лишний шанс для проведения сетевой атаки.
Т.е. в чем выгода? В том, что мы экономим время для выделения уже готового открытого порта для своей программы? Мне кажется — это не очень накладно...
O>Вместо того, чтобы привязывать ее к определенному порту, "зашивая" ее номер внутри программы, я O>позволяю операционной системе назначить для этого любой незанятый порт. Вдобавок получаю гарантию O>того, что данный порт свободен и не используется другой программой.
В тоже время к этим портам (49152-49156) уже привязаны конкретные процессы, и если ОС захочет выделить их другим процессам (нашей программе), она просто переназначит их? Не потребуется ли на это больше времени, чем выделение нового порта? Еще раз, если я правильно понял.
И основной вопрос остался — что еще можно выполнить, какие еще действия можно произвести для того, чтобы сымитировать более полное сетевое общение между машинами?
Здравствуйте, DOOM, Вы писали:
DOO>Здравствуйте, Den_Kos, Вы писали:
DOO>Ну как бы номера портов известные — по ним и узнать...
Это не всегда так, к сожалению, в инфе IANA ничего не сказано про SMB в графе 139 порт, в этом-то вся и проблема...
DOO>svchost — это процесс, в котором живет много сервисов. Какой-то сервис использует порт 135, какой-то 49152 — тут ничего загадочного.
Загадка в том, точнее вопрос скорей, что этот порт 49152 — динамический, и IANA не регистрирует по такие порты конкретные службы — зачем его выделили в Vista и 7, в XP все прекрасно работало...
DOO>Сами порты 49xxx — это слушающие RPC интерфейсы, которые используют транспорт TCP. Если интересно, что это конкретно за RCP — найди аналог rpcdump под семерку (из Resource Kit'а для 2003-й не подошел на моей семерке).
Ясно.
DOO>>Ну как бы номера портов известные — по ним и узнать... D_K>Это не всегда так, к сожалению, в инфе IANA ничего не сказано про SMB в графе 139 порт, в этом-то вся и проблема...
Отсутствие в базах IANA еще не значит, что порт не well-known
D_K>Загадка в том, точнее вопрос скорей, что этот порт 49152 — динамический, и IANA не регистрирует по такие порты конкретные службы — зачем его выделили в Vista и 7, в XP все прекрасно работало...
Ну в XP он был бы с другим номером, для начала: http://support.microsoft.com/kb/929851
А может даже использовал другой транспорт (RCP еще, например, именованные каналы активно юзает — а они все по SMB идут).
Здравствуйте, DOOM, Вы писали:
DOO>Ну в XP он был бы с другим номером, для начала: http://support.microsoft.com/kb/929851
Честно сказать, не понятна фраза — "Майкрософт повысила диапазон портов динамического клиента для исходящих подключений в Windows Vista и Windows Server 2008. Новый начальный порт по умолчанию — 49152 и конечный порт по умолчанию — 65535. В этом заключается отличие от параметра, более ранних версий Windows, в которых используется диапазон портов по умолчанию 1025-5000". Ведь согласно IANA с 0-1024 общеизвестные порты, с 1025-49151 зарегистрированные, и далее динамические. Т.е. до Vista в Windows динамическими портами были и зарегистрированные (1025-5000)?
D_K>Честно сказать, не понятна фраза — "Майкрософт повысила диапазон портов динамического клиента для исходящих подключений в Windows Vista и Windows Server 2008. Новый начальный порт по умолчанию — 49152 и конечный порт по умолчанию — 65535. В этом заключается отличие от параметра, более ранних версий Windows, в которых используется диапазон портов по умолчанию 1025-5000". Ведь согласно IANA с 0-1024 общеизвестные порты, с 1025-49151 зарегистрированные, и далее динамические. Т.е. до Vista в Windows динамическими портами были и зарегистрированные (1025-5000)?
Ну да. Страшного-то ничего особо не было... Нас вот еще когда сетям учили, тогда говорилось, что только первые 1024 зарезервированы — время-то идет
Здравствуйте, Den_Kos, Вы писали:
D_K>Идея понятна, однако каков смысл заранее иметь список открытых портов для будущего использования стороннего ПО(если я правильно вас понял)? Ведь это лишний шанс для проведения сетевой атаки. D_K>Т.е. в чем выгода? В том, что мы экономим время для выделения уже готового открытого порта для своей программы? Мне кажется — это не очень накладно...
Никаких заранее открытых портов и предварительно выделенных ресурсов нет.
Когда, например, приложение устанавливает связь с удаленным сервером, этому приложению нужно
связать (забиндить) свой конец соединения с определенным портом. Тут есть два способа — либо
выбрать какой-то конкретный номер порта, либо довериться системе, чтобы она выделила один из
свободных портов. Если другое приложение сделает то же самое, ему будет выделен другой порт.
Свободные порты не находятся в состоянии прослушки и невозможно, к примеру, удаленно установить
соединение с ними и пытаться передавать какие-то данные — это все равно, что вызывать
функции Win32 API, передавая нагенерированные случайным образом дескрипторы.
А выгоды — они в гибкости, чтобы не связывать свою программу с определенным номером порта,
потому что так есть риск возникновения конфликта с другим ПО.
D_K>В тоже время к этим портам (49152-49156) уже привязаны конкретные процессы, и если ОС захочет выделить их другим процессам (нашей программе), она просто переназначит их? Не потребуется ли на это больше времени, чем выделение нового порта? Еще раз, если я правильно понял.
ОС не переназначит порты.
Если какое-то приложение попробует использовать уже занятый порт, оно получит ошибку и все.
Вам, наверное, лучше почитать какую-то литературу по этим вопросам, там обычно
такие вещи расписываются от и до.
Здравствуйте, okman, Вы писали:
O>Никаких заранее открытых портов и предварительно выделенных ресурсов нет...
Okman, спасибо за развернутый ответ, однако мне кажется мы немного говорим о разных вещах: для чего нужны динамические порты — абсолютно ясно, вы все правильно и верно описали, но мой вопрос состоял в том, зачем в Vista и Win7 после установки уже прослушиваются порты 49152-49156 из динамического диапазона? Для чего они нужны? Если в них нуждается какая-то служба ОС, так у IANA наверно уже зарегистрирован под нее отдельный порт из диапазона 0-1024... Если не зарегистрирован, ну тогда можно еще понять... А что тогда это за служба? Были в XP 135, 139, 445 — всегда одни и те же, их роль ясна и понятна, тут устанавливаю Win7 и вот тебе еще 5 каких-то портов из динам. диапазона, на кой черт они нужны...
Здравствуйте, DOOM, Вы писали:
DOO>Ну да. Страшного-то ничего особо не было... Нас вот еще когда сетям учили, тогда говорилось, что только первые 1024 зарезервированы — время-то идет
Все ясно.
А насчет второго вопроса — "что еще можно выполнить, какие еще действия можно произвести для того, чтобы сымитировать более полное сетевое общение между машинами?", нет никаких мыслей?
Здравствуйте, Den_Kos, Вы писали:
D_K>А насчет второго вопроса — "что еще можно выполнить, какие еще действия можно произвести для того, чтобы сымитировать более полное сетевое общение между машинами?", нет никаких мыслей?
А. Пропустил.
В семерку встроена утилита rpcping (раньше тоже в resource kit'ах шла). Соответственно, она позволит более информативно пообщаться с портами RPC интерфейсов. Есть еще более убойный rpcclient из Samba suite.
Для общение с текстовыми протоколами подойдет telnet. Если протокол обернут в SSL — ssl-telnet (есть в любом линуксе).
На вскидку больше не подскажу адекватных средств...
D_K>У меня следующий вопрос: если установить чистую Win7, то можно видеть следующие открытые порты: D_K> TCP 135 LISTENING svchost.exe
rpc port mapper
D_K> TCP 139 LISTENING system
netbios
D_K> TCP 445 LISTENING system
SMB
D_K> TCP 49152 LISTENING wininit.exe D_K> TCP 49153 LISTENING svchost.exe D_K> TCP 49154 LISTENING svchost.exe D_K> TCP 49155 LISTENING services.exe D_K> TCP 49156 LISTENING lsass.exe
а это RPC серверы развесили свои интерфейсы на динамически распределенные (тем самым маппером в сервисе rpc) порты
D_K>И второй вопрос: для чего нужны динамические порты 49152-49156? Зачем, например, процессу для служб Windows — svchost.exe его использовать? При том, что он к нему уже привязан 135 порт?
135й порт — это портмаппер, по сути мультиплексор, используемый для того чтобы по GUID RPC интерфейса определить на каком именно порту данной машины реально висит сервер. Когда в конекста какого-либо процесса ктото регистрирует RPC интерфейс с определенным GUID, указывая, что к нему мона подключатся по tcp/ip (ncacn_ip_tcp) rpcrt4.dll посылает запрос (по LPC) в port mapper локального RPC сервиса, тот находит ей свободный порт (любой вообще-то, жесткой привязки нету), связывается с файрволлом, разрешает этот порт, запоминает в своей мапе GUID->порт и возвращает его номер процессу, который хочет поднять RPC сервер на тот GUID. RPCRT4.dll в том процессе биндится на этот порт и обслуживает подключения к нему.
В дальнейшем, когда кто-то из интер/интра-нетов хочет подключиться к RPC серверу с таким же GUID на этом компе он вначале конектицца на 135й порт, говорит — а скажи ка мне, на каком порту у тебя крутицца такой то сервер RPC интерфейса с таким то GUID, маппер на 135м порту висящий смотри в своей мапе, возвращает порт клиенту, клиент потом конектицца на тот порт и далее общаецца с ним по внутреннему протоколу RPC.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Den_Kos, Вы писали:
D_K>Здравствуйте, DOOM, Вы писали:
DOO>>Ну в XP он был бы с другим номером, для начала: http://support.microsoft.com/kb/929851 D_K>Честно сказать, не понятна фраза — "Майкрософт повысила диапазон портов динамического клиента для исходящих подключений в Windows Vista и Windows Server 2008. Новый начальный порт по умолчанию — 49152 и конечный порт по умолчанию — 65535. В этом заключается отличие от параметра, более ранних версий Windows, в которых используется диапазон портов по умолчанию 1025-5000". Ведь согласно IANA с 0-1024 общеизвестные порты, с 1025-49151 зарегистрированные, и далее динамические. Т.е. до Vista в Windows динамическими портами были и зарегистрированные (1025-5000)?
До Vista в Windows плевали с высокой колокольни на эту рекомендацию IANA, как сейчас вообще много где плюют (например, в Linux по умолчанию динамический диапазон 32768-61000, вообще непонятно, из каких принципов он такой). Важно отделить порты ниже 1024 и не давать к ним допуск без административных прав, даже если свободны, а качество соблюдения зоны свободного распределения — не настолько важный фактор.
Но корректность диапазона свободного распределения может быть важной, например, для работы NAT, средств IDS в потоке трафика и т.д., когда нет воспоминаний о полном состоянии TCP сессий в потоке, но есть правило типа "если порт с одной стороны >= 49152, добавляем баллы за то, что именно они инициировали соединение".
Спасибо за ответ. Стало более понятно. Не подскажешь литературу по этой теме?
O>а это RPC серверы развесили свои интерфейсы на динамически распределенные (тем самым маппером в сервисе rpc) порты
А какое значение имеет количество этих портов? В XP был все лишь один (1028), в Vista и Win7 их пять. Это ведь сделано намеренно. С какой целью?
O>>а это RPC серверы развесили свои интерфейсы на динамически распределенные (тем самым маппером в сервисе rpc) порты D_K>А какое значение имеет количество этих портов? В XP был все лишь один (1028), в Vista и Win7 их пять. Это ведь сделано намеренно. С какой целью?
Портов будет столько, сколько различных процессов в системе в которых крутяцца серверы RPC интерфейсов допускающих подключение по tcp/ip.
Насчет XP не уверен так ли оно работает оно там (не дебажил RPC/ncacn_ip_tcp) в ней. Но может там просто меньше таких сервисов, которые по RPC/ncacn_ip_tcp принимаю удаленных клиентов.
Как много веселых ребят, и все делают велосипед...
Во первых — порты 49152-49156 НЕ ЗАРЕЗЕРВИРОВАНЫ под RPC. Просто в семерке динамический диапазон портов распределяются примерно начиная с 49152, в чем несложно убедиться написав:
RPCRT4.dll делает примерно тоже самое когда поднимает слушающий сокет для интерфейсов регистрируемых текущим процессом. Узнал я это при помощи дебаггера. Доводилось дебажить кишки rpcrt4.dll и стандартных виндовых сервисов. Вот к примеру как появляется открытый порт в одном из svchost'ов: