Las auditorías de seguridad sobre los sistemas permiten obtener, de alguna forma, una visión general sobre el nivel de seguridad de cada uno de los componentes que se auditaron. También es posible evaluar aplicaciones en búsqueda de vulnerabilidades, cómo por ejemplo, aquellas que utilizan la red para conectarse con otros módulos y que pueden ser explotables de forma remota. Una de las técnicas utilizadas para auditar aplicaciones es conocida bajo el nombre de Fuzzing.
El fuzzing o fuzz testing consiste en pruebas semiautomáticas o automáticas donde se proveen datos al azar, inválidos y no esperados en la sección de entrada de datos del software. De esa forma es posible comprobar la seguridad de la entrada en lo que respecta a la validación de datos.
A la herramienta que permite llevar adelante un fuzz testing se la conoce, vulgarmente, como Fuzzer. El Fuzzer puede ser dividido en tres componentes principales: generador, mecanismo de entrega y sistema de monitoreo.
- Generador: Es el responsable de concebir las diferentes cadenas de texto para el testeo sobre las entradas. Habitualmente, el generador permite crear entradas acordes al sistema al cuál se está sometiendo a pruebas.
- Mecanismo de entrega: Es el responsable de tomar las entradas que entrega el propio generador y presentarlo para el sistema que se está sometiendo a prueba. Es importante destacar que este tipo de mecanismo está fuertemente ligado al sistema de prueba, ya que los mecanismos de entrada varían considerablemente donde, por ejemplo, en un caso puede existir entradas a través de un archivo y, en otros casos, las entradas pueden ser a través de la interacción del usuario.
- Sistema de monitoreo: Es el encargado de monitorear la reacción del sistema de prueba a partir de las diferentes entradas. Su función principal es la búsqueda de errores y en el impacto que estos pueden tener sobre el propio sistema de prueba. A partir de los errores es posible determinar cuál de esos errores son críticos y pueden ser explotados.
Asimismo, existen diferentes formas de llevar a cabo las pruebas sobre el sistema. En este caso entran en juego tres conceptos:
- Black-box: el proceso es totalmente opaco, es decir, solo se observan las respuestas del sistema de prueba a partir de determinados tipos de entradas. Este tipo de análisis se lo utiliza ampliamente sobre aplicaciones web.
- White-box testing: el proceso es diferente. Se toma en cuenta otro tipo de información, como por ejemplo, el código fuente del software sometido a pruebas. En este caso, generalmente, el proceso de testeo es mucho más eficiente ya que se cuenta con información adicional por lo que los resultados serán más confiables.
- Grey-box testing: cubre ambos espectros. Esta alternativa, habitualmente, descarta el acceso al código fuente, pero utiliza otros mecanismos más allá del Black-box testing tales cómo el análisis reverso o la utilización de un debugger.
Estas técnicas permiten lograr un mejor nivel de seguridad en las aplicaciones. Cabe recordar, que la seguridad debe gestionarse. Asimismo, siempre resaltamos la importancia de gestionar las vulnerabilidades para lograr una respuesta eficiente. Es por esto que desde ESET Latinoamérica contamos con la unidad de ESET Security Services, donde se ofrencen diferentes tipos de auditorías de seguridad pertinentes a sistemas de información.
Fernando Catoira
Analista de Seguridad