CPUの100%を消費するSSHD(数百のプロセス)-死なない


7

最近、私が管理しているいくつかのシステムのSSHdが、大量のCPUを消費する、止められないプロセスの生成を開始することに気付きました。

syscallは、プロセスがすべて「実行中」であり、ゾンビではなく、親がそれらを強制終了するのを待っていないことを示します(少なくとも私が知る限りでは)。

ここに画像の説明を入力してください

私はこれらのプロセスを殺すためにすべてを試しました...これまでに見つけた唯一の信頼できる方法は、サーバー全体を再起動することです(これは理想的ではありません)。dropbearのopenssh-serverを切り替えようとしましたが、アプリケーションに必要な動作をしません。

私はもう試した:

killall -9 sshd

IDで各sshdを強制終了します。他のいくつかのもの(htop + sigtermなど)

これらのプロセスを殺すか、これを引き起こす原因を解決するためのアイデアが欲しいです。


3
あなたは攻撃を受けているようです。誰かがあなたのセキュリティ実装で遊んでいます。それらのsshdはパッチが適用された最新バージョンですか?
オイゲンリーク14年

2
デフォルトのポート22 / TCPから任意の高いポートに移動して、ほとんどの自動スクリプトスキャナーを削除してください。これはセキュリティ対策ではなく、ログを正常に保つだけです。適切な対策として、セキュリティをトリプルチェックし、fail2banの展開を検討してください。
MacLemon 14年

そして、あなたがそれにいる間、chkrootkitとrkhunterも。あなたが知っていることはありません...
MariusMatutiae

ポート22にありますが、低い制限と高い禁止時間でfail2banがあります。netstatなどを見てきましたが、予期しないSSH接続はほとんどありません。
ブラボーデルタ14年

更新:サーバーはキーのみに設定され、fail2banは有効になっており、多くのインバウンド接続は有効になっていません。
ブラボーデルタ14年

回答:


2

それらが実際にOpenSSH sshdである場合、スクリプトがどこかで壊れたループでそれらを実行しており、その子プロセスの1つがそのすべてのCPUを占有していると思います。

Marki555が提案したように、straceあなたを助けるでしょうが、strace -fstraceが子プロセスに従うように使用すべきです。からman strace

   -f          Trace child processes as they are  created  by  cur-
               rently  traced  processes as a result of the fork(2)
               system call.

straceは大量のデータを生成するため、-e引数も使用することをお勧めします(たとえば、open()呼び出しのみを表示する場合)。

   -e expr     A qualifying expression which modifies which  events
               to  trace  or  how to trace them.  The format of the
               expression is:
                         [qualifier=][!]value1[,value2]...

あなたが試すことができます別のコマンドがあるps xafか、pstree -aあなたがそれらのsshdのを開始したどのようなプロセスを決定することができるようにプロセスとその子プロセスの理解しやすいツリービューを取得します。lsofまた、あなたを助けるかもしれない、それはプロセスが開いているファイルを教えてくれます。

そしてもちろん、最新のOpenSSHを使用していることを確認してください。私は古代のOpenSSH 3.4p1でのrsync +大きなファイル+ sshに問題があると考えています。

それらが実際にsshdプロセスではない場合、バイナリファイルのMD5チェックサムは正しく表示される場合がありますが、実際に実行されているsshdプログラムではない場合があります。また、md5sumコマンド自体は、特定のファイル(sshdなど)の正しいチェックサムを報告するように変更されたバックドアバージョンである可能性があります。

/ proc / [sshd pid] / exeを確認し、/ usr / sbin / sshd(またはsshdが存在する場所)へのシンボリックリンクであること、および/ proc / [sshd pid] / environを確認してください。使用している環境変数、および/ proc / [sshd pid] / cmdlineを使用して、実際に開始したコマンドを確認します。

攻撃者は悪意のあるプログラムの名前を「sshd」に変更してから実行し、sshdのように見せることもできます。/ usr / sbin / sshdを/ tmp / sshdに移動した後、悪意のあるsshdを/ usr / sbin / sshdに移動して、そのタイプの/ proc分析から隠そうとしましたが、/ tmp / sshdに戻りました/ usr / sbin / sshd / proc / [sshd pid] / exeシンボリックリンクは次のように表示さlsれます:

   lrwxrwxrwx 1 root root 0 May 19 06:47 /proc/[sshd pid]/exe ->  (deleted)/usr/sbin/sshd

また、これらのsshdが通常のプロセス分析を積極的に妨げるために何かをしている場合、プロセスを「一時停止」するkill -STOP代わりに試みることができkill -9ます(kill -CONT再開するために使用します。http://en.wikipedia.org/wiki/Job_control_%28Unix%29を参照)#実装)。

ただし、攻撃者がルート権限を持っている場合、/ proc、netstat、lsなどに隠れているルートキットをインストールできます。その後、システムはフォレンジックを実行します(またはフォレンジック用に作成されたライブLinux CDのいずれかを使用します)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.