Почему плохо иметь открытые порты?

55363
aireq

Вот то, что всегда сбивало меня с толку. Почему плохо иметь открытые порты на вашем компьютере? Предполагая, что на вашем компьютере нет вируса или какой-либо другой программы, прослушивающей порт, который на самом деле может что-то сделать, почему это важно, если порт открыт? Если какой-то злоумышленник начинает отправлять пакеты в порт, но ничего не может получить данные и что-то с ними сделать, почему это важно? Компьютер не просто произвольно выполняет какие-либо данные, которые он получает. Я понимаю, что переполнение компьютера пакетами может привести к сбою, потому что он просто не может справиться с объемом данных, но я рассматриваю только проблемы безопасности, которые фактически изменяют файлы на компьютере.

Обновить

Спасибо за ответы до сих пор. Теперь я понимаю, что открытый порт фактически означает, что существует программа, которую можно использовать для прослушивания этого порта. Но почему так сложно писать программы, которые нельзя использовать? Чтобы причинить какой-либо реальный вред компьютеру, программа не должна позволять загружать один или несколько файлов, а затем должен быть выполнен один из этих файлов. Кажется, что это было бы невероятно трудно допустить случайно.

35

8 ответов на вопрос

36
MDMarra

Порт не открыт, если что-то не прослушивает соединение на нем.

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


РЕДАКТИРОВАТЬ

Чтобы ответить на ваш вопрос о том, почему люди не могут просто написать программное обеспечение, которое нельзя использовать:

Это довольно просто для простых программ, но многие программы, которые требуют сокета, являются сложными. Как таковые, они имеют много компонентов, многие из которых даже не написаны разработчиком, скорее всего (включая библиотеки). Вы не можете полагаться на то, что другие люди будут обеспечивать безопасность вашей сети, когда есть методы защиты, которые вы можете использовать сами, например, брандмауэры.

Как вы указали, выполнение произвольного / удаленного кода представляет собой огромный риск. К сожалению, переполнения буфера и другие недостатки безопасности, которые позволяют это, распространены. Посмотрите на любое обновление безопасности Microsoft, и я держу пари, что оно исправляет либо удаленное выполнение кода, либо повышение привилегий, а MS - огромная компания с сотнями разработчиков и миллиардами долларов.

Просто добавление: если вы, например, знаете, что в сервисе есть ошибка, которую можно использовать для проникновения кода или чего-то еще, и вы действительно видите, что этот сервис запущен, это открытое приглашение;) Felix 14 лет назад 4
лучший ответ опубликован до сих пор. DaveParillo 14 лет назад 1
9
Richard Downer

Что касается обновления вы написали:

Спасибо за ответы до сих пор. Теперь я понимаю, что открытый порт фактически означает, что существует программа, которую можно использовать для прослушивания этого порта. Но почему так сложно писать программы, которые нельзя использовать? Чтобы причинить какой-либо реальный вред компьютеру, программа не должна позволять загружать один или несколько файлов, а затем должен быть выполнен один из этих файлов. Кажется, что это было бы невероятно трудно допустить случайно.

Это очень трудно писать программное обеспечение, которое не может быть использовано!

Я прочитал книгу « Создание безопасного программного обеспечения», и одна из обсуждаемых ею вещей - использование переполнения стека. Там было два очень страшных факта:

  • Для программы, имеющей эксплуатируемую ошибку переполнения стека, очень легко сделать, особенно когда программа написана на C. В языке программирования C многие функции по умолчанию небезопасны, и программист должен знать, чтобы избежать уязвимых функций. или должен принять специальные меры, чтобы быть в безопасности.
  • Эксплойт, который должен использовать хакер, короткий - очень короткий. Это было меньше половины страницы языка ассемблера, что переводит примерно в 100 (предположительно) байтов машинного кода. Этого кода эксплойта достаточно, чтобы предоставить хакерской оболочке (командной строке) доступ к вашей машине. Не нужно загружать и выполнять большие файлы - просто маленький кусочек кода, который можно вставить в середину допустимых данных.

Таким образом, если хакер может найти программу, в которой (а) имеется ошибка переполнения стека, которая (б) может использоваться в сети и (в) имеет в резервной паре 100 байт, то ваш компьютер pwned. К счастью, знания об ошибках переполнения стека в настоящее время достаточно распространены, но они все еще появляются. 5 лет назад и дольше это было гораздо более частой проблемой.

Возвращаясь к исходному вопросу, вы должны избегать открытых портов, чтобы избежать любой аварии с уязвимой ошибкой в ​​программе. Теперь у вас есть вторая причина: удаленная оболочка, которую затем использовал бы хакер, - это еще один открытый порт. Если у вас есть брандмауэр, который блокирует все, кроме того, что вы специально разрешили, вы также заблокируете эту удаленную оболочку (хотя хакер по-прежнему сможет делать другие неприятные вещи с вашим компьютером, так что не пугайтесь!)

IIRC, Дональд Кнут (?) Только что закончил математически доказывать, что одна из меньших программ, которые он написал, не содержит ошибок, и на это уходит человеко-год RCIX 14 лет назад 2
6
Felix

На самом деле, насколько я знаю, открытый порт означает, что программа слушает его. Так что есть какой-то сервис, обрабатывающий данные.

6
Ilari Kajaste
  • Открытый порт. Когда кто-то спрашивает, компьютер отвечает, что на этом порту прослушивается служба. Это означает, что все, что поступает на этот порт, будет обрабатываться программой (службой), работающей на этом компьютере.
  • Закрытый порт. Когда кто-то спрашивает, компьютер отвечает, что на этом порту нет служб, которые прослушивают. Аксер узнает, что по адресу отвечает компьютер.
  • Стелс-порт: когда кто-то спрашивает, он не получает ответа. Смысл в том, чтобы скрыть, есть ли компьютер по адресу вообще. Это может быть не очень эффективно, однако, как говорит Йоси в комментариях.

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

Закрытые порты по-прежнему реагируют на akser, поэтому возможный злоумышленник может продолжить проверку других портов. Опять же, это то, как Интернет предназначен для работы. Хотя стелс-порты пытаются не дать потенциальному злоумышленнику никакой информации, теоретически они нарушают спецификацию.

С точки зрения безопасности, любой открытый порт является огромной зияющей дырой, так как код используется для обработки внешних данных. Что делает брандмауэр (или маршрутизатор NAT), так это следит за тем, чтобы входящий трафик не попадал на ваш компьютер, даже если в системе есть открытые порты. Таким образом, они эффективно закрывают все порты.

Ваше определение «стелс-порта» - это желаемое за действительное. На самом деле злоумышленник знает, что есть компьютер, если он не получает никакого ответа. Если на этом конкретном IP-адресе не было компьютера, предыдущий маршрутизатор отправит сообщение об этом. С "стелс-портами" такого не бывает ... joschi 14 лет назад 1
@joschi: Ну, это концепция, которую я видел в Интернете, поэтому я думаю, что это хорошо, чтобы определить ее. Вы делаете хорошее замечание, хотя. * Я отредактировал ответ, чтобы отразить ваш комментарий. * По крайней мере, он заставляет целевой IP выглядеть так, как будто он находится за маршрутизатором NAT, я думаю. Я никогда не был фанатом этой концепции: если у вас есть открытые порты, вы должны убедиться, что они используют безопасный сервис. И если у вас нет открытых портов, нет проблем сообщить сети, что вы существуете. Скрытность пахнет мне как обман безопасности. Ilari Kajaste 14 лет назад 0
Йоши: не все маршрутизаторы делают это. многие маршрутизаторы просто перенаправляют вслепую к IP-адресам, где нет системы. время ожидания соединения просто из-за того, что клиенту надоело пытаться выполнить трехстороннюю связь. benc 14 лет назад 0
3

Предполагая, что на вашем компьютере нет вируса или какой-либо другой программы, прослушивающей порт, который на самом деле может что-то сделать, почему это важно, если порт открыт? Если какой-то злоумышленник начинает отправлять пакеты в порт, но ничего не может получить данные и что-то с ними сделать, почему это важно?

Предположение - мать всех отличий :)

скорее безопасно, чем извините ... вот вам хорошее чтение на makeuseof.com:

Объясненные технологии: открытые порты маршрутизатора и их последствия для безопасности

хорошее, краткое чтение. DaveParillo 14 лет назад 0
1
Shoeless

Я не экспорт безопасности, но я провел небольшое исследование ... «Открытый» порт - это порт, который настроен на прием входящего TCP-соединения.

Если у вас есть приложения, прослушивающие только порты 9, 21 и 80, и ваш брандмауэр блокирует доступ к этим трем портам, технически у вас нет открытых портов. IOW, порт 25, например, не открыт, потому что ничего не слушает его.

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

Ваше определение порта является неверным. Порт никоим образом не ограничен TCP. MDMarra 14 лет назад 0
Я полагаю, что не следует верить ВСЕМ, что они читают в сети :) 5 из 6 лучших результатов Google явно указывают «TCP» в своем определении. http://www.google.com/#hl=en&source=hp&q=define+%22open+port%22&aq=f&aqi=&oq=&fp=b36c7832dbb01be6 Shoeless 14 лет назад 1
Нет, они говорят TCP / IP. Большая разница. TCP / IP включает в себя UDP MDMarra 14 лет назад 0
а также ICMP mrdenny 14 лет назад 0
ICMP не использует порт, это протокол уровня 3, который включен в набор протоколов IP. MDMarra 14 лет назад 1
LOL ... Я почти включил упоминание о UDP в моем первом посте. Дело принято. Я думаю, я должен был просто оставить "TCP" в первую очередь. Предполагаемая основная суть моего поста заключительный абзац. Shoeless 14 лет назад 0
Единственная причина, по которой я это говорю, заключается в том, что это очень важно в отношении брандмауэров (о чем речь идет косвенно). TCP является состоянием, и, таким образом, соединения запоминаются, а UDP - нет. Много раз это означает, что порты должны быть открыты для обратного трафика UDP, который инициируется внутри, где это не должно происходить для соединений TCP, которые устанавливаются внутри. MDMarra 14 лет назад 1
0
Steven A. Lowe

По той же причине, что вы закрываете и закрываете свои двери и окна дома.

Я закрываю свои двери и окна, потому что на улице холодно. какое отношение этот вопрос имеет к изоляции? quack quixote 14 лет назад 3
Ваши двери и окна не изолируют, если они только закрыты? Действительно ли дополнительный болт обеспечивает намного большую изоляцию. Dentrasi 14 лет назад 2
Хороший вопрос, но стоит отметить, что не все запирают свои двери и окна дома. Это может быть * «Не каждый хочет защитить свою собственность» * или * «Не всем нравится жить в культуре страха», * в зависимости от вашей точки зрения. Ilari Kajaste 14 лет назад 0
-2
user210203

Давайте просто скажем, что открытые порты похожи на открытое окно и открытую дверь, но когда ваши окна открыты, грабитель или крыса и паук могут попасть в #, пожалуйста, скажите мне, тупой ли я или измененный Отредактировано нет асинина Открытые порты похожи на открытое окно, но в интернете есть открытый порт, я думаю, что также закрытый порт - закрытые окна, без него мы не можем подключиться или просмотреть, я думаю, точно так же, как HTTP и SSH или FTP без него, мы не можем подключиться, потому что это клиент, это просто TCP-соединение

Я не эксперт по безопасности

Открытые порты обязаны предлагать услуги. Только один из множества возможных примеров: Gmail использует открытый порт (443 для своего веб-сайта, использующего HTTPS). Но он просит вас войти, прежде чем показывать что-либо. Arjan 7 лет назад 0
Хорошо спасибо большое user210203 7 лет назад 0

Похожие вопросы