¿Herramientas dinámicas para detectar vulnerabilidades en aplicaciones de software escritas en c?

0

Estoy haciendo un proyecto para detectar vulnerabilidades en Windows 7/8 para aplicaciones de software. Algunos de los cuales algunos tienen código fuente disponible y otros no.

Por favor, sugiera alguna técnica que pueda ayudarme a detectar vulnerabilidades ya sea en tiempo de compilación o en tiempo de ejecución.

¿Hay alguna forma nueva que pueda usarse para descubrir la vulnerabilidad de desbordamiento del búfer?

    
pregunta Aslan 21.02.2013 - 10:29
fuente

4 respuestas

2
  • Avalanche es una herramienta de detección de defectos dinámica que genera "entradas de la muerte": los datos de entrada son críticos. Errores y vulnerabilidades en el programa analizado.

  • BoundsChecker es una herramienta de validación de llamadas de comprobación de memoria y API utilizada para el desarrollo de software C ++ con Microsoft Visual C ++ .

  • Valgrind es un marco de instrumentación para crear herramientas de análisis dinámico. Existen herramientas de Valgrind que pueden detectar automáticamente muchos errores de gestión de memoria y de subprocesos y perfilar sus programas en detalle.

  • ! exploitable (pronunciado "bang exploitable") es una extensión de depuración de Windows (Windbg) que proporciona análisis automatizados de fallos y Evaluación de riesgos de seguridad. Primero, la herramienta crea hashes para determinar la singularidad de un bloqueo y luego asigna una clasificación de explotabilidad al bloqueo: explotable, probablemente explotable, probablemente no explotable o desconocido.

respondido por el Cristian Dobre 21.02.2013 - 12:54
fuente
2

Normalmente uso fuzzing para identificar vulnerabilidades en software con o sin el código fuente. La técnica de fuzzing consiste en manipular las entradas de una aplicación de forma semiautomática para producir errores que debe estudiar más adelante con un depurador o inspeccionar el código fuente.

Por ejemplo, puede programar un fuzzer para el formato PDF y usarlo para generar archivos PDF con formato incorrecto y abrirlos con su software que supuestamente fallará de forma grave al leer archivos PDF con formato incorrecto.

Con un fuzzer puede probar miles de combinaciones diferentes de entradas que cubren muchos casos, pero es un método que no garantiza que no haya errores.

Puede usar la Peach Fuzzing Platform que es un buen marco para implementar fuzzers e incluye las herramientas para abrir el depurador automáticamente y registrar las entradas. cuando se encuentra un error.

    
respondido por el kinunt 21.02.2013 - 13:22
fuente
0

Detectar vulnerabilidades en el código C es hard science y sigue siendo un problema abierto. La herramienta más conocida para eso sigue siendo el cerebro humano. Esto se llama revisión de código . Este tipo de cosas funcionan si te encargas de poner la carga de la prueba en el desarrollador.

De hecho, la situación común es que el desarrollador produjo el código, luego el revisor intenta darle sentido. Pero el desarrollador no solucionará nada hasta que el revisor demuestre una vulnerabilidad. Eso es lo que ocurre en muchos proyectos de software en los que los "revisores" son "Internet en general", y el proveedor de software propone un parche solo cuando se ha encontrado y publicado un exploit real. Esto es bastante insatisfactorio.

En su lugar, haga que el desarrollador escriba código claro con muchos comentarios, de modo que un revisor con acceso al código fuente pueda entender lo que hace el código, y vea por qué los búferes no están desbordados. Bajo estas condiciones, la revisión del código puede ser eficiente, principalmente porque obliga al desarrollador a tener una visión clara de su propia tarea.

Las

herramientas dinámicas como Valgrind son excelentes como herramientas de depuración, pero no tanto para detectar posibles vulnerabilidades. Le dirán si se produjo un desbordamiento de búfer durante las pruebas , no si se pudo haber producido un desbordamiento con diferentes datos de entrada .

C es un lenguaje difícil porque tienes que pensar en todo. Una fuente común de desbordamientos de búfer en C es el manejo de cadenas de caracteres, ya que C no tiene cadenas de caracteres que valgan ese nombre, solo una matriz de caracteres con la convención de un cero final. Otros lenguajes de programación ofrecerán cadenas reales que pueden ser concatenadas, divididas y compartidas como si fueran meros enteros; tales cadenas evitan muchos desbordamientos de búfer simplemente siendo mucho más fáciles de usar. Por supuesto, las cadenas fáciles de usar requieren algún tipo de gestión automática de la memoria, ya sea un recolector de basura o recuento de referencias (hasta cierto punto, C ++ puede hacer recuento de referencias para cadenas, pero aún debe volver a convertirlas en matrices de caracteres al interactuar con el sistema operativo).

Nada de lo anterior se aplica directamente a su problema de detección de vulnerabilidades en aplicaciones existentes. Solo muestra que su tarea es difícil . Se puede demostrar que es imposible en generalidades (es posible que nunca detecte automáticamente las vulnerabilidades todas ).

    
respondido por el Tom Leek 21.02.2013 - 13:27
fuente
0

Siempre se puede intentar descompilar programas, pero el resultado puede variar mucho, por lo que si se supone que la herramienta funciona al menos de forma semiautomática, supongo que lo que está pidiendo es fuzzing , al menos para el código ya compilado, esta es una manera.

No estoy seguro de por qué intentarías hacer un análisis dinámico, pero si tienes el código, te recomiendo que eches un vistazo a análisis estático .

EDITAR: Me viene a la mente, también de ciencia dura, echa un vistazo a los artículos sobre Modelado y Razonamiento Compatibles con Computadora. La prueba de que su código es correcto en lugar de encontrar errores podría ser algo que valga la pena analizar por usted.

    
respondido por el user857990 21.02.2013 - 12:52
fuente

Lea otras preguntas en las etiquetas