RubyGems: Prácticas de seguridad (9)

La instalación de una gema permite que el código de esa gema se ejecute en el contexto de tu aplicación.

Claramente, eso tiene implicaciones de seguridad: La instalación de una gema maliciosa en un servidor podría resultar en última instancia en que el autor de la gema penetrase completamente en ese servidor.

Debido a esto, la seguridad del código de las gemas es un tema a debate activo dentro de la comunidad de Ruby.

RubyGems ha tenido la capacidad de firmar criptográficamente gemas desde la versión 0.8.11.

Esa firma funciona usando el comando gem cert para crear un par de claves y luego empaquetando los datos de la firma dentro de la propia gema.

Opcionalmente, el comando gem install permite establecer una política de seguridad y puede verificar la clave de firma de una gema antes de instalarla.

Sin embargo, este método de asegurar gemas no se usa mucho puesto que requiere una serie de pasos manuales por parte del desarrollador y no existe una cadena de confianza bien establecida para las claves de firma de gemas.

La discusión sobre nuevos modelos de firma como X509 y OpenPGP se está llevando a cabo en el wiki de rubygems-trust, la lista de RubyGems-Developers y en IRC.

El objetivo es mejorar (o reemplazar) el sistema de firma para que sea fácil para los autores y transparente para los usuarios.

Usando GEMAS de forma segura

Instalar una gema bajo una política de confianza.

  • gem install gemname -P HighSecurity : Todas las gemas dependientes deben estar firmadas y verificadas.
  • gem install gemname -P MediumSecurity : Todas las gemas dependientes firmadas deben verificarse.
  • bundle --trust-policy MediumSecurity : Igual que arriba, excepto que Bundler solo reconoce la bandera larga --trust-policy y no la corta -P .
  • Advertencia: Los certificados de gemas son confiables a nivel mundial, de modo que agregar un cert.pem para una gema automáticamente confía en todas las gemas firmadas por ese certificado.

Verifica la suma de verificación, si es que se encuentra disponible:

gem fetch gemname -v version
ruby -rdigest/sha2 -e "puts Digest::SHA512.new.hexdigest(File.read('gemname-version.gem'))

Conoce los riesgos de ser manipulado, como se describe en la charla Hacking with Gems de Benjamin Smith..

Gemas de construcción

Firmar con: gem cert

  1. Crear certificado de gema autofirmado. Usa la dirección de correo electrónico que especificas en tu gemspecs.
    2.
cd ~/.ssh
gem cert --build [email protected]
chmod 600 gem-p*
  1. Configura gemspec con el certificado. Agrega la clave pública del certificado a tu repositorio.
cd /path/to/your/gem
mkdir certs
cp ~/.ssh/gem-public_cert.pem certs/yourhandle.pem
git add certs/yourhandle.pem

Agrega rutas de certificación a tu gemspec.

s.cert_chain  = ['certs/yourhandle.pem']
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
  1. Agrega tu propio certificado a la lista aprobada, como cualquier otra persona:
gem cert --add certs/yourhandle.pem
  1. Crea una gema y prueba que puedes instalarla.
gem build gemname.gemspec
gem install gemname-version.gem -P HighSecurity
# or -P MediumSecurity if your gem depends on unsigned gems
  1. Texto de ejemplo para la documentación de instalación

MetricFu está firmado criptográficamente. Para asegurarte de que la gema que instalaste no haya sido manipulada:

Agrega la clave pública (si aún no lo has hecho) como un certificado de confianza.

gem cert --add  gem install metric_fu -P MediumSecurity

El perfil de confianza de MediumSecurity verificará las gemas firmadas, pero permitirá la instalación de dependencias sin firmar.

Esto es necesario porque no todas las dependencias de MetricFu están firmadas, por lo que no podemos usar HighSecurity.


Incluye la suma de verificación de las gemas liberadas en tu repositorio

require 'digest/sha2'
built_gem_path = 'pkg/gemname-version.gem'
checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
checksum_path = 'checksum/gemname-version.gem.sha512'
File.open(checksum_path, 'w' ) {|f| f.write(checksum) }
# add and commit 'checksum_path'

No se recomienda la firma OpenPGP debido a la falta de soporte (archivo) .

Para obtener más información, consulte la discusión con Yorick Peterse.

Más artículos sobre seguridad de GEMAS

Se utilizaron varias fuentes para el contenido de esta guía:


<<

Relacionado

Utiliza el lenguaje de Ruby para generar publicaciones de ebooks

Muchas veces, la gente se pregunta para qué puede servir además de para utilizarlo junto a Rails. Bien, pues Ruby es ideal para varias tareas en diferentes campos de dominio y hoy vamos a compartir gustaría cómo cualquier persona puede usar Ruby para publicar un ebook o libro electrónico. Publicación en PDF Existe un conjunto de herramientas completo de Ruby para publicar contenidos técnicos en AsciiDoc ¡SEGUIR LEYENDO!

The best Udemy courses in August, only for 9.99 $

Los mejores cursos en inglés y en oferta, hasta el día 27. Los cursos incluidos aquí son todos en inglés. Revisa por aquí, entre los mejores cursos en oferta de Udemy de Agosto en español, si lo que deseas son cursos en español. Si por desgracia, no tienes la oportunidad de acceder a comprar alguno de los excelentes cursos que te mostraré a continuación. Siempre puedes ¡SEGUIR LEYENDO!

Si los Lenguajes de Programación fueran Superhéroes de Marvel serían..

Existen más de 750 lenguajes de programación en el universo de la programación y cada lenguaje de programación tiene un tono y un conjunto de características únicos. https://ciberninjas.com/mejores-lenguajes-programacion-2023/ No debería sorprender que este conjunto específico de características atraiga a los excéntricos, quienes ocasionalmente se reúnen para discutir entre sus diferencias, ventajas y desventajas. Consideremos un escenario fantástico donde MCU signifique "My Universo del Código" y cada ¡SEGUIR LEYENDO!

Shopify invierte en realizar investigaciones sobre Ruby a escala

Shopify continúa invirtiendo en Ruby on Rails a escala, financiando a académicos de alto perfil para lograr enfocar su trabajo hacia el estudio de Ruby y las necesidades de la comunidad de Ruby. Durante el año pasado, Shopify entregó casi medio millón de dólares en obsequios a investigadores influyentes de la comunidad de Ruby. En este punto, Shopify busca que los desarrollos en lenguajes de programación ¡SEGUIR LEYENDO!

RubyGems: Referencias archivo GEMSPEC (14)

La clase de especificación contiene la información de una gema. Por lo general, se define en un archivo .gemspec o Rakefile y se ve así: Gema :: Especificación . nuevo hacer | s | s . nombre = 'ejemplo' s . versión = '0.1.0' s . licencias = [ 'MIT' ] s . resumen = "¡Este es un ejemplo!" s . description = "¡Explicación mucho más ¡SEGUIR LEYENDO!

Deja un comentario