Ubuntuをフォークボムから保護する方法


72

誰かがフォーク爆弾について話しているのを聞いた、私はいくつかの研究を行い、人々があなたがコマンドラインで入力することができ、その結果コンピュータで悪いことをするいくつかの奇妙な見た目のキャラクターに関するいくつかの恐ろしい情報を見つけました。理解できないコマンドは発行しませんが、何が起こるかわかりません。

一部のOSでは、管理者がフォークプロセスの影響を軽減するためにユーザープロセスにある程度の制限を設けることができると聞きましたが、このUbuntuのデフォルトの保護は、sudo権限を持つユーザーがこれを設定する必要がありますか?もしそうなら、どのように?

回答:


73

Ubuntuや他のほとんどのLinuxディストリビューションで生成できるプロセスの量を簡単に制限できます。 /etc/security/limits.conf

sudoedit /etc/security/limits.conf

次に、このファイルの下部に次の行を追加します。

*    hard     nproc     nnn

どこ:

  • hard 再起動せずに変更できないように、カーネルレベルで制限を設定します。
  • nproc ユーザーごとのプロセスの最大数です。
  • nnn 次の方法でシステムに対して計算する必要がある数値です。

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

上記のコマンドは、スレッドを含むすべてのユーザーのすべてのプロセスを一覧表示し、それらを合計して、最大量のプロセスを持つユーザー名を一覧表示します。安全のため、上記のコマンドを実行する前に通常必要な数のアプリケーションを開き、安全のためにその数を2倍にします。

この制限を設定したら、再起動する必要がありますが、システム上の各非ルートユーザーに影響します。そのため、root以外のユーザーがfork bombを実行すると、その厳しい制限があります。

デフォルトでは、グループおよびワイルドカードの制限はrootユーザーに適用されませんrootスーパーユーザーにルールを適用する場合は、ルールでリテラルのユーザー名を使用します。

また、すぐに再起動する予定がない場合はsudo ulimit -u 800、実行中のセッションにのみ制限を適用しますがsudo権限を持つフォーク爆弾によって簡単に回避できます!

再起動後、中にあるものはすべて/etc/security/limits.conf使用されます。

フォーク爆弾に関する追加情報:マルウェアや恐ろしいものではありません。それらは通常、2回自分自身を呼び出すスクリプトのような基本的なもので構成されており、マシン上の存在が指数関数的に増加します。急速なペースでメモリフットプリントが小さくても、使用可能なすべてのRAMがすぐにいっぱいになり、マシンがフリーズまたはリブートします。唯一の危険は、保存されていない情報を失うことです。私はフォークボムを悪意のあるソフトウェアよりもいたずらとして分類します。

重要なリマインダー:

アクションが98%確実でない場合、コマンドラインで何かを実行することはほとんどありません。実行中のコマンドを読み取れない場合は、実行しないでください。これは、読み取り不能な16進/ base64文字のチャンクにdoubleを適用します。これは、あらゆる種類の意地悪を隠すのに使用できます。コマンドがわからない場合は、Ubuntu Manpagesでそのアクションをいつでも検索できsudoます。使用すると、rootユーザーとして実行されるため、特に注意が必要です。


@MarcoCeppi:あなたの数がはるかに一般的なユニティユーザーのためのオフではなかった:計算への出力が...私のシステムのため、現在404ある
Fabby

1
たとえばalias ":(){ :|: & };:"="echo 'No.'"、私のようなものを置くと、.bashrcログインごとに実行されますか?
UniversallyUniqueID

より高いnproc制限を選択することにはデメリットがありますか?現在のプロセス数に制限があるか、2倍にさえ制限されている余地はあまりないように思えますが、フォーク爆弾に対しては、さらに高い制限、さらには10,000以上が有効ですか?各フォーク/プロセスはどれくらいのRAMを消費しますか?多分、より普遍的なRAM派生の制限がありますか?
Xen2050

1

私が好きな簡単な方法は、エイリアスを作成することです。エイリアスは常に適用されるわけではありません。上記の答えを確認してください。

alias :="echo No."

いま

$ :(){ :|: & };:
bash: syntax error near unexpected token `('

22
確かに、これは一般的なソリューションです。これはどのように停止しa(){ a|a & };aますか?(または他の関数名?)
cat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.