Cómo encuentran los hackers las vulnerabilidades en el software y los SO?

¡Esa es una excelente (y muy amplia pregunta)! Lo que realmente se busca es una vulnerabilidad. Una vulnerabilidad es un defecto en un sistema que alguien, como un hacker, podría utilizar para hacer que el sistema se comporte de una manera que no estaba prevista. Nos gusta llamarlo una "característica", no un error :).

Un exploit, es una pieza de código o un proceso que se aprovecha de la vulnerabilidad para saltarse ciertas restricciones.

Un excelente recurso para encontrar exploits ya hechos es la base de datos de exploits. Actualmente contiene más de 35.483 exploits. En otras palabras:

main-qimg-cb1b4a1bd8d24c032c16787aae11f886.webp

La primera vulnerabilidad que recuerdo haber explotado, fue una inyección de comandos en una aplicación web que ofrecía una funcionalidad básica de herramientas de red.

Supongamos que este es el formulario web de esa aplicación vulnerable:

main-qimg-7d225b63d82952f82061da8993c5eac4.webp

Si se pone una dirección IP, como "8.8.8.8", la aplicación tomaría esa entrada y crearía un comando para la línea de comandos.

Probablemente se vería así: ping -c 3 8.8.8.8

Aceptar la entrada del usuario y generar comandos del sistema es generalmente considerado peligroso... ¡y DIVERTIDO!

Supongamos que un atacante introduce lo siguiente en la casilla de la dirección IP:

8.8.8.8; cat /etc/passwd

El comando que se generaría sería:

ping -c 3 8.8.8.8; cat /etc/passwd

Por si aún no lo sabe, el ';' es un carácter de fin de comando. Marca el final de un comando y permite iniciar uno nuevo. En otras palabras, después de que el comando ping termine, el sistema ejecutará "cat /etc/passwd".

Por lo tanto, la aplicación web no sólo hará ping a 8.8.8.8 tres veces, sino que también mostrará el contenido del archivo /etc/passwd - un archivo importante que contiene una lista de nombres de usuario en ese sistema.

¿Cómo se encuentra este tipo de vulnerabilidad? Tienes varias opciones:

  • Busca aplicaciones que ofrezcan funcionalidades que se realicen normalmente en la línea de comandos.
  • Aprende sobre el código vulnerable y búscalo en Github y otros repositorios de código fuente online. Sugerencia: para PHP es sistema y passthru

Las aplicaciones web son un gran lugar para empezar. No sólo son las aplicaciones web más fáciles de entender (en comparación con los desbordamientos de búfer, off-by-one, desbordamiento de pila, y las vulnerabilidades de cadena de formato), también son más fáciles de explotar.

Sólo para aclarar. Un exploit es el uso de software, datos o comandos para "explotar" una debilidad en un sistema o programa informático para llevar a cabo alguna forma de intención maliciosa, como un ataque de denegación de servicio, troyanos, gusanos o virus. El punto débil del sistema puede ser un error, un fallo o simplemente una vulnerabilidad de diseño. Un exploit remoto aprovecha la vulnerabilidad de seguridad sin tener acceso previo al sistema. Un exploit local necesita acceso previo al sistema vulnerable y suele implicar el aumento de los privilegios de la cuenta de usuario que ejecuta el exploit. Quienes utilizan los exploits suelen recurrir a la ingeniería social para obtener la información crítica necesaria para acceder al sistema. Muchos crackers (o piratas informáticos) se enorgullecen de su conocimiento de los exploits de software y los publican en un sitio web para compartirlos o presumir de ellos con otros crackers. Los navegadores web y los reproductores multimedia suelen ser el objetivo de los crackers, ya que ambos tienen acceso a la información del sistema y pueden descargar archivos de Internet. Los parches (o "correcciones") están destinados a remediar estas vulnerabilidades tan pronto como se revelan y suelen distribuirse en las actualizaciones de software. Por lo tanto, es vital mantener el software actualizado para asegurarse de que todas las vulnerabilidades conocidas están parcheadas. Un exploit de día cero es aquel que el creador del software aún no ha descubierto. Para evitar la pérdida de datos a causa de un ataque que se aproveche de un exploit, es una buena idea mantener copias de seguridad periódicas de los datos guardados en el ordenador

El proceso

Trucos

Un truco es un "procedimiento o práctica maliciosa y astuta... diseñada para engañar, confundir o defraudar.1" Los hackers utilizan trucos para encontrar atajos para obtener acceso no autorizado a los sistemas. Pueden utilizar su acceso con fines ilegales o destructivos, o simplemente pueden estar probando sus propias habilidades para ver si pueden realizar una tarea.

Dado que la mayoría de los hackers están motivados por la curiosidad y tienen tiempo para probar un sinfín de ataques, la probabilidad es alta de que eventualmente encuentren un método sofisticado para obtener acceso a casi cualquier entorno. Sin embargo, estos no son los tipos de ataques que abordamos en este artículo, porque la mayoría de las intrusiones exitosas se logran a través de vulnerabilidades de seguridad bien conocidas y bien documentadas que no han sido parcheadas, deshabilitadas o tratadas de otra manera. Estas vulnerabilidades son explotadas todos los días y no deberían serlo.

Encontrar vulnerabilidades de acceso

Lo que generalmente ocurre es que un hacker avanzado o de élite escribe una herramienta de escaneo que busca vulnerabilidades bien conocidas, y el hacker de élite la pone a disposición en Internet. Los hackers menos experimentados, comúnmente llamados "script kiddies", ejecutan entonces la herramienta de escaneo 24 x 7, escaneando un gran número de sistemas y encontrando muchos sistemas que son vulnerables. Suelen ejecutar la herramienta contra los espacios de nombres asociados a las empresas en las que les gustaría entrar.

Los script kiddies utilizan una lista de direcciones IP vulnerables para lanzar ataques, basados en las vulnerabilidades anunciadas por una máquina, para acceder a los sistemas. Dependiendo de la vulnerabilidad, el atacante puede crear una cuenta con privilegios o sin ellos. En cualquier caso, el atacante utiliza esta entrada inicial (también denominada "toe-hold") en el sistema para obtener privilegios adicionales y explotar los sistemas con los que el sistema penetrado tiene relaciones de confianza, con los que comparte información, con los que está en la misma red, etc.

Una vez que se ha establecido un toe-hold en un sistema, el atacante puede ejecutar herramientas de escaneo contra todos los sistemas conectados al sistema penetrado. Dependiendo del sistema comprometido, estos escaneos pueden ejecutarse dentro de la red de una organización.

Encontrando vulnerabilidades del sistema operativo

Como se mencionó anteriormente, los hackers primero buscan vulnerabilidades para obtener acceso. Luego buscan las vulnerabilidades del sistema operativo (SO) y las herramientas de escaneo que informan sobre esas vulnerabilidades.

Encontrar vulnerabilidades específicas de un SO es tan fácil como escribir una dirección URL y hacer clic en el enlace correspondiente. Hay muchas organizaciones que proporcionan información de "divulgación completa". La divulgación completa es la práctica de proporcionar toda la información al dominio público para que no sea conocida sólo por la comunidad de hackers.

Atacar las vulnerabilidades de Solaris OE

Usemos Solaris 2.6 OE como ejemplo. Una vulnerabilidad muy conocida, para la que hay parches disponibles, es el

exploit Sadmind

. Los hackers utilizan con frecuencia esta vulnerabilidad para obtener acceso a la raíz en los sistemas Solaris 2.6 OE.

Utilizando sólo un motor de búsqueda y el número CVE, encontrado mediante la búsqueda a través del sitio de Mitre mencionado anteriormente, es posible encontrar el código fuente y las instrucciones detalladas sobre cómo utilizarlo. El proceso completo sólo lleva unos minutos. El hacker encuentra el código fuente en el sitio web de SecurityFocus y encuentra instrucciones detalladas en el sitio de SANS.

Mi opinión es que depende de si se trata de sombreros blancos o sombreros negros.

En la mayoría de los casos, los sombreros blancos pueden tomarse su tiempo y o utilizar muy poco esfuerzo. Por ejemplo, pueden sentarse y escanear puertos o hacer fuerza bruta en un inicio de sesión. Esto es comúnmente muy lento pero tiende a funcionar después de algún tiempo.

En cuanto a los sombreros negros; se trabaja bajo presión. En cuanto haces el primer movimiento, el reloj empieza a correr. Yo hago pen-testing y pido que el equipo/departamento de seguridad no sepa lo que va a pasar. Esto me permite trabajar bajo presión y ver si pueden captar lo que está pasando. Los sombreros negros encontrarán pequeños exploits; por ejemplo, el spam en un formulario de inicio de sesión o una página que consulta MySQL y no se almacena en caché. La consulta de MySQL tiende a causar sólo el uso de la CPU para ir para arriba; sin embargo, esto todavía puede ser perjudicial para una empresa. Otros métodos que no deberían funcionar, pero que aún lo hacen, son tratar de encontrar vertederos de contraseñas. La mayoría de la gente sigue utilizando la misma contraseña para todo, y si encuentras un solo volcado con su información de acceso, es posible que hayas conseguido los datos de acceso del punto de venta de su empresa.

Al final del día, todo se reduce al tiempo. Como he dicho antes, una vez que un sombrero negro comienza a ir, por lo general necesitan para mantenerse unos pasos por delante.

También Kali Linux; siempre Kali Linux.