Como verificar se você retornou ao shell
Compare o PID do shell antes e depois de executar um comando (o mesmo PID significa o mesmo shell):
$ echo $$
6215
$ bash --posix
bash-4.3$ echo $$
10230
bash-4.3$ exit
$ echo $$
6215
Na demo acima, você pode me ver iniciando um aplicativo, neste caso, outro bash
no modo POSIX. Ao retornar, verificamos que o PID do shell que usamos é o mesmo, portanto, podemos assumir que este é o shell real. Isso, claro, pode ser automatizado adicionando $$
ao seu prompt de shell:
$ PS1="[$$] $PS1 "
[6215] $
A variação no tema pode ser feita com a verificação de sha256sum
(ou qualquer outra soma de verificação, como md5
) antes e depois. Sha-somas, se você não sabe, costumam ser usadas para verificar a integridade dos arquivos, especialmente para downloads e iso
images. Na demonstração abaixo, usamos /proc/<SHELL PID>/exe
file, que é um link simbólico para o binário real (nesse caso, seria meu mksh
shell). Dessa forma, podemos verificar se o executável que estamos executando é o mesmo.
[12107][xieerqi][21:34]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6 /proc/12107/exe
[12107][xieerqi][21:34]:
$ bash --posix
bash-4.3$ sha256sum /proc/$$/exe
c2615a71ff5c004e51aef248103a2950c25715f5eb8130837695770e1d78ecfa /proc/12434/exe
bash-4.3$ exit
[12107][xieerqi][21:35]:
$ sha256sum /proc/$$/exe
70a16895186ddfac12343e816f05783cf60092c0980fc20c2ae4bc53b48f28e6 /proc/12107/exe
O retorno ao shell não é garantia de segurança
Quanto aos key-loggers, eles não precisam necessariamente estar dentro do shell . Se você estiver usando o emulador de terminal gráfico, um keylogger pode simplesmente ouvir as teclas pressionadas sendo enviadas para qualquer janela, independentemente do shell que você usa.
No que diz respeito a shells, é possível iniciar um processo em segundo plano. Por exemplo, os scripts de shell usam o "e" comercial assim como command &
para executar algo em segundo plano . Não tenho certeza se um processo em segundo plano ainda pode ler chaves, mas o fato de que o shell sai não é uma garantia de que o aplicativo foi encerrado. Na pequena demonstração abaixo, você pode ver uma função sendo lançada em segundo plano, o script aparentemente sai, e ainda assim a função ainda grava em out.txt a cada segundo.
[10754][xieerqi][21:12]:
$ cat launch_background_app.sh
#!/bin/bash
run_in_background()
{
while true;
do
date +%s > out.txt
sleep 1
done
}
run_in_background &
[10754][xieerqi][21:12]:
$ ./launch_background_app.sh
[10754][xieerqi][21:12]:
$ cat out.txt
1484280777
[10754][xieerqi][21:12]:
$ cat out.txt
1484280778
[10754][xieerqi][21:12]:
$ cat out.txt
1484280779
NOTA PARA OS EDITORES : por favor, não remova o prompt do meu exemplo - ele está lá para fins de demonstração para mostrar que o PID do shell continua o mesmo.
A segurança do
PS: começa com a instalação de um aplicativo confiável, portanto, considere garantir a integridade do aplicativo antes usando-o em primeiro lugar.