Atacar un Portal Cautivo

Body

Los sistemas sin cliente NAC frecuentemente aprovechan un sistema de autenticación de portal cautivo, para validad la identidad del usuario antes de otorgar acceso hacia la red. Cuando un cliente se conecta hacia una red y abre un navegador web, el sistema de portal cautivo redirecciona la petición HTTP con un mensaje de redirección temporal (HTTP/301), hacia el servidor de portal cautivo por si mismo. Presentando luego un formulario para la autenticación utilizando un nombre de usuario y contraseña, el servidor de portal cautivo descartará la mayoría del tráfico hasta el usuario se autentique exitosamente.

Una vez autenticado, el servidor de portal cautivo otorgará acceso hacia la red. Si el servidor de portal cautivo está utilizando gestión fuera de banda, puede utilizar SNMP (Simple Network Management Protocol), o una sesión interactiva para otorgar al usuario final acceso hacia una segunda VLAN (Virtual Local Area Network), la cual tiene acceso hacia la red interna.

Si el servidor de portal cautivo utiliza gestión en línea, otorgará acceso hacia el sistema victima siguiendo a una autenticación exitosa. El servidor de portal cautivo utiliza la dirección MAC (Media Access Control) de la victima, dirección IP (Internet Protocol), o ambas para validar todo el tráfico originado desde el cliente autenticado.

Los portales cautivos presentan diversas oportunidades para atacantes no autenticados.

Atacar el Portal: El servidor de portal cautivo por mismo es un objetivo para un atacante. Si el sistema de portal cautivo está utilizando gestión fuera de banda, podría utilizar SNMP u otros protocolos para la gestión. Sin importar la posición del servidor de portal cautivo, es un servidor web, y puede ser vulnerable a numerosos tipos ataques web, como Cross-Siste Request Forgery (CSRF), Cross-Site Scripting (XSS, inyección SQL, y otros.

Atacar los Servicios Previos para la Autenticación: Como un protocolo de alto nivel, la autenticación HTTP contra el servidor de portal cautivo, requiere muchos protocolos de capas inferiores hayan hecho su trabajo para soportar al cliente. Antes de la autenticación al portal cautivo, servicios como DHCP (Dynamic Host Configuration Protocol) y DNS deben ser factibles de ser accedidos por el usuario final, lo cual puede representar oportunidades de ataque.

Atacar otros Dispositivos Clientes Previos a la Autenticación: Antes de la autenticación, un atacante puede ser capaz de contactar otros sistemas cliente en la red, sin importar el mecanismo para el despliegue del portal cautivo. Comprometer exitosamente un sistema cliente el cual luego completa la autenticación, puede generar a un mayor acceso hacia la red.

Aunque estas técnicas representan ataque válidos, un enfoque muy útil es evadir los requerimientos para autenticarse hacia un sistema de portal cautivo, y consecuentemente ganar acceso hacia la red posterior a la autenticación.

Fuente:

https://en.wikipedia.org/wiki/Captive_portal
https://tools.ietf.org/html/rfc1157
https://tools.ietf.org/html/rfc2131

Control de Admisión a la Red (NAC)

Body

Network Admission Control (NAC) o por su traducción al idioma español “Control de Admisión a la Red”, ha sido una tecnología tumultuosa con una diversidad de soluciones y técnicas. Aunque NAC puede tener diferentes significados, esencialmente representa una restricción de acceso el cual se debe intentar evadir como un buen profesional en pruebas de penetración.

Los sistemas utilizando NAC aprovechan un método para el control de red, requiriendo los usuarios realicen algún tipo de autenticación o validación de políticas del sistema, antes de otorgarle acceso hacia la red. Esto puede ser implementado con niveles variantes de escrutinio y requerimientos de seguridad, con algunas organizaciones requiriendo como mínimo todos los clientes estén parchados con firmas antivirus, antes de acceder hacia la red. Otras organizaciones pueden requerir tokens de autenticación con doble factor de autenticación, verificaciones de la postura del sistema y sistemas operativos cliente, además del fortalecimiento de acceso privilegiado hacia ciertos sistemas basado en credenciales de login para el cliente.

Existen diversas técnicas para implementar, evadir o saltar sistemas NAC, mostrando primero el requerimiento de la política y la implementación del sistema NAC, para luego apuntar cuales fallas se pueden aprovechar y tomar ventaja.

Por ejemplo en un escenario NAC, se inicia con una definición de política la cual describe las metas sobre la implementación NAC en la red. La política requiere una autenticación simple, y asegura los clientes cumplen los requerimientos mínimos de la política de seguridad.

En este escenario se realiza una mínima verificación sobre nivel de cumplimiento sobre los dispositivos del cliente, mientras se requiere todos los usuarios se autentiquen hacia la red. Este es un ejemplo de un despliegue NAC minimista, donde la organización probablemente tiene soporte para una amplia variedad de sistemas del cliente, y opta por solo fortalecer un nivel mínimo de control y verificación del sistema.

En estos despliegues NAC, un NAC sin cliente, o un sistema agente disoluble es desplegado. En lugar de requerir cada dispositivo tenga un cliente NAC completo y pesado, los sistemas cliente utilizan un navegador web y un agente temporal para realizar verificaciones del sistema. Este cliente puede también realizar autenticación, aunque es más común ver autenticación en portales cautivos utilizados antes del agente disoluble sea entregado hacia el cliente.

En sistemas NAC sin cliente, el cliente se conecta inicialmente hacia un red restringida antes de ser redireccionada hacia una página de autenticación, la cual fuerza a la autenticación y validación de política de agente. Este acceso inicial puede ser fortalecido sobre un switch, donde un evento de autenticación exitosa fuerza a un switch de una VLAN una operación para el usuario, o este puede ser fortalecida en linea por el NAC, únicamente otorgándole acceso hacia los recursos de la red interna siguiente la autenticación.

Fuentes:

https://csrc.nist.gov/glossary/term/Network_Access_Control
https://en.wikipedia.org/wiki/Network_Access_Control

Explotación en Windows

Body

El sistema operativo Windows es algo complejo, y requiere un profundo nivel de familiaridad con las especificaciones Windows, como TIB (Thread Information Block) “Bloque para Información de los Hilos”, PEB (Process Environment Block) “Bloque para el Entorno del Proceso”, SEH (Structured Exception Handling) “Manejo Estructurado de Excepción”, y la metodología global detrás del API (Application Programming Interface) “Interfaz para Programación de Aplicación”. La explotación de la pila funciona en una manera similar al sistema operativo Linux; sin embargo existen métodos específicos utilizados los cuales permiten a los “exploits” en Windows ser portátiles.

El sistema operativo Windows es muy dinámico y constantemente cambiante, esto fuerza a los atacantes deban entender las técnicas no se basan en localizaciones estáticas de ubicaciones interesantes de la memoria. Los controles modernos deben ser derrotados sobre los nuevos sistemas, y el profesional debe conocer cuando los controles no son factibles de ser derrotados, o cuando una condición es tan retadora, con lo cual la probabilidad de una explotación exitosa es baja.

Un profesional en pruebas de penetración experimentado debe ser capaz de enfrentar los controles para mitigar la explotación, como DEP (Data Execution Prevention) “Prevención para la Ejecución de Datos” y ASLR (Address Space Layout Randomization) “Aleatorización para la Disposición del Espacio de Direcciones”, utilizando técnicas como ROP (Return Oriented Programming) “Programación Orientada a Retorno”, para derrotar o evadirlos según sea necesario.

Las shellcodes de Windows son también algo complejas y deben ser bien entendidas. Incluso si un profesional no escribe una shellcode personalizada, frecuentemente necesitará analizar el código para realizar potenciales cambios. Algunos shellcodes no son tan estables y consistentes como otros, incrementando potencialmente la probabilidad de una caída o mal funcionamiento del servicio o sistema.

Fuentes:

https://docs.microsoft.com/en-us/windows/win32/debug/thread-environment…-
https://docs.microsoft.com/en-us/windows/win32/api/winternl/ns-winternl…
https://docs.microsoft.com/en-us/windows/win32/debug/structured-excepti…
https://docs.microsoft.com/en-us/windows/win32/memory/data-execution-pr…
https://msrc-blog.microsoft.com/2017/11/21/clarifying-the-behavior-of-m…

Explotación en Linux

Body

Como un profesional experimentado en pruebas de penetración, se debe entender el funcionamiento interno de muchos sistemas operativos. En la cima de esta lista están los sistemas operativos Linux y Windows. Para comprender cualquier sistema operativo se requiere un conocimiento fundamental sobre la arquitectura del sistema. Esto incluye un férreo conocimiento sobre la gestión y asignación de la memoria, registros del procesador, lenguaje ensamblador, gestión de la pila, el proceso de enlazado y de carga, además de muchas otras áreas constituyendo muchos sistemas.

Identificar los programas ejecutándose con niveles elevados de privilegios, es la clave para ahorrar tiempo en la identificación de vulnerabilidades lucrativas. Muchas vulnerabilidades en los sistemas operativos se ocasionan por condiciones de desbordamiento de pila. Muchos nuevos sistemas tienen seguridad a nivel del sistema operativo, además de controles para tiempo de compilación, los cuales han sido añadidos en años recientes. Un profesional en hacking ético y pruebas de penetración, debe conocer cuando una falla en la explotación es ocasionado debido por uno de estos controles, además de conocer los métodos para vencerlos.

Fuentes:

https://en.wikipedia.org/wiki/Heap_overflow
https://en.wikipedia.org/wiki/Stack_Overflow

Ingeniería Reversa

Body

La ingeniería reversa es una habilidad la cual proporciona beneficios extremos cuando se realiza análisis y caza de fallas contra aplicaciones comerciales o propietarias. Existen dos tipos primarios de sintaxis para código ensamblador sobre procesadores x86: Intel y AT&T. Ambos estilos funcionan bien, y muchos investigadores terminan prefiriendo uno al otro. Es importante dominar las bases del análisis de código desensamblado, además de mejorar la habilidad de rápidamente identificar funciones interesantes.

Las llamadas de funciones internas son objetivos interesantes, pues el código es completamente desarrollado por el programador, opuesto a utilizar llamadas de funciones externas para compartir librerías. Existen llamadas de funciones externas obvias con vulnerabilidades conocidas, las cuales también deben ser identificadas. Frecuentemente un profesional tiene una cantidad de tiempo limitado para invertir en la ingeniería reversa, de tal manera el tiempo debe ser optimizado para enfocarse sobre aquello más interesante y lucrativo.

Muchos proveedores no ofrecen símbolos para depuración; sin embargo Microsoft los ofrece, y están disponibles para ser utilizados. Un mapa para símbolos de depuración, define los nombres de todas las funciones internas utilizadas por un programa o librería. Esto hace mucho más eficiente un análisis. Los profesionales frecuentemente invierten una gran cantidad de tiempo trabajando con desensambladores como IDA Pro y objdump, como también depuradores de software. Estas herramientas ayudan a convertir una falla o condición de negación de servicio, dentro de un exploit funcional con ejecución de código.

Fuentes:

https://en.wikipedia.org/wiki/X86_assembly_language
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/micr…
https://www.hex-rays.com/products/ida/
https://linux.die.net/man/1/objdump

Conocimientos para Crear Guiones (Scripts)

Body

El crear guiones o scripts perrmite automatizar la evaluación de los sistemas, servicios, y aplicaciones, además de ayudar a liberar tiempo al profesional en pruebas de penetración y hacking ético. El tópico de las pruebas de fuzzing es también importante de conocer. Por lo tanto la capacidad de crear scripts o programas facilita la vida de un profesional en pruebas de penetración. Existen muchos lenguajes disponibles para programación y scripting, algunos de los cuales están mejor diseñados para manejar los requerimientos de un profesional en pruebas de penetración. Python y Ruby son dos lenguajes los cuales tienen un nivel fuerte de desarrollo, además de soporte para las investigaciones de seguridad y explotación.

Los módulos, librerías y herramientas para la depuración han sido escritas con estos lenguajes, con el propósito de ayudar a simplificar y automatizar el fuzzing y la investigación. Para alcanzar el siguiente nivel en las pruebas de penetración, se debe asimilar la idea de añadir a la programación dentro del conjunto de herramientas del profesional. Una vez obtenido este poder, las herramientas pueden ser escritas y compartidas, permitiendo construir un arsenal de programas de ayuda para el reconocimiento, escaneo, fuzzing y explotación.

Fuentes:

https://www.python.org/
https://www.ruby-lang.org
https://owasp.org/www-community/Fuzzing

Escapar de Entornos Restringidos

Body

La principal meta de esta sección denominada como “Escapar de Entornos Restringidos” es identificar y evadir las defensas modernas implementadas sobre los sistemas operativos y las redes. Una de las maneras para atacar las redes modernas es aprovecharse del entorno para la ejecución previa de iniciación. Atacar remotamente el entorno previo a la iniciación proporcionará la oportunidad de realizar ataques normalmente requiriendo acceso físico. La especificación PXE describe una entorno cliente servidor estandarizado, el cual inicia un conjunto de software obtenido desde la red en clientes habilitados con PXE.

Una extensa parte de la prueba de penetración es confirmar las defensas funcionan como se preveían. Evaluarlas defensas del host como chroot, cárcel, y virtualización completa son necesarias para establecer aquello lo cual falta en ser asegurada o vigilada. El bloqueo del sistema de archivos proporcionará una oportunidad para probar aquello lo cual podría ocurrir si las defensas fallan. Las restricciones a examinar están enfocadas en localización sobre el sistema de archivos, librerías, o procesos en funcionamiento. De cualquier manera, probar el potencial es un requerimiento para evaluar el riesgo de una brecha.

Fuentes:

https://en.wikipedia.org/wiki/Preboot_Execution_Environment
https://man7.org/linux/man-pages/man2/chroot.2.html

Ataques de Red

Body

Muchas redes están basadas en tecnologías y protocolos antiguos. Por ejemplo el protocolo ARP (Address Resolution Protocol) o Protocolo para la Resolución de Direcciones. Es un protocolo arcaico el cual devuelve direcciones MAC (Media Access Control) para direcciones IP (Internet Protocol) definidas. Este protocolo permite paquetes ARP gratuitos sean enviados hacia cualquiera, haciendo fácil engañar a los sistemas para crean una dirección MAC corresponde a una dirección IP diferente de su propietario. Esto funciona sobre muchas redes modernas, permitiendo a un atacante realizar ataques de hombre en el medio, y ganar una muy seria posición para el ataque.

Se ha introducido nueva tecnología para ayudar a proteger las redes contra estos tipos de ataques, pero frecuentemente no son utilizadas, o aún existen algunas localizaciones vulnerables las cuales rompen el sistema global. Consecuentemente es importante entender cuando estos controles modernos pueden ser derrotados, y las técnicas para sacarlos. Manipular las redes permite acceder hacia gran cantidad de información. Eliminar los controles de seguridad como SSL/TLS para leer tráfico encriptado, saltar desde una VLAN (Virtual Local Area Network) de datos hacia una VLAN de voz para esnifar tráfico RDP (Remote Desktop Protocol), y otras formas de ataques deben ser bien comprendidas por el profesional en hacking ético y pruebas de pentración.

Fuentes:

https://tools.ietf.org/html/rfc826
https://tools.ietf.org/html/rfc5246
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr…
https://en.wikipedia.org/wiki/Virtual_LAN

Amenazas en Linea: Ransomware

Body

Ransomware es un malware el cual se instala silenciosamente en la computadora o dispositivo móvil del usuario. Funciona bloqueando el acceso del usuario a sus archivos o pantalla, encriptando todos los datos del usuario en el dispositivo, también todos los dispositivos de almacenamiento conectados (USB flash, discos duros externos, o discos de estado sólido), para finalmente solicitar un rescate para eliminar esta restricción. Algunos tipos de ransomware amenazan a las victimas con publicar sus datos de manera pública, si se niegan a pagar el rescate. El rescate usualmente es pagado a través de métodos de pago anónimo como Bitcoin; el cual es un tipo de moneda digital; y de esta manera obtener la llave de desencriptación.

Las infecciones con ransomware provienen a través de una variedad de métodos. Por ejemplo un ransomware podría estar adjunto a mensajes de correos electrónicos de spam, ser instalado después de visitar sitios web maliciosos, o ser instalado como parte de un programa legítimo, el cual ha sido modificado por un atacante malicioso. También puede ser desplegado por otro malware, como un caballo de troya o conjuntos de exploits.

Existen dos tipos principales de ransomware:

El primer tipo: También conocido como ransomware bloqueador, el cual bloquea la pantalla del sistema en una manera en la cual es fácil para un usuario experimentado desbloquear esta restricción

El segundo tipo: También conocido como ransomware criptográfico, encripta todo el disco duro o algunos tipos de archivos, incluyendo todos los dispositivos de almacenamiento conectados, y solicita un rescate para eliminar esta restricción.

Una variante especial de ransomware ataca la MBR del sistema vulnerable, evitando el sistema operativo inicie a menos la victima pague el rescate.

Algunas recomendaciones a considerar sobre los ataques de ransomware:

  • Realizar copias de respaldo regularmente de todos los archivos
  • Instalar regularmente todos los parches de seguridad para el sistema operativo y las aplicaciones instaladas, y siempre mantenerse actualizado
  • Instalar soluciones antivirus y antimalware y mantenerlos actualizados
  • No ejecutar archivos descargados por cualquier medio sin antes revisarlos

Si un ataque con ransomware es exitoso, considerar lo siguiente:

  • Desconectar las computadoras de la red e internet
  • Realizar escaneos completos de todos los dispositivos conectados y medios de almacenamiento
  • Buscar asesoría especializada para encontrar el tipo de ransomware, y la posible existencia de herramientas específicas para su eliminación
  • Formatear los dispositivos conectados de ser necesario, para luego realizar nuevamente la instalación del Sistema Operativo
  • Restaurar todos los datos desde copias de respaldo limpias y seguras
  • Informar a las autoridades u organizaciones pertinentes relacionadas con este tipo de casos y NO pagar el rescate

El sitio web “No More Ransom” es una iniciativa el cual tiene como propósito ayudar a las victimas de ransomware a recuperar sus datos encriptados sin pagar a los criminales.

Fuentes:

https://www.nomoreransom.org/
https://www.malwarebytes.com/ransomware/

Pruebas de Penetración para Cumplimiento y Kali Linux

Body

Estas son las pruebas más comunes, pues son requisitos obligatorios en la industria y el gobierno, los cuales se basan en un marco de trabajo para cumplimiento bajo el cual opera toda la organización.

Aunque existen muchos otros marcos de trabajo específicos para cumplimiento, el más común probablemente utilizado es PCI DSS (Payment Card Industry Standard), un marco de trabajo dictado por las compañías de tarjetas de pago, lo cual debe ser cumplido por los minoristas quienes procesan pago con tarjetas. Sin embargo un número de otros estándares existen, como DISA STIG (Defense Information Systems Agency Security Technical Implementation Guides), FedRAMP (Federal Risk and Authorization Management Program), FISMA (Federal Information Security Management Act), y otros. En algunos casos un cliente corporativo puede requerir una evaluación, o consultar visualizar los resultados de la evaluación más reciente por varias razones. Ya sea ad-hoc o por mandato este tipo de evaluaciones son colectivamente llamados pruebas de penetración basada en cumplimiento, o “simplemente evaluaciones para cumplimiento” o “verificaciones de cumplimiento”.

Una prueba para cumplimiento frecuentemente inicia con una evaluación de vulnerabilidades. En el caso de la auditoría de cumplimiento PCI, una evaluación de vulnerabilidades, cuando es realizada adecuadamente, puede satisfacer muchos de los requerimientos base, incluyendo “2. No utilizar contraseñas proporcionadas por defecto del proveedor en los sistemas u otros parámetros de seguridad” (por ejemplo, con las herramientas incluidas en la categoría del menú “Ataques a Contraseñas”)”. “11. Probar regularmente la seguridad de los procesos y sistemas” (con las herramientas de la categoría Evaluación de Bases de Datos), u otras. Algunos requerimientos como el “9. Restringir el acceso físico hacia los datos de los titulares de las tarjetas” y “12- Mantener una política la cual abarque a todo el personal de seguridad de información”, no parece tolerar por si mismo las herramientas tradicionales para la evaluación de vulnerabilidades, y requiere creatividad además de pruebas adicionales.

Más allá del hecho podría no parecer sencillo utilizar Kali Linux para algunos elementos de una prueba para cumplimiento, el hecho es Kali Linux encaja perfectamente en este entorno, no solo por el amplio rango de herramientas relacionadas con la seguridad, sino también por el entorno Debian sobre el cual se construye, permitiendo la instalación de un amplio rango de herramientas.

El buscar el gestor de paquetes con palabras claves cuidadosamente seleccionadas, desde cualquier marco de trabajo para cumplimiento utilizado, generará ciertamente múltiples resultados. Tal como es, muchas organizaciones utilizan Kali Linux como una plataforma estándar para este tipo exacto de evaluaciones.

Fuentes:

https://www.pcisecuritystandards.org/
https://www.fedramp.gov/
https://csrc.nist.gov/projects/risk-management