|
Este es un artículo que quería hacer desde hace algún
tiempo. Con él pretendo definir unos conceptos muy básicos sobre los puertos
dentro de las comunicaciones de red, aclarar por qué puede ser peligroso
tenerlos abiertos, y naturalmente acercarnos a la función de los más
habituales.
¿QUÉ ES UN PUERTO?
Siempre que alguien me pide que explique qué es un puerto lo
hago con un símil: imaginemos una casa; en una casa tenemos puertas y ventanas
que solemos tener cerradas si no queremos que se nos cuelen ladrones. Ahora,
imaginemos que en los bajos de nuestra casa tenemos una tienda. Necesitaremos,
entonces, tener la puerta de la
calle abierta, para que entre gente y compre. Pues en informática, los puertos
serían las ventanas y puertas nuestra casa, es decir, servicios que ofrecemos y que normalmente utilizamos para
comunicarnos, bien internamente (localhost) o bien externamente. En informática
localhost, se refiere habitualmente a
nuestra propia maquina o sistema, es decir, y aunque suene paradójico, localhost se refiere a la red formado
por un solo equipo, el nuestro y es que el
Sistema Operativo suele crear puertos que habilitan la comunicación de procesos
entre sí exclusivos para nuestro propio equipo La diferencia entre nuestra casa y nuestro ordenador, es que
en este último tenemos 65535 puertos. Los 1024 primeros son los que denominamos
puertos conocidos, es decir del puerto
número 1 al 1023. Los que van a partir del 1024 hasta el 49152 son denominados puertos registrados, y a
partir del puerto número 49153 hasta el 65535 puertos dinámicos o para uso privado, es decir
sin ningún propósito preestablecido, toda esta catalogación de puertos está
hecha acorde a la IANA Internet
Assigned Numbers Authority o Agencia de Asignación de Números de Internet.
Alguien interesado en robar en nuestra casa lo primero que
revisará son posibles entradas a través de puntos que estén abiertos. En un PC
es lo mismo: lo primero que hará un intruso es revisar qué puertos tenemos y qué
hay detrás de esos puertos.
En nuestro anterior ejemplo, teníamos una tienda abierta en
los bajos de nuestra casa; un posible ladrón, se fijaría en las medidas de
seguridad que tiene esa tienda y si encuentra alguna debilidad la explotará
para intentar colarse y robarnos. En nuestro PC detrás de los puertos abiertos,
siempre hay “tiendas” que solemos denominar servicios,
y lo que haría nuestro posible intruso es lo mismo que en una casa: fijarse en los
puntos débiles de ese servicio para intentar explotarlos y colarse en nuestro
PC.
En todo Sistema Operativo se abren unos puertos por defecto
que el sistema utiliza para intercomunicar los diferentes procesos entre sí, es
decir, que si no utilizamos medidas tendremos las puertas de nuestra casa
abiertas de par en par. ¿Y que hacemos para cerrar esos puertos? Es obvio que
en nuestra casa las cerramos con llave y solucionado. Pues en un PC lo mismo,
utilizamos un firewall o cortafuegos que impide que los diferentes procesos que
están a la espera de establecer alguna conexión en esos puertos se comuniquen
con procesos externos a nuestra máquina.
2. EL COMANDO NETSTAT
En este punto cabe preguntarse cómo saber los puertos que tienen
algún proceso escuchando en nuestra
máquina y si podemos determinar los servicios que se ejecutan detrás de ellos.
Pues bien, todos los Sistemas Operativos, o al menos los que yo conozco,
proveen un método para averiguar todo esto, y es el comando “netstat”.
Este comando quizás sea desconocido para muchos pero es una
interesante herramienta para poder determinar nuestras conexiones tanto
internas (localhost) como externas.
Para trabajar con esta herramienta utilizaremos, nuestro
querido “símbolo de sistema”, es decir, iremos a inicio/ejecutar y teclearemos
la orden cmd.exe, esto nos abrirá una
pantalla negra, en nuestro WinXP
El comando netstat dispone de una completa ayuda que
podremos obtener tecleando la orden netstat
/?. Esto nos proporcionará un listado con todos los parámetros o
modificadores disponibles con el que podremos lanzar la herramienta netstat,
Algunos de los modificadores más populares para trabajar con
este comando en Sistemas Operativos con núcleo NT son:
a – que nos va a mostrar todas las conexiones que tenemos a
nuestros diferentes puertos.
n – si omitimos este parámetro por defecto, netstat nos
ofrecerá el resultado de traducir la dirección remota y el puerto de números a
nombres, si lo incluimos nos mostrará esta misma información pero en formato
númerico.
o – muestra el identificador númerico del proceso que esta ejecutándose
en este puerto.
El parámetro “o” la verdad es que ha perdido algo de
popularidad con la introducción del SP2 de Windows XP, ya que este muestra los
procesos que se están ejecutando detrás de un determinado puerto de forma mucho
más cómoda. Los parámetros añadidos por este Service Pack son:
b – que muestra el ejecutable que está escuchando en el
puerto en cuestión.
v – que muestra todos los componentes que están implicados
con el ejecutable que escucha en el puerto, es decir, que suele ser utilizado
con el anterior parámetro.
Los modificadores de Netstat no suelen requerir ser escritos
en un orden preciso, así que podemos teclearlos como más cómodo nos sean. La
siguiente orden combinaría los parámetros A, O y N. Es decir nos mostraría todas las conexiones en formato numérico y agregaría el número de
ID del proceso que está ejecutándose en ese puerto,
Netstat –noa
Pero en realidad, podemos combinar las letras de los
modificadores como mejor nos venga en gana y su función será la misma, es decir
que todas estas órdenes son equivalentes:
Netstat –ano (yo lo suelo teclear de esta forma, puesto que
lo recuerdo mejor)
Nestat – ona
Nestat – oan
En fin, que podemos permutar las letras de los modificadores
a nuestro gusto. Ahora toca interpretar los resultados de netstat, una sálida
típica de este comando introduciendo los parámetro “-ano” sería
Proto Dirección local Dirección remota Estado P TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1296 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:18350 0.0.0.0:0 LISTENING 596 TCP 127.0.0.1:1025 127.0.0.1:1026 ESTABLISHED 472 TCP 127.0.0.1:1026 127.0.0.1:1025 ESTABLISHED 472 TCP 127.0.0.1:1032 127.0.0.1:18350 ESTABLISHED 400 TCP 127.0.0.1:1038 0.0.0.0:0 LISTENING 136 TCP 127.0.0.1:1045 127.0.0.1:1046 ESTABLISHED 1864 TCP 127.0.0.1:1046 127.0.0.1:1045 ESTABLISHED 1864 TCP 127.0.0.1:18350 127.0.0.1:1032 ESTABLISHED 596 TCP 192.168.1.100:139 0.0.0.0:0 LISTENING 4 TCP 192.168.1.100:1047 80.32.98.223:143 ESTABLISHED 1864 TCP 192.168.1.100:1056 65.17.220.40:143 ESTABLISHED 1864 TCP 192.168.1.100:1288 80.32.98.223:143 ESTABLISHED 1864 TCP 192.168.1.100:1893 62.57.8.8:119 ESTABLISHED 1864 TCP 192.168.1.100:1894 62.57.8.8:119 CLOSE_WAIT 1864 TCP 192.168.1.100:1922 62.57.8.8:119 ESTABLISHED 1864 TCP 192.168.1.100:1924 62.57.8.8:119 CLOSE_WAIT 1864 TCP 192.168.1.100:1943 212.34.136.130:80 TIME_WAIT 0 TCP 192.168.1.100:1944 212.34.136.130:80 TIME_WAIT 0 UDP 0.0.0.0:445 *:* 4 UDP 0.0.0.0:500 *:* 1060 UDP 0.0.0.0:1029 *:* 1612 UDP 0.0.0.0:1030 *:* 1612 UDP 0.0.0.0:1345 *:* 1612 UDP 0.0.0.0:4500 *:* 1060 UDP 127.0.0.1:123 *:* 1440 UDP 127.0.0.1:1900 *:* 1684 UDP 192.168.1.100:123 *:* 1440 UDP 192.168.1.100:137 *:* 4 UDP 192.168.1.100:138 *:* 4 UDP 192.168.1.100:1900 *:* 1684
2.1. Análisis de la salida del comando netstat
Analicemos la salida del comando que como vemos nos ofrece
información en varias columnas: en la columna de más a la izquierda vemos la
columna Proto, es decir el protocolo
establecido para establecer la comunicación. Aquí fundamentalmente veremos tres
tipos de protocolos: ICMP, UDP y TCP, y ¿esto qué es?, nos preguntaremos. Pues
bien, siguiendo con el símil de nuestra tienda, imaginemos que tenemos una
clientela que es internacional y habla diferentes idiomas. Si tratamos de
ofrecer un buen servicio, deberemos hablarles preferiblemente en su idioma o
bien en una lengua que ambos dominemos, por ejemplo el inglés. Los protocolos
indican lo mismo y nos sirven para comunicar procesos entre si, pero de
diferente manera.
UDP, Protocolo de datagrama de usuario (UDP, User Datagram
Protocol) es un estándar y está definido en la RFC 768. UDP nos sirve para
comunicar procesos entre sí de una forma rápida ya que no verifica la entrega.
Imaginemos que mandamos a alguien a por el periódico, pero después no
verificamos si lo ha comprado; UDP hace lo mismo: manda paquetes pero no
verifica su correcta recepción. Este protocolo consta de los mismos 65535
puertos que antes hemos explicados. Si tenemos curiosidad en conocer los
puertos utilizados por este protocolo podemos consultar el siguiente documento
en el que vienen todos definidos.
http://www.isi.edu/in-notes/iana/assignments/port-numbers
TCP, Este protocolo, a diferencia del anterior, sí que verifica la
correcta entrega. Es como si llamáramos por teléfono a alguien: no podremos
hablar nunca con nuestro interlocutor si éste no nos coge el telefono. El
protocolo TCP permite entrega de paquetes más largos que UDP y es también más
lento, además con UDP no se establece comunicación entre host. Esto último es
similar a cuando enviamos una carta: no hace falta verificar si la persona a la
que remitimos nuestro correo está disponible en ese momento o no, simplemente
la mandamos.
Por último tenemos el protocolo
ICMP. Protocolo de control de mensajes Internet (ICMP, Internet Control
Message Protocol), establece rutinas que permiten verificar el
estado de un host. A través del popular comando “ping” utilizamos este protocolo. Siguiendo con los símiles,
sería como preguntarle a alguien por la salud. ICMP, permite preguntar por la
salud de un host o PC y saber su estado
Dirección Local, Aquí nos aparece el número de IP local que establece una
comunicación de salida. Esto es lo mismo que los móviles: todos los móviles
precisan tener un número asignado que es utilizado para establecer
comunicaciones con él. Cuando nosotros llamamos a alguien tenemos comunicaciones
salientes, y si nos llaman tenemos comunicaciones entrantes.
En la columna dirección local aparecen, por tanto, nuestro número
identificativo. En la salida que he puesto de ejemplo, vemos diferentes números
o IPs que definen diferentes procesos de comunicación. Por un lado tenemos la IP número 127.0.0.1. Esta IP se
utiliza para que nuestro ordenador se comunique consigo mismo, es decir son
comunicaciones internas o lo que hemos dado antes en denominar localhost. También
vemos una dirección IP, que nos puede resultar algo extraña, pero que es
utilizada en cualquier Sistema Operativo, ya que la IP 0.0.0.0 es la dirección de
encaminamiento por defecto. Cualquier comunicación establecida hacia una red no
conocida pasará por esta IP. En este punto sólo nos interesa saber que esta
dirección corresponde también a nuestro equipo local y que es normal que
aparezca en ese estado de listening y por norma general sin ninguna conexión
establecida.
La siguiente dirección IP que observamos es la
192.168.1.100, esta también es una dirección IP reservada para uso público, y
es utilizada normalmente en
comunicaciones entre equipos de nuestra propia RED. Para ser exactos esa es la IP de la tarjeta de red de mi
equipo que tiene salida a Internet y que está conectada con mi router, si tuviéramos
salida directa a Internet en lugar de ver ese número de IP veríamos la dirección
IP asignada por nuestro proveedor de Internet para que la gente sepa dónde
estamos y poder establecer comunicaciones con nosotros. Siguiendo con el
ejemplo del móvil, lo que veríamos ahí sería nuestro número de móvil.
La direcciones IP reservadas para uso público y utilizadas
para establecer comunicaciones dentro de nuestra red, pueden pertenecer a tres rangos:
A 10.0.0.0 hasta 10.255.255.255
B 172.16.0.0 hasta 172.31.0.0
C 192.168.0.0 hasta 192.168.255.0
La columna que hay a continuación de la que ya hemos
comentado es la de dirección remota. En esta columna vemos la dirección IP remota a la que estamos
conectados, y vemos también que aparece la direccion correspondiente a
localhost, es decir a nuestro propio equipo. Y también es normal, puesto que
como he dicho antes nuestro Sistema Operativo utiliza esa IP para establecer
comunicaciones entre procesos internos. Digamos que nuestro ordenador está
hablando consigo mismo.
Las comunicaciones que normalmente son interesantes son las
que tengamos establecidas entre la tarjeta de red que esté configurada como
salida a Internet, y las direcciones IP en la columna de “direcciones remotas”
que no se correspondan con ninguna de las IP’s reservadas bien para uso público
o bien para uso privado y que antes hemos listado.
La columna que tenemos a continuación nos indica en que
estado se encuentra la comunicación entre procesos, y veremos diferentes tipos
(en nuestro ejemplo no salen todos):
LISTENING, o
escuchando, significa que detrás de ese puerto hay un proceso esperando que
alguien hable con él, es decir, en disposición de aceptar comunicaciones.
ESTABLISHED, o establecidas, significa que el proceso que
está detrás de ese puerto ya está hablando con algo o alguien; la columna de
dirección remota nos indica con quién habla.
SYN_SEND, indica una solicitud de comunicación por nuestra
parte, es decir, es como si estuviéramos llamando a alguien y esperando a que
nos respondiera.
SYN_RECEIVED, indica que el servidor remoto ha aceptado nuestra solicitud de
comunicación. Al que estábamos llamando por móvil ya nos ha descolgado, pero
todavía no nos ha dicho nada.
FIN_WAIT_1, indica que hemos solicitado terminar la comunicación. A nuestro amigo el
del móvil, le hemos dicho que vamos a colgar.
FIN_WAIT_2, no es muy habitual ver este estado en nuestra comunicaciones, entramos en él cuando hemos solicitado terminar la comunicación pero el servidor no se da por enterado.
TIMED_WAIT, estamos esperando a que el
servidor acepte nuestra petición de cerrar comunicación. Nuestro amigo el del móvil,
nos ha dicho que nos esperemos un momento antes de colgar.
CLOSE_WAIT, indica una solicitud de cierre pasiva entre cliente y servidor. Siguiendo con nuestro amigo el del móvil, digamos que aceptamos esperar hasta terminar
la comunicación y le decimos que la cierre él cuando quiera, que nosotros
dejamos el móvil encendido y nos vamos a hacer otras cosas.
LAST_ACK, aquí es
nuestro amigo el del
móvil el que nos dice que nos cuelga, es decir es el servidor el que nos dice
que va a cerrar la comunicación.
CLOSED, comunicación entre cliente y servidor cerrada. ¡Por fin hemos
conseguido colgar el móvil!
Las conexiones más interesantes son las LISTENING o
ESTABLISHED.
Hay que recalcar en este punto que para que un puerto tenga
posibilidad de escuchar o establecer conexiones, éste deberá tener un servicio
corriendo detrás ya que de otro modo, ante posibles escaneos, el puerto se
mostrará como cerrado. Si hubiera un servicio detrás escuchando se mostraría
como abierto y finalmente si nuestro firewall corta las comunicaciones entre
ese puerto y el exterior se mostrará como bloqueado.
Podéis haceros vosotros mismos vuestros propios escaneos
para saber cómo ven los demás los puertos que tenéis, ya que en la red de
redes, hay muchas herramientas online que hacen este tipo de escaneos. Como siempre,
os recomendamos que echéis un vistazo a nuestra sección de enlaces. O sea, que los hackers lo que buscan son vulnerabilidades en
los procesos que escuchan en esos
puertos. Si no hubiera procesos o servicios escuchando en esos puertos la
presencia de un firewall no sería necesaria ya que no habría nada que explotar. Es como si intentaramos robar una tienda que todavía no está abierta al público
y que no tiene mercancía dentro, ni dinero, ni mobiliario, es decir, que sólo
estuviera el local; si fuera así, no habría nada que robar. Pero en la realidad
esto nunca es así, ya que por defecto siempre tendremos determinados puertos
escuchando al exterior de no utilizar un firewall. Los principales y los que
han sido objeto de más antención por sus vulnerabilidades, por parte de los
hackers son lo siguientes:
3. LOS PUERTOS MÁS HABITUALES
Puerto 135 – correspondiente al Proceso RPC Llamada a
Procedimiento Remoto, o Remote Procedure Call. En realidad este proceso existe
en otros sistemas operativos, y su función siempre suele ser la misma:
habilitar conexiones entre Programas y
Conexiones remotas sin tener que entender un protocolo de comunicación entre
redes . En Windows XP, este puerto es
imposible cerrarlo si no es mediante la presencia de un firewall que bloquee las
comunicaciones a ese puerto ya que es un servicio esencial en el sistema,
siendo imposible trabajar con Windows con él deshabilitado.
Puerto 445 - correspondiente al proceso LSASS, y que también
es esencial para el correcto funcionamiento de nuestro Windows XP. LSASS (Local
Security Authority Subsystem Service) está encargado de gestionar todos los
procesos de autentificación en nuestro sistema y la seguridad local.
Ambos servicios han tenido vulnerabilidades que han sido
explotadas con éxito por infinidad de virus, entre ellos el Blaster, para el
servicio RPC de Windows con núcleo NT o el Sasser para el servicio Lsass.
Ninguno de estos virus podría haber llevado a cabo su labor de haber estado ejecutándose
un firewall que bloquease las comunicaciones externas con dichos procesos. De
ahí la importancia de tener siempre un cortafuegos instalado, en ejecución y
correctamente configurado en nuestro sistema operativo.
Hay otros puertos muy populares y que es importantísimo no
tener nunca abiertos, entre ellos, los
puertos 137, 138 y 139, correspondientes a protocolos que utilizan Netbios o el ya desfasado Netbeui que son protocolos de
comunicación utilizados para comunicarse en redes de trabajo. La importancia de
ternerlos cerrados, es que estos puertos son los que proporcionan información
de los recursos compartidos en un nuestra red. Imaginemos que tenemos
compartido todo el disco duro “C”. De tener abiertos estos puertos al exterior
estariamos compartiendo todo nuestro disco duro con el resto del mundo, aparte
de otra información, que es esencial tener a buen recaudo.
De todas formas, Netbios está en proceso de desaparición y
Netbeui totalmente en desuso, ya que a partir de WinXP se introduce un nuevo
protocolo de comunicaciones. La asignación directa de host a través del
protocolo SMB (Server Message Block) que utiliza también el puerto 445, y que como hemos visto antes, es importantísimo tenerlo cerrado al
exterior. En Sistemas Operativos WinXP y posteriores cobra mucha importancia utilizar
este protocolo en lugar de Netbios ya
que simplifica el transporte de red al no utilizar servidores de traducción de
nombres ya desfasados como Wins, Pero todo esto es tema aparte… tenéis más
información sobre este tema en el siguiente artículo de la KB:
Hay multitud de puertos más, que varían dependiendo de qué
servicios tengamos habilitados. Esencialmente, los puertos más populares en
Internet y su utilidad son los siguientes:
25 - protocolo smtp, permite el envio de correo siempre y
cuando tengamos un
servidor de correo instalado MTA o Mail Transfer Agent. Este puerto es el que
utilizamos para enviar correo, y los que utilizan también los servidores de
correos para comunicarse entre sí.
110, 143 - protocolos pop3 e imap3, utilizados para la recepción y reparto
del correo en nuestro MTA. Viene a ser algo parecido
a la oficina de correos.
80 - HTTP: Utilizado por los servidores de páginas web, habitualmente cuando
navegamos nuestro navegador se conecta a este puerto, por lo que es preciso que
cualquier servidor web lo tenga abierto si pretende servir páginas. De cara al
cliente se utiliza un puerto aleatorio por encima del 1024, por lo que no
debemos abrir ningún puerto para navegar, únicamente debemos tener la precaución
de no restringir las comunicaciones salientes a nuestro navegador.
443 - HTTPS, lo mismo que el anterior pero con comunicaciones encriptadas
utilizadas habitualmente para compras online o en página bancarias.
21. FTP. para subir y bajar archivos (básicamente).
23 - Telnet, muy vulnerable, permite comunicaciones mediante
texto en claro
entre ordenadores, es decir, que todo lo que viaja en esa comunicación puede
ser interceptado e interpretado por una tercera persona ya que todo lo que
escribamos, (contraseñas, ordenes, etc.) se transmite tal cual por la red.
8080 - para servidor proxy.
Hay muchísimos más, pero es casí imposible hacer una lista
exhaustiva. Simplemente recalcar que no necesitamos ningún puerto abierto si no
tenemos que ofrecer ningún servicio al exterior ya que nuestro sistema
operativo elige puertos aleatorios por encima del 1024 (puertos conocidos) para
establecer comunicaciones salientes con otros servidores. En caso de que
queramos tener comunicaciones entrantes a un determinado servicio, por
supuesto, tendríamos que habilitarle el puerto correspondiente.
Por ejemplo, en caso de un servidor de correo precisaríamos
abrir, los puertos 25, 110 y 143. Y en caso de un servidor Web, el puerto 80,
que es al que se conecta cualquier navegado por defecto cuando establecemos
comunicaciones.
Si tenéis curiosidad en indagar más nombres de puertos tenéis
un listado mucho más exhaustivo en nuestra sección de enlaces.
Hasta aquí este artículo preliminar con el que espero haber explicado algo sobre redes, protocolos, comunicaciones y redes. Por supuesto, el tema da muchisimo más de sí y espero seguir ahondando en el tema.
Trackback(0)
 |
espero estudiarlo más en detalle, ya que siempre uno tiene la sensación de que en la casa está muy expuesto ante intentos externos de atacar nuesro PC