Quanto è sicuro registrare un file arbitrario?


77

A volte, quando ho catun file binario per errore, il mio terminale si confonde. Nulla resetpuò essere risolto rapidamente , ma un utente malintenzionato non potrebbe teoricamente creare un file che, se visualizzato su un terminale, eseguirà un codice arbitrario? Attraverso un exploit nell'emulatore di terminale o altro.


3
A volte quando lo faccio la mia shell dirà alla fine "<garbage> comando sconosciuto". Questo mi fa chiedere se questo sia effettivamente possibile.
Keith,

5
Ci sono stati exploit per l'emulatore di terminale, ad esempio linuxsecurity.com/content/view/104657 o securityfocus.com/bid/6936/discuss, quindi non è necessario particolarmente sicuro
Ulrich Dangel,

1
Questo è il motivo per cui è meglio usare qualcosa che rimbalzi su file binari (come more) o che sia a conoscenza di terminale ( less) per esaminare il contenuto dei file. Non solo non metterà il tuo terminale in uno stato strano, l'intero file non volerà in un colpo solo.
Blrfl,

Il stty sanecomando reimposta un xterm (o simile) che è stato cambiato in un set di caratteri diverso.
Thorbjørn Ravn Andersen,

moshla documentazione ha alcune riflessioni al riguardo: mosh.mit.edu/#techinfo
Max Ried,

Risposte:


34

Il fatto che tale output possa essere sfruttato dipende dal programma terminale e da cosa fa quel terminale in base ai codici di escape che vengono inviati. Non sono a conoscenza di programmi terminali con tali caratteristiche sfruttabili, e l'unico problema ora sarebbe se ci fosse un buffer overflow sconosciuto o qualcosa del genere, che potrebbe essere sfruttato.

Con alcuni hardwareterminali più vecchi questo potrebbe essere un problema mentre si programmano, ad esempio, i tasti funzione con questo tipo di sequenze di escape, memorizzando una sequenza comandi per quel tasto nell'hardware. Avresti comunque bisogno di un tasto fisico per attivarlo.

Ma ci sono sempre (come Hauke ​​così giustamente "braindead") disposti ad aggiungere una tale caratteristica se risolve un problema per loro, non capendo la scappatoia che creano. Nella mia esperienza con il software open source è che, a causa dei molti occhi che osservano il codice, è meno probabile che ciò accada come con il codice sorgente chiuso. (Ricordo che nel programma di posta su Irix di Silicon Grahpics, a metà degli anni '90, potresti includere comandi da eseguire sulla macchina ricevitori, percorsi reali per eseguibili, ....)


3
" Potresti includere comandi da eseguire sulla macchina ricevitori" Intendi qualcosa come includere in una e-mail VBScript che chiama l'host di script di Windows? :)
un CVn il

No esattamente, potresti avviare un eseguibile che era già sulla macchina, come riprodurre un suono. Non ricordo l'esatta sintassi (che era quasi 20 anni fa) né se potevi disattivare quella "funzione" in una configurazione. Ci siamo divertiti un po 'con i video a riproduzione automatica memorizzati nella nostra rete.
Anthon,

Non stai parlando di NeWS, vero? IIRC SGI è stata una delle ultime partecipazioni.
Luser droog,

@luserdroog No, questo era il programma di posta basato su GUI standard sotto Irix
Anthon il

1
@Anthon Non sono sicuro che sia ancora possibile, ma la possibilità di utilizzare i codici di escape per ottenere un terminale per "ripetere" il testo proveniente dal writecomando, eseguendo così comandi / script come utente proprietario del terminale. È presumibilmente il motivo per cui molti consigliano di disattivare i messaggi mesg -nper gli utenti per la maggior parte del tempo e per root sempre . AFAIK, questo è stato effettivamente fatto - anche se non so se sia mai stato sfruttato. Quindi il testo casuale di un cateseguibile ted potrebbe forse essere eseguito.
Baard Kopperud,

33

La maggior parte degli emulatori di terminale invierà una risposta, se ricevono determinate sequenze di escape (dai un'occhiata alla documentazione sulle sequenze di controllo xterm ). Ad esempio, è possibile inviare \e[0ca un emulatore simile a VT100 e restituirà gli attributi del dispositivo, qualcosa del tipo \e[?1;2c (Questo è probabilmente ciò che Keith ha osservato.) Ma queste risposte non sono stringhe arbitrarie. Tuttavia, avere un eseguibile chiamato 2cda qualche parte nel tuo sistema che fa qualcosa di fatale è una cattiva idea.

Aggiornamento: i rischi sono in effetti maggiori di quanto pensassi, a causa della possibilità di impostare il titolo di una finestra xterm e di rispedire il titolo utilizzando sequenze di escape appropriate ( http://www.securityfocus.com/bid/6940/ ) . Contrariamente all'esempio sopra, il titolo può essere una stringa quasi arbitraria.


Questo è già molto vicino.
Gunchars,

C'è una funzionalità ancora più antica: il "messaggio di risposta", inviato in risposta al carattere ENQ (Ce). Su un VT100 reale, è impostato dall'utente nel menu SETUP del terminale; forse ci sono emulatori di terminale che consentono di impostarlo da remoto ...
sendmoreinfo

16

Questo cambia il titolo del terminale nel Terminale 3.6.1 di GNOME, a meno che non venga sovrascritto da qualcosa come PS1 :

printf "\033]2;Script Kiddie was here\007"

Ora apri una nuova finestra del Terminale GNOME per testare la catversione:

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

Sì, questo imposta anche il titolo del terminale.

C'era un problema di sicurezza con un codice di escape che causava la stampa del titolo sulla riga di comando , quindi si poteva effettivamente creare un file, che quando veniva stampatocat (non sono sicuro di poter inserire una nuova riga) comandi arbitrari. Ahia!


8

Mentre l'utilizzo catpotrebbe non comportare l'esecuzione di codice, i codici di escape verranno elaborati in modo da poter essere indotti in errore a pensare che lo script sia innocuo quando in realtà è dannoso.

Ecco un comando di esempio che puoi eseguire che creerà uno script di shell "dannoso":

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

Quando si controlla il file, sembra abbastanza innocuo:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

Ma dovresti davvero eseguirlo ...

$ ./demo.sh 
...doing something bad here...

Lo script funziona includendo codici di escape grezzi per spostare il cursore su un paio di righe, quindi il resto dello script viene scritto sopra il codice dannoso, nascondendolo.

Quasi ogni altro programma rivelerà lo script per quello che è. Solo i programmi che non elaborano il contenuto del file (come cat, moree less -r) produrrà l'uscita fuorviante.

Si noti che taile headanche produrre lo stesso output fuorviante. L'uso di "less + F" è quindi più sicuro di "tail -f".


Questo è abbastanza problematico ... Puoi vedere cosa sta realmente succedendo eseguendo echo $(cat demo.sh), cat demo.sh | grep . --color=yes(Nota: --color=yesè quello che mostra qui il codice "dannoso") o il build-in cat -v demo.sh.
Charlie,

Vero o falso, è una risposta a una domanda diversa: quanto sia affidabile catnel visualizzare il contenuto del file .
Incnis Mrsi,

@IncnisMrsi: Non è davvero una risposta per una domanda diversa. Questa risposta avverte che cat mostrerà i codici di escape e fornisce un semplice esempio con un solo tipo di codice di escape, ma ce ne sono molti altri. Se combinati con determinati terminali, questi possono rimappare le chiavi, sovrascrivere i file e, in teoria, persino eseguire comandi . Quindi una volta che ti rendi conto del pericolo di visualizzare i codici di escape, capirai che a volte può non essere sicuro per catun file arbitrario, come la domanda posta!
Malvineous,

6

Ho sicuramente sperimentato l' xterminserimento di caratteri arbitrari in se stesso come se li avessi digitati. E a volte questo ha apparentemente incluso un personaggio newline, quindi ho avuto ngwerm:0riu: command not founduna risposta. Non vedo alcun motivo per cui qualcuno non possa creare un file che invii comandi specifici e dannosi. Quindi sì, almeno alcuni terminali sono suscettibili di attacchi con impatto arbitrario.


2

Bene, un emulatore di terminale in pratica stampa semplicemente i personaggi che gli vengono inviati.

Qualsiasi cosa oltre alla semplice stampa di un personaggio sulla posizione corrente, come impostare una nuova posizione, cambiare colore, cambiare titolo, ecc., È fatta da sequenze di escape.

L'insieme delle sequenze di escape supportate di solito è costituito da standard ben definiti come ANSI , che non definisce un modo per avviare altri processi. Sebbene sarebbe possibile implementare una tale sequenza, non sono a conoscenza di alcun emulatore di terminale che consenta intenzionalmente tali cose.

In teoria un bug come un buffer overflow potrebbe essere usato per innescare funzionalità arbitrarie. Ma questo sarebbe possibile praticamente in qualsiasi altro binario.


0

In generale, di solito non vi è alcun rischio di catturare un file arbitrario. Il mio solito metodo per analizzare un file è di fare quanto segue:

$ file <mystery file>
$ strings <mystery file> | less

Quanto sopra mi permette di determinare il tipo di un file attraverso il filecomando e il stringscomando mi consente di scaricare qualsiasi stringa identificabile da potenziali file binari che non sono sicuro del loro lignaggio.

esempio

output del file
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
uscita stringhe
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...

3
l'esecuzione di stringhe su un file sconosciuto può anche avere conseguenze problematiche. lcamtuf.blogspot.fi/2014/10/…
Jan Wikholm,

@IncnisMrsi - leggi la prima frase !!!!
slm

OK, ritraendo la mia precedente affermazione, la risposta è breve, usando una terminologia confusa, infondata ed evidentemente incompleta. Si noti che in sicurezza, "arbitrario" ≠ casuale come distribuito nel tuo sistema operativo preferito.
Incnis Mrsi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.