Às vezes, quando eu cat
arquivo um arquivo binário por engano, meu terminal fica distorcido. Nada que um rápido reset
não pode consertar, mas um invasor não poderia criar teoricamente um arquivo que, quando exibido em um terminal, executaria algum código arbitrário? Através de uma exploração no emulador de terminal ou não.
terminal
cat
special-characters
Gunchars
fonte
fonte
more
) ou tem reconhecimento de terminal (less
) para examinar o conteúdo dos arquivos. Além de não colocar o terminal em um estado estranho, o arquivo inteiro não será exibido de uma só vez.stty sane
comando redefine um xterm (ou similar) que foi alterado para, por exemplo, um conjunto de caracteres diferente.mosh
documentação tem alguns pensamentos sobre isso: mosh.mit.edu/#techinfoRespostas:
Se essa saída pode ser explorada depende do programa do terminal e o que esse terminal faz, dependendo dos códigos de escape que estão sendo enviados. Não estou ciente dos programas de terminal com esses recursos exploráveis, e o único problema agora seria se houver um estouro de buffer desconhecido ou algo assim, que possa ser explorado.
Em alguns
hardware
terminais mais antigos , isso pode ser um problema quando você programa, por exemplo, teclas de função com esse tipo de sequência de escape, armazenando uma sequência de comandos para essa chave no hardware. Você ainda precisará pressionar uma tecla física para ativar isso.Mas sempre há (como Hauke tão marcadamente marcado como 'braindead') pessoas dispostas a adicionar esse recurso se isso resolver um problema para eles, sem entender a brecha que eles criam. De acordo com minha experiência com software de código aberto, devido aos muitos olhos que olham para o código, é menos provável que isso aconteça com o código fechado. (Lembro-me que no programa de e-mail no Irix da Silicon Grahpics, em meados dos anos dezenove, você podia incluir comandos a serem executados na máquina receptora, caminhos reais para executáveis, ...)
fonte
write
comando - executando assim comandos / scripts como o usuário proprietário do terminal. É supostamente a razão pela qual muitos recomendam desativar as mensagensmesg -n
para os usuários na maioria das vezes e pararoot
sempre . AFAIK, isso foi realmente feito - embora eu não saiba se alguma vez foi explorado. Assim, o texto aleatório de umcat
executável ted talvez pudesse ser executado.A maioria dos emuladores de terminal retornará alguma resposta, se receberem determinadas seqüências de escape (consulte a documentação das seqüências de controle do xterm ). Por exemplo, você pode enviar
\e[0c
para um emulador semelhante ao VT100 e ele enviará de volta os atributos do dispositivo, algo como\e[?1;2c
(provavelmente é o que Keith observou). Mas essas respostas não são seqüências arbitrárias. Ainda assim, ter um executável nomeado2c
em algum lugar do sistema que faça algo fatal é uma má ideia.Atualização: os riscos são de fato maiores do que eu pensava, devido à possibilidade de definir o título de uma janela xterm e devolvê-lo usando as seqüências de escape apropriadas ( http://www.securityfocus.com/bid/6940/ ) . Em contraste com o exemplo acima, o título pode ser uma sequência quase arbitrária.
fonte
Isso altera o título do terminal no GNOME Terminal 3.6.1, a menos que seja substituído por algo como PS1 :
Agora abra uma nova janela do Terminal GNOME para testar a
cat
versão:Sim, isso também define o título do terminal.
Costumava haver um problema de segurança com um código de escape, resultando na impressão do título na linha de comando , para que você pudesse efetivamente criar um arquivo, que quando
cat
ed seria impresso (não tenho certeza se você poderia inserir uma nova linha) comandos arbitrários. Ai!fonte
Embora o uso
cat
possa não resultar na execução do código, os códigos de escape serão processados para que você possa ser facilmente enganado ao pensar que o script é inofensivo quando, na verdade, é malicioso.Aqui está um exemplo de comando que você pode executar que criará um shell script "malicioso":
Quando você inspeciona o arquivo, ele parece inofensivo o suficiente:
Mas você deve realmente executá-lo ...
O script funciona incluindo códigos de escape brutos para mover o cursor algumas linhas, para que o restante do script seja escrito por cima do código malicioso, ocultando-o.
Quase qualquer outro programa irá revelar o script para o que é. Somente os programas que não processam o conteúdo do arquivo (como
cat
,more
eless -r
) produzirá a saída enganosa.Observe que
tail
ehead
também produz a mesma saída enganosa. Usar "less + F" é, portanto, mais seguro que "tail -f".fonte
echo $(cat demo.sh)
,cat demo.sh | grep . --color=yes
(Nota: o--color=yes
é o que está mostrando o código "malicioso" aqui) ou o build-incat -v demo.sh
.cat
exibição do conteúdo do arquivo .cat
um arquivo arbitrário, como a pergunta!Definitivamente, experimentei
xterm
inserir caracteres arbitrários em si, como se eu os tivesse digitado. E, de vez em quando, isso aparentemente inclui caracteres de nova linha, para que eu tenhangwerm:0riu: command not found
uma resposta. Não vejo razão para que alguém não possa criar um arquivo que envie comandos específicos e prejudiciais. Então, sim, pelo menos alguns terminais são suscetíveis a ataques com impacto arbitrário.fonte
Bem, um emulador de terminal basicamente simplesmente imprime os caracteres enviados a ele.
Qualquer coisa além de simplesmente imprimir um caractere na posição atual, como definir uma nova posição, mudar de cor, mudar de título etc., é feito por seqüências de escape.
O conjunto de seqüências de escape suportadas geralmente consiste em padrões bem definidos como o ANSI , que não define uma maneira de iniciar outros processos. Embora seja possível implementar essa sequência, não conheço nenhum emulador de terminal que permita intencionalmente tais coisas.
Em teoria, um bug como um estouro de buffer pode ser usado para disparar funcionalidades arbitrárias. Mas isso seria possível em praticamente qualquer outro binário também.
fonte
Em geral, geralmente não há risco de criar um arquivo arbitrário. Meu método usual para analisar um arquivo é o seguinte:
O que foi dito acima me permite determinar o tipo de arquivo por meio do
file
comando, e ostrings
comando me permite despejar qualquer sequência identificável de possíveis arquivos binários que não tenho certeza sobre sua linhagem.exemplo
saída de arquivo saída de stringsfonte