Eu suspeito que um ataque como esse funcionaria, onde «alguma coisa» é um módulo do kernel que tentará carregar após o rootfs ser montado:
$ sudo mkdir -m 777 /lib/modules/'uname -r'/a
$ cp evil.ko /lib/modules/'uname -r'/a/«something».ko
Note também que você pode usar outros nomes, dependendo dos alias declarados no módulo. Eu estou supondo que não será carregado até que o depmod seja executado, o que acontecerá na próxima vez que houver uma atualização do kernel - então o mkdir
nem será mostrado recentemente no log do sudo.
Existem muitas coisas em / etc que leem todos os arquivos em um diretório, às vezes recursivamente. Pior ainda, alguns desses diretórios não existem por padrão, e a única maneira de conhecê-los é ler a manpage, os scripts de init, etc., para o programa que os utiliza. Alguns, pior ainda, são obsoletos com compatibilidade retroativa e podem nem ser mais documentados.
edit: Pensei em mais alguns diretórios, estes em /usr/local
:
-
/usr/local/lib/perl/5.14.2
(difere dependendo da versão do Perl, tenteperl -V
para descobrir). Crie um subdiretórioFile
lá e coloque umFind.pm
nele. Agora, sempre que alguém usarFile::Find
, eles usarão a versão do invasor. Da mesma forma, faça o mesmo comGetopt::Long
. Utilitários do sistema são freqüentemente escritos em Perl, então isso provavelmente dá raiz. (Tenteack-grep --color -a 'use.+::' /usr/sbin | less -R
) - Acho que Python, Ruby etc. têm diretórios semelhantes. Os utilitários do sistema também são escritos em Python.
- Subverte muitas coisas que alguém compila com subdiretórios de
/usr/local/include
.