¿Qué tan seguro es usar un archivo desconocido `_vimrc` o` vimscript`?


8

No sé si esta pregunta debería hacerse aquí o no. En casi todos los idiomas, existe malware. ¿Es lo mismo aplicable también vimscript?

Supongamos que vimse ejecuta con altos privilegios del sistema. ¿Existe alguna posibilidad de que un nuevo vimusuario pueda arruinar su sistema utilizando un complemento o un vimrcarchivo de aspecto agradable (es decir, los llamados scripts maliciosos en otros lenguajes de scripting)?

¿Cuáles son las medidas que puede tomar un nuevo usuario antes de ejecutar archivos de script desconocidos? Sé que deshabilitar los scripts es una solución obvia para eso. Pero hay una gran cantidad de complementos que son bastante útiles, incluso para los nuevos alumnos.

De nuevo para decir, esta pregunta podría no encajar aquí, pero creo que la seguridad también es una parte muy importante de toda la imagen.

Señalar algunos recursos o información sobre esto sería muy útil para los nuevos vimusuarios como yo.


44
No ejecutar Vim (ni nada) como root es tu mejor opción. Suponiendo que $EDITORse establezca en vim, simplemente use $ sudo -e filename.
romainl

1
En caso de que esté ejecutando Vim como root (lo cual no debería, pero puede suceder), recomendaría tener solo un vimrc muy rudimentario /root/.vimrc. Por lo general, solo activo el resaltado de sintaxis. Cuanto más elegante sea su configuración vim de usuario normal, más obvio será que se está ejecutando como root.
kba está con Monica

@romainl: gracias por su amable sugerencia ... espero que esto sea lo más razonable que los nuevos usuarios de vim deberían seguir ...
Cylian

@kba: gracias por su amable opinión ... también es una muy buena opción para probar ...
Cylian

Respuestas:


8

Bueno, Vim puede ejecutar comandos arbitrarios con :!. Puede establecer variables de entorno. Los scripts de malware que son scripts de shell pueden, por lo tanto, ejecutarse desde Vimscript.

Puede utilizar programas complejos de Perl, Python, Ruby o Lua. Por lo tanto, el malware escrito en cualquiera de estos que utiliza solo bibliotecas estándar podría integrarse en Vim.

Incluso si ninguno de estos fuera cierto, Vim es un editor. Si se ejecuta como root, podríamos editar fácilmente sus archivos /etc/passwdy /etc/shadowpara crear un nuevo usuario y /etc/sudoersotorgarles sudoprivilegios completos y cronjobejecutar scripts de shell para configurar este usuario.

Al igual que con la ejecución de scripts aleatorios fuera de Internet, no hay una manera fácil de estar a salvo. En Linux, podría ejecutarse en una máquina virtual con una superposición que podría indicarle qué archivos modifica un vimrc determinado. Depende de cuánto riesgo perciba.


Gracias por su ayuda ... la respuesta es bastante útil ... mientras que en Linux, sin duda, es una idea brillante. Lo que creo ahora es que, sin entender el código, simplemente no es usar eso en absoluto ... o al menos para esos unknowno lesser knownscripts ...
Cylian

@mMontu: excelente información ... por qué no publicas esto como respuesta ... creo que mucha información, al menos es una idea básica para que un novato mire en las fuentes desconocidas ... muchas gracias. ..¡¡¡tú Molas!!!
Cylian

@Cylian buena idea, gracias por ser tan amable.
mMontu

5

Extendiendo la respuesta de muru, puede inspeccionar el código, especialmente porque el código del complemento generalmente es muy corto (las excepciones son algunos complementos populares, pero al ser populares son más seguros, puede esperar que muchos otros hayan revisado la fuente).

No tiene que entender completamente el código; bastaría con buscar comandos "peligrosos":

  1. :!y system(): permite la ejecución de comandos de shell, por lo que podría cambiar su sistema
  2. :perldo, :python, :lua, :tcl, Y :ruby: ejecutar comandos en los diferentes idiomas, que puede contener llamadas de sistemas embebidos
  3. :execute: este comando ejecuta una cadena como un comando, por lo que se puede usar para ocultar uno de los comandos anteriores (por ejemplo: para dificultar la detección call system('malware')o perldo malwarealguien podría concatenar la cadena en una variable)
  4. function("MyFunc"): llama a referencias de funciones: acepta una variable como parámetro, lo que permite ocultar system()

También puede intentar ejecutar algunas funciones de complemento utilizando 'secure'o sandboxpara detectar shell y lenguajes externos (perl, python, etc.).


+1, buenos conjuntos de información básica sobre el tema específico ... realmente útil ... ¡gracias!
Cylian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.