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


36

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

Обновить

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

Ответы:


36

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

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


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

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

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

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


4
Просто добавление: если вы, например, знаете, что в сервисе есть ошибка, которая может быть использована для проникновения кода или чего-то еще, и вы действительно видите, что этот сервис запущен, это открытое приглашение;)
Феликс

9

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

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

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

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

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

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

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


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

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

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

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

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


1
Ваше определение «стелс-порта» - это желаемое за действительное. На самом деле злоумышленник знает, что есть компьютер, если он не получает ответа. Если на этом конкретном IP-адресе не было компьютера, предыдущий маршрутизатор отправит сообщение об этом. С "стелс-портами" такого не бывает ...
Йоски

@joschi: Хорошо, это концепция, которую я видел в Интернете, поэтому я думаю, что это хорошо, чтобы определить это. Вы делаете хорошее замечание, хотя. Я отредактировал ответ, чтобы отразить ваш комментарий. По крайней мере, это заставляет целевой IP выглядеть так, будто он находится за маршрутизатором NAT. Я никогда не был фанатом этой концепции: если у вас есть открытые порты, вы должны убедиться, что они используют безопасный сервис. И если у вас нет открытых портов, нет проблем сообщить сети, что вы существуете. Стелс пахнет для меня как обман безопасности.
Илари Каясте

Йоски: не все маршрутизаторы делают это. многие маршрутизаторы просто слепо перенаправляют на IP-адреса, где нет системы. Тайм-аут попытки подключения просто потому, что клиенту надоело пытаться выполнить трехстороннюю связь.
Benc

6

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


3

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

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

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

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


хорошее, краткое чтение.
DaveParillo

1

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

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

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


Ваше определение порта является неверным. Порт никоим образом не ограничен TCP.
MDMarra

1
Я полагаю, что не следует верить ВСЕМУ, что они читают в сети :) 5 из 6 лучших результатов Google явно указывают «TCP» в своем определении. google.com/…
без обуви,

Нет, они говорят TCP / IP. Большая разница. TCP / IP включает UDP
MDMarra

1
ICMP не использует порт, это протокол уровня 3, который включен в набор протоколов IP.
MDMarra

1
Единственная причина, по которой я это говорю, заключается в том, что это очень важно в отношении брандмауэров (о чем речь идет косвенно). TCP является состоянием, и, таким образом, соединения запоминаются, а UDP - нет. Много раз это означает, что порты должны быть открыты для обратного трафика UDP, который инициируется внутри, где это не должно происходить для соединений TCP, которые устанавливаются внутри.
MDMarra

0

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


3
Я закрываю свои двери и окна, потому что на улице холодно. какое отношение этот вопрос имеет к изоляции?
Квик-кихот

2
Ваши двери и окна не изолируют, если они только закрыты? Действительно ли дополнительный болт обеспечивает намного большую изоляцию.
Dentrasi

Хороший вопрос, но стоит отметить, что не все запирают свои двери и окна дома. Это может быть «Не каждый хочет защитить свою собственность» или «Не всем нравится жить в культуре страха», в зависимости от вашей точки зрения.
Илари Каясте

-2

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

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


Открытые порты обязаны предлагать услуги. Только один из множества возможных примеров: Gmail использует открытый порт (443 для своего веб-сайта, использующего HTTPS). Но он просит вас войти, прежде чем показывать что-либо.
Арджан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.