Parafraseando a alguien que hace esto para ganarse la vida: "Explotar vulnerabilidades es un oficio. Investigar vulnerabilidades es un arte negro ".
Una forma común de buscar vulnerabilidades en el software (o hardware o una combinación) es fuzzing . Mira alguna interfaz y arroja todo tipo de basura. Si sigue funcionando correctamente ("acceso denegado", "error de sintaxis", ...), intente algo de basura diferente. Si hace algo interesante (sin respuesta, "falla de segmentación", ...), ha golpeado algo que no está funcionando como se esperaba, así que investigue más para ver si ha encontrado un problema real. Tan pronto como descubres que el objetivo no funciona según lo previsto, y la diferencia de comportamiento tiene un impacto en la seguridad, has encontrado una vulnerabilidad y el siguiente paso es la explotación (aprovechar la vulnerabilidad para obtener algún resultado útil que infrinja la política de seguridad).
Si bien puede hacer fuzz con basura aleatoria, es más productivo buscar condiciones de contorno. Intente enviar algunos bytes nulos o unicode con formato incorrecto, o un nombre que contenga una comilla simple , o una longitud que esté justo arriba o debajo del límite de tamaño.
Si tiene el código fuente, puede realizar un análisis estático y buscar problemas comunes (accesos a matrices no comprobados, cadenas de forma libre concatenadas para formar una consulta de base de datos, ...). También puede realizar un análisis estático en un binario, pero tiende a ser mucho más difícil.
Para buscar vulnerabilidades en los protocolos, puede confundir el protocolo en una implementación de prueba. Otro enfoque es intentar probar algunas propiedades deseadas del protocolo. Si se queda atascado en la prueba, tal vez sea porque esa propiedad de seguridad deseada no se cumple.
A veces, puede encontrar vulnerabilidades por accidente, ya que se topa con un caso de esquina y no se comporta como se esperaba y se ve que esto tiene un impacto en la seguridad. Pero es mucho más productivo tener una comprensión profunda de lo que estás atacando. Necesita saber qué componentes debe ver, cómo ajustar su Fuzzer para obtener resultados interesantes en este siglo, que su prueba no solo falla porque no puede encontrar los argumentos correctos ...