La explotación de vulnerabilidades en el software que actualmente utilizamos se ha convertido en una de las principales preocupaciones dentro de las organizaciones, por lo que el desarrollo seguro de aplicaciones adquiere mayor relevancia.
Actividades como análisis estáticos o dinámicos, pruebas de fuzzing y buenas prácticas aplicadas en cada una de las distintas fases de desarrollo, contribuyen a reducir las debilidades asociadas al desarrollo de software.
BinScope Binary Analyzer
En los ambientes de desarrollo una práctica considerada es la ejecución de análisis dinámicos orientados a verificar la funcionalidad del software en tiempo de ejecución. De forma específica para ambientes Windows, esto se define en la fase de verificación del proceso de desarrollo Security Development Lifecycle (SDL).
Para ello se recomienda el uso de herramientas que monitorean el comportamiento de las aplicaciones como respuesta a problemas de seguridad críticos, por ejemplo, la corrupción de memoria o los que se relacionan con los privilegios de usuario. Un programa orientado a este fin y propuesto dentro de SDL es el analizador de binarios BinScope.
Se trata de una herramienta de verificación disponible de forma gratuita, como parte del Microsoft SDL Toolset. Analiza archivos binarios para comprobar que han sido construidos en cumplimiento con los requisitos y recomendaciones plasmados en SDL. Las fases de este proceso junto con las herramientas recomendadas tienen como objetivo la creación de aplicaciones más seguras y la reducción de los costos asociados a dichos desarrollos.
Archivos binarios y bibliotecas de vínculos dinámicos
BinScope puede ser utilizado para archivos binarios, es decir, aquellos que pueden almacenar cualquier tipo de información y que por lo tanto no puede ser interpretada por un procesador de texto. Para nuestro ejemplo, hablaremos acerca de la teoría relacionada con las bibliotecas de vínculos dinámicos y la forma en la que esta herramienta permite llevar a cabo la revisión para la identificación de vulnerabilidades.
En los sistemas operativos Windows, las bibliotecas de vínculos dinámicos (DLL por sus siglas en inglés), son archivos con código y datos que pueden ser utilizados por más de un programa de forma simultánea, lo que permite la modularidad y reutilización de código, uso eficaz de memoria y de espacio en disco. Cuando se ejecuta un programa, parte de la funcionalidad es proporcionada por estas bibliotecas.
Si un programa hace uso de un archivo DLL, dos métodos de vinculación permiten llamar a las funciones exportadas del archivo DLL: vinculación dinámica en tiempo de carga y vinculación dinámica en tiempo de ejecución.
En el caso de la vinculación dinámica en tiempo de ejecución, una aplicación llama a una función para cargar el archivo DLL, luego de que ha sido cargada correctamente obtiene la dirección de exportación de las funciones que desea ejecutar. Mientras que en la vinculación dinámica en tiempo de carga, es necesario importar un archivo de biblioteca.
Cuando una aplicación se compila y vincula con los archivos DLL requeridos para su funcionamiento, el sistema operativo busca las bibliotecas de vínculos dinámicos en la carpeta donde se encuentra la aplicación, la carpeta actual y finalmente en la carpeta de sistema de Windows.
A partir del desarrollo de Microsoft .NET las dificultades relacionadas con las DLL se eliminaron a través del uso de ensamblados. Un ensamblado es una unidad lógica de funcionalidad que se ejecuta bajo el control de .NET Common Language Runtime (CLR). El framework cuenta con un ensamblado como un archivo con extensión .DLL o .EXE.
Un archivo de ensamblado contiene un manifiesto de ensamblado, metadatos, código de lenguaje intermedio (MSIL) de Microsoft y otros recursos. El manifiesto del ensamblado contiene los metadatos que proporcionan toda la información necesaria: nombre, versión, información sobre nombre seguro, lista de ensamblados de archivos, referencias y dependencias.
Esta información nos sirve para conocer de manera formal la funcionalidad de BinsScope. De forma específica, esta herramienta comprueba la colocación de banderas de compilación/vinculación, uso de ensamblados con nombres seguros, uso de herramientas de construcción actualizadas, así como el uso de los encabezados Active Template Library (ATL) bien conocidos. También informa sobre desarrollos peligrosos que están prohibidas por SDL.
Instalación y uso de BinScope
En este ejemplo, hacemos uso de la versión 1.2, aunque ya se encuentra disponible la versión 2014. A partir de la descarga del programa, la instalación se realiza a través de un asistente como se muestra en la siguiente imagen:
La ejecución de la aplicación muestra una ventana en donde la pestaña de Configuración requiere la ubicación del archivo a analizar, ruta y nombre del archivo de salida para la generación del informe de resultados en formato XML y las opciones de revisión, como se muestra en la siguiente imagen:
La pestaña de Ejecución muestra el proceso de la revisión con base en los elementos seleccionados del paso anterior:
La tercera pestaña muestra el informe de resultados de la revisión de las bibliotecas de vínculos dinámicos, con los errores identificados:
En resumen, BinScope ha sido diseñado como una herramienta de revisión para la detectar vulnerabilidades dentro de archivos binarios, que puede ser utilizada como una extensión en Visual Studio o por separado (como se mostró en esta publicación). Las pruebas examinan elementos en la codificación y construcción, que pueden hacer una aplicación potencialmente vulnerable para ser atacada o utilizada como un vector de ataque.
En este sentido, se utiliza como parte de las mejores prácticas en la fase de verificación del desarrollo de aplicaciones o como una herramienta de auditoría para la revisión de código de terceros, que permita conocer el cumplimiento respecto a Microsoft SDL.