不明な `_vimrc`または` vimscript`ファイルを使用するのはどのくらい安全ですか?


8

この質問をここで行うべきかどうかはわかりません。ほとんどすべての言語で、マルウェアが存在します。同じことが当てはまりvimscriptますか?

仮定しvim、高いシステム権限で実行されています。新しいvimユーザーがプラグインまたは見栄えのするvimrcファイル(つまり、他のスクリプト言語でのいわゆる悪意のあるスクリプト)を使用してシステムを破壊する可能性はありますか?

未知のスクリプトファイルを実行する前に、新しいユーザーが対処できる方法は何ですか?スクリプトを無効にすることは、そのための明白な解決策であることを知っています。しかし、新しい学習者にとっても非常に便利なプラグインの数は非常に多くあります。

繰り返しになりますが、この質問はここには当てはまらないかもしれませんが、セキュリティも全体像の非常に重要な部分だと思います。

これに関するいくつかのリソースまたは情報をvim指すと、私のような新しいユーザーにとって非常に役立ちます。


4
Vim(または何でも)をrootとして実行しないのが最善の策です。$EDITORがに設定されていると仮定してvim、単にを使用します$ sudo -e filename
romainl 2016

1
Vimをrootとして実行している場合(そうするべきではありませんが、発生する可能性があります)に備えて、非常に初歩的なvimrcのみをインストールすることをお勧めします/root/.vimrc。通常、構文の強調表示をオンにします。通常のユーザーのvim設定の方が洗練されているほど、ルートとして実行していることがより明白になります。
kbaは2016

@romainl:あなたの親切な提案に感謝します...これが新しいvimユーザーが従うべき最も合理的なものであることを願っています...
Cylian

@kba:親切な意見をありがとう...試してみるのもとても良い方法です...
Cylian

回答:


8

さて、Vimはで任意のコマンドを実行できます:!。環境変数を設定できます。したがって、シェルスクリプトであるマルウェアスクリプトは、Vimscriptから実行できます。

複雑なPerl、Python、Ruby、Luaプログラムを利用できます。したがって、標準ライブラリのみを使用するこれらのいずれかに記述されたマルウェアがVimに埋め込まれる可能性があります。

これらのどちらも当てはまらなかったとしても、Vimはエディターです。rootとして実行する/etc/passwdと、と/etc/shadowファイルを簡単に編集して新しいユーザーを作成し、/etc/sudoers完全なsudo権限を付与し、cronjobシェルスクリプトを実行してこのユーザーを設定できます。

インターネットからランダムにスクリプトを実行する場合と同様に、安全を確保する簡単な方法はありません。Linuxでは、オーバーレイを使用してVM 実行すると、特定のvimrcが変更するファイルがわかる場合があります。それはあなたが知覚するどのくらいのリスクに依存します。


あなたの助けに感謝します...答えはかなり役に立ちます... Linuxでは、それは間違いなく素晴らしいアイデアです。私が今信じているのは、コードを理解しないと、コードをまったく使用しないことです...または少なくともそれらunknownまたはlesser knownスクリプトでは使用しないでください...
Cylian

@mMontu:優れた情報...これを回答として投稿しないでください...私はその多くの情報を信じています。少なくとも、初心者が未知のソースを調べられるように、基本的なアイデアを提供しています...どうもありがとうございました。 ..you rock !!!
キリアン2016

@Cylian良いアイデア、とても親切にしてくれてありがとう。
mMontu 2016

5

muruの答えを拡張して、特にプラグインコードが通常は非常に短いため、コードを検査できます(例外はいくつかの人気のあるプラグインですが、人気があることでより安全です-他の多くの人がソースをレビューしたことを期待できます)。

コードを完全に理解する必要はありません。「危険な」コマンドを探すだけで十分です。

  1. :!and system():シェルコマンドの実行を許可するため、システムを変更できます
  2. :perldo:python:lua:tcl、および:ruby埋め込まれたシステムコールを含んでいてもよい、異なる言語でコマンドを実行
  3. :execute:このコマンドは文字列をコマンドとして実行するため、前のコマンドの1つを隠すために使用できます(例:見つけにくくするために、call system('malware')またはperldo malware文字列を変数に連結することができます)
  4. function("MyFunc"):関数参照を呼び出す-変数をパラメーターとして受け入れ、そのため、 system()

'secure'またはsandboxを使用していくつかのプラグイン関数を実行して、シェルおよび外部言語(perl、pythonなど)を検出することもできます。


+1、特定のトピックに関する基本情報の素敵なセット...本当に役立つ...ありがとう!
キリアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.