En este post veremos cómo realizar análisis estáticos con Veracode y cómo integrar esta herramienta en nuestro editor de código, en este caso IntelliJ. Veracode nos permite realizar análisis estáticos de código, análisis dinámicos y pentesting todo en una misma herramienta.
Acceso a Veracode. Pantalla principal y menús
Para acceder a Veracode accederemos a través de la siguiente URL: https://analysiscenter.veracode.com/
Introducimos el usuario y contraseña y hacemos clic en Log In. Si las credenciales son correctas, accederemos a la siguiente pantalla:
Si vamos desplegando los menús veremos que en el menú MY PORTFOLIO podremos acceder a la lista de aplicaciones que tengamos analizadas.
El menú SCANS & ANALYSIS nos ofrece los diferentes tipos de análisis que podemos hacer: estático, dinámico y pentesting.
En el menú POLICIES podremos configurar las policies que se utilizarán en los análisis que hagamos.
Creación y configuración de Policies
Para acceder a la configuración de Policies iremos al menú POLICIES > Policies. Nos presentará una pantalla como la siguiente:
Veracode tiene sus propias policies definidas, no obstante, podemos configurar las nuestras propias, incluso utilizando para ello, la copia de una policy definida y adaptándola a nuestras necesidades.
Hacemos clic en New Policy y vemos la siguiente pantalla:
Dentro de Policy Basics, introducimos el nombre que le queramos dar a la nueva policy y una descripción.
Dentro de Rules, en Copy Rules From podemos utilizar una policy ya existente como copia y realizar adaptaciones a partir de ésta. En Minimum Veracode Level podremos establecer el nivel mínimo de puntuación que deberá obtener todos los análisis que utilicen la policy. Si hacemos clic en la ayuda del campo podremos ver más información.
Dentro de Custom Rules, podremos añadir reglas personalizadas según la relación Tipo de Regla y Requerimiento. En el caso de crear la policy partiendo de la copia de una existente, veremos las Custom Rules de la copia y a partir de ahí podremos añadir/editar nuevas reglas.
Dentro de Software Composition Analysis Rules podremos establecer reglas específicas para componentes de terceros, como por ejemplo, aplicar la restricción de este tipo de componentes con vulnerabilidades. Estos componentes posteriormente podremos gestionarlos dentro del menú Scans & Analysis > Software Composition Analysis.
Dentro de Scan Requeriments especificaremos los plazos en el que la aplicación deberá ser escaneada para todo tipo de escaneos o bien por cada tipo de ellos. El intervalo de frecuencia de escaneo se evaluará a partir de la fecha en que se creó la aplicación o se escaneó por última vez por cada método requerido.
Por último, dentro de Remediation estableceremos los días de gracia que tendremos disponibles para subsanar cualquier vulnerabilidad en función de su grado de severidad.
Para grabar la nueva policy haremos clic en Save y nos aparecerá en la lista de policies disponibles.
Análisis estático o Pentesting manual
Ahora veremos cómo realizar, paso a paso, un análisis estático o pentesting. Los pasos son prácticamente idénticos, únicamente cambia la opción de menú seleccionada.
Para realizar un análisis estático, accederemos al menú Scans & Analisis > Static Analysis y para realizar un análisis pentesting accederemos al menú Scans & Analisis > Manual Pentesting . Nos presentará una pantalla como la siguiente:
En esta pantalla nos aparecerá la lista de aplicaciones que tenemos analizadas hasta el momento con su fecha de última modificación y resultados.
Para añadir una nueva aplicación hacemos clic en Add Application. Nos aparecerá una pantalla como la siguiente:
En Application Basics indicaremos el nombre de la aplicación y, opcionalmente, podremos especificar una descripción de la aplicación y tags asociados.
En Policy Control indicaremos el nivel de criticidad (muy alto, alto, medio, bajo, muy bajo) y la policy sobre la cual realizaremos el análisis. En la lista nos aparecerán tanto las policies por defecto de Veracode como aquellas policies nuevas que hayamos creado.
En Organizational Information estableceremos información relativa al nombre y correo electrónico de la persona que gestiona la aplicación y análisis. En Visibility dejamos por defecto la opción Security & Leads Only.
Hacemos clic en Save and Continue y nos grabará la nueva aplicación, pasando a la siguiente pantalla, Metadata.
En esta pantalla podremos indicar, opcionalmente, información adicional a la aplicación a escanear, en relación al tipo de aplicación (terceros, con licencia, open source, etc), tipo de industria (agricultura, educación, etc), propósito de la aplicación (CRM, testing, seguridad, etc), tipo de aplicación (web, mobile, etc) y Custom Fields.
Este último está relacionado con los campos personalizados de JIRA Cloud (ver: https://help.veracode.com/reader/zriMYydma5AUKAFYh3xDnw/pzYPxtOhlWinB6p~z3ez4w).
Hacemos clic en Save y pasaremos directamente a la pantalla de Scans.
En la pantalla de Scans podremos crear, configurar y lanzar un nuevo escaneo sobre la aplicación creada. Para ello hacemos clic en Start a Scan > Start a Static Scan.
En Basics estableceremos el nombre que le queramos dar al escaneo.
En Optional Application Information podremos establecer, opcionalmente, información relativa al ciclo de vida actual de la aplicación (en desarrollo, en mantenimiento, en producción, etc).
Hacemos clic en Save and Continue y accedemos al siguiente paso en el que haremos el upload de la/s aplicación/es a escanear.
Cada tipo de aplicación tendrá sus especificaciones propias para ser subida. Por ejemplo, un proyecto únicamente con código Java deberá ser subida en formato JAR, o bien, una aplicación web deberá ser subida en formato WAR, etc. Para saber dichas especificaciones consultar: https://help.veracode.com/reader/4EKhlLSMHm5jC8P8j3XccQ/IC8laVsDOwAm36EvJ9cuEg
Una vez subidos los ficheros, nos presentará la lista de ficheros subidos. El límite máximo en Gb del total de ficheros subidos es de 5Gb. Hacemos clic en Next.
De forma automática, empezará a validarse el upload realizado y, una vez finalizado, se realizará el escaneo estático. Si volvemos a acceder a Scan & Analysis > Static Analysis veremos el estado del escaneo. Asimismo, también recibiremos correo electrónico una vez haya finalizado.
Una vez finalice, nos presentará una pantalla como la siguiente (actualizando la pantalla también seguiremos el estado):
Hacemos clic en View Results, para ver el informe de resultados:
A través del menú de la izquierda podremos acceder a los apartados del informe. En este caso, se ha obtenido una puntuación de 87 puntos no habiendo pasado las reglas establecidas ni los requerimientos. Se han obtenido errores Muy Altos, Altos, Medios y Bajos, además de otros riesgos relativos a SQL Injection, calidad de código etc.
En la parte superior derecha tenemos el enlace Donwload el cual nos permitirá la descarga del informe en PDF de manera acotada, detallada, etc, tal y como indica la siguiente pantalla:
Seleccionando Flaw Sources en la parte izquierda del menú Results, podremos ver la lista de defectos de código encontrados, tal es como la clase Java que contiene el error, el método que lo contiene y su severidad.
Asimismo, haciendo clic en el enlace de la columna CWE ID, obtendremos información del error, ejemplos y cómo subsanarlo.
Seleccionado Triage Flows, podremos ver más detenidamente el error, pudiendo acceder directamente al código fuente y ver la línea de código exacta que está produciendo el error. También podremos gestionar el error en el caso, por ejemplo, que sea un falso positivo.
Análisis dinámico con proceso de autenticación
Para realizar un análisis dinámico, accederemos al menú Scans & Analisis > Dynamic Analysis. Nos presentará una pantalla como la siguiente:
En esta pantalla nos aparecerá la lista de análisis dinámicos que tenemos analizados hasta el momento con su fecha de última modificación y resultados.
Para añadir un nuevo análisis dinámico hacemos clic en New Dynamic Analysis. Nos aparecerá una pantalla como la siguiente:
En esta pantalla introduciremos los datos del análisis dinámico. Introduciremos el nombre del análisis que queramos darle y necesitaremos proveer de la lista de URL's sobre las cuales queremos realizar el análisis dinámico. Tenemos dos formas de hacerlo:
- Introduciendo directamente la URLs
- Realizando upload de un fichero CSV con todas las URLs
De la misma forma que en el análisis estático introduciremos, de forma opcional, los datos relativos a la persona responsable en este caso de las URL's con su correo electrónico, si procediera.
Finalmente activamos el check conforme indicamos que podemos escanear las URL's indicadas y hacemos clic en Review and Submit. Nos aparecerá la lista de URL's a escanear.
En la columna Actions, al desplegar, nos aparecerá la opción Edit. Hacer clic en esta opción. Nos aparecerá la siguiente pop-up:
En el apartado URL Information nos aparecerá la URL a escanear. En el caso que no indiquemos el protocolo será necesario activar el check de manera que Veracode pueda detectarlo en fase de análisis. Indicaremos las restricciones a nivel de directorio, si procede.
Indicamos, si existe, la exclusión de ciertas URL's del análisis.
Adicionalmente, también podemos realizar pruebas de autenticación sobre la URL que queremos probar.
Para añadir la autenticación, lo que deberemos hacer es, en primera instancia, instalarnos la extensión Selenium IDE en el navegador Chrome y, a través de esta herramienta, simular en la página web donde queremos efectuar la autenticación, una sesión de login con credenciales correctas. Todas estas acciones las iremos grabando a través de Selenium IDE y posteriormente exportaremos el resultado en un fichero con extensión ".side".
Posteriormente, añadiremos este fichero script en Login Script (para login) y si también grabamos las acciones de Logout, las añadiremos en Logout Script. Guardamos cambios.
En el caso de que para acceder a la URL, sea necesario configurar un Gateway o un Endpoint, lo configuraremos aquí.
Por último, indicaremos el User Agent, especificando sobre qué navegador queremos hacer el análisis. Pulsamos Save y guardamos los cambios.
Una vez se cierre el pop-up pulsamos Submit. Se iniciará el escaneo de la URL. Accediendo al enlace del análisis, podremos ver sus detalles:
Al cabo de unos minutos, podremos visualizar el resultado, con un check verde si ha concluido satisfactoriamente o un aspa roja si han habido errores. En caso de que no se haya realizado alguno de los tests, no aparecerá resultado.
Integración de Veracode con IntelliJ
Para poder vincular IntelliJ con Veracode, es necesario en primera instancia instalarse el plugin de Veracode. Este plugin, según la documentación oficial, funciona solamente con versiones de la 14.1 a la 2017.2 de IntelliJ, sin embargo, se puede descargar e instalar manualmente.
Enlace documentación oficial : https://help.veracode.com/reader/eAvornYxfrGF2caDJIBu_g/ZHn7b2ZcJTTkTg~DK7ymmQ
Una vez instalado el plugin y reiniciado el editor, deberá aparecer un nuevo menú llamado Veracode.
Primero deberemos configurar el plugin para que IntelliJ pueda conectarse con Veracode a través de nuestras credenciales. Dentro de Veracode, en la parte superior derecha, accedemos al menú APLICACIONES > API Credentials.
Y nos generamos unas nuevas credenciales API haciendo clic en Generalte API Credentials. Nos guardamos los valores ID y Secret Key que nos haya generado.
Posteriormente, en IntelliJ vamos al menú Veracode > Options. Dentro del menú Tools > Veracode, veremos una opción que se denomina Credentials.
Introducimos dos tipos de credenciales
Por ID / Key (Generada en API Crendentials)
Por User / Pass (Usuario y password de acceso a Veracode)
Nos pedirá la generación de una Passphrase de seguridad. La creamos y guardamos.
Para generar un escaneo desde el editor hacemos clic en Veracode > Upload and Scan. En caso de no haber hecho autenticación previa, nos pedirá nuestras credenciales primero. Si ya hemos hecho autenticación, nos mostrará una pantalla como la siguiente:
Podemos utilizar una aplicación ya existente o bien generar una nueva haciendo clic en Add Application.
Añadimos los datos de la nueva aplicación (Application Name y Business Critically) y pulsamos el botón Save. Una vez guardado nos pedirá los datos del nuevo escaneo a crear.
Introducimos el nombre del escaneo y pulsamos el botón Create.
En este paso deberemos adjuntar el fichero JAR con las clases a analizar. Seleccionamos el archivo y adjuntamos. Seguidamente pulsamos el botón Upload. Confirmamos el upload y subimos el fichero.
En este momento nos aparecerá nuestro escaneo dentro de Veracode. Una vez finalice podremos ver la puntuación y ver los resultados dentro de Veracode.
Si queremos ver los resultados dentro de IntelliJ, deberemos hacer clic en el menú Veracode > Download Results
Nos pedirá el nombre del escaneo, lo seleccionamos y pulsamos Donwload. Una vez descargado podremos ver en el propio editor los Triage Flaws de manera que podremos subsanar los problemas en nuestro código local antes de subirlo al repositorio.
Conclusión
A modo de resumen, comentar que Veracode se trata de una herramienta muy potente que engloba en sí misma todos los tipos de pruebas de seguridad aplicables, permitiendo además, la integración con el editor pudiendo analizar el código en el propio entorno local.
En caso de interés, al tratarse de una herramienta comercial con licencia, se deberá solicitar a Veracode un trial (a nivel de empresa) a través de la url https://info.veracode.com/veracode-trial-request.html. Veracode proveerá del soporte necesario en la utilización de la herramienta.
Si te ha gustado, ¡síguenos en Twitter para estar al día de nuevas entregas!