No hay una sola manera de encontrar vulnerabilidades. Pero aquí hay algunos pasos que puedes seguir.
Destino
Primero debes elegir una plataforma y un software para atacar. Para empezar elegiría algo que sea de código abierto. Hay varias ventajas a esto; El principal es que puedes mirar el código fuente. A continuación, debe elegir un aspecto que le gustaría atacar. Por ejemplo, tal vez desee atacar la implementación UDP de la pila de redes de Linux.
Realizar un análisis en una pieza de software de código cerrado significa que estás desensamblando el binario, revisando las instrucciones y depurando el proceso. Esto es largo y tedioso. Es mejor comprender qué rompe el código con el código fuente antes de buscarlo en el desmontaje.
Al ser específico en su objetivo le permite analizar sistemáticamente una pieza de software.
Analizar
Con su target en mente, comience su análisis de la parte del software que desea encontrar vulnerabilidades.
- Determine qué archivos de código fuente afectan su objetivo.
- Con el código abierto puede insertar mensajes de depuración para asegurarse de que comprende el flujo de código. Esto puede ser extremadamente importante. Saber a qué secciones del código se llaman, y las variables que conducen a ese resultado es clave para entender lo que está sucediendo.
- Ejecutar herramientas de análisis de código sobre el proyecto. Dependiendo del proyecto, esto podría ser un punto discutible, pero pueden ser útiles y detectar errores comunes de programación.
- Habilite todas las banderas de compilación del compilador . Tu objetivo es encontrar errores de programación. Qué mejor manera que el compilador le diga dónde cree que el código es malo.
Estas son solo algunas de las cosas que puede hacer para analizar el software. Cree una lista de posibles errores de codificación.
Activación
Ahora, con una lista de posibles fallas de codificación, debe determinar si puede desencadenarlas. Una vez más, los mensajes de depuración le ayudarán. Regrese al código fuente y determine qué es exactamente lo que debe suceder para que cada falla de codificación rompa el software. No está buscando una explotación completa, solo quiere que el código se bloquee o haga algo inesperado. Es necesario determinar qué podría desencadenar una falla de codificación. Esto podría ser algo que afecte a una variable de longitud, engañar a una función para que tome la ruta para procesar datos de manera incorrecta, etc. Algunas fallas de codificación simplemente no son desencadenantes, pero esa es la naturaleza del análisis de vulnerabilidad.
En este punto, tiene una lista de fallas y una lista de ideas para cada falla sobre lo que podría provocar que haga algo inesperado.
Fuzzing
Ahora escribes código. Usar prácticamente cualquier lenguaje de programación es conveniente para el software que está atacando. Podría escribir código Python para lanzar paquetes específicos en dispositivos de red para intentar eliminar la implementación UDP de un dispositivo basado en Linux.
El objetivo es implementar sus activadores y esperar que el código funcione de la manera que usted piensa. Sus mensajes de depuración serán útiles aquí.
- Ellos pueden decirle si la ruta del código tomada es anormal.
- Pueden mostrarte las variables que intentas manipular
- Se aseguran de que su activador esté haciendo lo que usted espera y puede ajustarlo en consecuencia.
Con un poco de suerte, puedes hacer que suceda algo diferente. Tal vez eso puede llevar a la ejecución del código, tal vez no. Es un caballo de un color diferente.
Realidad
El análisis de vulnerabilidad lleva tiempo. Un montón de tiempo. No vas a pasar un día analizando software y encontrando 10 vulnerabilidades. El promedio no oficial para el análisis de vulnerabilidad es 1 vulnerabilidad por cada 3 meses de análisis. Puede duplicar ese tiempo si está analizando un proyecto de código no abierto.