¿Por qué es malo tener puertos abiertos?

36

Aquí hay algo que siempre me ha desconcertado. ¿Por qué es malo tener puertos abiertos en su computadora? Suponiendo que no tiene un virus en su computadora o algún otro programa que escuche un puerto que realmente puede hacer algo, ¿por qué importa si un puerto está abierto? Si alguna persona maliciosa comienza a enviar paquetes a un puerto, pero no hay nada para recibir los datos y hacer algo con ellos, ¿por qué es importante? Una computadora no solo ejecuta arbitrariamente los datos que recibe. Entiendo que inundar una computadora con paquetes podría causar que se bloquee porque simplemente no puede manejar la cantidad de datos, pero solo estoy considerando problemas de seguridad que realmente cambian los archivos en la computadora.

Actualizar

Gracias por las respuestas. Ahora entiendo que un puerto abierto en realidad significa que hay un programa que puede explotarse escuchando en ese puerto. Pero, ¿por qué es tan difícil escribir software que no pueda ser explotado? Para hacer un daño real a una computadora, un programa no debería permitir que se carguen uno o más archivos, y luego uno de esos archivos debería ejecutarse. Parece que sería increíblemente difícil permitirlo accidentalmente.

aireq
fuente

Respuestas:

36

Un puerto no está abierto si algo no está escuchando una conexión en él.

La razón por la cual es una mala forma tener todos los puertos abiertos en todas partes es que expone los servicios que están escuchando en esos puertos a las vulnerabilidades. Es por eso que existen firewalls, para limitar lo que está permitido conectarse a ciertos puertos, para reducir el área de superficie expuesta por los servicios.


EDITAR

Para responder a su pregunta sobre por qué las personas no pueden simplemente escribir software que no sea explotable:

Esto es bastante fácil para programas simples, pero muchos programas que requieren un socket son complejos. Como tales, tienen muchos componentes, muchos de los cuales ni siquiera fueron escritos por el desarrollador (bibliotecas incluidas). No puede confiar en otras personas para mantener su red segura cuando existen métodos de refuerzo que puede usar usted mismo, como los firewalls.

La ejecución de código arbitrario / remoto es un gran riesgo, como ha señalado. Desafortunadamente, los desbordamientos del búfer y otras fallas de seguridad que lo permiten son comunes. Mire cualquier actualización de seguridad de Microsoft y apuesto a que parchea la ejecución remota de código o la elevación de privilegios, y MS es una gran empresa con cientos de desarrolladores y miles de millones de dólares.

MDMarra
fuente
44
Solo agregue: si por ejemplo sabe que un servicio tiene un error que puede usarse para infiltrarse en el código o lo que sea y realmente ve que este servicio se está ejecutando, esta es una invitación abierta;)
Felix
9

Con respecto a la actualización que escribió:

Gracias por las respuestas. Ahora entiendo que un puerto abierto en realidad significa que hay un programa que puede explotarse escuchando en ese puerto. Pero, ¿por qué es tan difícil escribir software que no pueda ser explotado? Para hacer un daño real a una computadora, un programa no debería permitir que se carguen uno o más archivos, y luego uno de esos archivos debería ejecutarse. Parece que sería increíblemente difícil permitirlo accidentalmente.

¡Es muy difícil escribir software que no pueda ser explotado!

He leído el libro Building Secure Software y una de las cosas que discutió fue explotar los desbordamientos de la pila. Había dos hechos muy aterradores allí:

  • Es muy fácil hacer que un programa tenga un error de desbordamiento de pila explotable, especialmente cuando el programa está escrito en C. En el lenguaje de programación C, muchas funciones no son seguras por defecto y el programador necesita saber para evitar las funciones vulnerables. , o tiene que tomar medidas especiales para estar seguro.
  • El exploit que un hacker necesita usar es corto, muy corto. Era menos de media página de lenguaje ensamblador, que se traduce en aproximadamente 100 bytes (adivinar) de código de máquina. Este código de explotación es suficiente para dar acceso al shell de hacker (símbolo del sistema) a su máquina. No se requiere carga y ejecución de archivos grandes, solo un pequeño fragmento de código que se puede insertar en medio de datos legítimos.

Entonces, si un pirata informático puede encontrar un programa que (a) tenga un error de desbordamiento de pila que sea (b) explotable en una red y (c) tenga un par de 100 bytes de repuesto en su búfer, entonces su computadora está encriptada. Afortunadamente, el conocimiento sobre los errores de desbordamiento de la pila es bastante común ahora, pero aún aparecen. Hace 5 años y más, este era un problema mucho más frecuente.

Volviendo a su pregunta original, debe evitar los puertos abiertos para evitar cualquier accidente con un error explotable en un programa. Ahora tiene una segunda razón: el shell remoto que usaría un hacker es otro puerto abierto. Si tiene un firewall que bloquea todo, excepto que lo ha permitido específicamente, también bloquearía ese shell remoto (aunque un hacker aún podría hacer otras cosas desagradables en su computadora, ¡así que no se complazca!)

Richard Downer
fuente
2
IIRC, Donald Knuth (?) Acaba de terminar matemáticamente demostrando que uno de los programas más pequeños que escribió estaba libre de errores, y tomó
muchos
7
  • Puerto abierto: cuando alguien pregunta, la computadora responde que hay un servicio escuchando en este puerto. Esto significa que cualquier cosa que llegue a este puerto será procesada por un programa (un servicio) que se ejecuta en esa computadora.
  • Puerto cerrado: cuando alguien pregunta, la computadora responde que no hay servicios escuchando en ese puerto. El akser sabrá que hay una computadora respondiendo en la dirección.
  • Puerto oculto: cuando alguien pregunta, no reciben respuesta. El punto es esconderse si hay una computadora en la dirección. Puede que no sea muy eficaz, aunque, como Joschi poits en los comentarios.

Si tiene un puerto abierto, está seguro siempre que el programa que procesa las cosas entrantes no tenga vulnerabilidades disponibles. Pero los exploits se encuentran todo el tiempo, y es bueno saber que hay muchos escaneos de puertos que viajan por la red, buscando objetivos.

Los puertos cerrados aún responden al akser, por lo que el posible atacante sabe proceder a verificar otros puertos. Por otra parte, así es como Internet está específico para funcionar. Si bien los puertos furtivos intentan no proporcionar al atacante potencial ninguna información, en teoría rompen la especificación.

Desde el punto de vista de la seguridad, cualquier puerto abierto es un gran agujero, ya que el código se está utilizando para procesar datos extranjeros. Lo que hace un firewall (o un enrutador NAT) es asegurarse de que no llegue tráfico entrante a su computadora, incluso si el sistema tiene algunos puertos abiertos. De esta manera, cierran efectivamente todos los puertos.

Ilari Kajaste
fuente
1
Su definición de un "puerto sigiloso" es una ilusión. En realidad, un atacante sabe que hay una computadora si no recibe ninguna respuesta. Si no hubiera una computadora en esa dirección IP en particular, el enrutador anterior enviaría un mensaje al respecto. Con puertos "stealth" que no sucede ...
Joschi
@joschi: Bueno, es un concepto que he visto en Internet, así que creo que es bueno definirlo. Sin embargo, haces un buen punto. Edité la respuesta para reflejar su comentario. Supongo que al menos hace que la IP de destino parezca estar detrás de un enrutador NAT. Nunca he sido fanático del concepto: si tiene puertos abiertos, debe asegurarse de que estén ejecutando un servicio seguro. Y si no tiene puertos abiertos, no hay problema para decirle a la red que existe. El sigilo me huele a bombo publicitario de seguridad.
Ilari Kajaste
joschi: no todos los enrutadores hacen eso. muchos enrutadores simplemente reenvían ciegamente a direcciones IP donde no hay sistema. los intentos de conexión exceden el tiempo de espera simplemente porque el cliente se aburre de intentar hacer un saludo de tres vías.
benc
6

En realidad, que yo sepa, un puerto abierto significa que un programa lo está escuchando. Entonces, hay algún tipo de servicio que procesa los datos.

Felix
fuente
3

Suponiendo que no tiene un virus en su computadora o algún otro programa que escuche un puerto que realmente puede hacer algo, ¿por qué importa si un puerto está abierto? Si alguna persona maliciosa comienza a enviar paquetes a un puerto, pero no hay nada para recibir los datos y hacer algo con ellos, ¿por qué es importante?

La suposición es la madre de todos los efectos :)

más bien seguro que lo siento ... aquí hay una buena lectura para usted en makeuseof.com:

Tecnología explicada: puertos de enrutador abiertos y sus implicaciones de seguridad


fuente
Una buena lectura corta.
DaveParillo
1

No exporto seguridad, pero investigué un poco ... Un puerto "abierto" es un puerto configurado para aceptar una conexión TCP entrante.

Si tiene aplicaciones que escuchan solo en los puertos 9, 21 y 80, y su firewall bloquea el acceso a esos tres puertos, técnicamente no tiene puertos abiertos. IOW, el puerto 25, por ejemplo, no está abierto porque nada lo escucha.

Para responder a su pregunta: La razón por la que es malo tener puertos abiertos en su computadora es porque estos puertos se pueden descubrir fácilmente, y una vez descubiertos estos puertos ahora son susceptibles a las vulnerabilidades de las aplicaciones de escucha.

Sin zapatos
fuente
Su definición de qué es un puerto es incorrecta. Un puerto no está limitado a TCP de ninguna manera.
MDMarra
1
Supongo que uno no debería creer TODO lo que leen en la 'red :) 5 de los 6 principales resultados de Google expresan explícitamente "TCP" en su definición. google.com/…
Shoeless
No, dicen TCP / IP. Gran diferencia. TCP / IP incluye UDP
MDMarra
1
ICMP no utiliza un puerto, es un protocolo de capa 3 que se incluye en el conjunto de protocolos IP.
MDMarra
1
La única razón por la que lo digo es porque es muy importante en referencia a los firewalls (de lo que se trata indirectamente). TCP tiene estado y, por lo tanto, se recuerdan las conexiones, donde UDP no. Muchas veces, esto significa que los puertos deben estar abiertos para el tráfico UDP de retorno que se inicia internamente donde no es necesario que ocurra para las conexiones TCP que se establecen internamente.
MDMarra
0

Por la misma razón que cierra y cierra sus puertas y ventanas en casa.

Steven A. Lowe
fuente
3
Cierro mis puertas y ventanas porque afuera hace frío. ¿Qué tiene que ver esta pregunta con el aislamiento?
quack quijote
2
¿Sus puertas y ventanas no aíslan si solo están cerradas? ¿El perno adicional realmente proporciona mucho más aislamiento?
Dentrasi
Buen punto, pero vale la pena señalar que no todos cierran sus puertas y ventanas en casa. Esto podría ser "No todos quieren proteger su propiedad" o "No a todos les gusta vivir en una cultura de miedo", según su punto de vista.
Ilari Kajaste
-2

Digamos que los puertos abiertos son como una ventana abierta y una puerta abierta, pero cuando sus ventanas están abiertas, un ladrón o una rata y una araña pueden entrar #por favor, dígame si soy tonto o tonto. en Internet hay un puerto abierto, supongo que también el puerto cerrado son ventanas cerradas sin él, no podemos conectarnos o navegar, supongo que al igual que HTTP y SSH o FTP sin él, no podemos conectarnos porque es un cliente, es solo conexión TCP

No soy un experto en seguridad

user210203
fuente
Se requieren puertos abiertos para ofrecer servicios. Solo uno de los miles de ejemplos posibles: Gmail usa un puerto abierto (443 para su sitio web usando HTTPS). Pero le pide que inicie sesión antes de mostrar cualquier cosa.
Arjan