Por: Justin Campbell, líder principal de ingeniería de seguridad de software en Microsoft Security; y Mike Walker, director senior de gestión de proyectos especiales en Microsoft Security.
Microsoft está dedicado a trabajar con la comunidad y nuestros clientes para mejorar y afinar de manera continua nuestra plataforma y productos, para ayudar a defender contra el dinámico y sofisticado paisaje de amenazas. A inicios de 2020, anunciamos que reemplazaríamos la experiencia existente de pruebas de software, conocida como Microsoft Security and Risk Detection con una herramienta automatizada, de código abierto, a medida que la industria avanza hacia ese modelo. En esta ocasión, nos emociona lanzar esta nueva herramienta llamada Project OneFuzz, un marco de pruebas de fuzz extensible para Azure. Disponible a través de GitHub como una herramienta de código abierto, el marco de prueba utilizado por Microsoft Edge, Windows, y por equipos en Microsoft, está ahora disponible para los desarrolladores alrededor del mundo.
Las pruebas de fuzz (o fuzzing), son un método bastante efectivo para incrementar la seguridad y confiablidad del código nativo, se trata del estándar principal para encontrar y eliminar fallas costosas y explotables de seguridad. De manera tradicional, estas pruebas han sido una espada de doble filo para los desarrolladores: exigida por el ciclo de vida del desarrollo de software, con una alta efectividad para encontrar fallas accionables, pero también muy complicada de aprovechar, ejecutar y para extraerle información. Esa complejidad requería que los equipos dedicados a la ingeniería en seguridad construyeran y operaran capacidades de pruebas de fuzz, lo que las hacía útiles pero costosas. Permitir a los desarrolladores ejecutar este tipo de pruebas cambia el descubrimiento de vulnerabilidades a una etapa más temprana en el ciclo de vida del desarrollo y de manera simultánea, libera a los equipos de ingeniería de seguridad para que persigan un trabajo proactivo.
La meta de Microsoft de permitir a los desarrolladores realizar pruebas de fuzz de manera sencilla y continua a su código, previo a su lanzamiento, es esencial para nuestra misión de empoderamiento. El lanzamiento global de Project OneFuzz tiene la intención de ayudar a fortalecer las plataformas y herramientas que impulsan nuestro trabajo diario y nuestras vidas personales, para dificultar aún más la labor de un atacante.
Los avances recientes en el mundo de la compilación, de código abierto en LLVM y pioneros por Google, han transformado las tareas de ingeniería en seguridad involucradas en el código nativo de las pruebas de fuzz. Lo que una vez fue adjuntado, a un gran costo, ahora puede ser creado dentro de sistemas de construcción continua, a través de:
- Detección de fallas críticas, una vez integrado a través de herramientas como Electric Fence, puede ser creado con asan.
- Rastreo de cobertura, una vez integrado a través de herramientas como iDNA, Dynamo Rio y Pin, puede ser creado con sancov.
- Aprovechamiento de entradas, una vez conseguido a través de arneses I/O personalizados, puede ser creado con el prototipo de función LLVMFuzzerTestOneInput de libfuzzer.
Estos avances permiten a los desarrolladores crear binarios de prueba de unidad con un moderno laboratorio de fuzzing compilado en: innovación de prueba de alta confiabilidad, generación de entradas, cobertura y detección de error en un solo ejecutable. El soporte experimental para estas funciones crece en Visual Studio de Microsoft. Una vez que estas pruebas binarias puedan ser construidas por un compilador, los desarrolladores de la actualidad son dejados con el desafío de construirlos en una cartera de CI/CD y escalar las cargas de fuzzing en la nube.
Project OneFuzz ya ha permitido un fuzzing continuo de Windows, impulsado por el desarrollador, que ha permitido a Microsoft fortalecer de manera proactiva la plataforma Windows previo a la entrega de las versiones más recientes del OS. Con una solo línea de comando (¡Creada dentro del sistema de depuración!) los desarrolladores pueden lanzar trabajos de fuzz que van, en tamaño, desde algunas máquinas virtuales a miles de núcleos. Project OneFuzz permite:
- Flujos de fuzzing componibles: El código abierto permite a los usuarios incorporar sus propios fuzzers, intercambiar instrumentación y manejar entradas de inicialización.
- Ensamble de fuzzing integrado: Por defecto, los fuzzers trabajan como equipo para compartir fortalezas e intercambiar información de interés entre tecnologías de
- Triaje programático y reduplicación de resultado: Brinda casos únicos de fallas que siempre se reproducen.
- Depuración en vivo, bajo demanda, de bloqueos encontrados: Les permite invocar una sesión en vivo de depuración bajo demanda o desde su sistema de compilación.
- Observable y depurable: El diseño transparente permite la introspección en cada etapa.
- Fuzz en los OS de Windows y Linux: Es multi plataforma por diseño. Pueden realizar fuzz con su propia compilación de OS, kernel o hipervisor anidado.
- Devolución de notificación de reporte de bloqueo: En la actualidad, soporta mensajes de Azure DevOps Work Items y Microsoft Teams.
Project OneFuzz está disponible ahora en GitHub bajo una licencia MIT. Está actualizado por contribuyentes de grupos de Microsoft Research y Security a través de Windows, y por más equipos, a medida que incrementamos nuestra asociación y expandimos la cobertura de fuzzing a través de la compañía, para mejorar de manera continua la seguridad de todas las plataformas y productos Microsoft. Microsoft mantendrá y expandirá Project OneFuzz y lanzará actualizaciones para la comunidad de código abierto a medida que estas sucedan. Los contribuyentes de la comunidad son bienvenidos. Compartan preguntas, comentarios y retroalimentación con nosotros en [email protected].
Para conocer más sobre las soluciones de Microsoft Security, visiten nuestro sitio web. Agreguen a Favoritos el blog de Security para estar al día con nuestra cobertura experta en temas de seguridad. También, síganos en @MSFTSecurity para las noticias y actualizaciones más recientes en ciberseguridad.