viernes, 4 de marzo de 2016

Hackeo de RPMs



No se, si han escuchado sobre ingenieria inversa, pues este tipo de entradas no son tan comunes de verlas por aca, sin embargo desde hace mucho tiempo habia tenido curiosidad de poder modificar un rpm sin su paquete fuente (src.rpm); como el que busca encuentra, encontré valga la redundancia, una herramienta para tal busqueda; eso si, me hizo pensar mucho y me vi en la necesidad de incrementar la seguridad de algunos paquetes que provee un proyecto de mi autoria, con claves GPG en paquetes y ahora repositorios; todos sabemos que en cualquier momento podemos ser vulnerables; y que mejor que prevenir que lamentar "recuerdo el caso de Linux Mint".

Regresando al tema, en mi busqueda encontré rpmrebuild una herramienta poderosa que es capaz de reconstruir un RPM instalado, este busca la información sobre el rpm en la base de datos RPM.

Pero rpmrebuild no se detiene allí; también puede modificar los paquetes RPM sin necesidad de acceder a sus SRPMS o incluso saber mucho acerca de los archivos SPEC. Aunque esto puede no ser recomendable cuando se trata de RPMS base de su sistema Linux; es increíblemente útil para los desarrolladores, mantenedores o administradores de sistemas que necesitan crear RPMs internos para sus organizaciones o de uso personal. Con el rpmrebuild usted puede cambiar incluso el release, modificar sus dependencias etc.


INSTALACIÓN


su
dnf install rpmrebuild


Ejemplo

¿No hay nada mejor que aprender haciendo no?

La forma de usarlo es asi... "rpmrebuild  fooname" (no root)
rpmrebuild  openshot



Como ven el resultado o sea nuestro rpm reconstruido lo acaba de hacer en la ruta "/home/TU_USUARIO/rpmbuild/RPMS/noarch/"


Otro ejemplo

Mi característica favorita de rpmrebuild es la capacidad de modificar su archivo SPEC. Con esto quiero decir que en realidad se puede editar el SPEC de un RPM existente sin tener que reconstruir desde las fuentes. ¿Por qué es esto útil? Bueno, puede modificar requisitos de los paquetes RPM, registros de cambios, descripciones y otros campos del SPEC sin tener que pasar por todo el proceso para generar uno nuevo. Se puede ahorrar mucho tiempo si usted está en el negocio de la construcción de RPMs y no necesariamente se utiliza auto-builders como koji.

Tomaré el rpm del ejemplo anterior...


rpmrebuild -e openshot



Como ven nos ha generado un SPEC, ahora nos vamos más para abajo y cambiamos el release, en mi caso es 1.20160301git00a751a.fc23 por 2.20160301git00a751a.fc24


¿Cómo editarlo?
simple, lo que estamos usando es vim/vi por defecto, para cambiar a modo edicion presionamos la tecla "Insert", para borrar la tecla "Supr" y para guardar y salir escribimos sin las comillas ":wq"


Nos preguntará si queremos seguir con el proceso de reconstrucción del rpm. escribimos "y" + ENTER
 

El resultado está en la siguiente ruta como muestra la imagen "/home/TU_USUARIO/rpmbuild/RPMS/noarch/openshot-2.0.6-1.20160301git00a751a.fc24.noarch.rpm"


Rpmrebuild también ofrece ciertos atajos y plugins. A continuación voy a cambiar el número de release de un archivo RPM sin tener que abrir su archivo spec.

rpmrebuild --release=2.20160301git00a751a.fc24 openshot



Otro ejemplo

No lo recomiendo, pero útil para hacerlo internamente, se puede modificar el número de versión de un RPM, así, sin tocar un SPEC:

rpmrebuild --change-spec-preamble='sed -e "s/^Version:.*/Version:1\.3\.1\.0\.1/"' --release=99 openshot



NOTA

1.Una vez un RPM se reconstruye, perderá su firma original (si está firmado).

2. Usted tiene que ser root para reconstruir un paquete sólo si hay archivos root protegidos en ese paquete.

3.Rpmrebuild respetará su ubicacion del "~/rpmbuild" , por lo que si usted tiene .rpmmacros creados en su directorio personal, sus RPM reconstruidas se mostrarán allí.

Para más opciones podemos consultarlas asi:
man rpmrebuild
Reacciones:

0 comentarios:

Publicar un comentario en la entrada

Si comentas te pedimos por favor respeto y críticas constructivas referentes al título del articulo. Cualquier comentario para desviar el tema, spam o trolleo no será permitido. Gracias por comentar.