Como falsificar uname -rs por processo

2

Meu servidor Ubuntu retorna Linux 3.13.0-63-generic quando eu executo uname -rs . Pelo que encontrei na Internet, uname também é uma chamada de sistema que não pode ser facilmente substituída quando um programa de terceiros executa essa chamada de sistema a partir de C ++, por exemplo.

Alguém sabe se existe uma maneira de falsificar o valor de retorno, por exemplo, manipulando /proc/sys/kernel/ostype arquivos? Será ainda melhor se eu conseguir falsificá-lo por instância de processo.

    
por offline15 15.03.2016 / 20:16

1 resposta

1

Até onde eu sei, existem apenas maneiras limitadas em que release ( uname -r ) e machine ( uname -m ) podem ser personalizados por processo usando o personality() chamada do sistema , todas expostas através do setarch e sysname ( uname -r ) não podem ser personalizados.

$ uname -rsm; setarch i386 --uname-2.6 --32bit uname -rsm
Linux 3.16.0-4-amd64 x86_64
Linux 2.6.56-4-amd64 i686

Se você quiser falsificar o uname de uma maneira diferente e o programa estiver dinamicamente vinculado, você pode usar LD_PRELOAD para sobrescrever a função uname ; consulte Redirecionar um descritor de arquivo antes da execução para um exemplo de sobrecarga de função através de LD_PRELOAD . Se o programa estiver vinculado estaticamente, você pode usar ptrace para falsificar suas chamadas de sistema, mas isso requer uma programação mais sofisticada.

    
por 16.03.2016 / 02:40