¿Cómo buscar nuevas vulnerabilidades? [cerrado]

-1

Me han hecho esta pregunta, y realmente no sé cómo lo haría. Mi respuesta fue tomar las vulnerabilidades conocidas y tratar de explotarlas de una manera diferente, pero esto no es realmente una nueva vulnerabilidad, sino un nuevo ataque basado en una vulnerabilidad conocida.

Entonces, mi pregunta es, ¿cómo es el proceso de investigación de vulnerabilidades? (en una pieza de software, en un sistema o en un protocolo). Supongo que sería algo como:

  1. Investigación en profundidad sobre dónde intenta encontrar una vulnerabilidad. Por ejemplo: investigación en profundidad sobre cómo funciona una PKI.
  2. Una vez que sepa todo, busque si hay algún punto débil y comprenda por qué es un punto débil.
  3. Intenta explotar estos puntos débiles.
  4. Informe.

¿Es correcto ese proceso?

    
pregunta yzT 31.05.2013 - 10:37
fuente

2 respuestas

4

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 ...

    
respondido por el Gilles 31.05.2013 - 12:05
fuente
2

Uso muchas de las herramientas básicas de UNIX. grep, awk, corte, cabeza, cola, gato y vim. Esto es cuando el código fuente está allí. Si no, golpeo IDA =)

Básicamente, lo que hago es buscar funciones que se implementan mal a menudo (memcpy, malloc, abre ese tipo de funciones). Y retroceda hasta obtener el origen de las variables utilizadas como argumentos. Cuando estos están controlados (filtrados), compruebo si los filtros son decentes. Si no están controlados (entrada del usuario) comienzo el proceso de explotación. Y trate de resolver el enigma sobre cómo aprovechar al máximo esa única función.

El otro método que intento es simplemente piratearlo. Es decir, veo un cuadro de búsqueda. Simplemente intento el xss más básico posible y espero que funcione. O con este caso que hice tuve una aplicación de cliente. Eso no necesitaba autenticación, así que lo revirtí y demostré que ese no es el camino a seguir. Noté que la vulnerabilidad era un tipo de seguridad, esos tipos eran desarrolladores a los que no les importaba la seguridad lo suficiente como para saber que era posible invertir el software.

Esas son mis formas, Fuzzing también es genial. Como es mona.py

    
respondido por el Stolas 31.05.2013 - 12:18
fuente

Lea otras preguntas en las etiquetas