Чому погано мати відкриті порти?


36

Ось щось мене завжди бентежило. Чому погано мати на комп’ютері відкриті порти? Якщо припустити, що у вас немає комп’ютера на вірусі чи іншій програмі, яка слухає порт, який насправді може щось робити, чому це важливо, якщо порт відкритий? Якщо якась шкідлива людина починає надсилати пакети до порту, але нічого не існує, щоб отримати дані і зробити щось із цим, чому це важливо? Комп'ютер не просто довільно виконує будь-які отримані ним дані. Я розумію, що затоплення комп'ютера пакетами може призвести до його збою, оскільки він просто не може впоратися з кількістю даних, але я розглядаю лише проблеми безпеки, які фактично змінюють файли на комп'ютері.

Оновлення

Дякую за відповіді поки що. Зараз я розумію, що відкритий порт насправді означає, що програма, яку можна використовувати, слухаючи на цьому порту. Але чому так важко писати програмне забезпечення, яке не можна експлуатувати? Щоб заподіяти комп’ютер будь-яку реальну шкоду, програма не повинна дозволяти завантажувати один або кілька файлів, і тоді один з цих файлів повинен бути виконаний. Здається, що це було б неймовірно важко дозволити випадково.

Відповіді:


36

Порт не відкритий, якщо щось не прослуховує з'єднання на ньому.

Причина, через яку всі порти відкриті скрізь, - це те, що він відкриває подвигам ті служби, які слухають ці порти. Ось чому існують брандмауери, щоб обмежити те, що дозволено підключати до певних портів, щоб зменшити площу поверхні, яку піддають послуги.


EDIT

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

Для простих програм це досить просто, але багато програм, для яких потрібен сокет, є складними. Таким чином, вони мають багато компонентів, багато з яких навіть не написані розробником, швидше за все, (включаючи бібліотеки). Ви не можете покладатися на інших людей, щоб захистити вашу мережу, коли існують методи загартовування, якими ви можете користуватися самостійно, наприклад, міжмережеві стіни.

Довільне / віддалене виконання коду - це величезний ризик, як ви вказали. На жаль, переповнення буфера та інші вади безпеки, які дозволяють це, є загальними. Подивіться на будь-яке оновлення безпеки Майкрософт, і я буду сумніватися, що воно виправляє або віддалене виконання коду, або підвищення привілеїв, а MS - це величезна компанія з сотнями розробників і мільярдами доларів.


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

9

Щодо оновлення, яке ви написали:

Дякую за відповіді поки що. Зараз я розумію, що відкритий порт насправді означає, що програма, яку можна використовувати, слухаючи на цьому порту. Але чому так важко писати програмне забезпечення, яке не можна експлуатувати? Щоб заподіяти комп’ютер будь-яку реальну шкоду, програма не повинна дозволяти завантажувати один або кілька файлів, і тоді один з цих файлів повинен бути виконаний. Здається, що це було б неймовірно важко дозволити випадково.

Це дуже важко програмне забезпечення для запису , які не можуть бути експлуатованої!

Я прочитав книгу " Побудова безпечного програмного забезпечення", і одна з речей, яку вона обговорювала, - це використання переповнення стека. Там було два дуже страшні факти:

  • Для програми, яка має помилку переповнення стека, яку можна використовувати, це дуже легко зробити, особливо коли програма написана на C. У мові програмування С багато функцій за замовчуванням не є безпечними, і програмісту потрібно знати, щоб уникнути вразливих функцій або повинен вжити спеціальних дій, щоб бути безпечним.
  • Експлоатація, яку хакер повинен використовувати, коротка - дуже коротка. Це було менше половини сторінки мови складання, що перекладає на 100 або більше (вгадайте) байтів машинного коду. Цей код експлуатації достатній, щоб надати хакерській оболонці (командний рядок) доступ до вашої машини. Не потрібно великих завантажень та виконання файлів - лише крихітний фрагмент коду, який можна вставити в середину законних даних.

Отже, якщо хакер може знайти програму, яка (a) має помилку переповнення стека, яка (б) може використовуватись через мережу, і (c) має пару 100 байтів, запасних у своєму буфері, то ваш комп'ютер працює на pwned. На щастя, знання про помилки із переповненням стеків зараз є загальновідомим, але вони все ще спливають. 5 років тому і довше це було набагато частішою проблемою.

Повертаючись до свого початкового запитання, вам слід уникати відкритих портів, щоб уникнути випадків, коли з програмою може бути помилка. Тепер у вас є друга причина: віддалений оболонку, яку хакер використовував би, - це ще один відкритий порт. Якщо у вас є брандмауер, який блокує все, крім того, що ви спеціально дозволили, ви також заблокували цю віддалену оболонку (хоча хакер все-таки зможе робити інші неприємні речі на вашому комп’ютері, тому не варто поступатися!)


2
IIRC, Дональд Кнут (?) Щойно закінчив математично, довівши, що одна з менших програм, яку він написав, була
відсутньою

7
  • Відкритий порт: Коли хтось запитує, комп’ютер відповідає, що на цьому порту є послуга прослуховування. Це означає, що все, що потрапить на цей порт, буде оброблено програмою (службою), що працює на цьому комп'ютері.
  • Закритий порт: Коли хтось запитує, комп'ютер відповідає, що на цьому порту немає служб, які слухають. Аксер знатиме, що за адресою відповідає комп’ютер.
  • Стелс-порт: Коли хто запитає, він не отримує відповіді. Сенс у тому, щоб приховати, чи є комп'ютер за адресою взагалі. Однак це може бути не дуже ефективно, як Джоші вважає в коментарях.

Якщо у вас відкритий порт, ви в безпеці за умови, що програма, що обробляє вхідні матеріали, не має доступних подвигів. Але подвиги знаходять весь час, і добре знати, що існує безліч сканів портів, які подорожують по мережі, шукаючи цілі.

Закриті порти все ще реагують на akser, тому можливий зловмисник знає продовжити перевірку інших портів. Знову ж таки, саме таким чином Інтернет є специфічним для роботи. У той час як порти-схованки намагаються не дати потенційному зловмиснику ніякої інформації, теоретично вони порушують специфікацію.

З точки зору безпеки, будь-який відкритий порт - це величезна зенітна дірка, оскільки код використовується для обробки іноземних даних. Що брандмауер (або NAT-роутер) робить, це переконайтеся, що на ваш комп’ютер не потрапляє вхідний трафік, навіть якщо в системі є кілька відкритих портів. Таким чином вони ефективно закривають усі порти.


1
Ваше визначення "порту стелс" - це бажане обміркування. Насправді зловмисник знає, що є комп’ютер, якщо він не отримує жодної відповіді. Якщо на цій конкретній IP-адресі не було комп'ютера, попередній маршрутизатор надішле повідомлення про це. З "
портовими стелсами

@joschi: Ну, це поняття, яке я бачив в Інтернеті, тому я думаю, що це добре визначити. Хоча ти гарно робиш. Я відредагував відповідь, щоб відобразити ваш коментар. Принаймні, це робить цільовий IP схожий на те, що він знаходиться за NAT маршрутизатором. Я ніколи не був прихильником цієї концепції: Якщо у вас є відкриті порти, вам слід переконатися, що вони працюють на безпечній службі. І якщо у вас немає відкритих портів, немає жодної проблеми сказати мережі, що ви існуєте. Неприхованість пахне моїм захистом.
Іларі Каясте

joschi: не всі маршрутизатори так роблять. багато маршрутизатори просто сліпо пересилають IP-адреси там, де немає системи. Тайм-аут спроб підключення просто через те, що клієнту нудно намагатися зробити тристоронній хід.
benc

6

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


3

Якщо припустити, що у вас немає комп’ютера на вірусі чи іншій програмі, яка слухає порт, який насправді може щось робити, чому це важливо, якщо порт відкритий? Якщо якась шкідлива людина починає надсилати пакети до порту, але нічого не існує, щоб отримати дані і зробити щось із цим, чому це важливо?

Припущення є матір'ю всіх споживачів :)

швидше безпечно, ніж шкода ... ось вам приємно прочитати на makeuseof.com:

Пояснена технологія: відкриті порти маршрутизаторів та їх наслідки для безпеки


гарне, коротке прочитання.
DaveParillo

1

Я не експортую безпеку, але я провів невелике дослідження ... "Відкритий" порт - це порт, який налаштований на прийняття вхідного TCP-з'єднання.

Якщо у вас є програми, які прослуховують лише порти 9, 21 і 80, і ваш брандмауер блокує доступ до цих трьох портів, у вас технічно немає відкритих портів. Наприклад, порт 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
Чи не утеплюються ваші двері та вікна, якщо вони лише закриті? Чи справді додатковий болт забезпечує набагато більше ізоляції.
Дентрасі

Хороший момент, але варто зазначити, що не кожен замикає свої двері та вікна вдома. Це може бути "Не кожен хоче захистити своє майно" або "Не всі люблять жити в культурі страху", залежно від вашої точки зору.
Іларі Каясте

-2

Скажімо, що відкриті порти схожі на відкрите вікно та відкриту двері, але коли у ваших вікнах відкритий грабіжник чи щур, а павук може потрапити у #please, скажіть мені, чи я німий чи асинін в Інтернеті є відкритий порт, я думаю, також закритий порт - це закриті вікна, без нього ми не можемо підключитися чи переглядати, я думаю, як HTTP і SSH або FTP без нього ми не можемо підключитися, тому що це клієнт, це просто TCP Connection

Я не експерт з безпеки


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