Seberapa amankah menggunakan file `_vimrc` atau` vimscript` yang tidak diketahui?

8

Saya tidak tahu apakah pertanyaan ini harus ditanyakan di sini atau tidak. Di hampir setiap bahasa, malware ada. Apakah hal yang sama berlaku untuk vimscript?

Misalkan vimberjalan dengan hak istimewa sistem tinggi. Apakah ada kemungkinan bahwa vimpengguna baru dapat merusak sistemnya dengan menggunakan plugin atau vimrcfile yang terlihat bagus (yaitu skrip berbahaya yang disebut dalam bahasa skrip lain)?

Apa ukuran yang bisa dilakukan pengguna baru sebelum menjalankan file skrip yang tidak dikenal? Saya tahu bahwa menonaktifkan skrip adalah solusi yang jelas untuk itu. Tetapi ada sejumlah plugin yang benar-benar bagus yang cukup berguna, bahkan untuk pelajar baru.

Sekali lagi untuk mengatakan, pertanyaan ini mungkin tidak cocok di sini, tetapi saya percaya bahwa keamanan juga merupakan bagian yang sangat penting dari keseluruhan gambar.

Menunjuk ke beberapa sumber daya atau info tentang ini akan sangat membantu bagi vimpengguna baru seperti saya.

Cylian
sumber
4
Tidak menjalankan Vim (atau apa pun) sebagai root adalah taruhan terbaik Anda. Dengan asumsi $EDITORdiatur ke vim, cukup gunakan $ sudo -e filename.
romainl
1
Kalau-kalau Anda menjalankan Vim sebagai root (yang seharusnya tidak Anda lakukan tetapi itu bisa terjadi), saya sarankan untuk hanya menggunakan vimrc yang sangat sederhana /root/.vimrc. Saya biasanya hanya menyalakan highlight sintaks. Semakin bagus pengaturan vim pengguna normal Anda, semakin jelas Anda menjalankannya sebagai root.
Kba berdiri dengan Monica
@romainl: terima kasih atas saran baik Anda ... saya harap ini adalah hal yang paling masuk akal yang harus diikuti oleh pengguna vim baru ...
Cylian
@kba: terima kasih atas pendapat Anda yang baik ... ini juga merupakan pilihan yang sangat baik untuk mencoba ...
Cylian

Jawaban:

8

Yah, Vim dapat menjalankan perintah sewenang-wenang dengan :!. Itu dapat mengatur variabel lingkungan. Skrip malware yang merupakan skrip shell dapat, karenanya, dijalankan dari Vimscript.

Ini dapat menggunakan program Perl, Python, Ruby atau Lua yang kompleks. Jadi malware yang ditulis di salah satu dari ini yang menggunakan hanya pustaka standar yang dapat disematkan di Vim.

Bahkan jika tak satu pun dari ini benar, Vim adalah editor. Jika dijalankan sebagai root, kita dapat dengan mudah mengedit /etc/passwddan /etc/shadowfile untuk membuat user baru dan /etc/sudoersuntuk memberikan mereka lengkap sudohak istimewa, dan cronjobuntuk menjalankan skrip shell untuk mengatur pengguna ini up.

Seperti halnya menjalankan skrip acak dari internet, tidak ada cara mudah untuk merasa aman. Di Linux, Anda bisa menjalankan dalam VM dengan overlay mungkin memberi tahu Anda file apa yang diubah oleh vimrc. Itu tergantung pada seberapa besar risiko yang Anda rasakan.

muru
sumber
Terima kasih atas bantuan Anda ... jawabannya cukup membantu ... sementara di Linux, tidak diragukan lagi itu adalah ide yang brilian. Apa yang saya percayai sekarang, adalah tanpa memahami kode itu sama sekali tidak menggunakan itu sama sekali ... atau setidaknya untuk itu unknownatau lesser knownskrip ...
Cylian
@ mMontu: info yang sangat bagus ... mengapa Anda tidak memposting ini sebagai jawaban ... saya percaya bahwa banyak info, setidaknya memberikan ide dasar bagi seorang pemula untuk melihat sumber yang tidak diketahui ... terima kasih banyak. ..kamu keren!!!
Cylian
@Cylian ide bagus, terima kasih sudah berbaik hati.
mMontu
5

Memperluas jawaban muru, Anda dapat memeriksa kode, khususnya karena kode plugin biasanya sangat pendek (pengecualian adalah beberapa plugin populer, tetapi dengan menjadi populer mereka lebih aman - Anda dapat berharap bahwa banyak orang lain telah meninjau sumbernya).

Anda tidak harus sepenuhnya memahami kode; itu sudah cukup untuk mencari perintah "berbahaya":

  1. :!dan system(): memungkinkan eksekusi perintah shell, sehingga dapat mengubah sistem Anda
  2. :perldo, :python, :lua, :tcl, Dan :ruby: menjalankan perintah pada bahasa yang berbeda, yang mungkin berisi panggilan sistem embedded
  3. :execute: perintah ini mengeksekusi string sebagai perintah, sehingga dapat digunakan untuk menyembunyikan salah satu dari perintah sebelumnya (misalnya: untuk membuat lebih sulit dikenali call system('malware')atau perldo malware, seseorang dapat menggabungkan string ke dalam variabel)
  4. function("MyFunc"): referensi fungsi panggilan - menerima variabel sebagai parameter, sehingga memungkinkan penyembunyian system()

Anda juga dapat mencoba menjalankan beberapa fungsi plugin menggunakan 'secure'atau sandboxuntuk mendeteksi bahasa shell dan eksternal (perl, python, dll).

mMontu
sumber
+1, kumpulan info dasar yang bagus tentang topik tertentu ... sangat membantu ... terima kasih!
Cylian