4 herramientas de código abierto para agregar a su arsenal de seguridad


Las soluciones de código abierto pueden ofrecer una forma accesible y poderosa de mejorar sus capacidades de prueba de seguridad.

La investigación de seguridad a menudo requiere una amplia variedad de herramientas y enfoques. Las herramientas de código abierto pueden ofrecer una forma accesible y poderosa de mejorar las capacidades de prueba de seguridad. Si trabaja en el espacio de la seguridad, aquí hay varias herramientas de código abierto que podría valer la pena agregar a su arsenal de herramientas de seguridad.

Generador de documentación Doxygen
Doxígeno es un generador de documentación para una variedad de lenguajes de programación populares. Permite a los usuarios extraer la estructura del código de los archivos fuente y resaltar las relaciones entre los elementos del código. Básicamente, esta herramienta proporciona una representación visual de su código y puede ayudar a proporcionar una comprensión más profunda y completa de bases de código particularmente complejas. Doxygen permite a los usuarios analizar el flujo del código y puede, por ejemplo, ayudar a inspeccionar visualmente si los activos fluyen a través de las funciones de validación de entrada en las etapas de ejecución esperadas.

Ser capaz de examinar visualmente bases de código grandes o complejas puede complementar las revisiones de código manual existentes y el fuzzing, y puede ayudar a identificar problemas que de otro modo podría haber pasado por alto. (Aquí está un breve lista de pasos puede seguir para crear un gráfico de llamadas con Doxygen). Por ejemplo, ¿se ha preguntado alguna vez cómo funciona el comando sudo de Linux? Aquí hay una representación gráfica del código creado con Doxygen.

Gráfico de llamadas de Doxygen para la utilidad sudo Linux
(Fuente: Maggie Jauregui; generado con Doxygen)

Gráfico de llamadas de Doxygen para la utilidad sudo Linux
(Fuente: Maggie Jauregui generado con Doxygen)

Solucionador de restricciones Z3
El siguiente es Z3, una herramienta de resolución de restricciones que puede complementar las herramientas de análisis, verificación y fuzzing de computer software. Proporciona enlaces para varios lenguajes de programación, incluidos C / C ++ y Python. Z3 intenta encontrar soluciones que satisfagan un conjunto específico de restricciones definidas. Esto puede resultar útil, por ejemplo, para verificar las restricciones de validación de entrada para encontrar posibles escapes que podrían resultar en estados no deseados.

Si bien la revisión manual del código y el fuzzing pueden ayudar a identificar estados problemáticos, Z3 agrega una verificación matemática y lógica integral a la mezcla, lo que proporciona un nivel adicional de revisión para el código. Puede usar esta herramienta para modelar una característica o un bloque de código en distinct para probar las restricciones y descubrir posibles problemas ocultos como desbordamiento de búfer, envolturas enteras, acceso inadecuado a la memoria y más. Por ejemplo, Trail of Bits publicó un entrada en el web site describiendo cómo usó Z3 para encontrar el Heartbleed vulnerabilidad. La publicación explica cómo convertir el código authentic en funciones y esas funciones en restricciones Z3, lo que da como resultado una combinación de valores que desborda un registro de CPU y llama con éxito a una rutina de asignación de memoria con un valor no válido, como se visualiza a continuación.

Vulnerabilidad Heartbleed detectada por Trail of Bits usando el solucionador de restricciones Z3. La parte superior izquierda muestra el código, la parte inferior izquierda muestra las funciones, la parte inferior central muestra Z3 y la parte inferior derecha muestra los resultados de Z3. (Fuente: Josh Watson, Trail of Bits)

Vulnerabilidad Heartbleed detectada por Path of Bits usando el solucionador de restricciones Z3. La parte superior izquierda muestra el código, la parte inferior izquierda muestra las funciones, la parte inferior central muestra Z3 y la parte inferior derecha muestra los resultados de Z3. (Fuente: Josh Watson, Trail of Bits)

Motor difusor LibFuzzer
La tercera herramienta es un fuzzer de código abierto llamado libFuzzer. (Vale la pena señalar que American Fuzzy Lop, o AFL, ha sido una opción frecuente durante años, y libFuzzer está ganando popularidad.) Este tipo de herramientas son valiosas para la investigación de seguridad y los esfuerzos de aseguramiento a fin de complementar los esfuerzos de pruebas de validación de entrada existentes. LibFuzzer normalmente busca entradas que harán que un sistema se bloquee o cuelgue. El motor de fuzzing puede tomar entradas iniciales y permitir permutaciones adicionales para explorar progresivamente el programa. LibFuzzer hace que sea relativamente sencillo crear un arnés a través del cual pueda interactuar y ejecutar entradas difusas en su programa.

Otro gran beneficio es la capacidad de libFuzzer para interceptar operaciones de comparación para determinar qué valores permitirían alcanzar un conjunto más amplio de cobertura. Esto evita la necesidad de codificar constantes o números mágicos para superar las verificaciones condicionales y simplifica el trabajo del probador de fuzz.

Herramienta de cobertura de código Gcov
La herramienta last, Gcov, es parte de una categoría de herramientas llamada cobertura de código, que va de la mano con los fuzzers. Dado que los fuzzers pueden ejecutarse continuamente durante días o semanas a la vez, puede ser un desafío para los usuarios comprender qué parte del código foundation han cubierto, incluidas las líneas de código a las que se ha accedido (y cuáles no). Las herramientas de cobertura de código brindan una vista detallada del progreso de un fuzzer a lo largo del tiempo, lo que permite ajustes del fuzzer que maximizan la cobertura del código del fuzzer para ayudar a garantizar que se verifiquen la mayoría de los aspectos del flujo de código / base del código. Esto ayuda a aumentar la confianza en los resultados. Aquí hay un ejemplo rápido que muestra las líneas cubiertas en azul y las líneas que no fueron marcadas en rojo.

Ejemplo de Gcov que muestra el progreso del código examinado, con rojo que representa el código al que no se ha accedido. (Fuente: Peter Oberparleiter, el proyecto de prueba de Linux)

Ejemplo de Gcov que muestra el progreso del código examinado, con rojo que representa el código al que no se ha accedido. (Fuente: Peter Oberparleiter, el proyecto de prueba de Linux)

Refuerce su seguridad con soluciones de código abierto
La comunidad de investigación y pruebas siempre está a la búsqueda de mejores herramientas que puedan usarse en la lucha para construir e implementar tecnología más resistente y confiable. Hay muchas opciones de código abierto que no solo son simples, sino que pueden ser complementos altamente efectivos para su conjunto de herramientas de seguridad existente.

Este artículo abordó Doxygen, Z3, libFuzzer y Gcov, pero hay una amplia gama de otras herramientas y marcos para explorar, como desinfectantes de direcciones, herramientas de análisis de código fuente y fuzzers específicos de dominio, entre otros. Tómese su tiempo para evaluar nuevas soluciones de código abierto que puedan fortalecer su arsenal de seguridad y mejorar sus esfuerzos de investigación y aseguramiento de seguridad.

Maggie Jauregui, investigadora de seguridad, Grupo de soluciones programables en Intel
Maggie Jauregui es investigadora de seguridad de FPGA de firmware y components para el Grupo de Soluciones Programables de Intel. A lo largo de su carrera, ha presentado y realizado presentaciones de capacitación sobre firmware … Ver biografía completa

Lectura recomendada:

Más información





Enlace a la noticia unique