Quanto è sicuro usare un file `_vimrc` o` vimscript` sconosciuto?


8

Non so se questa domanda debba essere posta qui o no. In quasi tutte le lingue esiste malware. Lo stesso vale anche per vimscript?

Supponiamo che vimfunzioni con privilegi di sistema elevati. Esiste la possibilità che un nuovo vimutente possa rovinare il proprio sistema usando un plugin o un vimrcfile di bell'aspetto (ad esempio, i cosiddetti script dannosi in altri linguaggi di scripting)?

Quali sono le misure di cui un nuovo utente può occuparsi prima di eseguire file di script sconosciuti? So che disabilitare gli script è una soluzione ovvia a questo. Ma ci sono davvero un buon numero di plugin che sono abbastanza utili, anche per i nuovi studenti.

Ancora una volta, questa domanda potrebbe non adattarsi qui, ma credo che la sicurezza sia anche una parte molto importante dell'intero quadro.

Indicare alcune risorse o informazioni al riguardo sarebbe molto utile per i nuovi vimutenti come me.


4
Non eseguire Vim (o niente) come root è la soluzione migliore. Supponendo che $EDITORsia impostato su vim, basta usare $ sudo -e filename.
Romainl,

1
Nel caso in cui stai eseguendo Vim come root (cosa che non dovresti, ma può succedere), ti consiglio di avere solo un Vimrc molto rudimentale /root/.vimrc. Di solito accendo l'evidenziazione della sintassi. Più elaborato è il tuo normale vim utente, più ovvio sarà che stai eseguendo come root.
Kba sta con Monica il

@romainl: grazie per il tuo gentile suggerimento ... spero che questa sia la cosa più ragionevole che i nuovi utenti di vim dovrebbero seguire ...
Cylian,

@kba: grazie per la tua gentile opinione ... è anche un'ottima opzione da provare ...
Cylian,

Risposte:


8

Bene, Vim può eseguire comandi arbitrari con :!. Può impostare variabili di ambiente. Gli script di malware che sono script di shell possono quindi essere eseguiti da Vimscript.

Può utilizzare complessi programmi Perl, Python, Ruby o Lua. Quindi il malware scritto in uno di questi che utilizza solo librerie standard potrebbe essere incorporato in Vim.

Anche se nessuno di questi era vero, Vim è un editore. Se eseguito come root, potremmo facilmente modificare il tuo /etc/passwde i /etc/shadowfile per creare un nuovo utente e /etc/sudoersconcedere loro i sudoprivilegi completi e un cronjobper eseguire script di shell per impostare questo utente.

Come per l'esecuzione di script casuali da Internet, non esiste un modo semplice per essere al sicuro. In Linux, è possibile eseguire in una macchina virtuale con un overlay che potrebbe indicare quali file viene modificato da un determinato vimrc. Dipende da quanto rischio percepisci.


Grazie per il tuo aiuto ... la risposta è abbastanza utile ... mentre in Linux è senza dubbio un'idea geniale. Quello che credo ora, è senza capire il codice, semplicemente non usarlo affatto ... o almeno per quelli unknowno lesser knownscript ...
Cylian,

@mMontu: informazioni eccellenti ... perché non pubblichi questo come risposta ... credo che molte informazioni, almeno danno un'idea di base per un neofita di guardare fuori dalle fonti sconosciute ... grazie mille. ..Sei forte!!!
Cylian,

@Cylian buona idea, grazie per essere così gentile.
lunedì

5

Estendendo la risposta di Muru, potresti ispezionare il codice, specialmente perché il codice del plugin è generalmente molto breve (le eccezioni sono alcuni plugin popolari, ma essendo popolari sono più sicuri - puoi aspettarti che molti altri abbiano esaminato la fonte).

Non è necessario comprendere appieno il codice; basterebbe cercare comandi "pericolosi":

  1. :!e system(): consente l'esecuzione di comandi shell, quindi potrebbe cambiare il sistema
  2. :perldo, :python, :lua, :tcl, E :ruby: eseguire comandi su diverse lingue, che può contenere chiamate di sistema incorporati
  3. :execute: questo comando esegue una stringa come comando, quindi può essere utilizzato per nascondere uno dei comandi precedenti (ad esempio: per rendere più difficile individuare call system('malware')o perldo malwarequalcuno potrebbe concatenare la stringa in una variabile)
  4. function("MyFunc"): chiama i riferimenti alle funzioni - accetta una variabile come parametro, permettendo così di nascondere system()

Puoi anche provare ad eseguire alcune funzioni del plugin usando 'secure'o sandboxper rilevare shell e linguaggi esterni (perl, python, ecc.).


+1, belle serie di informazioni di base sull'argomento specifico ... davvero utile ... grazie!
Cylian,
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.