Tutoriales

Complemento para IDA Pro que se puede usar para ayudar

vulfi La herramienta (Buscador de vulnerabilidades) es un complemento de IDA Pro que se puede utilizar para ayudar durante la búsqueda de errores en archivos binarios. Su objetivo principal es proporcionar una vista única con todas las referencias cruzadas a las funciones más interesantes (como strcpy, sprintf, system, etc.). Para los casos en los que se puede usar un descompilador Hexrays, intentará descartar las llamadas a estas funciones que no son interesantes desde una perspectiva de investigación de vulnerabilidades (piense en algo como strcpy(dst,"Hello World!")). Sin el descompilador, las reglas son mucho más simples (para no depender de la arquitectura) y por lo tanto solo descartan los casos más obvios.

Instalación

Colocar el vulfi.py, vulfi_prototypes.json y vulfi_rules.json archivos en la carpeta del complemento IDA (cp vulfi* ).

Preparación del archivo de la base de datos

Antes de ejecutar VulFi, asegúrese de tener una buena comprensión del binario con el que trabaja. Trate de identificar todas las funciones estándar (strcpy, memcpy, etc.) y nombrarlos en consecuencia. El complemento no distingue entre mayúsculas y minúsculas y, por lo tanto, MEMCPY, Memcpy y memcpy son todos nombres válidos. Sin embargo, tenga en cuenta que la búsqueda de la función requiere una coincidencia exacta. Esto significa que memcpy? o std_memcpy (o cualquier otra variante) no se detectará como una función estándar y, por lo tanto, no se tendrá en cuenta al buscar posibles vulnerabilidades. Si está trabajando con un binario desconocido, primero debe configurar las opciones del compilador Options > Compiler. Después de eso, VulFi hará todo lo posible para filtrar todos los falsos positivos obvios (como llamadas a printf con cadena constante como primer parámetro). Tenga en cuenta que, si bien el complemento se crea sin vínculos con una arquitectura específica, algunos procesadores no tienen soporte completo para especificar tipos y, en tal caso, VulFi simplemente marcará todas las referencias cruzadas a funciones estándar potencialmente peligrosas para permitirle continuar con el análisis manual. . En estos casos, puede beneficiarse de las funciones de seguimiento del complemento.

Uso

Exploración

Para iniciar el escaneo, seleccione Search > VulFi opción del menú de la barra superior. Esto iniciará un nuevo escaneo o leerá los resultados anteriores almacenados dentro del idb/i64 expediente. Los datos se guardan automáticamente cada vez que guarda la base de datos.

Una vez que se completa el escaneo o una vez que se cargan los resultados anteriores, se presentará una tabla con una vista que contiene las siguientes columnas:

  • Nombre del problema – Se utiliza como título para el problema sospechoso.
  • Nombre de la función – Nombre de la función.
  • Encontrado en – La función que contiene la referencia potencialmente interesante.
  • Dirección – La dirección de la llamada detectada.
  • Estado – El estado de revisión, inicial Not Checked se asigna a cada elemento nuevo. Los otros estados son False Positive, Suspicious y Vulnerable. Se pueden configurar mediante un menú contextual en un elemento determinado y deben reflejar los resultados de la revisión manual de la llamada de función dada.
  • Prioridad – Un intento de priorizar las llamadas más interesantes sobre las menos interesantes. Los valores posibles son High, Medium y Low. Las prioridades se definen junto con otras reglas en vulfi_rules.json expediente.
  • Comentario – Un comentario definido por el usuario para el elemento dado.

En caso de que no haya datos dentro del idb/i64 archivo o el usuario decide realizar un nuevo análisis. El complemento le preguntará si debe ejecutar el análisis usando las reglas incluidas por defecto o si debe usar un archivo de reglas personalizado. Tenga en cuenta que ejecutar un nuevo escaneo con datos ya existentes no sobrescribe los elementos encontrados anteriormente identificados por la regla con el mismo nombre que el que tiene resultados almacenados previamente. Por lo tanto, ejecutar el análisis nuevamente no elimina los comentarios existentes ni las actualizaciones de estado.

En el menú contextual del botón derecho dentro de la vista de VulFi, también puede eliminar el elemento de los resultados o eliminar todos los elementos. Tenga en cuenta que cualquier comentario o actualización de estado se perderá después de realizar esta operación.

Investigación

Siempre que desee inspeccionar la instancia detectada de una posible función vulnerable, simplemente haga doble clic en cualquier lugar de la fila deseada e IDA lo llevará a la ubicación de la memoria que se identificó como potencialmente interesante. Usando un clic derecho y la opción Set Vulfi Comment le permite ingresar un comentario para la instancia dada (para justificar el estado, por ejemplo).

Agregar más funciones

El complemento también permite crear reglas personalizadas. Estas reglas pueden definirse en la interfaz IDA (ideal para funciones individuales) o proporcionarse como un archivo de reglas personalizado (ideal para reglas que pretenden cubrir múltiples funciones).

Dentro de la interfaz

Cuando desee rastrear una función personalizada, que se identificó durante el análisis, simplemente cambie la Vista IDA a esa función, haga clic con el botón derecho en cualquier lugar dentro de su cuerpo y seleccione Add current function to VulFi.

Conjunto personalizado de reglas

También es posible cargar un archivo personalizado con un conjunto de reglas múltiples. Para crear un archivo de reglas personalizado con la siguiente estructura, puede usar el archivo de plantilla incluido aquí.

[ // An array of rules
{
“name”: “RULE NAME”, // The name of the rule
“alt_names”:[
“function_name_to_look_for” // List of all function names that should be matched against the conditions defined in this rule
],
“wrappers”:true, // Busque contenedores de las funciones anteriores también (tenga en cuenta que la función envuelta también debe coincidir con la regla)
“marcar_si”:{
“Alto”:”Verdadero”, // Si se evalúa como Verdadero, marcar con prioridad Alta (ver Reglas a continuación)
“Medio”:”Falso”, // Si se evalúa como Verdadero, marque con prioridad Medio (ver Reglas a continuación)
“Bajo”: “Falso” // Si se evalúa como Verdadero, marque con prioridad Bajo (ver Reglas a continuación)
}
}
]

Una regla de ejemplo que busca todas las referencias cruzadas para funcionar malloc y verifica si su parámetro no es constante y si el valor de retorno de la función está verificado se muestra a continuación:

{
“name”: “Posible desreferencia de puntero nulo”,
“nombres_alternos”:[
“malloc”,
“_malloc”,
“.malloc”
],
“envolturas”: falso,
“marcar_si”:{
«Alto»: «no param[0].is_constant() y no function_call.return_value_checked()”,
“Medio”:”Falso”,
“Bajo”: “Falso”
}
}

LEER  Linux kernel 6.0 rc7 se ve mejor de lo esperado

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba