A veces, cuando cat
por error tengo un archivo binario, mi terminal se ve mal. Nada que un rápido reset
no pueda solucionar, pero ¿no podría un atacante crear teóricamente un archivo que, cuando se muestra en un terminal, ejecutaría algún código arbitrario? A través de un exploit en el emulador de terminal o de otra manera.
terminal
cat
special-characters
Gunchars
fuente
fuente
more
) o que sea compatible con la terminal (less
) para examinar el contenido de los archivos. No solo no pondrá su terminal en un estado extraño, sino que todo el archivo no saldrá volando de una sola vez.stty sane
comando restablece un xterm (o similar) que se ha cambiado, por ejemplo, a un conjunto de caracteres diferente.mosh
la documentación tiene algunas ideas al respecto: mosh.mit.edu/#techinfoRespuestas:
El hecho de que dicha salida pueda explotarse depende del programa del terminal y de qué hace ese terminal según los códigos de escape que se envían. No conozco los programas de terminal que tienen características tan explotables, y el único problema ahora sería si hay un desbordamiento de búfer desconocido o algo así, que podría explotarse.
Con algunos
hardware
terminales más antiguos esto podría ser un problema ya que programó, por ejemplo, teclas de función con este tipo de secuencias de escape, almacenando una secuencia de comandos para esa tecla en el hardware. Aún necesitaría presionar una tecla física para activar eso.Pero siempre hay (como Hauke marcó tan acertadamente como "cerebro muerto") personas dispuestas a agregar una característica de este tipo si les resuelve un problema, sin comprender la laguna que crean. En mi experiencia con el software de código abierto es que, debido a los muchos ojos que miran el código, es menos probable que esto suceda como con el código cerrado. (Recuerdo que en el programa de correo de Irix de Silicon Grahpics, a mediados de los noventa, podría incluir comandos para ejecutar en la máquina receptora, rutas reales a los ejecutables, ...)
fuente
write
comando, ejecutando así comandos / scripts como el usuario que posee el terminal. Supuestamente es la razón por la que muchos recomiendan desactivar los mensajesmesg -n
para los usuarios la mayor parte del tiempo y pararoot
siempre . AFAIK, esto realmente se hizo, aunque no sé si alguna vez fue explotado. Así texto al azar de uncat
ejecutable ted, podría quizás ser ejecutado.La mayoría de los emuladores de terminal enviarán alguna respuesta, si reciben ciertas secuencias de escape (eche un vistazo a la documentación de secuencias de control xterm ). Por ejemplo, puede enviar
\e[0c
a un emulador similar a VT100 y devolverá los atributos del dispositivo, algo así como\e[?1;2c
(Esto es probablemente lo que observó Keith). Pero estas respuestas no son cadenas arbitrarias. Aún así, tener un ejecutable nombrado en2c
algún lugar de su sistema que haga algo fatal es una mala idea.Actualización: los riesgos son, de hecho, mayores de lo que pensaba, debido a la posibilidad de establecer el título de una ventana xterm y enviar el título utilizando secuencias de escape apropiadas ( http://www.securityfocus.com/bid/6940/ ) . A diferencia del ejemplo anterior, el título puede ser una cadena casi arbitraria.
fuente
Esto cambia el título del terminal en GNOME Terminal 3.6.1, a menos que sea anulado por algo como PS1 :
Ahora abra una nueva ventana de Terminal de GNOME para probar la
cat
versión:Sí, esto también establece el título del terminal.
Solía haber un problema de seguridad con un código de escape que daba como resultado que el título se imprimiera en la línea de comando , por lo que podría crear efectivamente un archivo, que cuando
cat
ed se imprima (no estoy seguro de si podría poner una nueva línea allí) comandos arbitrarios ¡Ay!fuente
Si bien el uso
cat
puede no dar lugar a la ejecución del código, los códigos de escape se procesarán para que pueda engañarse fácilmente al pensar que el script es inofensivo cuando de hecho es malicioso.Aquí hay un comando de ejemplo que puede ejecutar que creará un script de shell "malicioso":
Cuando inspeccionas el archivo, parece bastante inofensivo:
Pero si realmente lo ejecutas ...
El script funciona al incluir códigos de escape sin procesar para mover el cursor hacia arriba un par de líneas, por lo que el resto del script se escribe sobre la parte superior del código malicioso, ocultándolo.
Casi cualquier otro programa revelará el guión de lo que es. Solo los programas que no procesan el contenido del archivo (como
cat
,more
yless -r
) producirán resultados engañosos.Tenga en cuenta que
tail
yhead
también produce la misma salida engañosa. Usar "menos + F" es, por lo tanto, más seguro que "tail -f".fuente
echo $(cat demo.sh)
,cat demo.sh | grep . --color=yes
(Nota: el--color=yes
es lo que se muestra el código "malicioso" aquí) o la acumulación encat -v demo.sh
.cat
mostrar el contenido del archivo .cat
un archivo arbitrario, como se hizo la pregunta.Definitivamente he experimentado la
xterm
inserción de caracteres arbitrarios en sí mismo como si los hubiera escrito. Y en ocasiones esto aparentemente ha incluido el carácter de nueva línea, por lo que obtuvengwerm:0riu: command not found
como respuesta. No veo ninguna razón por la que alguien no pueda crear un archivo que envíe comandos específicos y dañinos. Entonces sí, al menos algunas terminales son susceptibles a ataques con impacto arbitrario.fuente
Bueno, un emulador de terminal básicamente simplemente imprime los caracteres que se le envían.
Cualquier cosa además de simplemente imprimir un personaje en la posición actual, como establecer una nueva posición, cambiar el color, cambiar el título, etc., se realiza mediante secuencias de escape.
El conjunto de secuencias de escape compatibles generalmente consta de estándares bien definidos como ANSI , que no define una forma de iniciar otros procesos. Aunque sería posible implementar tal secuencia, no conozco ningún emulador de terminal que permita intencionalmente tales cosas.
En teoría, un error como un desbordamiento del búfer podría usarse para activar una funcionalidad arbitraria. Pero esto también sería posible en prácticamente cualquier otro binario.
fuente
En general, generalmente no hay riesgo de atrapar un archivo arbitrario. Mi método habitual para analizar un archivo es hacer lo siguiente:
Lo anterior me permite determinar el tipo de archivo a través del
file
comando y elstrings
comando me permite volcar cualquier cadena identificable de los posibles archivos binarios que no estoy seguro acerca de su linaje.ejemplo
salida de archivo salida de cadenasfuente