Verifique se o aplicativo do console está realmente encerrado

5

Suponha que eu iniciei um aplicativo de console que termina, então o prompt do shell aparece novamente. Mas como posso ter certeza de que é o prompt de comando real? E se, por exemplo, o aplicativo for um "keylogger" que inicia um prompt falso quando tento sair?

Então, como posso detectar que estou realmente em um prompt de shell puro (por exemplo, bash)?

    
por Dávid Horváth 13.01.2017 / 04:00

4 respostas

8

Tecnicamente, vou responder a sua pergunta, ok. Como você pode garantir que voltou para a sua concha? Se você assumir que o programa não é malicioso , mas achar que ele pode executar o shell anoter, você pode definir manualmente uma função secreta com um conteúdo secreto (que você não exportará é claro):

$ my_secret_func() { echo "Still alive"; }
$ ~/Downloaded/dubious_program
$ my_secret_func
Still alive

Se dubious_program for mal-intencionado, ele pode enganá-lo facilmente transmitindo sua entrada para o shell original e permitindo que ele reaja. Mais geralmente, um executável inseguro tem várias maneiras de instalar um keylogger sob sua identidade (e faz muitas outras coisas maliciosas), como instalar-se no seu ~/.bashrc por exemplo. Pode fazer isso mesmo se não houver efeitos visíveis - na verdade, a maioria dos malwares tenta não ter nenhum efeito visível imediato para minimizar o risco de ser detectado.

Portanto, se você não tiver certeza de que o que está executando é seguro, execute-o com o usuário nobody em uma sandbox ou não o execute.

    
por 13.01.2017 / 04:23
6

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.

    
por 13.01.2017 / 04:47
5

Um keylogger não tentaria falsificar um prompt, quase certamente deixaria um processo em segundo plano que monitora /dev/input ou algo similar (ele também tentará se esconder na lista de processos). Você está definitivamente olhando para o problema da maneira errada.

Uma maneira comum de executar binários não confiáveis é configurar uma máquina virtual e executá-los lá. Mesmo isso não oferece 100% de segurança, mas muitas vezes é considerado seguro o suficiente para uso prático (obviamente, você não executará VMs com código não confiável em um servidor de produção ou dentro de uma rede protegida em um banco). / p>     

por 13.01.2017 / 12:07
4
 suspect-command; echo I am thinking of the number 43987

Depois que o comando sair, o eco será executado. Você deve ver o resultado na linha acima do prompt de comando.

    
por 13.01.2017 / 04:53