Aa 4.3.4 1956760
Aa 4.3.4 1956760
Aa 4.3.4 1956760
Nombre del curso: Seguridad Informática y Nombre del profesor: Miguel Ángel Gómez
Criptografía Marroquín
Modulo Netacad: 4 Actividad: Investigación
Fecha: 03/02/2024
Equipo recomendado
Máquina virtual CyberOps Workstation
Instrucciones
Parte 1: Servidores
Los servidores son esencialmente programas escritos para proporcionar información específica por
solicitud. Los clientes, que también son programas, se comunican con el servidor, hacen la solicitud y
aguardan la respuesta del servidor. Se pueden utilizar muchas tecnologías diferentes de comunicación
entre
clientes y servidores; las más comunes son las redes IP. Esta práctica de laboratorio se enfoca en
servidores y clientes basados en redes IP.
2018 - 2020 Cisco y/o sus filiales. Todos los derechos reservados. Información pública de Cisco Página 1 de 7
www.netacad.com
Laboratorio
b. En Linux, los programas también pueden invocar a otros programas. El comando ps también se
puede utilizar para mostrar dicha jerarquía de procesos. Utilizar las opciones de -ejH para
mostrar el árbol de procesos que se está ejecutando actualmente después de iniciar el servidor
web nginx con privilegios elevados.
Nota: La información de los procesos correspondiente al servicio nginx está resaltada. Los
valores de PID serán diferentes.
[analyst@secOps ~]$ sudo /usr/sbin/nginx
[analyst@secOps ~]$ sudo ps –ejH
[sudo] contraseña para analyst:
PID PGID SID TTY TIME CMD
1 1 1 ? 00:00:00 systemd
167 167 167 ? 00:00:01 systemd-journal
193 193 193 ? 00:00:00 systemd-udevd
209 209 209 ? 00:00:00 rsyslogd
210 210 210 ? 00:01:41 java
212 212 212 ? 00:00:01 ovsdb-server
213 213 213 ? 00:00:00 start_pox.sh
224 213 213 ? 00:01:18 python2.7
214 214 214 ? 00:00:00 systemd-logind
216 216 216 ? 00:00:01 dbus-daemon
221 221 221 ? 00:00:05 filebeat
239 239 239 ? 00:00:05 VBoxService
287 287 287 ? 00:00:00 ovs-vswitchd
382 382 382 ? 00:00:00 dhcpcd
387 387 387 ? 00:00:00 lightdm
410 410 410 tty7 00:00:10 Xorg
460 387 387 ? 00:00:00 lightdm
492 492 492 ? 00:00:00 sh
503 492 492 ? 00:00:00 xfce4-session
513 492 492 ? 00:00:00 xfwm4
Laboratorio
c. Como ya se mencionó, los servidores son programas esencialmente y, a menudo, son iniciados
por el propio sistema en el momento del arranque. La tarea que realiza un servidor se llama
servicio. De esa forma, un servidor web proporciona servicios web.
El comando netstat es una excelente herramienta para identificar más fácilmente a los servidores
de red que se están ejecutando en una computadora. El poder de netstat radica en su capacidad
para mostrar conexiones de red.
Nota: Su resultado puede ser diferente dependiendo de la cantidad de conexiones de red abiertas
en su VM.
En la ventana del terminal escriban netstat.
[analyst@secOps ~]$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost.localdo:48746 localhost.local:wap-wsp ESTABLISHED
tcp 0 0 localhost.localdo:48748 localhost.local:wap-wsp ESTABLISHED
tcp6 0 0 localhost.local:wap-wsp localhost.localdo:48748 ESTABLISHED
tcp6 0 0 localhost.local:wap-wsp localhost.localdo:48746 ESTABLISHED
tcp6 0 0 localhost.local:wap-wsp localhost.localdo:48744 ESTABLISHED
tcp6 0 0 localhost.localdo:48744 localhost.local:wap-wsp ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] DGRAM 8472 /run/systemd/notify
unix 2 [ ] DGRAM 8474 /run/systemd/cgroups-agent<some output omitted>
Como puede verse arriba, netstat devuelve gran cantidad de información cuando se utiliza sin
opciones. Se pueden utilizar muchas opciones para filtrar la salida de netstat y darle formato, lo
que la vuelve más útil.
Laboratorio
d. Utilicen netstat con las opciones –tunap para ajustar la salida de netstat. Observe que netstat
permite agrupar varias opciones bajo el mismo signo “-“.
La información correspondiente al servidor nginx está resaltada.
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6633 0.0.0.0:* LISTEN 257/python2.7
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 395/nginx: master
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 279/vsftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 277/sshd: /usr/bin
tcp6 0 0 :::22 :::* LISTEN 277/sshd: /usr/bin
udp 0 0 192.168.1.15:68 0.0.0.0:* 237/systemd-network
¿Qué significan las opciones –t, -u, –n, –a y –p en netstat? (utilicen man netstat para responder)
R: -a: muestra tanto los sockets de escucha como los de no escucha. -n: usa salida numérica (sin
DNS, puerto de servicio o resolución de nombre de usuario), -p: muestra el PID del proceso del
propietario de la conexión. -t: muestra conexiones TCP. –u: muestra conexiones UDP.
Los clientes se conectarán a un puerto y, a través del protocolo correcto, solicitarán información
Laboratorio
a un servidor. En la salida de netstat que se muestra arriba se ven ciertos servicios que están
escuchando puertos específicos. Las columnas interesantes son las siguientes:
o En la primera columna se ve el protocolo de Capa 4 en uso (UDP o TCP, en este caso).
o En la tercera columna se utiliza el formato <DIRECCIÓN:PUERTO> para dar formato a la
dirección IP local y al puerto en el que se puede establecer una conexión con un servidor
específico. La dirección IP 0.0.0.0 significa que el servidor está escuchando a todas las
direcciones IP configuradas en la computadora.
o En la cuarta columna se utiliza el mismo formato de sockets <DIRECCIÓN:PUERTO> para
exponer la dirección y el puerto del dispositivo presente en el extremo remoto de la conexión.
0.0.0.0:* significa que en este momento ningún dispositivo remoto está utilizando la
conexión.
o En la quinta columna se puede ver el estado de la conexión.
o En la sexta columna se muestra el ID de proceso (PID) del proceso responsable de la conexión.
También se muestra el nombre abreviado asociado con el proceso.
Aunque los números de puerto son solo una convención, ¿pueden intuir qué clase de servicio se
está ejecutando en el puerto 80 de TCP?
R: Lo más probable es que se trate de un servidor web.
e. En ocasiones, resulta útil cruzar la información provista por netstat con ps. En función de la salida
del punto (d), se sabe que hay un proceso con el PID 395 vinculado al puerto 80 de TCP. En este
ejemplo se utiliza el puerto 395. Utilizar ps y grep para generar una lista con todas las líneas de
resultado de ps que contengan PID 395. Reemplazar 395 con el número PID para su instancia de
ejecución particular de nginx:
[analyst@secOps ~]$ sudo ps -elf | grep 395
[sudo] contraseña para analyst:
1 S root 395 1 0 80 0 - 1829 19:33 ? 00:00:00 nginx: master process
/usr/bin/nginx
5 S http 396 395 0 80 0 - 1866 19:33 ? 00:00:00 nginx: worker process
0 S analyst 3789 1872 0 80 0 - 1190 19:53 pts/0 00:00:00 grep 395
Laboratorio
Laboratorio
En el resultado anterior, el comando ps se canaliza a través del comando grep para filtrar solamente
las líneas que contienen el número 395. El resultado son tres líneas con texto acomodado.
La primera línea muestra un proceso en propiedad del usuario root (tercera columna), iniciado
por otro proceso con PID 1 (quinta columna), a las 19:33 (duodécima columna)
La segunda línea muestra un proceso con PID 396, en propiedad del usuario http, iniciado por el
proceso 395, a las 19:33.
En la tercera línea se muestra un proceso que es propiedad del usuario analyst, con el PID 3789,
iniciado por un proceso con el PID 1872, como el comando grep 395.
El PID 395 del proceso es nginx. ¿Cómo se pudo llegar a esa conclusión a partir de la salida anterior?
R: Según la última columna de la línea 1, el resultado muestra la línea de comando nginx.
En la segunda línea vemos que el proceso 396 es propiedad de un usuario de nombre http y que
tiene el número de proceso 395 como proceso matriz. ¿Qué significa? ¿Es común este
comportamiento?
R: Si es común, Significa que nginx inició el proceso 396 con el nombre de usuario http. Esto es
normal ya que nginx se ejecuta solo para cada cliente que se conecta al puerto 80 TCP.
Nota: Es altamente recomendable que utilicen ssh como aplicación de shell remoto en lugar de telnet.
a. En la Parte 1, descubrimos que nginx se estaba ejecutando y que se le había asignado el puerto 80
de TCP. Aunque con una breve búsqueda en internet se revela que nginx es un servidor web
liviano, ¿Qué podría hacer un analyst para estar seguro de eso? ¿Qué sucedería si un atacante
cambiara el nombre de un programa de malware por el de nginx, simplemente para que se
pareciera al servidor web tan utilizado? Utilicen telnet para conectar el host local en el puerto 80
de TCP:
[analyst@secOps ~]$ telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
b. Presionen algunas teclas del teclado. Cualquiera funcionará. Después de presionar algunas
teclas, pulsen INTRO. A continuación, se incluye la salida completa, incluido el
establecimiento de la conexión Telnet y las teclas aleatorias que se presionaron (fdsafsdaf,
en este caso):
fdsafsdaf
HTTP/1.1 400 Bad Request
Server: nginx/1.16.1
Date: Tue, 28 Apr 2020 20:09:37 GMT
Content-Type: text/html
Laboratorio
Laboratorio
Content-Length: 173
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>
Connection closed by foreign host.
Gracias al protocolo Telnet se estableció una conexión TCP de texto sin cifrar (a cargo del cliente
Telnet) directamente al servidor nginx, que está escuchando al puerto 80 de TCP de 127.0.0.1. Esta
conexión nos permite enviar datos directamente al servidor. Como nginx es un servidor web, no
comprende la secuencia de letras aleatorias que se le envió y devuelve un error en formato de
página web.
¿Por qué el error se envió como página web?
R: Nginx es un servidor web y, como tal, solo habla el protocolo HTTP.
Aunque el servidor reportó un error y dio por finalizada la conexión, pudimos descubrir
mucho. Descubrimos que:
1) El nginx con el PID 395 de hecho es un servidor web.
2) La versión de nginx es 1.16.1.
3) La pila de red de nuestra VM CyberOps Workstation es totalmente funcional hasta la Capa 7.
No todos los servicios son iguales. Algunos servicios están diseñados para aceptar datos sin
formato y no se cancelan si se introduce basura desde el teclado. A continuación, vemos un
ejemplo de esa clase de servicio:
c. Si miramos la salida de netstat que presentamos anteriormente, podremos ver un proceso
conectado al puerto 22. Utilicen Telnet para conectarse con él.
El puerto 22 de TCP está asignado a un servicio SSH. SSH permite que un administrador se conecte
con una computadora remota en forma segura.
A continuación se detalla la salida:
[analyst@secOps ~]$ telnet 127.0.0.1 22
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.2
sdfjlskj
Invalid SSH identification string.
Laboratorio
Utilicen Telnet para conectarse con el puerto 68. ¿Qué ocurre? Explique.
R: No se puede conectar porque se rechaza la conexión. Telnet es un protocolo basado en TCP y no
podrá conectarse a puertos UDP.
Laboratorio
Preguntas de reflexión
1. ¿Cuáles son las ventajas de utilizar netstat?
R: Netstat permite que un analista muestre todas las conexiones presentes actualmente en una
computadora. También se pueden mostrar direcciones de origen y destino, puertos e ID de proceso, lo
que proporciona una descripción general rápida de todas las conexiones presentes en una
computadora.