Guía de seguridad para software de código abierto — Mejores prácticas para asegurar tus proyectos
Table of contents
- Ataques a software de código abierto
- Ataques de typosquatting
- Paquetes maliciosos
- Mantenidos comprometidos de GitHub
- Protestware
- Ataques a la Cadena de Suministro de Software
- ¿Por qué los ataques de cadena de suministro de software son atractivos para los hackers?
- ¿Por qué es importante la seguridad de las aplicaciones?
- ¿Qué es la seguridad de aplicaciones web?
- La Analogía del Iceberg
- Cómo implementar el SDLC en proyectos de código abierto
- GitHub Marketplace
- Cómo usar las aplicaciones y acciones de GitHub Marketplace
- Qué considerar al seleccionar herramientas o aplicaciones
- Cómo utilizar el Mercado de GitHub para mitigar riesgos en su proyecto de código abierto
- Análisis de Composición de Software
- Análisis de Composición de Software con Renovate
- Análisis de la Composición del Software con Dependabot
- Análisis de la Composición del Software con Snyk
- Notificaciones por correo electrónico de análisis de composición de software
- ¿Qué es la proliferación de secretos?
- Escaneo de proliferación de secretos con GitGuardian
- Análisis de código estático
- Análisis de código estático con SonarCloud
- Análisis de código estático con GitHub CodeQL
- ¿Cómo funciona todo esto en GitHub?
- Cómo obtener valor de ChatOps
- Cómo utilizar Slack para ChatOps
- ¿Alguna documentación en GitHub?
- Mejores Prácticas de Software de Código Abierto
- Aplica el principio del menor privilegio
- Haz obligatorio el uso de la autenticación multifactorial para todos los mantenedores y colaboradores
- Revisa los controles de tu proyecto
- Protege tu rama principal
- Activar Notificaciones y Alertas
- Revisar Todas sus Webhooks y Aplicaciones
- Revisa la lista de verificación de seguridad
- Revisa la lista de verificación del perfil de la comunidad
- Implementar Flujos de Trabajo de Código Abierto
- Mostrar el estado de tu proyecto de código abierto
- Agregar una licencia
- 5 consejos para la seguridad de OSS
- Consejo #1 — Adopta un enfoque DevSecOps
- Consejo #2 — Aborda las vulnerabilidades de código abierto
- Consejo #3 — Automatiza tareas simples de seguridad
- Consejo #4 — Se consciente de tus propios activos
- Consejo #5 — Proporciona capacitación en seguridad para desarrolladores
- Cómo hacer un impacto en la comunidad de software de código abierto
- Conclusiones clave para la seguridad en el código abierto 101
- ¡NO SUBAS TUS CLAVES EN GITHUB!
Christine Peterson acuñó el término “software de código abierto” o OSS en 1998. Se refiere a software que está disponible de forma gratuita para que cualquiera lo use, modifique y distribuya.
El código fuente de OSS está disponible abiertamente y cualquier persona con las habilidades técnicas necesarias puede modificarlo. Esto permite que una comunidad de desarrolladores colabore y contribuya al desarrollo y mejora del software.
Esto distingue al OSS del software propietario o de código cerrado, donde el código fuente no está fácilmente disponible.
OSS a menudo es desarrollado y mantenido por una comunidad de voluntarios y se distribuye típicamente bajo una licencia específica de código abierto que describe los términos de uso y distribución. Ejemplos de OSS incluyen el sistema operativo Linux, el servidor web Apache y el lenguaje de programación Python.
Uno de los principales beneficios del OSS es que da a los usuarios más control sobre el software que usan porque pueden examinar el código.
Además, se considera más estable y seguro que el software propietario. Esto se debe a que sigue estándares abiertos, lo que hace menos probable que desaparezca si sus mantenedores dejan de trabajar en él.
El OSS también cuenta con una comunidad de usuarios y desarrolladores que pueden ayudar a identificar y resolver cualquier problema. Sin embargo, también presenta sus propios desafíos de seguridad.
Ataques a software de código abierto
En esta sección, analizaremos algunos de los ataques más comunes contra el software de código abierto.
Ataques de typosquatting
El typosquatting, también conocido como secuestro de URL, es una forma de ataque cibernético en la que un atacante registra un nombre de dominio similar al de un sitio web conocido, pero con un pequeño error tipográfico. Luego, el atacante crea una versión falsa del sitio web original en un intento por engañar a los usuarios para que ingresen su información personal, como contraseñas o números de tarjetas de crédito.
Por ejemplo, si un sitio web popular es www.example.com, un atacante de typosquatting puede registrar www.examplle.com, con la esperanza de que los usuarios escriban incorrectamente la URL y terminen en el sitio web falso. El sitio web falso puede verse idéntico al original, lo que dificulta que los usuarios se den cuenta de que han sido redirigidos a un sitio diferente.
Los ataques de typosquatting también pueden tener lugar en OSS, donde los actores malintencionados publican paquetes maliciosos en un registro con la esperanza de engañar a los usuarios para que los instalen.
Aquí hay un ejemplo con el paquete react con un error tipográfico. En ese caso, no se instalará React, sino potencialmente un paquete malicioso que tiene un objetivo completamente diferente.
Hemos visto este tipo de paquetes en los registros de PyPi y npm, siendo el más notable de ellos crossenv.
El paquete crossenv tomó el nombre similar del paquete popular cross-env y envolvía la misma funcionalidad, excepto que también capturaba variables de entorno y las enviaba a un servidor remoto controlado por un atacante.
El typosquatting puede tener consecuencias graves, como el robo de identidad, el fraude financiero y la propagación de malware.
Para evitar ser víctima de typosquatting, es importante escanear cuidadosamente los paquetes en su base de código con herramientas de seguridad e importarlos de fuentes conocidas.
Paquetes maliciosos
Los paquetes maliciosos, también conocidos como software malicioso o malware, son paquetes diseñados intencionalmente para dañar o explotar sistemas informáticos. A menudo se distribuyen a través de varios medios, como archivos adjuntos de correo electrónico, sitios web maliciosos o descargas de software infectado.
Una vez instalados en una computadora, los paquetes maliciosos pueden causar una variedad de problemas. El principal es el robo de datos, donde el atacante puede obtener acceso a información sensible, como contraseñas, números de tarjetas de crédito o archivos personales.
También existen casos de interrupción del sistema, donde el malware puede dañar o eliminar archivos importantes del sistema, ralentizando la computadora o dejándola inoperable. El atacante también puede usar el malware para espiar o monitorear las actividades de la víctima, incluyendo pulsaciones de teclas, correos electrónicos y navegación web. Y puede propagarse o pivotear, donde el malware puede propagarse a otras computadoras en la misma red, causando un mayor daño.
Aquí hay un ejemplo con el paquete malicioso fallguys. Los atacantes suelen aprovechar las tendencias y este juego ha sido bastante popular durante la pandemia. Los jugadores pueden pensar que descargando este paquete podrían obtener una ventaja dentro del juego.
Desafortunadamente para ellos, este paquete contiene código malicioso que intentaría leer archivos sensibles locales y exfiltrar información a través de un webhook de Discord. El código estaba accediendo a rutas específicas disponibles en sistemas Windows ubicados en /AppData/Local/Google/Chrome/User Data/Default/Local Storage/leveldb.
Es importante tomar medidas para proteger su computadora de los paquetes maliciosos, como mantener actualizado su sistema operativo y software.
Si sospecha que su computadora ha sido infectada con malware, debe actuar rápidamente para minimizar el daño y prevenir la propagación de la infección.
Mantenidos comprometidos de GitHub
Los mantenedores comprometidos de GitHub se refieren a personas que son responsables de mantener proyectos de software de código abierto alojados en GitHub y que han tenido sus cuentas pirateadas o tomadas por atacantes.
Esto puede ocurrir cuando las credenciales de la cuenta de GitHub del mantenedor, como su nombre de usuario y contraseña, son obtenidas por un atacante a través de medios como ataques de phishing, reutilización de contraseñas o ser víctima de ingeniería social en GitHub.
Una vez que el atacante tiene el control de la cuenta de un mantenedor, pueden llevar a cabo varias acciones maliciosas.
Pueden publicar paquetes maliciosos, donde un atacante puede publicar nuevos paquetes o actualizaciones de paquetes existentes que contienen malware, potencialmente infectando a los usuarios que los descargan e instalan.
Pueden propagar malware, donde un atacante puede utilizar la cuenta comprometida para propagar malware a otros usuarios u organizaciones, ya sea a través del repositorio en sí o a través de otros medios, como correos electrónicos de phishing.
También pueden manipular el código, donde un atacante puede realizar cambios en el código del repositorio, introduciendo vulnerabilidades o puertas traseras que pueden ser utilizadas para una mayor explotación.
En este ejemplo con el paquete event-stream, el atacante revisó todos los problemas en el repositorio para buscar características en las que pudiera contribuir. Comenzó a ganar la confianza del mantenedor y otros colaboradores al principio al realizar cambios cosméticos. Luego, cuando obtuvo más permisos, agregó su carga maliciosa al código que estaba apuntando a una billetera de Bitcoin.
Los mantenedores comprometidos de GitHub representan una seria amenaza para la seguridad y estabilidad del ecosistema de software de código abierto. Es importante que los mantenedores tomen medidas para proteger sus cuentas y monitorear sus repositorios en busca de signos de actividad sospechosa.
Esto puede incluir el uso de contraseñas fuertes y únicas, habilitar la autenticación de dos factores y revisar regularmente la actividad en sus repositorios en busca de cambios inusuales o no autorizados.
Protestware
Protestware se refiere a software o tecnología que se utiliza como forma de protesta o activismo político. Está diseñado para desafiar o interrumpir sistemas, políticas o prácticas que se consideran injustas o perjudiciales.
El uso de protestware es controvertido y puede tener consecuencias legales, ya que a menudo implica actos que son ilegales o poco éticos, como el hacking, el acceso no autorizado o la interrupción de servicios. Además, puede tener consecuencias no deseadas, como causar daño a partes inocentes o comprometer la seguridad de los usuarios del software.
Si quieres saber más sobre protestware, puedes leer este artículo.
Ataques a la Cadena de Suministro de Software
Un ataque a la cadena de suministro es cuando un tercero que tiene acceso a los datos y sistemas de una organización es utilizado para infiltrarse en la infraestructura digital de la organización.
Se puede introducir una vulnerabilidad en cualquier punto de la cadena de suministro, incluyendo el diseño, desarrollo, fabricación, distribución o entrega de un producto o servicio.
Por ejemplo, un atacante puede comprometer a un proveedor de software que proporciona componentes de software utilizados por muchas organizaciones, o manipular componentes de hardware durante la fabricación o el envío. El atacante puede luego utilizar el compromiso para difundir malware o extraer datos sensibles de los sistemas del objetivo.
La naturaleza abierta del OSS lo hace vulnerable a los ataques a la cadena de suministro. En el caso de las iniciativas de código abierto, los actores maliciosos pueden introducir vulnerabilidades en el software producido, lo que facilita la propagación de nuevas amenazas a las empresas que utilizan el software.
En un ataque a la cadena de suministro de software, los atacantes utilizan código malicioso para comprometer un “componente upstream” en la cadena con el objetivo final de comprometer el objetivo del ataque: el “componente downstream”.
Comprometer el componente upstream no es el objetivo final, es una oportunidad para que los atacantes comprometan el objetivo del ataque mediante la inserción de malware o proporcionando una puerta trasera para el acceso futuro.
Esto no solo afecta a los paquetes de JavaScript, como hemos visto en algunos ejemplos en la sección de ataques de código abierto. Este es un problema para todos los ecosistemas.
Tuvimos un gran ejemplo con la vulnerabilidad de Log4j en 2021. Si desea obtener más información sobre esa vulnerabilidad, consulte estos recursos.
Uno de los exploits de Log4j permite la ejecución remota de código en los servidores que ejecutan aplicaciones vulnerables sin requerir autenticación. Eso ha ganado a la vulnerabilidad una calificación de gravedad de 10 en la escala CVSS (Sistema Común de Puntuación de Vulnerabilidades).
Log4j se utiliza en muchas aplicaciones comerciales y las organizaciones podrían ser vulnerables sin saber que realmente están utilizando la biblioteca de registro.
Para mitigar el riesgo de ataques a la cadena de suministro, las organizaciones deben implementar medidas de seguridad en toda su cadena de suministro, incluyendo la realización de verificaciones de antecedentes de los proveedores, la implementación de procesos de firma de código y arranque seguro, y la monitorización regular de sus sistemas en busca de signos de compromiso.
Además, es importante mantener actualizados los componentes de software y hardware con los últimos parches y actualizaciones de seguridad para reducir el riesgo de explotación.
¿Por qué los ataques de cadena de suministro de software son atractivos para los hackers?
Los ataques de cadena de suministro de software son atractivos para los hackers por varias razones.
En primer lugar, al dirigirse a una vulnerabilidad en la cadena de suministro, el atacante puede potencialmente comprometer a muchas organizaciones y a sus clientes, en lugar de sólo a un objetivo. Esto le permite al atacante aumentar su impacto y potencialmente robar grandes cantidades de datos sensibles o causar daños generalizados.
Los ataques de cadena de suministro de software son difíciles de detectar porque a menudo implican la manipulación de productos o componentes de software antes de que lleguen a la organización objetivo. Esto puede hacer que sea difícil para el objetivo detectar el ataque, especialmente si el atacante es capaz de mantener el acceso a los sistemas comprometidos durante un período prolongado de tiempo.
Además, las organizaciones a menudo confían en los productos y servicios proporcionados por sus proveedores, lo que facilita al atacante explotar esa confianza y llevar a cabo el ataque. Además, las medidas de seguridad pueden no ser tan estrictas para los proveedores o vendedores externos, lo que facilita al atacante comprometer esos sistemas.
Por último, la información y los sistemas de las organizaciones suelen ser objetivos valiosos para los atacantes, especialmente si contienen información sensible como propiedad intelectual, datos financieros o información personal. Al comprometer la cadena de suministro, el atacante puede obtener acceso a estos activos valiosos.
¿Por qué es importante la seguridad de las aplicaciones?
Las aplicaciones a menudo almacenan y procesan información sensible, como datos personales, información financiera y propiedad intelectual. Asegurar la seguridad de estas aplicaciones es esencial para proteger esta información sensible contra el robo, la manipulación o el acceso no autorizado.
Además, las aplicaciones son fundamentales para las operaciones diarias de la mayoría de las organizaciones, y una violación de seguridad en una aplicación puede causar interrupciones significativas en las operaciones comerciales y pérdidas financieras. Al implementar medidas de seguridad sólidas en las aplicaciones, las organizaciones pueden ayudar a garantizar la disponibilidad y estabilidad de sus aplicaciones y mantener la continuidad del negocio ante las amenazas de seguridad.
Sabemos que una violación de seguridad en una aplicación puede dañar la reputación de una organización, causando daño a su marca y pérdida de confianza del cliente. Al invertir en seguridad de aplicaciones, las organizaciones pueden proteger su reputación y construir la confianza del cliente.
Además, muchas industrias y organizaciones están sujetas a regulaciones que les exigen implementar medidas de seguridad sólidas para sus aplicaciones y proteger información sensible. El incumplimiento de estas regulaciones puede resultar en sanciones legales y pérdidas financieras.
Finalmente, una violación de seguridad en una aplicación puede resultar en pérdidas financieras para la organización, como el costo de la remediación, los honorarios legales y la pérdida de negocios debido al daño reputacional. La implementación de medidas sólidas de seguridad de aplicaciones puede ayudar a prevenir estas pérdidas financieras y proteger la línea de fondo de la organización.
¿Qué es la seguridad de aplicaciones web?
La seguridad de aplicaciones web se refiere a las medidas y prácticas tomadas para proteger sitios web y aplicaciones web de varias amenazas de seguridad.
Involucra la implementación de una serie de medidas de seguridad, incluyendo controles de acceso, autenticación y autorización, encriptación, validación de entrada, y más. Estas medidas se implementan a lo largo del ciclo de vida del desarrollo de software (SDLC) para identificar y abordar vulnerabilidades de seguridad.
El objetivo de la seguridad de aplicaciones web es asegurar que los datos y sistemas a los que acceden las aplicaciones web estén protegidos contra el acceso no autorizado, la manipulación y la destrucción.
En este flujo de trabajo, podemos implementar barreras de seguridad en cada etapa de nuestro pipeline.
En la etapa de codificación, podríamos tener una herramienta de seguridad integrada en nuestro IDE o usar la CLI para escanear nuestro código y paquetes. Podríamos tener algunos escaneos desencadenados en el nivel del repositorio o integrados dentro de nuestro pipeline de CI/CD para asegurarnos de que estamos probando nuestro código. Los registros también pueden ser monitoreados para asegurarnos de que estamos obteniendo paquetes o imágenes no vulnerables.
Organizaciones como OWASP (Proyecto Mundial de Seguridad de Aplicaciones Abiertas) rastrean las vulnerabilidades encontradas y proporcionan una lista que los desarrolladores y los equipos de seguridad pueden utilizar como punto de partida para su programa de seguridad de aplicaciones.
La lista más reciente del OWASP Top 10 fue publicada en 2021 e incluye el control de acceso roto, ataques de inyección, configuraciones de seguridad incorrectas y más.
La Analogía del Iceberg
La analogía del “Iceberg” se utiliza a menudo para describir las capas de una aplicación moderna, que incluyen el código de la aplicación, las bibliotecas de código abierto, los contenedores y la infraestructura como código.
La analogía se basa en la idea de que, al igual que un iceberg, que tiene solo una pequeña parte visible sobre el agua mientras que la mayoría de ella se encuentra debajo de la superficie, las aplicaciones modernas tienen muchas capas que no son inmediatamente visibles pero son esenciales para su funcionamiento.
En la parte superior del iceberg, tenemos el código de la aplicación visible, que es el código que los desarrolladores escriben para crear la funcionalidad de la aplicación. Pero debajo de la superficie, hay muchas capas que no son inmediatamente visibles pero son críticas para el funcionamiento de la aplicación.
La primera capa debajo de la superficie son las bibliotecas de código abierto, que a menudo son utilizadas por los desarrolladores para ahorrar tiempo y aumentar la productividad. Estas bibliotecas contienen código que ha sido escrito por otros desarrolladores y se puede utilizar para realizar tareas comunes, como manejar solicitudes HTTP o administrar bases de datos.
La siguiente capa son los contenedores, que se utilizan para empaquetar y desplegar aplicaciones de manera consistente y eficiente. Los contenedores se utilizan para aislar la aplicación del sistema host y proporcionar un entorno estandarizado para ejecutar la aplicación.
Finalmente, en la parte inferior del iceberg, tenemos la infraestructura como código, que se refiere al código que se utiliza para automatizar el despliegue y la gestión de la infraestructura que soporta la aplicación. Esto incluye recursos como máquinas virtuales, redes y almacenamiento.
La analogía del Iceberg destaca la complejidad de las aplicaciones modernas y la importancia de adoptar un enfoque integral para asegurarlas.
Para asegurar que una aplicación sea segura, será necesario considerar y asegurar todas estas capas, incluido el código de la aplicación, las bibliotecas de código abierto, los contenedores y la infraestructura como código.
Cómo implementar el SDLC en proyectos de código abierto
La seguridad de las aplicaciones web es un aspecto crucial para garantizar la protección de un proyecto. Implica la implementación de medidas de seguridad a lo largo del ciclo de vida del desarrollo de software (SDLC) para identificar y abordar las vulnerabilidades de seguridad en el proyecto y su configuración.
Una forma de asegurar tu proyecto de código abierto es utilizar herramientas y aplicaciones de seguridad disponibles en el GitHub Marketplace. ¡Esto también podría aplicarse a tus proyectos personales que deseas demostrar durante una entrevista de trabajo!
Al hacerlo, podrás tener el mismo nivel de protección que un proyecto propietario.
GitHub Marketplace
El GitHub Marketplace se introdujo en 2016 y ofrece a los desarrolladores una plataforma para encontrar e integrar herramientas en sus flujos de trabajo. Ofrece una amplia gama de productos y servicios, que incluyen:
Herramientas de revisión y análisis de código: herramientas para automatizar la revisión de código, analizar la calidad del código y verificar las vulnerabilidades de seguridad.
Herramientas de integración y despliegue continuo: herramientas para automatizar la compilación, prueba y despliegue de código a entornos de producción.
Herramientas de gestión de proyectos: herramientas para rastrear el progreso del proyecto, gestionar tareas y colaborar con otros miembros del equipo de desarrollo.
Herramientas de comunidad y comunicación: herramientas para mejorar la comunicación y la colaboración dentro de un equipo de desarrollo y con la comunidad en general.
Herramientas de monitoreo y rendimiento: herramientas para monitorear el rendimiento y la disponibilidad de código en entornos de producción.
Herramientas de cumplimiento y seguridad: herramientas para garantizar el cumplimiento de regulaciones y estándares de la industria, y para mejorar la seguridad del código.
Educación y formación: cursos y recursos para aprender sobre GitHub, desarrollo de software y tecnologías relacionadas.
El Marketplace está diseñado para facilitar que los desarrolladores descubran e integren herramientas en su flujo de trabajo, simplificando el proceso de desarrollo y aumentando la eficiencia.
Muchas de las herramientas y servicios disponibles en el Marketplace son creados por desarrolladores de terceros, y están diseñados para funcionar sin problemas con GitHub. Esto permite a los desarrolladores administrar su código y proyectos de manera más efectiva.
Cómo usar las aplicaciones y acciones de GitHub Marketplace
El proceso de usar una aplicación o acción en GitHub Marketplace puede variar según la herramienta específica. Puedes buscar en el GitHub Marketplace aplicaciones y acciones que satisfagan tus necesidades. Una vez que encuentres una que quieras usar, haz clic en ella para obtener más información.
Dependiendo de la aplicación o acción, existen varias formas de usarla. Algunas pueden requerir instalación o configuración, mientras que otras se pueden usar de inmediato.
La aplicación o acción vendrá con instrucciones sobre cómo usarla. Por lo general, se pueden encontrar en la lista del Marketplace de la aplicación o acción o en la documentación.
Como responsable de un proyecto, verificarás si esta será una herramienta adecuada para tu base de código. Podemos ver si GitHub ha verificado la aplicación, los lenguajes admitidos, una descripción de la herramienta y más información sobre la organización.
Cuando desplazas la página del producto hacia abajo, deberías ver la sección de Pricing and setup. Casi todas las herramientas y acciones disponibles en GitHub Marketplace tienen un plan gratuito para repositorios públicos y proyectos de código abierto.
Cuando haces clic en el botón verde Install it for free, puedes revisar el pedido.
Qué considerar al seleccionar herramientas o aplicaciones
Al seleccionar herramientas y aplicaciones, es importante considerar factores como el conjunto de tecnologías utilizadas, el número de pasos en la cadena de producción y si se pueden implementar protecciones en cada paso.
También puede considerar el propósito de la herramienta y si cuenta con las funciones necesarias para satisfacer sus requisitos. Algunas herramientas pueden tener una amplia gama de funciones, mientras que otras pueden ser más especializadas para casos de uso específicos.
Compruebe si la herramienta es compatible con su conjunto de tecnologías de desarrollo y entorno. Esto incluye la compatibilidad con lenguajes de programación, marcos de trabajo, sistemas operativos y otras herramientas que ya está utilizando.
Busque también herramientas que tengan documentación completa, tutoriales y recursos de soporte disponibles. Esto puede ayudarlo a poner en marcha rápidamente la herramienta y solucionar cualquier problema que pueda encontrar.
Puede verificar las reseñas de usuarios de la herramienta para ver qué han experimentado otros. Esto puede darle una idea de las fortalezas y debilidades de la herramienta, así como de su calidad general.
Por último, no olvide considerar las implicaciones de seguridad de la herramienta, especialmente si tendrá acceso a datos o sistemas sensibles. Busque herramientas que hayan sido auditadas de manera independiente en busca de vulnerabilidades de seguridad y que tengan prácticas sólidas de seguridad en su lugar.
Al tener en cuenta estos factores, puede tomar una decisión informada al seleccionar una aplicación o herramienta en el GitHub Marketplace.
Pero lo más importante,
Cómo utilizar el Mercado de GitHub para mitigar riesgos en su proyecto de código abierto
Puede aprovechar las aplicaciones y acciones de seguridad disponibles en el Mercado de GitHub para asegurar su cadena de producción en cada etapa del ciclo de vida del desarrollo de software.
Identifique los requisitos de seguridad para su ciclo de vida de desarrollo de software, como qué herramientas de seguridad necesita y cuándo las necesita. Esto le ayudará a seleccionar las aplicaciones y acciones de seguridad apropiadas.
Luego, integre las herramientas de seguridad en su cadena de producción para identificar vulnerabilidades y problemas de seguridad en cada etapa del ciclo de vida del desarrollo de software. Por ejemplo, puede utilizar una herramienta de análisis de código para detectar problemas de seguridad en su código o una herramienta de análisis de contenedores para identificar vulnerabilidades en sus contenedores.
Asegúrese de automatizar los controles de seguridad para garantizar que los problemas de seguridad se detecten lo antes posible en el proceso de desarrollo. Esto puede ayudar a reducir el riesgo de que se introduzcan problemas de seguridad en el código base.
También puede configurar políticas de seguridad para garantizar que su equipo de desarrollo siga prácticas de codificación seguras y cumpla con los requisitos de cumplimiento. Esto puede incluir hacer cumplir el uso de bibliotecas y marcos específicos o exigir procedimientos de revisión y prueba de código seguros.
No olvide monitorear y administrar las alertas de seguridad para asegurarse de que las vulnerabilidades y problemas de seguridad se aborden de manera oportuna. Esto puede incluir configurar notificaciones para alertas de seguridad, priorizar vulnerabilidades y hacer un seguimiento del progreso de la resolución.
Si no sabe por dónde empezar, puede considerar la construcción de una cadena de producción básica que comprenda:
una herramienta de análisis de composición de software para enfocarse en identificar el software de código abierto en un código base para que los mantenedores y contribuyentes puedan administrar su exposición a problemas de seguridad y cumplimiento de licencias.
una herramienta para evitar la propagación de secretos, que es la distribución no deseada de secretos como claves de API y credenciales a través de múltiples sistemas.
una herramienta para cubrir el análisis de código estático, que es un método de depuración mediante el examen del código fuente antes de que se ejecute un programa donde se analiza un conjunto de código frente a un conjunto de reglas de codificación.
Análisis de Composición de Software
El Análisis de Composición de Software (SCA) es el proceso de identificar y analizar los diferentes componentes, bibliotecas y dependencias que conforman una aplicación de software.
El objetivo del SCA es identificar cualquier vulnerabilidad o riesgo de seguridad conocido en los componentes utilizados en el software, y garantizar que el software se construya utilizando componentes seguros y actualizados.
El SCA es un paso importante en el proceso de desarrollo de software, ya que ayuda a garantizar que el software esté libre de vulnerabilidades que los atacantes puedan explotar.
Normalmente se realiza el SCA en intervalos regulares durante todo el ciclo de desarrollo, y es un aspecto importante de las prácticas de desarrollo de software seguro (como el Ciclo de Vida del Desarrollo de Software Seguro).
Las herramientas y servicios de SCA pueden escanear el software y sus componentes, comparándolos con una base de datos de vulnerabilidades y riesgos de seguridad conocidos. Luego, puede utilizar los resultados del análisis para identificar y abordar cualquier problema de seguridad, como componentes obsoletos o componentes con vulnerabilidades conocidas, antes de que puedan ser explotados por los atacantes.
Análisis de Composición de Software con Renovate
Mend Renovate es una herramienta de código abierto para automatizar la gestión de dependencias en un proyecto de software.
Al igual que otras herramientas de gestión de dependencias, ayuda a mantener actualizadas las dependencias de un proyecto, reduciendo el riesgo de vulnerabilidades de seguridad y otros problemas asociados con dependencias obsoletas.
Este es un ejemplo de una solicitud de extracción realizada por Renovate. La solicitud de extracción contendrá toda la información necesaria sobre la versión del paquete, las notas de lanzamiento y si hay algún cambio importante antes de la fusión.
Análisis de la Composición del Software con Dependabot
Dependabot es un servicio ofrecido por GitHub que automatiza el proceso de actualización de las dependencias en un proyecto de software. Ayuda a los desarrolladores a mantener actualizadas sus dependencias, reduciendo el riesgo de vulnerabilidades de seguridad y otros problemas asociados con dependencias obsoletas.
Dependabot monitorea las dependencias de un proyecto y envía solicitudes pull para actualizarlas cuando se encuentran nuevas versiones disponibles. Estas solicitudes incluyen información detallada sobre las actualizaciones, como el número de versión nueva, un resumen de los cambios y un enlace a las notas de la versión. Esta información ayuda a los desarrolladores a evaluar rápidamente el impacto de la actualización y decidir si fusionarla con su base de código.
Análisis de la Composición del Software con Snyk
Snyk es una herramienta para asegurar las dependencias del software de código abierto. Ayuda a los desarrolladores a identificar y corregir vulnerabilidades en sus dependencias, así como a monitorear sus proyectos en busca de nuevos problemas de seguridad.
Snyk se integra con plataformas de desarrollo populares, como GitHub y GitLab. Proporciona a los desarrolladores información sobre la seguridad de sus dependencias, incluyendo la gravedad de las vulnerabilidades, cuándo fueron descubiertas y qué deben hacer para corregirlas. La herramienta también proporciona parches de seguridad automatizados, que se pueden aplicar fácilmente para corregir vulnerabilidades conocidas.
Snyk admite una amplia gama de lenguajes de programación y administradores de paquetes, lo que lo convierte en una solución versátil para asegurar las dependencias del software de código abierto. También proporciona informes y análisis detallados, ayudando a los desarrolladores a comprender la postura de seguridad de sus proyectos y tomar medidas para abordar las vulnerabilidades de seguridad.
Si desea aprender más sobre las vulnerabilidades, puede explorar la Base de Datos de Vulnerabilidades de Código Abierto de Snyk. Es una base de datos completa que proporciona información sobre vulnerabilidades de seguridad conocidas en paquetes y bibliotecas de código abierto.
Esta base de datos se actualiza constantemente con nuevas vulnerabilidades y ofrece a los usuarios la capacidad de buscar vulnerabilidades por nombre de paquete, número de versión o vulnerabilidad específica.
La base de datos también proporciona información sobre la gravedad de cada vulnerabilidad y ofrece consejos de remedio para ayudar a los desarrolladores a abordar cualquier vulnerabilidad identificada en su código.
La Base de Datos de Vulnerabilidades de Código Abierto de Snyk es un recurso valioso para los desarrolladores que construyen aplicaciones con componentes de código abierto. Puede ayudarlo a identificar posibles problemas de seguridad y tomar medidas para prevenirlos antes de que se conviertan en un problema.
Notificaciones por correo electrónico de análisis de composición de software
Al utilizar una herramienta de análisis de composición de software, las notificaciones por correo electrónico pueden ser una característica útil para ayudarlo a mantenerse informado sobre posibles vulnerabilidades en sus dependencias de código abierto.
Puede configurar estas notificaciones para recibir alertas cuando se descubran nuevas vulnerabilidades, cuando se corrijan vulnerabilidades existentes o cuando estén disponibles nuevas versiones de dependencias que aborden problemas de seguridad.
Al habilitar estas notificaciones, puede identificar y responder rápidamente a posibles amenazas de seguridad y mantenerse al tanto de las actualizaciones de sus dependencias. Esto ayuda a mantener la seguridad de sus aplicaciones.
¿Qué es la proliferación de secretos?
La proliferación de secretos se refiere al creciente problema de secretos no controlados y no seguros en proyectos de software.
Los secretos, como claves de API, contraseñas y otra información confidencial, se utilizan comúnmente en el desarrollo de software para acceder de forma segura a recursos o proteger datos sensibles. Pero los secretos a menudo se almacenan en forma no cifrada en código fuente, archivos de configuración y otros artefactos, lo que los hace vulnerables al robo y uso indebido.
La proliferación de secretos puede surgir cuando se comparten o duplican en múltiples sistemas, repositorios y equipos, lo que dificulta el seguimiento de todos ellos y garantizar que se manejen de manera segura. Esto puede provocar una serie de problemas de seguridad y cumplimiento normativo, como violaciones de datos, acceso no autorizado y violaciones regulatorias.
Para abordar la proliferación de secretos, las organizaciones y los equipos de desarrollo de software deben implementar estrategias efectivas para administrar secretos, como cifrar información confidencial, almacenar secretos en una ubicación centralizada y segura y proporcionar acceso solo a usuarios autorizados. También deben tener procesos sólidos para garantizar que los secretos se administren de manera segura durante todo su ciclo de vida, desde su creación hasta su retiro.
Escaneo de proliferación de secretos con GitGuardian
GitGuardian es una herramienta de seguridad que ayuda a organizaciones y desarrolladores a identificar y prevenir posibles violaciones de seguridad en sus repositorios de código.
Funciona escaneando en tiempo real el código y los archivos de configuración, buscando secretos como claves de API, credenciales y otra información confidencial que puede haber sido accidentalmente comprometida en un repositorio.
GitGuardian se integra con sistemas de control de versiones populares como GitHub y GitLab, y proporciona notificaciones y alertas en tiempo real a los desarrolladores cuando se detecta información confidencial en su código.
La herramienta también proporciona un análisis detallado del nivel de riesgo de cada violación, incluido el tipo de secreto, su origen y qué acciones pueden tomar los desarrolladores para evitar un incidente de seguridad.
GitGuardian está diseñado para funcionar sin problemas con el flujo de trabajo de desarrollo, ayudando a los desarrolladores a centrarse en su trabajo mientras se asegura que la información confidencial esté protegida en todo momento.
Proporciona una variedad de características de seguridad y cumplimiento, como la rotación automatizada de secretos, la aplicación de políticas y la generación de informes, lo que lo convierte en una solución integral para administrar la seguridad de los repositorios de código.
Puede elegir instalar GitGuardian en todos los repositorios o seleccionar algunos de ellos. Recomiendo instalarlo en todos los repositorios. Esto le dará visibilidad sobre todos los proyectos que ha realizado y si hay alguna credencial disponible públicamente.
Una vez que haya cargado sus proyectos, puede verificar en el panel para ver qué proyectos tienen secretos.
Es importante tener en cuenta que estas herramientas tienen muchos puntos de integración. Aquí estamos hablando de GitHub, pero también puede implementar algunas de ellas en GitLab o BitBucket.
También puede implementar estas herramientas como un paso adicional dentro de su canalización de CI/CD según las herramientas que esté utilizando, como Circle CI, Jenkins, GitHub Actions, Azure pipelines, y otros.
En este caso particular, para evitar la propagación de secretos, recomendaría agregar una integración de gancho git pre-commit. Al incluir un paso pre-commit, los desarrolladores pueden escanear los cambios de código en busca de secretos potenciales antes de comprometerlos en el repositorio.
Análisis de código estático
El Análisis de código estático es una técnica utilizada en el desarrollo de software para analizar el código sin ejecutarlo. El análisis se realiza mediante herramientas que examinan el código y detectan posibles vulnerabilidades de seguridad, errores de codificación y otros problemas que pueden afectar la calidad y estabilidad del software.
Las herramientas de análisis de código estático utilizan una variedad de técnicas, como la coincidencia de patrones, el análisis basado en reglas y el análisis de flujo de datos, para identificar posibles problemas en el código. Los resultados del análisis se presentan al desarrollador en forma de advertencias, errores u otras notificaciones, que el desarrollador puede utilizar para mejorar la calidad y seguridad del código.
Puede utilizar el análisis de código estático en diferentes etapas del ciclo de vida del desarrollo de software, desde el diseño y desarrollo tempranos hasta las pruebas y el despliegue. Puede ayudar a identificar vulnerabilidades de seguridad, como la inyección de SQL, scripting entre sitios (XSS) y desbordamientos de búfer, así como errores de codificación y problemas de rendimiento.
Análisis de código estático con SonarCloud
SonarCloud es una plataforma basada en la nube para el análisis continuo de la calidad y seguridad del código. S
onarCloud se integra con herramientas de desarrollo populares, como GitHub y GitLab, y proporciona a los desarrolladores comentarios en tiempo real sobre la calidad y seguridad de su código.
La plataforma ofrece una amplia gama de funciones, que incluyen métricas de calidad de código, alertas de seguridad e informes de cobertura de pruebas, lo que la convierte en una solución integral para gestionar la calidad y seguridad del código.
Puede elegir entre la aplicación:
o la acción de GitHub:
Una vez que haya importado su proyecto, SonarCloud analizará la base de código:
y le dará información sobre la salud de su proyecto:
Esto incluye vulnerabilidades de seguridad que puede filtrar por gravedad. La herramienta le informará qué vulnerabilidades son un problema y le dará más contexto para solucionarlas.
Estas herramientas también le proporcionan un mapeo de su base de código para la cobertura, para que sepa en qué área de su base de código mejorar (escribir más pruebas, eliminar código duplicado y corregir vulnerabilidades de seguridad).
Análisis de código estático con GitHub CodeQL
GitHub CodeQL es una herramienta de análisis de código basada en consultas desarrollada por GitHub que ayuda a los desarrolladores a encontrar y solucionar vulnerabilidades en su código. Utiliza un lenguaje de consulta poderoso y flexible, llamado CodeQL, para buscar problemas de seguridad y otros errores en los repositorios de código.
Con GitHub CodeQL, los desarrolladores pueden escribir consultas que identifiquen patrones específicos de código que puedan representar vulnerabilidades de seguridad u otros problemas. Luego, las consultas se ejecutan en el repositorio de código y los resultados se presentan al desarrollador en forma de alertas, notificaciones u otra retroalimentación.
En tu repositorio, haz clic en la pestaña Actions y escribe CodeQL en la barra de búsqueda para encontrar el flujo de trabajo.
No necesitas crear el archivo YAML desde cero. Haz clic en Configure y solo necesitarás verificar si los lenguajes de programación incluidos en el archivo YAML son correctos.
Luego, haz clic en Start commit. Ahora, cada vez que haya cambios en tu repositorio de código a través de una solicitud de extracción, como se define en el archivo YAML, la acción de CodeQL escaneará el código y te informará si hay alguna vulnerabilidad que deba corregirse.
Podrás verificar el progreso del flujo de trabajo en la misma pestaña.
Este es un ejemplo de vulnerabilidades encontradas por CodeQL en un repositorio vulnerable:
Si haces clic en uno de los hallazgos, obtendrás más contexto sobre la vulnerabilidad:
¿Cómo funciona todo esto en GitHub?
Quizás se estén preguntando cómo vamos a ver cómo se integran todas estas herramientas. Bueno, toda la magia sucede en la solicitud de extracción, que actuará como su fuente de verdad.
Cuando un colaborador crea una solicitud de extracción, se activarán todas las aplicaciones, herramientas y acciones que haya implementado en su canalización.
Cuando se desplaza hacia abajo en la parte inferior de la solicitud de extracción, debería ver la lista de herramientas que ha implementado y sus estados.
Podrá ver si las herramientas se ejecutan con éxito o fallan, si son necesarias o no (dependiendo del flujo de trabajo de su equipo) y otra información que necesita antes de fusionar la solicitud de extracción con su rama principal.
Cómo obtener valor de ChatOps
ChatOps es un modelo de colaboración que combina herramientas de comunicación en tiempo real, como plataformas de chat, con automatización y flujos de trabajo para permitir que los equipos trabajen de manera más eficiente y efectiva.
ChatOps reúne a personas, herramientas y procesos en una interfaz central basada en chat, como Slack o Microsoft Teams, donde los miembros del equipo pueden comunicarse, colaborar y automatizar tareas y flujos de trabajo.
Con ChatOps, los miembros del equipo pueden usar comandos de chat para activar flujos de trabajo automatizados, como la implementación de cambios de código, alertas de monitoreo y acciones de respuesta a incidentes.
Esto puede ayudar a los equipos a trabajar de manera más eficiente al reducir el tiempo y el esfuerzo necesarios para realizar tareas repetitivas, y al mejorar la comunicación y la colaboración entre los miembros del equipo.
ChatOps también puede ayudar a las organizaciones a mejorar la seguridad al proporcionar una ubicación central para que los equipos compartan información relacionada con la seguridad y colaboren en tareas de seguridad.
Por ejemplo, los incidentes de seguridad se pueden informar y clasificar a través de la plataforma de chat, y se pueden activar comandos relacionados con la seguridad para automatizar flujos de trabajo de seguridad, como escanear cambios de código en busca de vulnerabilidades o verificar la configuración errónea de seguridad en la infraestructura.
Cómo utilizar Slack para ChatOps
Puede configurar una cuenta gratuita en Slack e integrar las herramientas que ha implementado desde el mercado de GitHub a través de webhooks o aplicaciones. También puede crear canales específicos por herramienta o disciplina para tener más visibilidad y personas dedicadas cuando surja un problema.
Este es un ejemplo del Bot de GitHub en Slack. Tiene información en tiempo real cuando se crea una solicitud de extracción utilizando diferentes colores para traducir el estado de todo el flujo de trabajo, incluidas todas las herramientas que ha implementado.
¿Alguna documentación en GitHub?
GitHub presentó una nueva función llamada “Tables”. Está diseñada para ayudar a los equipos a realizar un seguimiento y administrar elementos de trabajo en un formato tabular.
Las Tables son un tipo de tablero que proporcionan una interfaz similar a una hoja de cálculo para administrar datos, con filas y columnas que se pueden personalizar para mostrar diferentes tipos de información.
Las Tables son altamente personalizables, con una variedad de opciones para ordenar, filtrar y agrupar datos. Los usuarios pueden agregar y eliminar columnas, reordenarlas e incluso guardar vistas personalizadas para su uso futuro. También puede filtrar las Tables en función de criterios específicos, como el estado del problema, el responsable o la etiqueta.
Uno de los beneficios de las Tables es que proporcionan una vista única de múltiples fuentes de datos, lo que facilita ver la imagen completa e identificar patrones en diferentes elementos de trabajo.
Por ejemplo, un equipo podría utilizar una Table para realizar un seguimiento de problemas y solicitudes de extracción en varios repositorios, y luego agruparlos por responsable para ver qué miembros del equipo son responsables de qué elementos de trabajo
Las Tables son solo una forma de hacer gestión de proyectos en GitHub, que también incluyen Projects y Milestones.
Los Proyectos son más flexibles que las Tables, y puede utilizarlos para administrar elementos de trabajo en una variedad de formatos, incluidos tableros, listas y cronogramas.
Puede utilizar hitos para realizar un seguimiento del progreso hacia objetivos específicos y agrupar problemas y solicitudes de extracción relacionados.
Bajo un Milestone, tendrá una lista de problemas en los que los desarrolladores pueden trabajar. No olvide agregar las etiquetas, proyectos y hitos a sus solicitudes de extracción para realizar un seguimiento del progreso y reflejarlo en las Tables o Projects.
Aquí hay un ejemplo de un tablero. Puede utilizar proyectos o tableros automatizados donde las tarjetas se moverán según el estado de la solicitud de extracción. Esta también es una buena manera de mostrar en qué función está trabajando y dónde podría necesitar ayuda y contribuciones.
GitHub proporciona varias características de gestión de proyectos que pueden ayudar a los equipos a organizar y realizar un seguimiento de su trabajo.
Mejores Prácticas de Software de Código Abierto
Hemos visto cómo implementar medidas de seguridad en tus proyectos. ¡Ahora echemos un vistazo a algunas de las mejores prácticas de software de código abierto para fortalecer tus proyectos!
Aplica el principio del menor privilegio
En el contexto de GitHub, aplicar el principio del menor privilegio significa otorgar a los usuarios y servicios solo el nivel mínimo de acceso necesario para realizar sus tareas requeridas, y nada más.
Esto es importante por razones de seguridad, ya que ayuda a minimizar el impacto potencial de una violación de seguridad o amenaza interna.
Puedes alentar a tus colaboradores a crear contraseñas sólidas y usar la autenticación multifactorial para proteger aún más sus cuentas. Puedes limitar el acceso a los repositorios solo a aquellos usuarios que lo necesiten. Por ejemplo, si un usuario solo necesita acceso de lectura a un repositorio, no le des acceso de escritura.
En lugar de administrar el acceso de forma individual, usa equipos para administrar el acceso a los repositorios. Esto facilita agregar o eliminar usuarios a medida que cambian sus roles.
A nivel de organización, comienza estableciendo los permisos base en No permission para que el usuario solo pueda clonar y extraer los repositorios públicos.
Además, GitHub proporciona tokens de acceso que puedes usar para autenticarte con la API y otros servicios de GitHub. Usa los tokens de acceso con la cantidad mínima de acceso requerido para realizar las tareas necesarias.
También alienta a los usuarios a usar aplicaciones OAuth y GitHub Apps, que son más seguras que los tokens de acceso personal.
Finalmente, asegúrate de revisar regularmente el acceso que los usuarios tienen a los repositorios y otros recursos en GitHub para asegurarte de que aún lo necesiten.
Haz obligatorio el uso de la autenticación multifactorial para todos los mantenedores y colaboradores
Haz obligatorio el uso de la autenticación multifactorial para todos los mantenedores y colaboradores. Para finales de 2023, GitHub requerirá que todos los usuarios que contribuyan con código en GitHub.com habiliten uno o más formas de autenticación multifactorial (2FA) para finales de 2023.
Revisa los controles de tu proyecto
En la pestaña Settings y en Code security and analysis, puedes activar o desactivar Dependabot para el Análisis de Composición de Software.
Puedes hacer lo mismo para el Code scanning donde puedes configurar flujos de trabajo y reglas de protección, así como el Secret scanning.
Para las Acciones de GitHub, puedes Allow select actions e incluir las acciones creadas por GitHub y las acciones marcadas con una marca de verificación azul para creadores verificados, así como una selección de acciones especificadas evaluadas por tu equipo. En ese caso, solo estas acciones pueden ser utilizadas dentro de tus proyectos.
Protege tu rama principal
Proteger la rama principal en GitHub es importante porque es la rama que representa la versión estable y lista para producción de tu código. Es la rama que normalmente se implementa en tu entorno de producción, y cualquier cambio en esta rama puede tener un impacto significativo en la estabilidad y seguridad de tu aplicación.
Sin protección, cualquier usuario con acceso de escritura al repositorio podría hacer cambios en la rama principal sin supervisión ni control, lo que podría introducir errores o vulnerabilidades que pueden ser difíciles de detectar y corregir.
Al proteger la rama principal en GitHub, puedes aplicar políticas y reglas para garantizar que cualquier cambio realizado en la rama principal sea revisado y aprobado por las partes interesadas adecuadas. También puedes asegurarte de que cumplan ciertos criterios, como pasar pruebas automatizadas y verificaciones de calidad de código.
Esto ayuda a reducir el riesgo de que se introduzcan errores o vulnerabilidades en tu entorno de producción, y garantiza que tu aplicación siga siendo estable y segura.
Puedes requerir que se pasen comprobaciones de estado antes de fusionar, lo que incluiría todas las herramientas que has implementado en tu flujo de trabajo.
Los verás cuando se levante una solicitud de extracción. Los requeridos tendrán una etiqueta de “Required” junto a ellos. Si fallan, se bloquea la fusión hasta que resuelvas los problemas.
Activar Notificaciones y Alertas
Activar notificaciones y alertas en GitHub es importante para mantenerse al tanto de eventos importantes y cambios en sus repositorios. Esto también garantizará que sea notificado de posibles problemas de seguridad o rendimiento de manera oportuna.
Puede personalizar las notificaciones y alertas para que se ajusten a sus necesidades. Puede incluir cosas como revisiones de solicitudes de extracción, actualizaciones de problemas, nuevos comentarios, cambios de código y vulnerabilidades de seguridad detectadas en sus dependencias.
Al mantenerse al tanto de estas notificaciones y alertas, puede asegurarse de estar al tanto de eventos importantes y tomar medidas según sea necesario.
Por ejemplo, si se detecta una nueva vulnerabilidad en una de sus dependencias, puede recibir una notificación y tomar medidas para parchar la vulnerabilidad o actualizar la dependencia. Esto puede ayudar a prevenir brechas de seguridad y proteger su aplicación de posibles ataques.
Además, activar notificaciones y alertas puede ayudarlo a mejorar la colaboración y la comunicación dentro de su equipo de desarrollo, ya que proporciona visibilidad sobre las actividades y el progreso de los miembros del equipo. Esto puede ayudar a asegurar que todos estén en la misma página y que se esté avanzando hacia los objetivos del proyecto.
Revisar Todas sus Webhooks y Aplicaciones
Revisar sus webhooks y aplicaciones en GitHub es importante para la seguridad y para garantizar que sus repositorios y aplicaciones funcionen según lo previsto.
Los webhooks son mensajes automatizados que se envían desde GitHub a un sistema externo, como una herramienta de integración continua o un chatbot. Estos webhooks pueden proporcionar una forma poderosa de automatizar su flujo de trabajo de desarrollo e integrarse con sistemas externos, pero también pueden presentar un riesgo de seguridad si no se configuran correctamente.
Al revisar sus webhooks, puede asegurarse de que solo los sistemas autorizados reciban mensajes de webhook y que la información que se envía sea apropiada y no exponga información confidencial.
También puede asegurarse de que los eventos del webhook se estén manejando correctamente y que no haya errores u otros problemas con la configuración.
De manera similar, revisar sus aplicaciones en GitHub puede ayudarlo a asegurarse de que estén funcionando según lo previsto y que no expongan información confidencial.
Las aplicaciones pueden acceder a los datos de su repositorio y realizar acciones en su nombre, por lo que es importante revisar sus permisos y asegurarse de que solo estén autorizadas a realizar acciones necesarias.
Al revisar sus aplicaciones, puede asegurarse de que estén configuradas correctamente y no expongan sus datos de repositorio u otra información confidencial.
Revisa la lista de verificación de seguridad
En la pestaña de Seguridad de tu repositorio, puedes encontrar la lista de verificación de seguridad. Esto incluye una política de seguridad y avisos de seguridad, así como también la opción para activar alertas de Dependabot y alertas de análisis de código.
Puedes incluir una Política de Seguridad como un archivo SECURITY.md en tu proyecto.
Revisa la lista de verificación del perfil de la comunidad
Esta sección está más enfocada en la comunidad de software libre y las buenas prácticas en general. Asegúrate de que tu proyecto incluya una descripción, un archivo README, así como también un Código de Conducta y una guía para contribuir.
También puedes definir plantillas para problemas o solicitudes de extracción para brindar orientación a futuros contribuyentes.
Implementar Flujos de Trabajo de Código Abierto
La implementación de GitHub Actions para flujos de trabajo de código abierto puede ayudar a simplificar el proceso de desarrollo, garantizar resultados consistentes y confiables, y mejorar la calidad y seguridad general del proyecto.
Un aspecto importante de la implementación de GitHub Actions para flujos de trabajo de código abierto es cubrir la primera interacción con los contribuyentes y cerrar problemas obsoletos. Esto es importante porque los proyectos de código abierto a menudo tienen un gran número de contribuyentes y puede ser difícil hacer un seguimiento de todas las interacciones y problemas que necesitan atención.
También puede utilizar GitHub Actions para automatizar el proceso de respuesta a nuevos problemas o solicitudes de extracción, y para ayudar a asegurar que los problemas se aborden de manera oportuna.
Por ejemplo, puede crear una acción que envíe una respuesta automática a nuevos problemas o solicitudes de extracción, informando al contribuyente que su solicitud ha sido recibida y se está revisando.
Además, puede utilizar GitHub Actions para cerrar problemas obsoletos. Esto es importante porque los proyectos de código abierto a menudo tienen una gran cantidad de problemas abiertos que pueden no ser relevantes o que ya se han abordado. Al utilizar una acción para cerrar automáticamente los problemas obsoletos después de cierto período de tiempo, puede ayudar a mantener organizado su proyecto y asegurarse de que solo se aborden los problemas relevantes.
En general, la implementación de GitHub Actions para flujos de trabajo de código abierto es un paso importante para simplificar el proceso de desarrollo, mejorar la calidad y seguridad del proyecto y garantizar que los problemas se aborden de manera oportuna y consistente.
Al cubrir la primera interacción con los contribuyentes y cerrar los problemas obsoletos, puede ayudar a mantener organizado y eficiente su proyecto, y mejorar la experiencia general tanto para los contribuyentes como para los usuarios.
Mostrar el estado de tu proyecto de código abierto
Mostrar el estado de tu proyecto de código abierto usando etiquetas o etiquetas en tu archivo README puede ser una forma útil de comunicar información importante sobre tu proyecto a posibles usuarios y colaboradores.
Estas etiquetas pueden proporcionar una instantánea rápida del estado actual del proyecto y ayudar a los usuarios y colaboradores a entender qué esperar del proyecto.
Puedes incluir etiquetas para indicar el estado de tu proyecto. Esto podría incluir etiquetas como “activo”, “modo de mantenimiento” o “archivado”, para que los usuarios y colaboradores sepan si el proyecto aún se está desarrollando y manteniendo activamente.
Es importante que los usuarios y colaboradores conozcan los términos de licencia de tu proyecto. Usar una etiqueta para indicar el tipo de licencia puede ser una forma rápida y fácil de comunicar esta información.
Si estás utilizando herramientas de integración continua como Jenkins o CircleCI, puedes usar etiquetas para indicar el estado actual de compilación del proyecto.
Si estás utilizando una herramienta de cobertura de código como Codecov, puedes usar etiquetas para indicar el porcentaje de cobertura de código actual del proyecto.
Si tu proyecto está utilizando herramientas de seguridad, puedes usar etiquetas para mostrar la salud de seguridad del proyecto. Esto puede ayudar a los usuarios a entender la postura de seguridad de tu proyecto.
En general, mostrar el estado de tu proyecto usando etiquetas o etiquetas en tu archivo README puede ayudar a proporcionar información importante a posibles usuarios y colaboradores, y puede hacer que sea más fácil para ellos entender qué esperar del proyecto.
También es una buena manera de atraer más colaboradores a tu proyecto. A los desarrolladores les gusta contribuir a proyectos que tienen flujos de trabajo estables.
Este es un ejemplo de cómo crear una insignia de estado para CodeQL:
Necesitarás copiar y pegar el Markdown en tu archivo README.
Y se verá así:
Agregar una licencia
Añadir una licencia a tu proyecto de software de código abierto (OSS) es importante por varias razones. Al agregar una licencia, estás dejando claro a los demás lo que pueden y no pueden hacer con tu software. Esto proporciona protección legal tanto para ti como para otros que puedan querer usar o contribuir a tu proyecto.
Una licencia hace que sea más fácil para otros desarrolladores entender cómo pueden usar y contribuir a tu proyecto. Esto puede ayudar a construir una comunidad sólida y comprometida en torno a tu software.
Agregar una licencia a tu proyecto puede ayudar a evitar confusiones y malentendidos sobre lo que está y no está permitido. Esto puede ayudar a prevenir problemas y disputas en el futuro.
Si no sabes por dónde empezar, puedes elegir una licencia de código abierto que se adapte a tu proyecto aquí. GitHub puede generar la licencia seleccionada que puedes agregar a tu proyecto.
Luego, puedes cambiar cierta información como el año o el nombre completo. La licencia se guardará como un archivo LICENSE.md o LICENSE.txt en tu repositorio.
5 consejos para la seguridad de OSS
Ahora que tenemos una mejor comprensión de cómo se ve una aplicación moderna, cómo protegerla utilizando algunas herramientas y cómo fortalecer tus proyectos, permíteme compartir contigo 5 consejos de seguridad.
Consejo #1 — Adopta un enfoque DevSecOps
Adoptar un enfoque DevSecOps es un paso importante para construir software seguro y resistente. DevSecOps reúne a los equipos de desarrollo, seguridad y operaciones para asegurarse de que la seguridad sea parte integral del ciclo de vida del desarrollo de software desde el principio.
Al integrar la seguridad en cada etapa del proceso de desarrollo, las organizaciones pueden identificar y abordar los problemas de seguridad desde el principio, y construir software más seguro.
DevSecOps implica el uso de herramientas de seguridad automatizadas, pruebas continuas y análisis de código para identificar vulnerabilidades y asegurar que la seguridad esté incorporada en cada aspecto del proceso de desarrollo de software.
Este enfoque puede ayudar a las organizaciones a reducir el riesgo de violaciones de seguridad y construir software más seguro y resistente que pueda resistir las amenazas en evolución.
Consejo #2 — Aborda las vulnerabilidades de código abierto
Abordar las vulnerabilidades de código abierto es fundamental para mantener la seguridad de las aplicaciones de software. Las bibliotecas y frameworks de código abierto son ampliamente utilizados por los desarrolladores para construir software, pero también pueden introducir vulnerabilidades que los atacantes pueden explotar.
Para abordar estas vulnerabilidades, las organizaciones pueden utilizar una variedad de herramientas y técnicas, como el análisis de composición de software y la exploración de vulnerabilidades, para identificar y rastrear vulnerabilidades en componentes de código abierto.
También pueden priorizar y remediar estas vulnerabilidades mediante el uso de un enfoque basado en el riesgo, que implica evaluar la probabilidad e impacto de una vulnerabilidad, y luego priorizar los problemas más críticos para remediar.
Además, las organizaciones pueden aprovechar las bases de datos de vulnerabilidades de código abierto y las divulgaciones de vulnerabilidades impulsadas por la comunidad para mantenerse actualizadas sobre las últimas vulnerabilidades y problemas de seguridad.
Consejo #3 — Automatiza tareas simples de seguridad
Automatizar tareas de seguridad es un paso crucial para lograr una postura de seguridad más eficiente y efectiva. Al automatizar tareas de seguridad repetitivas, las organizaciones pueden liberar a sus equipos de seguridad para centrarse en temas más complejos y críticos.
Esto también puede ayudar a mejorar la consistencia en los procesos de seguridad, reducir errores y omisiones, y permitir una detección y respuesta más rápida a incidentes de seguridad.
Puedes aplicar la automatización a varias tareas de seguridad, incluyendo la exploración de vulnerabilidades, análisis de código, pruebas de seguridad, control de acceso, respuesta a incidentes y monitoreo de cumplimiento.
Consejo #4 — Se consciente de tus propios activos
Ser consciente de tus propios activos y visibilidad es un aspecto crucial para mantener una postura de seguridad sólida. Las organizaciones deben tener una comprensión clara de su propia infraestructura, sistemas y datos, y asegurarse de tener visibilidad en todos los aspectos de sus operaciones.
Esto incluye monitorear sus redes, aplicaciones y puntos finales en busca de signos de compromiso, así como revisar regularmente sus controles de acceso y privilegios para asegurarse de que sean apropiados y estén actualizados.
Además, las organizaciones deben ser conscientes de sus activos públicos y tomar medidas para reducir su exposición a posibles amenazas, como el uso de firewalls, firewalls de aplicaciones web y otras medidas de seguridad.
Consejo #5 — Proporciona capacitación en seguridad para desarrolladores
En el mundo actual de frecuentes violaciones de seguridad y ataques cibernéticos, es crucial que los desarrolladores tengan una buena comprensión de las mejores prácticas de seguridad. La capacitación en seguridad para desarrolladores puede ayudarlos a comprender cómo escribir código seguro, identificar vulnerabilidades y adoptar medidas de seguridad durante todo el ciclo de vida del desarrollo de software.
Al proporcionar capacitación en seguridad a los desarrolladores, las organizaciones pueden asegurarse de que los desarrolladores estén equipados con el conocimiento y las habilidades para construir aplicaciones seguras y prevenir incidentes de seguridad.
La capacitación en seguridad también puede ayudar a crear una cultura de conciencia de seguridad dentro de la organización y asegurar que todos los miembros del equipo comprendan la importancia de la seguridad y puedan contribuir a los esfuerzos de seguridad de la organización.
Puedes usar la plataforma Snyk Learn como punto de partida. Snyk Learn enseña a los desarrolladores cómo mantenerse seguros con lecciones interactivas que exploran vulnerabilidades en una variedad de lenguajes y ecosistemas.
Cómo hacer un impacto en la comunidad de software de código abierto
Hacktoberfest es un evento anual patrocinado por DigitalOcean y GitHub, donde desarrolladores de todo el mundo contribuyen a proyectos de código abierto durante todo el mes de octubre.
El evento tiene como objetivo fomentar las contribuciones a proyectos de código abierto y está abierto a cualquier persona independientemente de su nivel de habilidad.
Para participar, los desarrolladores deben registrarse en el sitio web de Hacktoberfest y hacer cuatro pull requests válidos a cualquier proyecto de código abierto participante en GitHub.
Una vez que los pull requests son aceptados, el desarrollador recibirá una camiseta de edición limitada gratuita. Hacktoberfest es una excelente manera para que los desarrolladores se involucren en la comunidad de código abierto y contribuyan a proyectos que utilizan y en los que confían.
Conclusiones clave para la seguridad en el código abierto 101
La implementación de prácticas seguras en el desarrollo de software es crucial para proteger contra ciberataques y salvaguardar los datos de los usuarios.
Los proyectos de código abierto pueden beneficiarse del uso de herramientas de seguridad como análisis de composición de software, análisis estático de código y escáneres de vulnerabilidades para identificar y remediar posibles riesgos de seguridad.
El GitHub marketplace ofrece una variedad de aplicaciones y acciones de seguridad que se pueden utilizar durante todo el ciclo de vida del software para automatizar tareas de seguridad, hacer cumplir las mejores prácticas y proteger el proyecto de vulnerabilidades.
Practicar una buena higiene de seguridad, como habilitar notificaciones y alertas, revisar los webhooks y aplicaciones y proteger la rama principal, puede ayudar a prevenir el acceso no autorizado y las violaciones de datos.
Proporcionar capacitación de seguridad para los desarrolladores puede ayudar a crear conciencia sobre la importancia de la seguridad y garantizar que las prácticas de codificación segura se integren en el proceso de desarrollo de software.
¡Espero que este artículo te ayude a mejorar la postura de seguridad de tus proyectos!
Puedes seguirme en Twitter o en LinkedIn. ¡No olvides usar los hashtags #GetSecure, #BeSecure y #StaySecure!
¡Ah, y una cosa más antes de que te vayas…!
¡NO SUBAS TUS CLAVES EN GITHUB!
Subscribe to my newsletter
Read articles from Sonya Moisset directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Sonya Moisset
Sonya Moisset
Staff Security 🥑 || 4x GitHub 🌟 2024 || ☁️ OpenUK Security Advisory Board Member