Análisis del Código Fuente

Si se tiene la fortuna de tener acceso hacia el código fuente de la aplicación, el trabajo para realizar ingeniería inversa a la aplicación será más fácil. Se seguirá un proceso laborioso y largo para entender exactamente como la aplicación realiza cada tarea, pero esto debería ser más fácil comparado con abordar el binario de la aplicación correspondiente. Existen una serie de herramientas las cuales intentan escanear el código fuente automáticamente, para detectar prácticas de programación deficientes. Estas herramientas pueden particularmente ser útiles para aplicaciones grandes. Recordar estas herramientas automatizadas tienden a detectar casos comunes, y no ofrecen ninguna garantía de una aplicación sea segura.

Existen muchas herramienta para auditar el código fuente, las cuales están libremente disponibles en Internet. Algunas de ellas son cppcheck, flawfinder, splint, yasca, entre otros. Desde la perspectiva comercial se tienen a AppScan Source, Fortify, entre otros.

Claramente las herramientas para auditar código fuente puede centrar la atención de los desarrolladores en áreas problemáticas en el código, pero ¿Qué tan útiles son para los Hackers Éticos?. La misma salida está disponible tanto para los Hackers de sombrero negro, como las los de sombrero blanco, entonces ¿Cómo es probable cada uno de ellos utilice esta información?.

Perspectiva del Sombrero Blanco

El objetivo de un Hacker de sombrero blanco es revisar la salida de una herramienta para auditoría de código fuente, el cual debería hacer software más seguro. Si confiamos en estas herramientas apuntan con precisión al código problemático, será de mejor interés para el sombrero blanco, invertir tiempo corrigiendo los problemas anotados por estas herramientas.

Perspectiva del Sombrero Negro

El Hacker de sombrero negro, por definición, está interesado en descubrir como explotar un problema. La salida de las herramientas para auditoría de código fuente, pueden servir como un punto de partida para encontrar vulnerabilidades. Se tienen pocas razones para invertir tiempo arreglando el código, porque esto anula su propósito. El nivel de esfuerzo requerido para determinar si un posible punto problemático es vulnerable, es generalmente mucho mayor comparado con el nivel de esfuerzo de un sombrero blanco para arreglar este mismo punto problemático. Y al igual de un sombrero blanco, la salida de las herramientas para auditoría no es definitivo. Es totalmente posible encontrar vulnerabilidades en áreas de un programa no marcado durante la auditoría automatizada del código fuente.

Perspectiva del Sombrero Gris

¿Dónde encaja el Hacker de sombrero gris?. Frecuentemente su trabajo no es arreglar el código fuente auditado. Sin duda debe presentar sus hallazgos a los mantenedores del software, pero no hay garantía de se actuará sobre la información, especialmente si no tienen el tiempo, o peor aún, se niegan a considerar seriamente la información proporcionada. En casos donde los mantenedores se niegan a abordar los problemas señalados en una auditoría de código fuente, ya sea de forma automática o manual, puede ser necesario proporcionar una demostración “prueba de concepto” de la vulnerabilidad del programa. En estos casos el sombrero gris debe entender como hacer uso de los resultados de la auditoría para ubicar las vulnerabilidades reales, y desarrollar un código de prueba de concepto para demostrar la gravedad de estas vulnerabilidades. Finalmente, es posible el auditor ayude a desarrollar una estrategia para mitigar las vulnerabilidades, en ausencia a una solución del proveedor, así como desarrollar herramientas para ubicar automáticamente todas las instancias vulnerables de una aplicación dentro de la red de la organización.

Auditoría Manual de Código Fuente

¿Cómo se puede verificar todas las áreas de un programa, las cuales han sido omitidos por los escáneres automáticos?. ¿Cómo se analizan las construcciones de programación demasiado complejas para ser seguidas por las herramientas automáticas de análisis?. En estos casos , la auditoría manual del código fuente puede ser la única opción. El enfoque principal deben ser las formas en las cuales los datos proporcionados por el usuario se manejan dentro de la aplicación. Debido a la mayoría de vulnerabilidades se aprovechan cuando los programas no pueden manejar la entrada del usuario de manera adecuada, es importante comprender primero como se pasan los datos hacia una aplicación, y segundo, aquello suscitado con los datos.

Auditoría Automática de Código Fuente

Era solo una cuestión de tiempo hasta a alguien se le ocurriera una herramienta para automatizar algunas de las revisiones comunes en el código fuente. Estas herramientas automatizan el proceso, aunque se debe siempre tener en consideración, no son la solución absoluta, ni sus resultados son totalmente fiables.

Fuentes:

https://www.owasp.org/index.php/Source_Code_Analysis_Tools
https://blackarch.org/code-audit.html

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1