La empresa Google presentó el proyecto OSS Rebuild, destinado a identificar cambios ocultos en los paquetes listos publicados en los repositorios. El funcionamiento de OSS Rebuild se basa en el concepto de compilaciones reproducibles y consiste en verificar la concordancia entre el paquete disponible en el repositorio y el paquete obtenido mediante la reconstrucción a partir del código fuente de referencia correspondiente a la versión declarada del paquete. El código de la herramienta está escrito en Go y se distribuye bajo la licencia Apache 2.0.
Actualmente, OSS Rebuild implementa soporte para la verificación de paquetes de los repositorios NPM (JavaScript/TypeScript), PyPI (Python) y Crates.io (Rust). En el futuro, se planea ampliar el número de repositorios soportados. En la práctica, la herramienta permite identificar variantes de ataque de la clase 'supply chain', en las que, después de la compromisión de cuentas de colaboradores o una intervención dentro del proyecto, se publica una actualización maliciosa en el repositorio. En este caso, el código en el repositorio fuente del proyecto principal permanece intacto, mientras que los cambios maliciosos se introducen únicamente en los paquetes listos.
El sistema, en la medida de lo posible, genera automáticamente un guion para la compilación reproducible del paquete seleccionado, utilizando heurísticas y ajustando parámetros para lograr la identidad de los artefactos entregados en el paquete. Si no se puede reproducir automáticamente el paquete disponible en el repositorio, es posible agregar manualmente las especificaciones de compilación. Una vez que se ha logrado reproducir el paquete, la herramienta OSS Rebuild guarda una descripción del proceso de compilación para la posterior verificación de nuevas versiones del paquete. Además, se publica información para la verificación utilizando el marco SLSA.
Después de realizar la verificación de una versión específica del paquete, se generan datos de certificación, que pueden ser utilizados por otros para evaluar paquetes ya verificados. La verificación se puede llevar a cabo mediante la ejecución de una utilidad de línea de comandos o la comparación de un hash, que se guarda en un almacenamiento en la nube separado. La infraestructura para la verificación de paquetes se puede desplegar en su propio servidor. También se puede acceder a la información sobre las verificaciones realizadas por Google para miles de paquetes.
Como ejemplos de diferentes métodos de ataque de los que podría proteger OSS Rebuild, se citan la adición de un backdoor en XZ, la inyección de código malicioso en el cliente oficial de JavaScript para la criptomoneda Solana y la inserción de cambios a través del manejador de acciones changed-files:
- En el caso del proyecto XZ, el código en el repositorio no contenía cambios sospechosos, y los componentes malware que formaban el backdoor se suministraban dentro de los archivos utilizados en el conjunto de pruebas para verificar la correcta operación del descompresor XZ. El backdoor se activaba a nivel del sistema de compilación, y el código fuente de XZ coincidía con el código del repositorio. Los macros m4 que activaban el backdoor para la herramienta Automake estaban incluidos solo en el archivo comprimido final con el código y estaban ausentes en el repositorio. Para detectar ataques de este tipo, OSS Rebuild utiliza un análisis dinámico de los artefactos suministrados en el paquete, los caminos de ejecución y las operaciones sospechosas.
- La inserción de cambios maliciosos en la biblioteca @solana/web3.js ocurrió debido a la compromisión de la cuenta del mantenedor, utilizando métodos de ingeniería social y phishing. En el repositorio de NPM se publicó una nueva versión que incluía cambios maliciosos. En el repositorio de Git del proyecto, esta versión no fue creada y los cambios maliciosos estaban presentes solo en el paquete resultante. La protección en este caso se reduce a identificar en el paquete código que falta en el repositorio principal.
- La compromisión del repositorio del manejador changed-files permitió llevar a cabo un ataque en proyectos que utilizan changed-files para rastrear cambios en archivos y directorios dentro de la infraestructura de integración continua basada en GitHub Actions. Para protegerse contra la inserción de cambios después de la compromisión del entorno de construcción, OSS Rebuild utiliza el rastreo de cambios y actividad sospechosa en entornos de construcción normalizados y reducidos.
Fuente: opennet.ru
