Estou tentando substituir funções malloc/free para o programa, que requer permissões setuid/setgid. Eu uso a variável LD_PRELOAD para esta finalidade. De acordo com a documentação do ld , preciso colocar minha biblioteca em um dos diretórios de pesquisa padrão (escolhei /usr/lib) e dar permissões setuid/setgid. Eu já fiz isso. No entanto, ainda não consigo vincular ao meu arquivo .so, recebendo o erro:
object 'liballoc.so' from LD_PRELOAD cannot be preloaded: ignored
Quais podem ser as possíveis razões para isso? Testei este arquivo .so em programas que não possuem permissões setuid/setgid e tudo funciona bem. SO: Red Hat 7.0
Esse foi o erro. Você deveria tê-lo colocado
/usr/lib64
(supondo que sua máquina seja x86_64).Acabei de tentar a receita da página de manual em uma VM Centos 7 (que deve ser ~idêntica ao RHEL 7) e funciona:
Como raiz:
Como um usuário comum com um programa setuid:
Se é uma boa ideia usar esse recurso é uma questão totalmente diferente (IMHO, não é).
man ld.so
Se um binário SUID for executado, ocorre esta situação: o UID real e o UID efetivo diferem. Mas se este binário executar um binário diferente (não-SUID), o EUID do pai se tornará o RUID e o EUID do filho:
Então, se você quiser evitar as restrições LD_PRELOAD, você pode chamar seu binário via sudo ou criar um binário SUID wrapper que chama o binário real.
A razão para isso é evitar a elevação de código malicioso. O programa AC não inicia a execução em main(). Em vez disso, a biblioteca de tempo de execução C é chamada primeiro, que configura seu ambiente (incluindo os fluxos STDIO), quaisquer variáveis globais que não sejam constantes de tempo de compilação e, em seguida, chama main().
Um agente mal-intencionado pode usar LD_PRELOAD= para substituir a biblioteca libc.o por uma biblioteca personalizada com uma função de inicialização modificada que faz (por exemplo) - restaura LD_PRELOAD e, em seguida, invoca /bin/sh. Se LD_PRELOAD= não for ignorado para um processo SUID, esse usuário poderá executar /bin/passwd e agora terá um shell de root. A partir daí, eles agora podem instalar um rootkit, etc.