Tags

, , , , , , , , , ,

Como parte del proceso de evaluación de seguridad es importante determinar los factores que pudieran representar vulnerabilidades dentro del sistema que se está analizando; el Hacker Ético no busca comprometer la seguridad del sistema o del equipo que está atacando (acotando el concepto de ataque al contexto de Hacking Ético), por el contrario, utilizando las herramientas y técnicas que utilizaría un hacker malintencionado, busca identificar (en primera instancia) los aspectos del sistema suceptibles de ser atacados.

Dada la imposibilidad de un sistema 100% seguro, los elementos que representan vulnerabilidades conforman una lista que comienza con la simple existencia del sistema; el Sistema Operativo (fabricante/versión) es el primer y más importante aspecto que debe ser tomado en cuenta en la evaluación de seguridad; saber el Sistema Operativo corriendo en una máquina ayuda al hacker (tanto ético como malintencionado) a dirigir las pruebas subsecuentes.

Las pruebas de identificación del Sistema Operativo no son conclusivas y la certeza de sus resultados puede ser reforzada mediante la identificación de servicio. El escaneo de puertos es la mitad de la tarea en tanto que conocer el servicio (fabricante/versión) puede ser definitivo en una evaluación de seguridad o en un ataque.

La entidad atacante puede elegir a partir de este punto entre varios caminos; en primer lugar, un atacante fanático, script-kiddie o un simple bándalo puede decantarse por usar la información sobre el Sistema Operativo y los servicios que corre para buscar un exploit, compilarlo y lanzarlo, esperando que el shellcode implícito le otorgue algún acceso al sistema.

Personas más experimentadas en las sutilezas de la seguridad, utilizarían esta información para realizar un acceso menos intrusivo, perpetrar el sistema mediante un escalamiento de privilegios aparentemente inocente o bien diseñar un ataque con un propósito específico a la prueba de seguridad (en el caso del hacking ético) o bien en un ataque en sí.

La detección del sistema operativo obedece a una técnica conocida como “fingerprinting” y en el caso más conocido y más usado, esto se realiza mediante el análisis de las respuestas de un equipo ante ciertos paquetes con un formato específico; la forma más común de realizar esto es mediante el análisis de la pila de protocolos TCP/IP enviando mensajes corruptos y correctos, comparando los parámetros de respuesta (conocido como “huella” del sistema) con una base de datos que almacena las huellas de muchos sistemas para elegir entre estos.

Por otro lado, la identificación de servicios es un aspecto menos elegante pues consiste en establecer una conexión TCP (base de la gran mayoría de aplicaciones en red) y realizar ciertas preguntas para obtener información en formato entendible por el usuario.

La posibilidad de una plataforma de exploits queda en entredicho ya que el software de este tipo utiliza una base de datos en la cual almacena el codigo ejecutable de un exploit en particular y en el punto preciso del programa se debe incluir un codigo de carga (llamado payload) que puede ser el programa que se desea ejecutar tras el aprovechamiento de la vulnerabilidad o un comando.

El exploit es un programa o técnica (como SQL Injection o XSS) que se aprovecha de cierta vulnerabilidad para realizar alguna tarea inesperada en el sistema que se busca comprometer (comúnmente el acceso no autorizado). Por su propia naturaleza es todo menos software general, tiene claramente delimitado su comportamiento y parámetros, de modo que su funcionalidad esta totalmente anclada al escenario para el cual fue creado.

Es claro que los analistas y hackers avanzados pueden programar sus propios exploits tras cierto conocimiento de la aplicación y su forma de comunicación, muchos (demasiados) de estos exploits pueden encontrarse en la red; el código fuente es normalmente la forma de distribución usada (estar hablando de exploits a este grado requiere bastantes conocimientos de programación, sistemas operativos y redes como ya se ha mencionado) así el código puede ser modificado para comportarse de alguna otra forma tras la explosión de la vulnerabilidad.

Todo este proceso de descarga, modificación, compilación y ejecución es una proceso manual dada la naturaleza delimitada de los exploits. Una plataforma de lanzamiento de exploits debe permitir todo este proceso automatizando las tareas (o parte de ellas), de otro modo no habría diferencia entre el proceso manual y un compendio de exploits ya descargados y compilados.

La forma en la cual opera el software más común para esta tarea (Metasploit) es muy similar a ésto último, se tiene un conjunto de exploits previamente compilados y un conjunto de programas que serán ejecutados tras la explosión; unicamente se requiere del usuario la elección de una combinación exploit-shellcode y una configuración mínima indispensable del exploit, como el objetivo o el puerto (en algunos casos) a usar.

La ventaja de éste tipo de software para personas no expertas en los aspectos importantes de la computación, es que no requiere conocimientos de programación para compilar código desconocido y permite elegir la carga de manera manual. La gran desventaja es clara, la anexión de nuevos exploits requiere conocimientos avanzados de programación. Puesto que es necesario seguir una sintaxis específica y la API diseñada para este fin no está orientada al usuario tanto como al programa.

Y llegados a este punto nos encontramos exactamente en la misma situación en la que nos encontraríamos de realizar el proceso manualmente, y en este punto es indistinto modificar el código descargado de alguna página a modificarlo bajo los parámetros de la plataforma de lanzamiento para agregarlo y posteriormente usarlo. Entonces, la plataforma de lanzamiento de exploits carece de relevancia en la evaluación de seguridad y formalmente la plataforma y su uso dependen de la correcta la identificación del Sistema Operativo y los servicios que corre.

Metasploit framework está definido como software de test de penetración y de valoración de vulnerabilidades, yo estoy en desacuerdo con esa definición puesto que hasta la fecha el programa es principalmente una plataforma de lanzamiento de exploits de forma ciega que (irónicamente) está orientada a expertos en su uso.

Un test de penetración no sólo es acceder al sistema remoto explotando vulnerabilidades mediante programas y payloads, requiere conocimiento previo del sistema y profundo entendimiento de lo que se está haciendo. Por sí solo, Metasploit no es adecuado para una valoración de vulnerabilidades ya que está dirigido a la penetración únicamente.

Pensando de forma optimista, Metasploit tiene su lugar en una evaluación de seguridad tras haber obtenido suficiente información sobre el sistema objetivo y dicha evaluación contemple y apruebe el uso de exploits para perpetrar el sistema, asunto delicado ya que una irrupción así puede alterar o dañar el sistema y comprometer no únicamente la seguridad en un ambiente no controlado, sino afectar la infraestructura de la empresa y sus procesos.

Cualquiera puede bajar el programa, actualizar su base de datos, leer tutoriales y comenzar a lanzar exploits a diestra y siniestra contra cualquier equipo que esté dentro de la red sin tener conocimiento sobre ningún aspecto de seguridad, pero esto no es exclusivo de Metasploit; Nmap, Netcat por mencionar algunos, también son susceptibles de ésta irresponsabilidad por parte del usuario.

La evaluación de seguridad y las herramientas orientadas a ello, poseen características de funcionamiento y presentación de resultados que buscan ofrecer información sobre el sistema para que el analista pueda identificar anomalías y fallos de seguridad y recomendar soluciones o mejoras. Realizar una evaluación de seguridad con Metasploit equivaldría a recorrer el interior de una casa tratando de reconocer todo dando palazos con los ojos cerrados.

Sí, no soy fan de Metasploit. Para mí sólo es un juguete para script-lammers >:/