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 your@email.com
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

15 Mejores Lenguajes de Programación que Aprender

Una de las habilidades más importantes para aprender en el mundo de hoy en día, es saber programar con un lenguaje de programación. En la actualidad, las computadoras han entrado en casi todas las industrias, desde el piloto automático de un avión hasta el velocímetro digital de una bicicleta pasando por la inclusión del Internet de las cosas en los pequeños electrodomésticos. Casi todo lo que ¡SEGUIR LEYENDO!

Mejores Libros PDF de Programación y Tecnología GRATIS

Los Mejores Libros PDF Gratuitos de Informática. EL sitio perfecto para aprender a programar desde cero para principiantes con las mejores guías gratis. Esta es la mejor lista de libros de programación en PDF en español del mundo. Una completa biblioteca recopilada de cientos y cientos de libros en PDF que no encontrarás en ninguna parte más. Aquí, vas a encontrar libros enfocados hacía programadores. Sobre ¡SEGUIR LEYENDO!

Más de 1.500 Libros PDF en Inglés de Desarrollo Web, Programación, Seguridad, Robótica, Blockchain, Domótica y Mucho Más

La mejor lista de libros sobre lenguajes de programación en inglés de todo Internet. https://ciberninjas.com/zlibrary/ Libros de Python / Libros PHP / Libros Java / Libros Diseño Meta Listas atariarchives.org atariarchives.org pone a disposición en la Web libros, información y software para Atari y otras computadoras clásicas. Bento Bitsavers.org Bookboon: se requiere cookie de TI y programación</. (requiere @email) DZone - Hojas de trucos (gratis) Conceptf1.blogspot.com ¡SEGUIR LEYENDO!

Comparando Python con otros lenguajes de programación populares

Este artículo analiza los numerosos beneficios de Python como uno de los lenguajes de programación más importantes disponibles y por qué deberías considerar usarlo para tu proyecto de software en lugar de otras opciones populares. Python es considerado como uno de los lenguajes de programación más utilizados para aplicaciones sencillas y prácticas. Los especialistas en TI afirman tener al menos una comprensión rudimentaria de Python y ¡SEGUIR LEYENDO!

Crystal: Un nuevo lenguaje de programación que buscar integrar lo mejor de Ruby y C

Crystal, un nuevo lenguaje de programación de sistemas compilados y orientado a objetos que tiene como objetivo combinar la concisión y amabilidad de Ruby con la eficiencia de C. La versión 1.0 de Crystal tiene una sintaxis cercana a la de Ruby y presenta tipos inferidos estáticamente, enlaces C y macros. El lenguaje de Crystal podría atraer a los desarrolladores con experiencia en Ruby/Rails o Elixir/Phoenix. ¡SEGUIR LEYENDO!

Cursos de Udemy con Cupón Gratuito 2019 (en Inglés)(parte 2)

All courses are in English ? Estos son los cursos con cupones gratuitos que me han parecido más interesantes y existen en la actualidad dentro de la plataforma Online de Udemy. Los contenidos en los que están organizados se reparten en: las criptomonedas, el diseño gráfico, la programación y el diseño web, ofimática, productividad, marketing y SEO, las redes y la robótica El listado final se ¡SEGUIR LEYENDO!

Mejores cursos de introducción a la programación

Muchos de estos cursos ya están incluidos en nuestro recopilatorio de cursos en español, allí podrás encontrarlos ordenados por temáticas y navegación de botones. En este otro enlace, podrás encontrar libros. Si lo que deseas es aprender a programar, no dejes de investigar más en profundidad alrededor de toda la web; y también, puedes investigar entre los cientos de recursos gratis que te ofrece Ciberninjas. A ¡SEGUIR LEYENDO!

Deja un comentario

Salir de la versión móvil