Mejora de la seguridad de código abierto durante el programa de pasantías de verano de Google


El computer software de código abierto es la base de muchos productos de software program modernos. A lo largo de los años, los desarrolladores han confiado cada vez más en componentes reutilizables de código abierto para sus aplicaciones. Es essential que estos componentes de código abierto sean seguros y fiables.

El enfoque de los proyectos de pasantes de este año refleja el enfoque typical de ISE de abordar los problemas de seguridad a gran escala, y se puede dividir en tres áreas principales:

  • Investigación de vulnerabilidad: Encontrar nuevas vulnerabilidades, desarrollar infraestructura para buscar clases de errores conocidos a escala y experimentar con nuevos enfoques de detección.
  • Mitigación y endurecimiento: Desarrollar enfoques de endurecimiento con el objetivo de eliminar por completo clases de vulnerabilidad específicas o mitigar su impacto.
  • Educación sobre seguridad: Compartir conocimientos para aumentar la conciencia entre los desarrolladores y ayudar a capacitar a los ingenieros de seguridad.

Investigación de vulnerabilidad

Fuzzing es un método muy eficaz para descubrir vulnerabilidades de corrupción de memoria en aplicaciones C y C ++. Con OSS-Fuzz, Google proporciona una plataforma para el fuzzing de application de código abierto. Uno de los pasantes de este año proyectos portó objetivos de fuzz internos a OSS-Fuzz, lo que llevó al descubrimiento de nuevos errores. En este contexto, nuestros pasantes experimentaron con la configuración de fuzzing para objetivos de fuzz difíciles, como las máquinas de estado de Memcached y Redis. Además, agregaron nuevos fuzzers para objetivos complicados como nginx, PostgreSQLy Enviado, un proxy de alto rendimiento nativo de la nube ampliamente utilizado.
Marcos de fuzzing de última generación como AFL, libFuzzery Honggfuzz Aproveche la retroalimentación, como la cobertura del código, para guiar al fuzzer. Artículos académicos recientes sugieren que la ejecución simbólica puede complementar los marcos de fuzzing existentes para encontrar errores que son difíciles de encontrar para los fuzzers basados ​​en mutaciones aleatorias. Nuestros pasantes evaluaron la posibilidad de utilizar KLEE para aumentar libFuzzer y AFL. En certain, descubrieron que agregar KLEE a los marcos de fuzzing existentes proporciona beneficios para los objetivos de fuzz como sqlite y lcms. Sin embargo, en este momento, todavía hay trabajo por hacer antes de que la ejecución simbólica se pueda realizar a escala (por ejemplo, en OSS-Fuzz).

Además de encontrar vulnerabilidades de corrupción de memoria, el fuzzing puede ayudar a encontrar vulnerabilidades lógicas. Esto puede resultar difícil, ya que requiere comprender la semántica de la aplicación de destino. Un enfoque united states pruebas diferenciales para encontrar diferentes comportamientos en aplicaciones que se supone que se comportan de la misma manera. Uno de nuestros proyectos de pasantes de este verano buscó aprovechar el fuzzing diferencial para exponer vulnerabilidades lógicas y encontró una serie de casos en los que los analizadores YAML manejan los casos extremos de manera diferente.

Otros proyectos de becarios de este verano se centraron en la búsqueda de vulnerabilidades específicas de aplicaciones. Nuestros pasantes tenían como objetivo descubrir Google Kubernetes Engine (GKE) configuraciones incorrectas. El recientemente lanzado Auditor de GKE, creado por uno de nuestros pasantes, implementa 18 detectores para encontrar configuraciones incorrectas en el aislamiento de nodos, el manage de acceso basado en roles y las políticas de seguridad de pod. Otro proyecto implementó pruebas de regresión para Google Compute Motor (GCE) servidor de metadatos.
Finalmente, un proyecto de pasante buscó mejorar Visible Studio Code (VSCode), un common editor de código multiplataforma que se basa en Electrón que combina el motor de renderizado Chromium y el tiempo de ejecución de Node.js. VSCode puede ser vulnerable a Secuencias de comandos de sitios cruzados DOM Ataques. Por esta razón, el trabajo de nuestro pasante se centró en hacer VSCode Tipos de confianza-cumplir utilizando y contribuyendo a la estático y dinámica herramientas de análisis para encontrar infracciones. Este trabajo no solo condujo a una mejora de VSCode, pero también de Cromo.

Dado que encontrar todas las vulnerabilidades es una tarea imposible, siempre buscamos formas de mitigar su impacto o eliminar ciertas clases de vulnerabilidades por completo. El enfoque principal de los proyectos de refuerzo de este año fue habilitar mejoras de seguridad para los principales marcos net y proporcionar espacio aislado para bibliotecas populares escritas en lenguajes que no son seguros para la memoria, como C y C ++.

Como resultado, estas características de seguridad net se implementaron en varios marcos de aplicaciones comunes, incluido Apache Struts (CSP, COOP / COEP), Apache Wicket (Obtener metadatos, COOP / COEP), .Net Core (CSP), Django (Tipos de confianza, COOPERATIVA) y WordPress (Obtener metadatos, CSP). ¡Estamos deseando trabajar con mantenedores de código abierto para desarrollar e integrar estas defensas en marcos más populares!
La ejecución de código nativo que proviene de orígenes que no son de confianza o procesa datos de fuentes que no son de confianza es arriesgado porque puede ser malicioso o contener vulnerabilidades. Sandboxing mitiga estos riesgos mediante la ejecución de código en un entorno con pocos privilegios. Este proceso a menudo requiere modificar las interfaces de bibliotecas de terceros y configurar su entorno de ejecución. API de espacio aislado es un marco para ayudar con estas tareas que se utiliza en Google.
Nuestros pasantes también trabajaron en el suministro de cajas de arena reutilizables para bibliotecas populares de código abierto como curl, OpenJPEG, LoadPNG, LibUV y libTIFF. Ahora, cualquiera que quiera usar estas bibliotecas para procesar datos que no son de confianza puede hacerlo de forma segura.
Captura la bandera (CTF) Los concursos son útiles para transferir conocimientos sobre seguridad y formar ingenieros de seguridad. los kCTF El proyecto proporciona una infraestructura basada en Kubernetes que ofrece un entorno reforzado para implementar de forma segura las tareas CTF y aislarlas entre sí. Un proyecto de pasante agregó un número de mejoras a la documentación, incluida la habilitación de un management de versiones para permitir que varios autores trabajen en un desafío y simplificar el uso de kCTF.



Enlace a la noticia initial