Comandos de auditoría en Redes con Linux
Las siguientes herramientas representan los comandos de auditoría en redes con Linux. Los mismos, son fundamentales en entornos de pentesting y administración de redes. Por tal motivo, entraremos en detalle con cada uno viendo algunas aplicaciones y ejemplos.
Table of Contents
ToggleComando nmap
Este comando es usado para el escaneo de hosts y los servicios que estos estén ejecutando, como así también es una herramienta de diagnóstico por los administradores o técnicos de redes.
¿Cómo funciona este comando?
El método predeterminado que utiliza nmap para descubrir hosts es intentar establecer una conexión TCP SYN a 1000 de los puertos más comunes, así como una solicitud de eco icmp para determinar si un host está activo. Agregado a esto, realizará una búsqueda inversa de DNS en las direcciones identificadas, ya que a veces puede resultar ser información útil. Su función se desarrolla de la siguiente forma:
echo icmp ping TCP SYN al Puerto 443 ping TCP ACK al puerto 80 icmp timestamp
Opciones más frecuentes:
-s Para hacer un escaneo.
-P Escaneo ISMP ya que será un escaneo ping a toda la sub red.
-n Para evitar la resolución de nombres así será más rápido.
-v Modo verboso.
-p- Escanea los 65535 puertos del objetivo.
-V Muestra la versión de los servicios.
Estado de Puertos
ESTADO | DESCRIPCIÓN |
open | El puerto está atendiendo y puede recibir conexiones y/o paquetes. |
closed | No hay aplicaciones atendiendo. |
open|filtered | Está abierto o filtrado pero nmap no puede discernirlo. |
closed|filtered | Está cerrado o filtrado pero nmap no puede discernir. |
Opciones más usadas
Escaneo TCP:
Es el tipo de escaneo predeterminado TCP. Hace que el sistema operativo establezca una conexión usando la API Berkeley Sockets. Al requerir el 3-way-handshake hace el escaneo más largo y menos eficiente.
# nmap -sT 10.0.3.11,226
Escaneo UDP:
Este método envía un paquete vacío a cada Puerto de la red. Es más lento que TCP y menos eficiente al tratar de verificar si un puerto este cerrado. Por ejemplo:
# nmap –Su 192.168.0.101
Detectar puertos TCP de manera furtiva:
Este escaneo es mucho más rápido que el visto anterior ya que, permite diferenciar entre los distintos estados de un puerto y determina si un puerto está abierto cuando recibe como respuesta un segmento SYN/ACK o SYN, concluye que un puerto está cerrado si recibe un segmento RST.
# nmap 192.168.1.1-150 -p 22-443
Buscar Servicios y sus Versiones:
# nmap –sV 10.10.10.1
Desabilitar el descubrimiento de Host:
Este comando también nos permite saltear el método de descubrimiento de hosts, es decir, aplica resolución DNS.
# nmap –Pn –sS 192.168.0.1-254 –p22 -10000
Esta herramienta representa uno de los comandos de auditoría en redes con Linux más utilizado en entornos profesionales. Puede ver este comando en «acción» en nuestra página dentro del nivel avanzado. Allí encontrará su uso en entornos de Pentesting.
Comando netcat
Netcat es una herramienta ,cuyo comando es nc, y es muy usado dentro de comandos de auditoría en Redes con linux. Esto se debe, no solo porque también nos permite realizar escaneos como lo hacíamos con nmap. sino porque nos permite, leer, escribir y transferir datos en la red usando los puertos TCP y UDP. Además, puede utilizarse, por ejemplo, para diagnosticar errores y problemas que afecten a la funcionalidad y la seguridad de una red (como el escaneo de puertos). Este software permite configurar servidores de chat y de web e iniciar consultas por correo. Es decir, puede funcionar como sistema Cliente-Servidor.
Sintaxis:
# nc (opciones) HOST PUERTO
Algunas opciones mas usadas son:
-l Se coloca a la escucha mediante un puerto para una conexión remota o local.
-v Modo verboso. Muestra información de la conexión.
-p Establece el puerto a utilizarse.
-u Uso del protocolo UDP (ya que por defecto usa TCP).
-z Modo de escáner de puerto (modo de I/O 0); solo escaneo para servicios de escucha (no envío de datos).
-k Permanece el puerto abierto, aunque una de las partes se salga de la conexión.
-c Permite ejecutar comando de un Shell a otro.
-e Especifica un archivo luego de ser ejecutado (se usa normalmente en conjunto con –c).
Tener en cuenta
En Debian puede haber múltiples versiones de netcat, por ejemplo observemos la siguiente situación:
# update-alternatives –config nc
Se está usando, en nuestro caso, ncat en modo automático. En caso de querer poseer este u otro, podemos instalarlo con # apt –y install ncat (u otra versión). En distribuciones Debian podemos hacer que el sistema alternatives use “netcat” como variante preferida de la siguiente manera:
# update-alternatives –install /bin/nc /usr/bin/ncat 60
Ejemplos más usados
Conectarse via https por el puerto 443 de un host:
# nc –v www.google.com 443
También podemos verificar sobre el estado de la conexión, o simplemente, saber si hay algún puerto abierto.
# nc –z www.google.com 443
Como podemos ver, no estamos conectados en el puerto 444 por tal motivo nos responde con 1
El significado de estado en los números es el siguiente:
0 | La conexión fue realizada con éxito |
1 | Algún tipo de error en la conexión establecida |
2 | Error desconocido |
Abrir un puerto en escucha para recibir conexiones:
# nc –lvp 2389
También podemos abrir varios puertos en escucha:
# nc –lvp 20-26
Si quisiéramos ingresar a dicha conexión, suponiendo que la IP es 192.168.0.100 desde otro host, haríamos:
# nc 192.168.0.102 2389
Vemos como el host (kali) le envía un mensaje “Hola server” a nuestro server (Windows) como muestra la imagen anterior.
Del mismo modo, podemos ejecutar un comando de manera remota, por ejemplo:
# nc 192.168.0.102 2389 -c “reboot –f”
Podríamos decir, que de esta forma, hemos creado un servidor de chat entre las dos máquinas. Incluso con la opción –u podemos pasarlo a modo UDP, ya que netcat usa TCP de forma predeterminada.
Copiar un archivo de un Host otro
La máquina receptora opera en modo de escucha y recibe datos a través de un puerto en particular. La máquina emisora envía los datos mediante la creación de una conexión con el receptor. Esto construye un modelo Cliente-Servidor con esta herramienta.
Suponiendo que la maquina receptora se encuentra en escucha. Su dirección IP es 192.168.0.102 entonces haremos:
# nc –lvp 2389 > file.txt
En el caso de la máquina emisora haríamos:
# nc 192.168.0.102 < /etc/passwd
Como resultado podemos ver el contenido del archivo /etc/passwd de kali, dentro del archivo file.txt perteneciente a Windows.
Puede ver como ganamos acceso a otra máquina, de forma directa e inversa, a través de esta herramienta en la página del nivel avanzado.
Crear un servidor Proxy
En este caso vamos a crear un intermediario entre el cliente y el servidor, y así poder, analizar el tráfico y las peticiones en la red.
Nos basaremos en la creación de un “pipe” o “tubería” con el comando mkfifo, cuya función es generar un túnel de entrada y salida a través de dos puertos distintos, ayudando así, a la comunicación entre dos procesos.
# mkfifo tunelpipe
# nc –lvp 8080 0<tunelpipe | nc 192.168.0.102 80 1>tunelpipe
Otra forma un poco mas simple:
# nc –lvp 8080 | nc 192.168.0.102 80
Levantar un servidor web con ssl:
# cat backup.tar.gz | nc –ssl -l 443
Luego desde el cliente se puede hacer:
# curl -O -k https://10.0.2.15/backup.tar.gz
Comando lsof
El comando lsof es una herramienta muy utilizada cuya función es realizar una tarea tan simple como importante: Mostrar todos los archivos abiertos en el sistema. Existe un principio famoso en los sistemas operativos tipo UNIX el cual dice que “todo es archivo”. En nuestro caso, hay archivos que tienen que ver con redes, de manera que puede ser una forma muy útil para obtener información local de los sockets. Por tal motivo, este es otro ejemplo de comandos de auditorías en redes con linux ya que dicha herramienta, a la hora de llevar acabo conexiones, será muy usada.
Ejemplos más usados
Mostrar todos los archivos de Internet:
# lsof –i
Como podemos ver muestra información de gran utilidad como el servicio y/o comando al que pertenece el proceso (COMMAND), el PID, usuario que lo está ejecutando (USER), el descriptor de archivo (FD), tipo de nodo asociado con el fichero (TYPE), número de dispositivo (DEVICE), el tamaño del fichero y el nombre/ruta al mismo.
Ver conexiones TCP:
# lsof –i | grep TCP
Ver archivos abiertos que usen el puerto 22:
# lsof –i :22
Ver conexiones por rango TCP del puerto 22 al 1024:
# lsof –i TCP:22-1024
Mostrar archivo de un proceso en especifico:
# lsof +p PID
Mostrar los archivos de un usuario del sistema:
# lsof –u user
En este caso utilizamos tail -5 para que solo nos muestre los últimos 5 registros.
Comando tcpdump
Esta herramienta es una excelente opción para analizar paquetes, cuya librería utilizada es libpcap, escrita en C/C++ para captura de tráfico en red. El comando tcpdump imprime una descripción de aquellos contenidos con paquetes de una interfaz de red, que coincide con una expresión booleana. Cada vez que abrimos una página web, o alguna conexión en nuestro ordenador, se envían y reciben paquetes de datos en la interfaz que estemos utilizando.
Así como realizamos «ataques» en auditorías, también debemos saber defendernos, o porque no, simplemente probar el funcionamiento o estado de un comando. Por ejemplo, con el comando ping, así como vemos los paquetes que recibimos cuando lo usamos, también podemos realizar la función inversa, y ver los paquetes que entran a nosotros. Por lo tanto, esta herramienta la colocamos dentro de los comandos de auditoría en redes con Linux por su importancia.
Ejemplos simples
Primero y principal debemos saber que interfaces hay en nuestra red, y cual estamos utilizando
# tcpdump –D
Una vez localizada nuestra interfaz de red, podemos ver la cantidad especificada de paquetes de red al abrir nuestro navegador.
En este caso con –i nombramos la interfaz, y con –c la cantidad de paquetes a capturar (son miles la cantidad que puede capturar en segundos).
Uso avanzado
Capturar tráfico desde o hacia el rango 192.168.1.0/24:
# tcpdump -i enp0s3 net 192.168.1.0 mask 255.255.255.0
Deshabilitar la resolución inversa de nombres y mostrar los paquetes hacia y desde el host 192.168.1.15:
# tcpdump -n -i enp0s3 host 192.168.1.15
Evitar el modo promiscuo y ver los paquetes con destino al host 192.168.0.3:
# tcpdump -p -i enp0s3 dst 192.168.0.3
Mostrar los números de paquetes en la salida:
# tcpdump –number -i enp0s3
Guardar los paquetes capturados en el archivo dump.pcap con el formato de captura de tcpdump:
# tcpdump -i enp0s3 -w dump.pcap
Leer los paquetes capturados del archivo dump.pcap y excluir todos los paquetes con protocolo udp:
# tcpdump not udp -r dump.pcap
Muestra los paquetes con protocolo ARP, UDP y la diferencia de tiempo entre cada uno y el anterior:
# tcpdump -ttt -i enp0s3 arp or udp
Capturar solamente protocolo ipv4 e ipv6:
# tcpdump -i enp0s3 ip and ip6
Capturar paquetes desde y hacia la mac address:
# tcpdump -i eth0 ether dst F0:E1:D2:C3:B4:A5
Capturar el tráfico desde y hacia el host 10.0.0.1 y puerto 80.
# tcpdump -XX -nn -vvv -s 32768 -p -i eth0 host 10.0.0.1 and port 80