RubyGems: Prácticas de seguridad (9)

Tutorial completo de Rubygems
Tutorial completo de Rubygems

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

RubyGems: Publicar y compartir tu gema (8)

Ahora que has creado tu primera gema , probablemente estés listo para compartirla. Si bien, es perfectamente razonable crear gemas privadas únicamente para organizar el código en grandes proyectos privados, es más común crear gemas para que puedan ser utilizadas por varios proyectos. En esta guía ¡SEGUIR LEYENDO!

RubyGems: Administrar Propietarios (10)

De forma similar a gem owner --add los comandos gem owner --remove de la CLI de las gemas, se pueden agregar o eliminar los propietarios de las gemas que posees mediante la interfaz de usuario web. Sección de propiedad de tu GEMA Si eres propietario de ¡SEGUIR LEYENDO!

RubyGems: Eliminar una gema publicada (11)

¿Publicaste una gema antes de que estuviese lista para su lanzamiento? ¿Has publicado una gema con el nombre equivocado? Así es como puedes arreglarlo. Puedes utilizar el comando gem yank para eliminar versiones del índice de rubyGems.org usando el comando: gem yank GEM -v VERSION Ejecutar ¡SEGUIR LEYENDO!

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 ¡SEGUIR LEYENDO!

RubyGems: Actualizar certificado SSL (12)

Si has visto el siguiente error de SSL al intentar obtener actualizaciones de RubyGems: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed Este error ocurre cuando a tu computadora le falta un archivo que necesita para verificar que el servidor detrás de ¡SEGUIR LEYENDO!

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *