web-dev-qa-db-ja.com

ユーザーが実行可能ファイルを作成して実行するのを止める方法はありますか?

ランサムウェア攻撃はゼロデイエクスプロイトを使用する可能性がありますが、攻撃者は多くの場合、だまされやすいユーザーをだまして、ダウンロードしてクリックすることで実行ファイルを実行させます。

ナイーブユーザーがいて、通常のパスに制限したいとします。実行権限を持つファイルの作成を制限する方法はありますか?

または、より一般的には、アクセス制御リストを作成し、このユーザーがこのリストのファイルのみを実行できるように定義する方法はありますか?

31
Dov

懸念を表明した具体的な攻撃は次のとおりです。

多くの場合、攻撃者はだまされやすいユーザーをだまして、ダウンロードしてクリックすることで実行ファイルを実行させます。

少なくともファイルがWebブラウザーでダウンロードされる一般的なケースでは、これはUbuntuでブラウザーが Execute-Permission Bit Required ポリシーに準拠することですでに防止されているはずです。そのポリシーの最も直接的な関連部分は次のとおりです。

  • デスクトップとシェルを含むアプリケーションは、次の両方の場合、ファイルから実行可能コードを実行してはなりません。

    • 実行ビットがない
    • ユーザーのホームディレクトリまたは一時ディレクトリにあります。
  • Webブラウザやメールクライアントなどからダウンロードしたファイルは、実行可能ファイルとして保存しないでください。

したがって、ユーザーがプログラムをWebブラウザーでダウンロードするように指示され、それをダウンロードして、ダブルクリックしてファイルを実行しようとすると、実行されません。これは、ダウンロードされたファイルがシェルスクリプトまたは.desktopファイルであっても適用されます。 (もしあなたがホームディレクトリの 。desktop filesreallyプログラムではないのに実行可能としてマークされなければならない理由を疑問に思ったことがあるなら、それが理由です。 。)

ユーザーが構成の変更を通じてこの動作を変更する可能性があります。ほとんどの人はそうしないでしょうし、そうすべきでない人はおそらくそうすべきではありませんが、それはあなたが心配しなければならないことではありません。より大きな懸念は、あなたがすでに心配していると私が思うより複雑な攻撃であり、悪意のある人(またはボット)がユーザーに特定のファイルをダウンロードするように指示し、自分で実行可能としてマークします(ファイルブラウザを使用するか、または chmod を使用して)、実行します。

残念ながら、ファイルの実行ビットを設定したり、一部のホワイトリストにあるファイル以外のファイルを実行したりするユーザーの機能を制限しても、問題を顕著に緩和することはできません。一部の攻撃は既に機能しますが、機能しない攻撃はそれを実行するように簡単に変更できます。基本的な問題は、ファイルの実行の影響 達成可能 ファイルに実行権限がない場合でもです。

これは例によって最もよく示されます。 evilが現在のディレクトリ内のファイルであり、実行権限が与えられている場合(chmod +x evil)を実行し、(./evil)、何か悪いことをするでしょう。プログラムの種類によっては、次のいずれかによって同じ効果が得られる場合があります。

それらのどれも、最後のものも、ファイルに実行権限があること、またはファイル実行権限を与えるためにユーザーができるである必要さえありません。

しかし、悪意のある命令はそれほど複雑である必要はありません。次のnon-maliciousコマンドを検討してください。これは NVMをインストールまたは更新するための公式に推奨される方法の1つ です。

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

悪意のない理由は、NVMはマルウェアではないためですが、URLが実行時に悪意のある誰かのスクリプトに対するものである場合、そのコマンドはスクリプトをダウンロードして実行します。どの時点でも、どのファイルにも実行可能権限を与える必要はありません。悪意のあるファイルに含まれるコードをこのような1つのコマンドでダウンロードして実行することは、攻撃者がユーザーをだまして実行するかなり一般的なアクションだと思います。

ユーザーが実行できるインタープリターを制限しようと考えるかもしれません。しかし、ユーザーが実行できると思われる通常のタスクに実質的に影響を与えない方法は実際にはありません。 極端に制限された環境を設定している場合、ユーザーがコンピューターで行うと考えているほとんどすべてのことは許可されません。たとえば、いくつかのプログラムのみを実行するキオスクの場合、これは、意味のある保護の手段を提供する可能性があります。しかし、それはあなたのユースケースのようには聞こえません。

したがって、質問に対するおおよその答えは「いいえ」です。より完全な答えは、おそらく管理して、ユーザーがホワイトリストに指定したファイル以外のファイルを実行できないようにすることができるということです。しかし、それは厳密に技術的な意味での「実行」であり、ほとんどのプログラムまたはスクリプトの実行による完全な効果を達成するためには必要ありません。 を防ぐために、ホワイトリストを非常に小さくして、非常に制限されている可能性のあるもの以外のインタープリターを一覧表示しないようにすることができます。しかし、それを管理したとしても、ユーザーは多くのことを行うことができず、非常に小さくしても、害を及ぼさなければ、おそらく何もできません。 ( Thomas Wardのコメント を参照してください。)

ユーザーが自分自身を傷つけることができる場合、彼らは自分自身を傷つけることに騙される可能性があります。

特定のプログラムの使用を制限したり、その他の方法で有害となる可能性のある動作を制限したりすることができます。ランサムウェアが従う傾向のある特定のパターンを調べている場合は、特定の一般的なケースを防ぐことができます。 ( AppArmor を参照してください。)これは、いくつかの値を提供する可能性があります。しかし、それはあなたが望んでいる包括的なソリューションに近いものをあなたに与えません。

最終的にどのような技術的対策(もしあれば)をとっても、最善の策はユーザーを教育することです。これには、理解できないコマンドを実行しないように指示したり、ダウンロードしたファイルを使用しても安全である理由を説明できない状況では使用しないよう指示することも含まれます。ただし、バックアップの作成なども含まれるため、(マルウェアなどにより)何かがうまくいかなくても、被害は最小限に抑えられます。

50
Eliah Kagan

[〜#〜]はい[〜#〜]*


これは制限付きシェルと呼ばれます。

Ubuntuですでに利用可能な/bin/rbashを使用し、それを制限されたPATH変数と組み合わせることができます。 rbashは、$PATHにないものからの実行を禁止します。

制限付きユーザーを追加:

Sudo adduser --Shell /bin/rbash res-user

バイナリをリンクできる新しいディレクトリを作成します。ユーザーは次のように制限されます。

Sudo mkdir /home/res-user/bin

.profileファイルを変更します。

Sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

.profilebashrcおよび.bash_profileを不変にします。

Sudo chattr +i /home/res-user/.profile
Sudo chattr +i /home/res-user/.bashrc
Sudo chattr +i /home/res-user/.bash_profile

ここで、ユーザーに許可される唯一のこと、つまりFirefoxを開くことをユーザーに提供します。

Sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

ここで、res-userとしてログインすると、Firefoxのみを開くことができます。

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

制限されたシェルを簡単に回避することはできません。

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

制限されたユーザーは、ファイルを実行可能にしたり、起動したりできません。

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

制限されたユーザーは、必要なコマンドを実行できないため、インターネットから悪質なスクリプトを実行できません。

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

*制限されたシェルから抜け出す方法 がありますが、ユーザーがそれを実行できる場合は、思ったほど騙されにくいかもしれません。

11
Robert Riedl