Cómo empezar: principios de la seguridad de la información (primera parte)

Siguiendo con las traducciones no oficiales de HackTheBox Academy, os traigo en esta ocasión el módulo «Cómo empezar», más conocido como «Getting Started», acerca de los principios de la seguridad de la información o infosec. En este módulo veremos algunas herramientas básicas, comandos, tipos de shells, etc.

Al tratarse de un módulo bastante largo, he decidido dividirlo en varias partes, así que no desesperéis y paciencia, que todo llegará.

Resumiendo Infosec

La seguridad de la información (infosec) es un campo muy amplio que ha crecido y evolucionado últimamente. Existen distintas especializaciones:

  • Redes y seguridad de la infraestructura
  • Seguridad de aplicaciones
  • Pruebas de seguridad
  • Auditorías de sistemas
  • Planning de continuación de negocios
  • Forensia digital
  • Detección y respuesta ante incidentes

En pocas palabras, infosec es la práctica de proteger los datos de accesos no autorizados, cambios, usos ilegales, etc. Los profesionales de infosec también toman acción en reducir el impacto general de cualquier incidente.
Los datos pueden ser electrónicos o físicos y tangibles o intangibles.

Tríada CID: Confidencialidad, Integridad y Disponibilidad.

Proceso de gestión de riesgos

La protección de datos se ha de enfocar en una implementación de políticas eficiente sin afectar negativamente a las operaciones de la empresa y a su productividad. Para ello, se puede seguir lo que se llama un Proceso de gestión de riesgos, que implica los siguientes pasos:

  • Identificación del riesgo
  • Analizar el riesgo
  • Evaluar el riesgo
  • Tratar con el riesgo
  • Monitorización del riesgo

Debe mantenerse la tríada CID de los datos y asegurarse de que estos no se ven comprometidos de ninguna forma cuando ocurra un accidente, ya sea natural o de seguridad.

Red Team vs. Blue Team

El Red Team juega el papel de atacante, mientras que el Blue Team es la parte defensora.

Los integrantes del Red Team tienen como objetivo romper las defensas de la organización para identificar vulnerabilidades reales que un atacante podría utilizar. Para ello se usan pruebas de penetración, ingeniería social y otras técnicas similares.

Por otra parte, el Blue Team realiza la mayoría de tareas de infosec, ya que son los responsables de fortalecer las defensas mediante el análisis de riesgos, implantación de políticas, respuesta a amenazas e incidentes y el uso efectivo de herramientas de seguridad.

El papel de los Penetration Testers

Un asesor de seguridad (pentester de red, pentester de aplicaciones web, red teamer, etc.) ayuda a la organización a identificar riesgos en sus redes internas y externas. Estos pueden incluir vulnerabilidades en la red o en la web, exposición de datos sensibles, malas configuraciones o problemas que podrían dañar la reputación de la empresa. Un buen tester trabaja con el cliente para identificar riesgos, proporcionar información sobre cómo reproducir esos riesgos y guiar en la mitigación y remedio de los problemas identificados durante la prueba.

Las evaluaciones pueden ser de distintos tipos, desde una prueba de penetración de caja blanca contra todos los sistemas y aplicaciones para identificar todas las vulnerabilidades que sea posible, a una evaluación mediante phishing para comprobar la seguridad por parte de los usuarios.

Debemos comprender el esquema de los riesgos de una organización y su entorno para poder evaluar y clasificar las vulnerabilidades descubiertas. Una profunda comprensión del proceso de gestión de riesgos es crítica para cualquiera que comience en la seguridad de la información.

Cómo empezar con una distribución para Pentesting

Cualquiera que comience con una ruta técnica en infosec ha de sentirse cómodo con una amplia gama de tecnologías y sistemas operativos. Debemos entender cómo configurar, mantener y securizar tanto máquinas Linux como Windows. Según el entorno del cliente o el alcance de la evaluación, deberemos usar una VM Linux o Windows, nuestro sistema operativo nativo, un Linux en la nube, una VM instalada dentro del entorno del cliente o, incluso, realizar pruebas directamente desde una estación de trabajo del cliente para simular la amenaza de un posible insider.

Eligiendo una distribución

Existen distintas distribuciones Linux para pruebas de penetración. Algunas están basadas en distribuciones Debian ya existentes con las herramientas necesarias para realizar nuestras asesorías. Muchas de esas herramientas raramente se utilizarán, por lo que ninguna distribución contendrá todas las herramientas que necesitemos usar. Tal y como vayamos avanzando en nuestras carreras, gravitaremos hacia herramientas específicas y nos crearemos nuestras listas de herramientas necesarias para añadir a una distribución. Conforme progresemos, es posible que incluso prefiramos personalizar nuestra propia VM a partir de una imagen base de Debian o Ubuntu.

La elección de una distribución es individual, hasta podemos elegir crear y mantener una desde cero. Hay incontables distribuciones Linux que sirven para varios propósitos, algunas personalizadas exclusivamente para pentesting, otras dirigidas hacia pentesting web, forense, etc.

En esta sección hablaremos acerca de Parrot OS. Esta distribución se usa en la Pwnbox de la academia, personalizada para practicar y resolver ejercicios de los distintos módulos.

Logotipo de la Pwnbox de HackTheBox Academy

Es importante percatarse de que cada pentesting o asesoría de seguridad debe realizarse desde una VM recién instalada para evitar la intromisión de detalles de seguridad relevantes del entorno de otros clientes por accidente a la hora de hacer nuestros reportes o que pueda retener datos sensibles de los clientes demasiado tiempo. Por este motivo, debemos saber cómo levantar rápidamente una nueva máquina y tener procesos mediante los cuales arrancar y configurar rápidamente la distribución de nuestra elección para cada asesoría.

Configurando una distribución de pentesting

Existen muchas formas de configurar tu distribución local para pentesting. La puedes instalar como sistema operativo base, configurar la estación de trabajo en dual boot o usar la virtualización.

Hay unas cuantas opciones disponibles: Hyper-V en Windows, como máquinas virtuales en hipervisores como Proxmox o VMware ESXI o usando hipervisores gratuitos como VirtualBox o VMware Workstation Player, que se pueden instalar y usarse como hipervisores en Windows o Linux. Otra opción es VMware Workstation, que requiere pagar la licencia pero ofrece más características que las versiones gratuitas.

Un hipervisor es un software que permite crear y ejecutar una VM. Nos permitirá usar nuestro ordenador, ya sea sobremesa o portátil, para ejecutar múltiples VMs compartiendo memoria y recursos.

Las VMs en hipervisores se ejecutan de forma aislada del sistema operativo principal, lo que ofrece una capa de aislamiento y protección entre nuestra red y las redes vulnerables como Hack The Box, o cuando conectamos a entornos de clientes desde una VM.

Dependiendo de la cantidad de recursos de nuestro sistema, podemos ejecutar varias VMs a la vez. A menudo es útil levantar una VM durante una asesoría para testear exploits, herramientas o técnicas, o intentar recrear una aplicación objetivo con máquinas en un entorno de laboratorio. Todos los que trabajamos en infosec deberíamos sentirnos cómodos trabajando con uno o más hipervisores y montando VMs tanto para trabajo como para practicar.

Debemos trabajar continuamente para perfeccionar aquello que hacemos. Una buena forma es crear un laboratorio casero para intentar reproducir vulnerabilidades, instalar aplicaciones y servicios vulnerables, ver los efectos de las recomendaciones de remediación, y tener un lugar seguro para practicar nuevos exploits o técnicas de ataque. Podemos montar nuestro laboratorio en un portátil viejo o en un sobremesa, pero es preferible usar un servidor para instalar un hipervisor.

Notebook con Parrot OS instalado

Para nuestros propósitos, usaremos una versión modificada de Parrot Security (Pwnbox), disponible en https://parrotlinux.org/download/ para montar una VM. Podemos elegir entre dos formatos:

  • ISO
  • OVA

ISO

Un archivo ISO es simplemente un CD-ROM que se puede montar en un hipervisor para crear la VM instalando el sistema operativo. Nos da más posibilidad de personalización, y por lo tanto, un enfoque más granular al configurar nuestra VM de ataque.

OVA

Un archivo OVA es una máquina virtual pre-construida con unos ajustes de hardware y de disco duro predefinidos, con los que se crea la VM. Al estar pre-construida, es más rápida de desplegar.

Una vez levantada la VM, podemos comenzar a explorar el sistema operativo, familiarizándonos con las herramientas y realizando las personalizaciones deseadas.

Practicando con Parrot

La versión de navegador de la Academia, o Pwnbox, está disponible en todas las secciones de módulos que requieran de interacción con un host objetivo en nuestro laboratorio. Todas las secciones interactivas de un módulo se pueden completar desde nuestra propia VM después de generar una imagen Docker o generar un host de destino o varios hosts, y descargar una clave VPN. El uso de Pwnbox no es indispensable, pero es útil ya que toda la Academia se puede completar desde nuestro navegador sin necesidad de virtualizar software o cargar recursos adicionales.

Se puede acceder a las instancias de Docker sin necesitar una conexión VPN aparte. Los hosts específicos requieren acceso VPN si no se accede desde la Pwnbox. Si este es el caso, aparecerá un botón para descargar una clave VPN después de desplegar el objetivo.

Organizándonos

Ya sea que estemos realizando una auditoría a un cliente, participando en CTFs, haciendo un curso o practicando con los laboratorios de HTB, la organización es un tema crucial. Es esencial priorizar una buena documentación desde el principio. Esta habilidad nos beneficiará sin importar qué ruta tomemos en infosec o en otras carreras.

Estructura de carpetas

Cuando llevemos a cabo una de las opciones anteriores, deberíamos tener una estructura de carpetas clara en nuestra máquina atacante para poder guardar los datos en ella: información del alcance, datos de enumeración, evidencias de la explotación, datos sensibles y otros obtenidos durante las fases de reconocimiento, explotación y post-explotación:

user@htb[/htb]$ tree Projects/

Projects/
└── Acme Company
├── EPT
│ ├── evidence
│ │ ├── credentials
│ │ ├── data
│ │ └── screenshots
│ ├── logs
│ ├── scans
│ ├── scope
│ └── tools
└── IPT
├── evidence
│ ├── credentials
│ ├── data
│ └── screenshots
├── logs
├── scans
├── scope
└── tools

Este es un ejemplo en el que tenemos una carpeta del cliente Acme Company con dos auditorías, interna (IPT) y externa (EPT). En cada carpeta tenemos subcarpetas para cada tipo de dato nombrado.

Experimenta con las estructuras de carpetas y comprueba cuál es la que te funciona mejor a la hora de organizarte y trabajar más eficientemente.

Herramientas para tomar notas

La productividad y la organización son muy importantes. Existen distintas herramientas que se pueden usar para tomar notas. La elección de cada una es individual. Algunas opciones son:

  • Cherrytree
  • Visual Studio Code
  • Evernote
  • Notion
  • GitBook
  • Sublime Text
  • Notepad++
  • Obsidian

Algunas están más enfocadas solo en la recopilación de notas, mientras otras como Notion o GitBook tienen características que permiten que se puedan usar para hacer páginas de tipo Wiki, resúmenes y más. Es importante asegurarse de que los datos de los clientes se almacenan únicamente en local y no en la nube a la hora de usar estas herramientas en asesorías del mundo real.

Truco: Aprender lenguaje Markdown es sencillo y muy útil a la hora de tomar notas, y además se puede representar fácilmente y de forma organizada.

Otras herramientas y trucos

Todo profesional de infosec debería mantener una base de conocimiento. Puede ser en el formato que prefieras. Esta base debe contener guías de referencia rápida a tareas de instalación que tengamos que realizar en asesorías y chuletas para comandos comunes que usemos en cada fase de la evaluación.

Conforme vayamos completando laboratorios, asesorías, cursos, debemos agregar cada payload, comando o truco que no conocíamos a las notas para tenerlo a mano. Que estén accesibles incrementará nuestra eficiencia y productividad.

Debemos mantener listas de verificación, plantillas de reportes para distintos tipos de auditoría y montar nuestras bases de datos de hallazgos y vulnerabilidades. Esta base de datos puede tener la forma de hoja de cálculo o de algo más complejo, e incluir un título descriptivo, su descripción, impacto, consejos de remediación y referencias. El hecho de tener esos hallazgos ya escritos nos pueden ahorrar un tiempo muy valioso para no tener que rehacerlo durante la fase de reporte, solo será necesario copiarlo y adaptarlo al entorno correspondiente.

A moverse

Prueba distintas herramientas para toma de notas y desarrolla una estructura de carpetas que te funcione y sea compatible con tu metodología. Empieza desde el principio, que se convierta en un hábito.

Conectar Usando VPN

Una VPN (red privada virtual) nos permite conectar a una red privada y acceder a sus huéspedes y recursos como si estuviéramos conectados de forma física. Es un canal de comunicación segura a la hora de conectar a una red privada (por ejemplo, para un trabajador remoto que ha de conectar con la red de la empresa). Las VPN proporcionan privacidad y seguridad mediante encriptando las comunicaciones para prevenir escuchas y acceso a los datos mediante este canal.

Esquema de conexión mediante la VPN de HackTheBox Academy

La VPN enruta nuestra conexión a Internet a través del servidor privado de la VPN en lugar de mediante nuestro ISP (Proveedor de Servicios de Internet). Cuando conectamos a una VPN, los datos se originan en el servidor de la VPN y parecerá que salen de una dirección IP distinta a la nuestra.

Existen dos tipos principales de VPNs de acceso remoto: las basadas en cliente y las SSL. Estas últimas usan el navegador como cliente VPN. La conexión se establece entre el navegador y se puede configurar una pasarela SSL para permitir el acceso solo a las aplicaciones basadas en web como el email o los sitios de la intranet, incluso a la red interna sin necesidad de que el usuario instale ningún software en concreto. Las VPN basadas en cliente requieren el uso de software cliente para establecer la conexión a la VPN. Una vez conectado, el host del usuario funcionará como si estuviera conectado directamente a la red de la empresa y podrá acceder a cualquier recurso (aplicaciones, hosts, subredes, etc) que permita la configuración del servidor. Algunas VPNs corporativas proporcionan a los empleados un acceso completo a la red interna, mientras que otras ubicarán a los usuarios en un segmento específico reservado para trabajadores remotos.

¿Por qué usar una VPN?

Podemos usar un servicio VPN como NordVPN y conectar a un servidor VPN en otra parte del país o cualquier otra región del mundo para ofuscar nuestro tráfico o disfrazar nuestra IP pública. Esto nos puede proporcionar cierto nivel de seguridad y privacidad. Aún así, siempre existe la posibilidad de que los datos con los que hemos loggeado en el servicio VPN no sigan unas buenas prácticas de seguridad. El uso de una VPN viene con el riesgo de que el proveedor no esté haciendo lo que dice con los datos de conexión. Usar una VPN NO garantiza anonimato o privacidad pero es útil para saltar ciertas restricciones de redes o cortafuegos, o cuando conectamos a una posible red hostil (por ejemplo, el Wi-Fi del aeropuerto). Nunca debemos usar un servicio VPN con el convencimiento de que nos protegerá de las consecuencias de actividades de dudosa legalidad.

Conectando a la VPN de HTB

HTB y otros servicios que ofrecen VM vulnerables requieren que los jugadores conecten al objetivo mediante una VPN para poder acceder al laboratorio privado. Los hosts que hay en HTB no tienen acceso directo a Internet. Cuando nos conectemos a la VPN de HTB (o cualquier laboratorio de pentesting o hacking) deberíamos considerar la red como «hostil». Deberíamos conectar únicamente desde una VM, deshabilitar la autenticación de contraseña si SSH está activado en tu máquina atacante, bloquear cualquier servidor web y no dejar información sensible en tu máquina atacante (no juegues a HTB u otra red vulnerable con la misma VM que usas para realizar las asesorías de tus clientes). Cuando conectemos a una VPN (ya sea en HTB Academy o en la plataforma principal de HTB), lo haremos mediante el siguiente comando:

user@htb[/htb]$ sudo openvpn user.ovpn

Thu Dec 10 18:42:41 2020 OpenVPN 2.4.9 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 21 2020
Thu Dec 10 18:42:41 2020 library versions: OpenSSL 1.1.1g  21 Apr 2020, LZO 2.10
Thu Dec 10 18:42:41 2020 Outgoing Control Channel Authentication: Using 256 bit message hash 'SHA256' for HMAC authentication
Thu Dec 10 18:42:41 2020 Incoming Control Channel Authentication: Using 256 bit message hash 'SHA256' for HMAC authentication
Thu Dec 10 18:42:41 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]
Thu Dec 10 18:42:41 2020 Socket Buffers: R=[212992->212992] S=[212992->212992]
Thu Dec 10 18:42:41 2020 UDP link local: (not bound)
<SNIP>
Thu Dec 10 18:42:41 2020 Initialization Sequence Completed

La última línea del código anterior nos dice que nos hemos conectado a la VPN con éxito.
Aquí sudo le dice al host que ejecute el comando como usuario root, openvpn es el cliente VPn y el archivo user.ovpn es la clave VPN que descargamos, ya sea de la academia o de la plataforma principal. Si usamos el comando ifconfig en otra terminal, veremos un adaptador tun en el caso de haber conectado con la VPN:

user@htb[/htb]$ ifconfig

<SNIP>

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.10.x.2  netmask 255.255.254.0  destination 10.10.x.2
        inet6 dead:beef:1::2000  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::d82f:301a:a94a:8723  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen

Y con **netstat -rn** nos mostrará las redes accesibles mediante la VPN:

user@htb[/htb]$ netstat -rn

Kernel IP routing table
Destination     Gateway         Genmask           Flags   MSS   Window  irtt   Iface
0.0.0.0             192.168.1.2     0.0.0.0                UG        0            0          0   eth0
10.10.14.0       0.0.0.0             255.255.254.0    U          0            0          0    tun0
10.129.0.0       10.10.14.1       255.255.0.0        UG        0            0          0   tun0
192.168.1.0     0.0.0.0             255.255.255.0    U          0            0          0   eth0

Como podemos ver la red 10.129.0.0/16 usada por las máquinas de HTB Academy es accesible a través del adaptador tun0 por la red 10.10.14.0/23.

Términos comunes

El campo del pentesting/hacking es muy amplio. Encontraremos incontables tecnologías a lo largo de nuestras carreras.

Aquí os traigo algunos de los términos más comunes y tecnologías con las que nos cruzaremos en repetidas ocasiones y sobre las que debemos tener cierto conocimiento. No se trata de una lista exhaustiva, pero es suficiente para comenzar con los módulos fundamentales y las máquinas sencillas de HTB.

¿Qué es una Shell?

Se trata de un término muy habitual que escucharemos una y otra vez. Tiene distintos significados. En un sistema Linux, la shell es un programa que toma la entrada del usuario a través del teclado y pasa esos comandos al sistema operativo para realizar una función específica. Al principio, la shell era la única interfaz disponible para actuar con los sistemas. Con el tiempo, han aparecido muchos tipos y versiones de sistemas operativos con interfaz gráfica (GUI) para complementar a la línea de comandos (shell), como la terminal de Linux, la línea de comandos de Windows o la PowerShell de Windows.
La mayoría de sistemas Linux usan un programa llamado Bash (Bourne Again Shell) como shell para interactuar con el SO. Bash es una versión mejorada de sh, el programa de shell original de los sistemas Unix. Además de bash hay otras shells, como Zsh, Tcsh, Ksh, Fish shell, etc.

A menudo leeremos u oiremos hablar a otros sobre «obtener una shell» en un sistema. Esto significa que el host objetivo ha sido explotado y hemos obtenido acceso a nivel de shell (normalmente bash o sh) y podemos ejecutar comandos de forma interactiva como si estuviéramos registrados en el host. Se puede obtener una shell explotando una aplicación web o una vulnerabilidad de red/servicio u obteniendo credenciales y autenticándonos en el host de forma remota. Hay tres tipos principales de conexiones shell:

Tipo de shellDescripción
Shell reversaInicia una conexión devuelta a un «listener» en nuestra máquina atacante
Shell vinculadaVincula a un puerto específico en el objetivo y espera una conexión de nuestra máquina atacante
Shell de webEjecuta comandos del SO a través del navegador web, normalmente no interactivos o semi-interactivos. También se puede usar para ejecutar comandos aislados

Cada tipo de shell se usa para un caso distinto, y de la misma forma que hay varias maneras de obtener una shell, el archivo que nos ayude a obtenerla se puede escribir en distintos lenguajes (Python, Perl, Go, Bash, Java, awk, PHP, …). Pueden ser scripts más o menos largos, más o menos complejos, para facilitar una conexión de vuelta con el host objetivo y obtener acceso de «shell».

¿Qué es un puerto?

Podemos pensar en un puerto como una ventana o puerta de una casa (la casa sería el sistema remoto). Si la ventana o la puerta está abierta o no está bien cerrada, podemos obtener acceso a la casa sin autorización. Los puertos son puntos virtuales donde las conexiones de red comienzan y acaban. Están basados en software y gestionados por el sistema operativo del host. Los puertos están asociados a procesos específicos o servicios, y permiten a los ordenadores diferenciar entre distintos tipos de tráfico.

A cada puerto se le asigna un número, y algunos están estandarizados en todos los dispositivos de red (aunque un servicio puede configurarse en un puerto distinto al estándar). Los números de puerto nos permiten acceder a servicios o aplicaciones específicas que están corriendo en el dispositivo objetivo. A muy alto nivel, los puertos ayudan a las computadoras a entender cómo manejar los distintos tipos de datos que reciben.

Hay dos categorías de puertos, los Transmission Control Protocol (TCP) y los User Datagram Protocol (UDP).
TCP está orientado a conexión. Esto quiere decir que se debe establecer una conexión entre cliente y servidor antes de que se puedan enviar los datos. El servidor debe encontrarse en un estado de escucha esperando peticiones de conexión de los clientes.

UDP utiliza un modelo de comunicación sin conexión. Esto provoca un bajo grado de fiabilidad, ya que no hay garantía de entrega de los datos. Esto es útil cuando la comprobación/corrección de errores no es necesaria o es gestionada por la misma aplicación. UDP es apropiado para aplicaciones que ejecutan tareas sensibles al tiempo ya que la entrega de paquetes es más rápida que la espera por los paquetes retrasados durante la transmisión.
Hay 65535 puertos TCP y 65535 puertos UDP distintos, cada uno con su número.

Como profesionales de la seguridad de la información debemos ser capaces de recordar rápidamente grandes cantidades de información de una amplia variedad de temas. Es esencial tener una buena base a la hora de recordar puertos TCP y UDP por su número, sin tener que buscarlo. Esto viene con la práctica y la repetición, y a veces se convierte en una segunda naturaleza a la hora de atacar máquinas, laboratorios o en redes del mundo real, ayudándonos a trabajar de forma más eficiente y priorizando mejor nuestros esfuerzos de enumeración y ataques.
Puedes encontrar muchas guías en Internet que indican los distintos puertos. Desafíate a ti mismo y memoriza tantos como puedas y haz una búsqueda de los distintos protocolos.

¿Qué es un servidor web?

Un servidor web es una aplicación que correo en el servidor de back-end, el cual maneja todo el tráfico HTTP que llega desde el navegador del cliente, lo enruta a las páginas de destino solicitadas y finalmente responde al navegador. Los servidores web normalmente corren en los puertos TCP 80 y 443 y son responsables de conectar a los usuarios finales con varias partes de la aplicación web, además de manejar sus distintas respuestas:

Captura de pantalla de HackTheBox con la URL

Las aplicaciones web tienden a estar abiertas a la interacción del público en Internet, por lo que pueden poner en peligro el servidor back-end si aparece alguna vulnerabilidad. Las aplicaciones web pueden proporcionar una superficie de ataque muy amplia, convirtiéndolos en un objetivo de alto valor para atacantes y pentesters.

Muchos tipos de vulnerabilidades pueden afectar a las aplicaciones web. A menudo estucharemos hablar sobre OWASP Top 10. Se trata de una lista estandarizada de las 10 vulnerabilidades web más peligrosas. No aparecen todas las vulnerabilidades, pero sí las más frecuentes durante los últimos años. Las metodologías en asesorías de seguridad web suelen basarse en esta lista como punto de partida para las principales categorías que el asesor debe comprobar.

NúmeroCategoríaDescripción
1Broken Access ControlLas restricciones no están debidamente implementadas para prevenir el acceso de los usuarios a otras cuentas, viendo datos sensibles, pudiendo modificar datos, etc.
2Fallos de criptografíaErrores relacionados con la criptografía a menudo llevan a la exposición de datos sensibles o a comprometer el sistema
3InyecciónLos datos enviados por el usuario no son validados, filtrados o saneados por la aplicación. Ejemplos: SQLi, inyección de comandos, LDAP, etc.
4Diseño inseguroEstos problemas aparecen cuando las aplicaciones no se diseñan con la seguridad en mente
5Mala configuración de seguridadLa falta de refuerzo en la seguridad en cualquier parte de la aplicación, configuraciones por defecto inseguras, almacenamiento en la nube abierto, muestra de mensajes de error con demasiada información
6Componentes obsoletos y vulnerablesUso de componentes (lado cliente y lado servidor) que son vulnerables, no soportados u obsoletos
7Fallos de identificación y autenticaciónLos ataques relacionados con la autenticación que tienen como objetivo la identidad del usuario, la autenticación y el manejo de sesión
8Fallos de software e integridad de los datosRelacionados con código e infraestructuras que no están protegidas contra violaciones de la integridad. Ejemplos: cuando una aplicación confía en plugins, librerías o módulos de fuentes no confiables, repositorios y redes de entrega de contenido (CDNs)
9Errores en el acceso de seguridad y la monitorizaciónEsta categoría ayuda a detectar, escalar y responder a brechas activas
10Server-Side Request ForgeryLas debilidades de SSRF ocurren cuando una aplicación web está obteniendo un recurso remoto sin validar la URL introducida por el usuario. Esto permite que el atacante obligue a la aplicación a enviar una petición elaborada a una dirección inesperada, incluso estando protegidos mediante firewall, VPN o cualquier otro tipo de lista de control de accesos

Es primordial familiarizarse con cada una de estas categorías y las distintas vulnerabilidades que existen para cada una.

Herramientas básicas

Herramientas como SSH, Netcat, Tmux y Vim son esenciales y se usarán a diario por parte de la mayoría de profesionales de la seguridad de la información. Aunque estas herramientas no están pensadas como herremientas de pentesting, son vitales a la hora del proceso de cualquier prueba de penetración, por lo que deberemos dominarlas.

Usando SSH

Secure Shell (SSH) es un protocolo de red que corre en el puerto 22 por defecto y proporciona a usuarios como los administradores de sistemas una forma segura de acceder a un ordenador de forma remota. Se puede configurar con autenticación por contraseña, o sin contraseña utilizando autenticación de clave pública mediante un par de claves SSH pública/privada. SSH se puede usar para acceder remotamente a sistemas en la misma red, en Internet, facilitar conexiones a recursos de otras redes mediante el reenvío de puertos/proxy, o subir/bajar archivos de o desde sistemas remotos.

SSH utiliza un modelo cliente-servidor, conectando un usuario ejecutando un cliente SSH como OpenSSH a un servidor SSH. Cuando atacamos una máquina o durante una asesoría real, a menudo obtenemos credenciales en texto plano o una clave privada SSH que puede usarse para conectar directamente a un sistema por SSH. Este tipo de conexiones son normalmente mucho más estables que una shell inversa y se pueden usar como un host de salto para enumerar y atacar otros hosts en la red, transferir herramientas, configurar persistencia, etc. Si obtenemos un conjunto de credenciales, podemos usar SSH para autenticarnos remotamente en el servidor usando la combinación nombredeusuario@IPremota:

user@htb[/htb]$ ssh Bob@10.10.10.10

Bob@remotehost's password: *********

Bob@remotehost#

También es posible leer claves privadas locales en un sistema comprometido o añadir nuestra clave pública para obtener acceso SSH para un usuario específico. SSH es una herramienta excelente para conectar de forma segura a una máquina remota. También proporciona una forma de mapear puertos locales en la máquina remota a nuestro localhost, lo que puede ser útil a veces.

Usando Netcat

Netcat, ncat o nc es una herramienta de red para interactuar con puertos TCP/UDP. Se puede usar para varias cosas durante una prueba de penetración. Su uso principal es para conectar shells. Además, netcat se puede utilizar para conectar cualquier puerto a la escucha e interactuar con el servicio que corra en ese puerto:

user@htb[/htb]$ netcat 10.10.10.10 22

SSH-2.0-OpenSSH_8.4p1 Debian-3

Como vemos, el puerto 22 nos envía una bandera conforme al estado del servicio que se encuentra corriendo en ese puerto. Esta técnica se llama Banner Grabbing y puede ayudarnos a identificar qué servicio se encuentra corriendo en un puerto en particular. Netcat viene preinstalado en la mayoría de distribuciones Linux. Hay una alternativa a netcat en Windows PowerShell llamada PowerCat. Netcat también se puede usar para transferir archivos entre máquinas.
Otra herramienta similar es socat, la cual tiene algunas características que netcat no soporta, como el reenvío de puertos y la conexión a dispositivos en serie. Socat también se puede utilizar para actualizar una shell a una TTY totalmente interactiva. Socat es una herramienta tan útil que debería formar parte de cualquier kit de herramientas de todo pentester.

Se puede transferir un binario independiente de socat a un sistema después de obtener ejecución de código remoto para obtener una conexión por shell reversa más estable.

Usando Tmux

Los multiplexadores de terminal, como tmux o Screen, son herramienta geniales para expandir las características de una terminal de Linux estándar, como tener múltiples ventanas dentro de una misma terminal y saltar entre ellas. Si tmux no está instalado en nuestro sistema Linux, lo podemos instalar con este comando:

user@htb[/htb]$ sudo apt install tmux -y

Una vez que tenemos tmux, podemos iniciarlo mediante su comando:

Captura de tmux

La tecla por defecto para entrar prefijos de comando de tmux es CTRL + B. Para que aparezca una nueva ventana en tmux usamos esta combinación y después pulsamos C:

Nueva ventana de tmux

Podemos ver las ventanas numeradas en la parte inferior. Podemos cambiar entre las ventanas introduciendo el prefijo y después el número de la ventana, como 0 o 1. También podemos dividir una ventana verticalmente con el prefijo y después SHIFT + %:

División vertical de tmux

También podemos dividirla horizontalmente con el prefijo y SHIFT + «:

División horizontal de tmux

Se puede cambiar entre los distintos paneles con el prefijo y pulsando después las flechas de izquierda o derecha para cambiar horizontalmente o arriba y abajo para cambiar verticalmente.

Estos comandos cubren un uso básico de tmux. Se trata de una herramienta verdaderamente potente y se puede usar para muchas cosas, incluyendo autenticación, lo cual es muy importante durante cualquier compromiso técnico. Os dejo por aquí una chuleta de tmux que os puede ser muy útil:
https://tmuxcheatsheet.com/

Usando Vim

Vim es un gran editor de texto que se puede usar para escribir código o para editar archivos de texto en sistemas Linux.

Una de las ventajas de Vim es que se basa completamente en el teclado, por lo que no necesitarás el ratón, lo cual puede incrementar notablemente tu productividad y eficiencia en la escritura y edición de código. Vim o vi suele estar presente en todos los sistemas Linux comprometidos, por lo que aprender a usarlo nos permite editar archivos incluso de forma remota. Vim también tiene otras características, como las extensiones y plugins, los cuales pueden extender significativamente su utilidad y convertirlo en un gran editor de código.
Para abrir un archivo con Vim podemos hacerlo de la siguiente forma:

user@htb[/htb]$ vim /etc/hosts
Comenzando con el editor vim

Si queremos crear un nuevo archivo, introduciremos el nombre del archivo y Vim abrirá una nueva ventana con ese archivo. Una vez abierto, estaremos en el modo normal de sólo lectura, el cual permite leer el archivo y navegar por él. Para editarlo, hemos de pulsar la tecla i para entrar en el modo de inserción, que se muestra mediante — INSERT — en la parte inferior de Vim:

Modo de inserción en vim

Una vez hayamos acabado de editar el archivo, podemos salir del modo de inserción con la tecla esc, volviendo al modo normal. Aquí podemos usar las siguientes teclas para realizar algunas acciones:

ComandoDescripción
xCortar carácter
dwCortar palabra
ddCortar una línea completa
ywCopiar palabra
yyCopiar una línea completa
pPegar

Truco: Podemos multiplicar cualquier comando para que se ejecute repetidas veces añadiendo un número antes del mismo (por ejemplo, ‘4yw’).

Si queremos guardar un archivo o quitar Vim, hemos de pulsar « para entrar en el modo comandos. Ahora podremos ver en la parte inferior los comandos que introduzcamos:

Modo comandos en vim

Existen varios comandos disponibles. Estos son algunos de ellos:

  • :1 -> Ir a la línea 1
  • :w -> Escribir el archivo, guardar
  • :q -> Quitar
  • :q! -> Quitar sin guardar
  • :wq -> Guardar y quitar

Aquí tenéis una chuleta de Vim que os puede ser útil:
https://vimsheet.com/

Conclusiones

Y hasta aquí llega la primera entrega de este extenso módulo. Dentro de poco publicaré la segunda entrega, que ya tengo casi preparada, pero si tenéis cualquier duda, como siempre, no tengáis ningún problema en preguntarme por el medio que sea, ya sea por aquí en los comentarios o mediante mis redes sociales.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.