グローバルに設定したい場合
alias ':(){ :|:& };:'='echo fork bomb averted'
これがBashフォーク爆弾の実行を防ぐための効果的なセキュリティ戦略ですか、それともそれを実行する方法はまだありますか?
質問は次のとおりです。別のコマンドにエイリアスされたコマンドを実行する方法はありますか?
答え1
二、いいえ、三...主な障害物は次のとおりです。
有効なエイリアスではありません。Bashのオンラインマニュアル:
上記の文字...とシェルメタ文字または引用符文字は、エイリアスには表示しないでください。
(
Bash 4.4には、)
および空白&
がもう存在しません。|
この特定の文字列はシェルにフォークボムを作成する唯一の方法ではなく、あいまいに見えるので有名です。たとえば、
:
実際に文字で構成されるのではなく、関数を呼び出す必要はありません。エイリアスを設定できる場合、ユーザーはエイリアスをオフにするか、コマンドラインからエイリアスをエスケープしてバイパスするか、スクリプトで関数を実行してエイリアスを完全に無効にすることができます(Bashは非対話型シェルでエイリアスを拡張しません) 。 )。
すべてのバージョンのフォーク爆弾を防ぐのに十分なシェルが制限されていても、ユニバーサルシステムにはサブプロセスを繰り返してフォークできる他のプログラマブルユーティリティがあります。 PerlやCコンパイラはありますか?とても簡単です。でもawkもできます。これらのファイルをインストールしなくても、ユーザーがシステム外でコンパイルされたバイナリをインポートしたり、システム
/bin/sh
の残りの部分が正しく機能するために必要なシェルを実行したりするのを防ぐ必要があります。
ただ使用ulimit -u
(たとえばRLIMIT_NPROC
)またはユーザーが開始できるプロセスの数を制限するのと同じです。ほとんどのLinuxシステムで利用可能pam_limits
ユーザーが選択したコマンドを実行する前に、プロセス数制限を設定できます。
次のようにすると、/etc/security/limits.conf
すべてのユーザーに対して50のプロセスという厳しい制限が設定されます。
* hard nproc 50
答え2
いいえ。フォーク爆弾をプログラムする方法はいくつかあります。
邪悪なフォーク爆弾の作者は、別の関数名で再試行します。または彼のフォーク爆弾が成功するまで、他の変更があります。
意図しないフォーク爆弾の作者は、最初に正式なフォーク爆弾を作成しません。
実は、自分も知らずにフォーク爆弾作家になりやすいです。たとえば、再帰をmake
外部、unchecked cd
、オプション、および存在しないサブディレクトリと組み合わせることができます-j
。私が偶然発見した実際の例は次のとおりです。
断固とした攻撃者はもちろん、すべての可能性から保護することはできません。あなたが達成できるのは、システムの複雑さを増やすことだけです。
答え3
フォーク爆弾にエイリアスを付けることはできません。有効なエイリアス:
$ alias ':(){ :|:& };:'='echo fork bomb averted'
bash: alias: `:(){ :|:& };:': invalid alias name
「/」、「$」、「`」、「=」文字、および上記のシェルメタ文字または引用符は、エイリアスに表示しないでください。
一部のシェルは宣言されたときにエイリアスをチェックしませんが、代わりにコマンドを解釈するときにエイリアスを確認し、誤った名前をスキップします。フォーク爆弾は常に含まれており、&
有効なエイリアスに含めることはできないため、この方法で自分自身を保護することはできません。
答え4
二度、いいえ。
これがフォーク爆弾を作成する唯一の方法ではありません。
エイリアスがあるときに「コマンド」を実行する方法はいくつかあります。
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