web-dev-qa-db-ja.com

フォーク爆弾のエイリアスをグローバルに設定すると、その実行が妨げられますか?

グローバルに設定する場合

alias ':(){ :|:& };:'='echo fork bomb averted'

それはバッシュフォーク爆弾の実行を回避するための効果的なセキュリティ戦略ですか、それとも実行する方法はありますか?

私は質問がうまくいくと思います:コマンドが他のものにエイリアスされているときにコマンドを実行する方法はありますか?

15
malan

の 、 番号、 、...その主な障害は次のとおりです。

  1. エイリアスの有効な名前ではありません。 バッシュのオンラインマニュアル

    文字...と上記のシェルメタ文字または引用文字は、エイリアス名に表示されない場合があります。

    ()&|および空白は、Bash 4.4で廃止されました。

  2. その特定の文字列は、シェルでフォーク爆弾を作成する唯一の方法ではなく、見た目がよくないことで有名です。たとえば、実際に文字で構成されるものの代わりに、関数:を呼び出す必要はありません。

  3. エイリアスを設定できた場合、ユーザーはエイリアスの設定を解除したり、コマンドラインでエイリアス名をエスケープして回避したり、スクリプトで関数を実行してエイリアスを完全に無効にしたりできます(Bashは非インタラクティブシェルでエイリアスを展開しません)。 。

  4. シェルがフォーク爆弾のすべてのバージョンを停止するのに十分に制限されている場合でも、汎用システムには、サブプロセスを再帰してフォークできる他のプログラム可能なユーティリティがあります。 PerlまたはCコンパイラを入手しましたか?簡単です。 awkでもおそらくそれを実行できます。それらがインストールされていない場合でも、コンパイルされたバイナリをシステムの外部から取り込んだり、/bin/shを実行したりすることを停止する必要があります。機能するシステム。

ulimit -u (つまり、RLIMIT_NPROC)または同等のものを使用して、ユーザーが開始できるプロセスの数を制限します。ほとんどのLinuxシステムには pam_limits があり、ユーザーが選択したコマンドが開始される前にプロセス数の制限を設定できます。

/etc/security/limits.confのこのようなものは、すべてのユーザーに50プロセスのハード制限を課します。

*        hard    nproc           50

(Stephen Kitt 既述 ポイント1、Jeff Schaller 既述 2および3.)

52
ilkkachu

いいえ。フォーク爆弾を書く方法は多すぎます。

邪悪なフォーク爆弾作成者は、別の関数名で再試行するだけです。または彼のフォーク爆弾が成功するまで他の変更。

不注意なフォークボムのライターは、最初から正規のフォークボムを作成しません。

自分で不注意なフォークボムのライターになるのは実際にはかなり簡単です。たとえば、再帰的なmakeを外部のチェックされていないcdと一緒に使用し、それを-jオプションと存在しないサブディレクトリと組み合わせることができます-実際の例かつて。

すべての可能性から保護することはできません。最も確実なのは、断固とした攻撃者に対してではありません。達成できることは、システムの複雑さを増すことだけです。

有効なエイリアス名 ではないため、フォーク爆弾にエイリアスを設定することはできません。

$ alias ':(){ :|:& };:'='echo fork bomb averted'
bash: alias: `:(){ :|:& };:': invalid alias name

文字「/」、「$」、「 `」、「=」、および上記のシェルのメタ文字または引用文字は、エイリアス名に表示されない場合があります。

一部のシェルは、宣言時にエイリアス名をチェックせず、コマンドを解釈するときに無効な名前をスキップします。フォーク爆弾には常に&が含まれます。これは有効なエイリアス名に含めることができないため、この方法で自分を保護することはできません。

14
Stephen Kitt

二回、いいえ。

それはフォーク爆弾を書く唯一の方法ではありません。

エイリアスがあるときに「コマンド」を実行する方法もいくつかあります。

command the-command
\the-command

例:

$ alias ls=not-really-ls
$ ls
-bash: not-really-ls: command not found
$ \ls
jeff.html  output.png
$ command ls
jeff.html  output.png
10
Jeff Schaller