comando netstat
TRANSCRIPT
1. Netstat redes y seguridad
Bien quizas a muchos como a mi nos preguntamos para que sirve el comando netstat y como y
para que son las extenciones que vienen con el mismo. Pero nos vemos en la necesidad de dar
algunas definiciones recomiendo leer todo el post, para entender de que se trata.
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.
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.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
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:
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).
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
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.
2.Utilizando el comando Netstat para detectar malware Comando netstat: Este comando permite visualizar las conexiones establecidas por el equipo en un determinado momento, para ejecutarlo debemos ingresar al Símbolo del sistema (Inicio/Ejecutar/cmd) y escribir el nombre del comando. Si escribimos netstat /? (ayuda) podremos ver todas sus opciones y una descripción de las mismas, en particular me voy a centrar en una de ellas que es muy sencilla de utilizar y comprender.
Una de las sentencias que se pueden utilizar con netstat es la -o (netstat -o), esta permite -como la ayuda lo indica- identificar los ID de procesos asociados a cada conexión. Este ID es un número también conocido como PID que se puede observar en la lista de procesos del Administrador de tareas (Ctrl+Shit+Esc). Por defecto el PID no se muestra, pero lo podemos habilitar si en la pestaña "Procesos" accedemos al menú "Ver/Seleccionar Columnas" y luego marcamos la opción "Identificador de procesos (PID)":
Volviendo al comando netstat, si ejecutamos un netstat -o se desplegará la lista de programas que están conectados a la red y su PID correspondiente. De esta forma, por ejemplo, en la siguiente imagen se puede apreciar una conexión identificada con el PID 3108. Observando la lista de procesos del Administrador de tareas puedo fácilmente verificar a qué programa pertenece, en este caso comprobé que se trataba del programa firefox.exe:
Otra forma de chequear el PID del programa es ejecutar dentro de la misma ventana, el comando tasklist. Este desplegará la lista completa de procesos en ejecución y su PID correspondiente:
Otro ejemplo: con el comando netstat -o veo en acción al PID 2960 y gracias al tasklist puedo determinar que pertenece al archivo "ekrn..exe", además dicho ya de paso, observo que está haciendo un uso interesante de la memoria del sistema:
Buscando algo de información en Google o sitios con información sobre procesos, veo que el proceso corresponde al antivirus Nod32 y por lo tanto su actividad es normal. Identificando el malware: Teniendo todo este proceso presente, ahora podremos detectar conexiones extrañas generadas por malwares o programas no deseados. Vale la pena utilizar el netstat de vez en cuando para verificar las conexiones del PC, y sobre todo cuando notemos comportamientos extraños o una conexión algo lenta, producto tal vez de malwares o programas no deseados que consuman el ancho de banda. Cabe mencionar que el comando netstat también cumple muchas otras funciones y también se puede utilizar para controlar puertos y ver hacia dónde se comunican. Netstat funciona tanto en Windows XP como en Vista, para este último sistema operativo veremos en una próxima entrada una herramienta de monitoreo del propio sistema que facilita toda esta tarea de identificación de programas conectados.