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


31

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

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

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


7
このように無効に実行になり禁止システム上で何かをすることができることからユーザーを。システムに、あるいは私はセキュリティロックダウンのこのタイプ行うことを認識していことをサードパーティ製のソフトウェアで構築されたで、このためのメカニズムはありません
トーマス・ウォード

3
答えるのではなく、何ができるかを示唆します。ユーザーが書き込み可能なマウントにnoexecを追加します。スクリプトを防ぐことはできませんが、実際のバイナリ実行はできません。
サンポサッララ

3
@ThomasWard、それは制限されたシェルとまったく同じではありませんか?
ロバートリードル

7
@ThomasWardには、(通常は署名された)実行可能ファイルの特定のリストが許可され、昇格された特権なしでは実行できるものがない「ホワイトリストに登録された実行可能ファイル」の一般的な概念があります。また、WindowsとOS Xの両方には、これを行う合理的なソリューションがあります。ただし、アプリケーションのホワイトリストに適したUbuntu(または他のLinux)ソリューションがあるかどうかはわかりません。
ペテルス

2
@Peteris、このようなソリューションは複数あります。私のお気に入りは、noexecChromeOSがdm_verityルートファイルシステムの整合性を確保するために使用する方法に沿って、署名された読み取り専用のファイルシステムを実行可能ファイルとともに持ち、他のすべてをマウントすることです。それほどハードコアではない人には、EVMモジュールを使用できます。Gentooのドキュメントについては、wiki.gentoo.org / wiki / Extended_Verification_Moduleをご覧ください。
チャールズダフィー

回答:


50

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

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

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

  • デスクトップとシェルを含むアプリケーションは、両方の場合、ファイルから実行可能コードを実行しないでください。

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

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

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

残念ながら、ファイルに実行ビットを設定したり、ホワイトリストにあるファイル以外のファイルを実行したりするユーザーの機能を制限しても、問題はそれほど軽減されません。一部の攻撃はすでに機能しますが、そうでない攻撃は簡単に変更できるため、機能します。基本的な問題は、ファイルに実行許可がなくてもファイルを実行する効果を達成できるということです。

これは、例によって最もよく説明されています。evil現在のディレクトリにあるファイルがあり、実行可能パーミッション(chmod +x evil)および実行(./evil)が与えられた場合、何か悪を行うと仮定します。プログラムの種類によっては、次のいずれかによって同じ効果が得られる場合があります。

それらのどれも、最後のものでさえも、ファイルに実行可能アクセス許可があること、またはユーザーがファイルに実行可能アクセス許可を与えることができることさえ必要としません。

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

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

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

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

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

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

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

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


6
おそらく、非技術的な対策には、やりたいことを健全性チェックできる人の連絡先情報を含める必要があります。彼らがわからないときはいつでも、電話またはメッセージを送って尋ねてください。それは推測する誘惑を取り除くかもしれません。
ピーターコーデス

1
これはOPの質問の背後にある問題や不安についての素晴らしい抽象的である
ロバートRiedlの

マイナーNIT:「. ./evilまたはsource ./evilのコマンドを実行しますevil.sh」 -これらのsourceコマンドはでコマンドを実行しますevil彼らは拡張子を指定しない限り、例えば、. ./evil.sh
追って通知があるまで一時停止。

@DennisWilliamsonありがとう-修正済み!これは、別のスクリプト名を使用した古い(提出されていない)回答の大まかなドラフトから残ったものです。私はそれがばかげていることにすぐに気付きましたが、明らかにすべての出来事を変えることに失敗しました。
エリアケイガン

1
「このスクリプトをwgetして実行する」だけのソフトウェアをインストールまたは更新する方法を見つけるたびに、私の足の爪が少しカールします。単一の文字でオフになっている、またはOの代わりに0を使用し、UTF-8文字を使用して不明瞭にして独自の悪意のあるスクリプトを貼り付けるGitHubアカウント/レポの作成を阻止するものは何もありません... wgetコマンドとbamのタイプミス。
イアンケンプ

11

はい*


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

を使用できます/bin/rbash。これは、Ubuntuで既に利用可能であり、制限された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

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


2
これは、「ユーザーがコンピューター上で行うことを考えているほぼすべてが許可されない非常に制限された環境」を実現しようとするものです(私が答えに入れたように)。res-userグラフィカルにログインできません。彼らができる唯一の便利なことはssh -Xinとrun firefoxです。ユーザーが作業を行えるように、より多くのコマンドを許可できます。その後、ブレークアウトが簡単になります。リンクされたメソッドのいくつかは、ワンライナー(攻撃者が提供する可能性があります)にすることができます。ユーザーが制限を息苦しく感じると、彼らはそれを回避することの専門家になりますが、以前と同じように精通した、またはだまされやすいままです。
エリアケイガン

1
@EliahKaganはい、正しい。ユーザーが必要とするものすべてをリンクする必要があります。しかし、これは非常に近い[...]アクセス制御リストを作成し、このユーザーがこのリスト内のファイルのみを実行できるように定義する方法があります[...]。したがって、OPに役立つ可能性があります。これらのシェルから抜け出すことは不可能ではありませんが、かなり難しいです。特定のリソースまたはジャンプホストへの外部アクセス用の同様のセットアップがありました。制限されたシェルのセットアップに対する広範な攻撃があることは疑わしい…。また、攻撃者が環境を知っている標的型攻撃に対処している場合、すべての賭けはオフになります。
ロバートリードル

4
脚注を回答の最初の行に上げます。
追って通知があるまで一時停止します。

おそらく、キオスクモードまたは強化された別のブラウザでChromeを使用する方が良いでしょう。非常に高い権限とシステムコマンドの実行を使用して、Firefoxプラグインまたは拡張機能をインストールするのは非常に簡単です。Firefoxでは、必ず最後のバージョンを使用し、拡張機能を禁止してください。
ベンジャミングリュンバウム

さらに保護するために、noexecオプションでマウントされたファイルシステムへの書き込みアクセスのみを許可します。
ダンD.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.