Hoy es el día 256 del año. Estos tres dígitos pueden no significar nada para muchas personas, pero para los que trabajamos en diferentes áreas de informática representa la cantidad máxima de números que pueden representarse con 1 byte (de 0 a 255). Dado que esta unidad de medida resulta fundamental en la informática, se toma este valor para definir el Día del Programador, que generalmente cae el 13 de septiembre.
En esta oportunidad, además de aprovechar la excusa para reconocer el trabajo de todas estas personas que día a día crean soluciones a través de código que nos permiten disfrutar de muchas de las tecnologías que utilizamos día a día, queremos compartir algunas herramientas para evaluar la seguridad del código seguro.
En artículos anteriores hemos abordado temas relacionados, como por ejemplo, controles que se deberían implementar para el desarrollo seguro, principios básicos del desarrollo seguro, mitos relacionados con el desarrollo seguro e incluso hemos compartido recomendaciones para el desarrollo seguro en iOS. Y dado que en todas estas entregas siempre hemos hecho hincapié en la importancia de auditar el código, en esta oportunidad vamos a profundizar en algunas herramientas muy útiles para esta etapa.
Conocer las vulnerabilidades: clave para el desarrollo seguro
A pesar de que todo el tiempo se descubren y publican nuevas vulnerabilidades, en el caso del desarrollo de aplicaciones, el top 10 de vulnerabilidades más comunes sigue siendo el mismo desde los últimos 5 años. Esto se puede ver claramente en el informe que publica OWASP si comparamos el podio de vulnerabilidades del 2017 con el del 2013. Esto nos hace creer que muchos desarrolladores siguen cometiendo los mismos errores, ya sea porque no conocen estas vulnerabilidades o porque no se toman el trabajo de detectarlas.
Si quieres que tu aplicación sea segura, debes comenzar por conocer las vulnerabilidades que puedan afectarla, o al menos las más comunes. Para esto, en el sitio de OWASP encontrarás no solo información detallada sobre cada vulnerabilidad, sino también una gran cantidad de herramientas y proyectos que te permitirán mejorar tu desarrollo en base a las buenas prácticas.
Audita tu código mientras lo escribes
Hoy en día existe una amplia variedad de herramientas de análisis de código fuente que pueden ser utilizadas en Pruebas de Seguridad de Aplicaciones Estáticas (SAST, por sus siglas del inglés). Las tecnologías SAST están diseñadas para analizar el código fuente con el objetivo de identificar vulnerabilidades antes de su compilación.
Las soluciones SAST pueden integrarse directamente en el entorno de desarrollo y utilizan técnicas de análisis de código estático para alertar al desarrollador de todo tipo de errores y vulnerabilidades que pueda estar introduciendo en el código. Esta retroalimentación inmediata es muy útil, especialmente cuando se compara con una identificación de vulnerabilidades más tardía en el ciclo de desarrollo.
Las principales ventajas de este análisis es que permite a los desarrolladores monitorizar su código constantemente e identificar problemas de forma temprana. Además, proporciona información detallada que ayuda a una rápida mitigación y mayor integridad del código.
Si bien estas herramientas resultan muy útiles a la hora de identificar vulnerabilidades conocidas, como SQL Injections o Buffer Overflow; lo cierto es que existen muchos otros tipos de vulnerabilidades que son más difíciles de detectar automáticamente, como errores de configuración, problemas de autenticación o errores en la lógica del software. Además, al no ejecutar ni compilar el código, otro gran problema suelen ser los falsos positivos, los cuales pueden generar distracciones o pérdidas de tiempo en su revisión. Para evitarlos es importante elegir las herramientas adecuadas, teniendo en cuenta el lenguaje, el entorno de desarrollo, el tipo de código que se va a analizar y las vulnerabilidades que detecta.
Si quieres comenzar a utilizar esas herramientas te recomendamos que revises la lista publicada por OWASP, que incluye tanto proyectos propios como otras opciones open source. También puedes revisar la lista publicada en Wikipedia, ordenada por lenguaje y con algunas opciones para auditar códigos compilados.
Incluye la seguridad en tus pruebas
Todo software debe ser testeado antes de ser puesto en producción. En esta etapa, además de verificar que la aplicación tenga el comportamiento deseado y que no haya errores inesperados, también es importante asegurarse que la misma sea segura y no tenga vulnerabilidades. Para esto se pueden utilizar las herramientas de Análisis Dinámico (DAST, del inglés Dynamic Application Security Testing). Las herramientas DAST, en lugar de examinar el código fuente, se ejecutan fuera de la aplicación y lanzan peticiones maliciosas contra la misma con el objetivo de descubrir las vulnerabilidades analizando las respuestas que recibe.
Dado que en DAST se prueba la aplicación en tiempo de ejecución no es necesario tener el código fuente para auditarla. Además, en esta etapa se detectarán otros tipos de vulnerabilidades que no han sido detectadas anteriormente con SAST, como malas configuraciones, protocolos inseguros o problemas lógicos. Sin embargo, a diferencia del análisis estático que se puede usar de forma inmediata, en este análisis es necesario personalizar las reglas ante estos posibles escenarios para confeccionar y adaptar el análisis abarcando todas las entradas posibles, según la aplicación que se vaya a analizar.
Existen numerosas herramientas de análisis dinámico que puedes utilizar, aunque lamentablemente la mayoría son con licencia paga, dado el alto mantenimiento que requieren. De todas formas, si quieres revisar una lista completa, que incluye tanto opciones comerciales como de código abierto, te recomendamos que revises la lista de OWASP de Scanners de Vulnerabilidaes.
Por último, aplica siempre las buenas prácticas de desarrollo seguro, ya que ninguna herramienta automatizada lo hará por ti. Recuerda mantener siempre tus herramientas actualizadas, tanto el IDE como los plugins y otras aplicaciones adicionales que manejes; y elimina siempre los módulos y archivos que no se utilicen. No olvides registrar todos los eventos en logs de seguridad y evita mostrar los mensajes de error tal cual los genera el sistema.
Recuerda, la calidad de un software también debe contemplar la seguridad.