ps出力では、プロセスは別の名前でどのように表示されますか?

ps出力では、プロセスは別の名前でどのように表示されますか?

最近ハッキングされたサーバーをクリーンアップする必要がありました。悪意のあるプロセスは、実行可能ファイルが/ proc / [pid] / statusに表示される文字の束であっても、「ps aux」出力に「who」または「ifconfig eth0」などのように見えます。

このプロセスがどのように自分自身を選ぶのか疑問に思います。

答え1

argv[] 変更は移植可能ではありません。 Linuxでは、より長い文字列を指すようにargv [0]を単純に変更することはできません。既存のパラメータを上書きし、後でアドレス空間の環境変数を上書きしないように注意する必要があります。

libbsd実装を提供しますプロセスタイトルの設定(3)Linuxの場合、これはより簡単になります。

答え2

これを行う2つのLinux標準方法があります。そのうちの1つはglibcによって提供され、Linux以外のシステムに移植可能です。

argv[0]過去に変更が適用された可能性がありますが、少なくとも現在のLinuxシステムでは機能しませんps

詳細とコード例については、次の回答をご覧ください。https://stackoverflow.com/a/55584492/737303

答え3

プロセスリストから名前を操作するのは一般的な慣行です。たとえば、私のプロセスには以下がリストされています。

root      9847  0.0  0.0  42216  1560 ?        Ss   Aug13   8:27 /usr/sbin/dovecot -c /etc/dovecot/d
root     20186  0.0  0.0  78880  2672 ?        S    Aug13   2:44  \_ dovecot-auth
dovecot  13371  0.0  0.0  39440  2208 ?        S    Oct09   0:00  \_ pop3-login
dovecot   9698  0.0  0.0  39452  2640 ?        S    Nov07   0:00  \_ imap-login
ericb     9026  0.0  0.0  48196  7496 ?        S    Nov11   0:00  \_ imap [ericb 192.168.170.186]

Dovecotはこのメカニズムを使用して、各プロセスが実行する操作を簡単に表示します。

デフォルトでは、Cargv[0]でパラメータを操作するのと同じくらい簡単です。argvパラメーターは、プロセスを開始するために使用されるパラメーターへのポインターの配列です。したがって、コマンドには次のものがls -l /some/directory含まれます。

argv[0] -> "ls"
argv[1] -> "-l"
argv[2] -> "/some/directory"
argv[3] -> null

いくつかのメモリを割り当て、そのメモリにいくつかのテキストを挿入し、そのメモリのアドレスをargv[0]表示されたプロセス名に入れると、新しいテキストに変更されます。

答え4

ハッカー/ルートキット/エクスプロイトは、/bin/bash、/bin/ps、/bin/lsなどのさまざまなシステムツールを、ハッキングされたスクリプトを非表示にするために出力を変更するハッキングされたバージョンのスクリプトにすぐに置き換えることがよくあります。実行可能ですが、それ以外は同じように動作します。

したがって、私は良いと言われている基本ユーティリティのコピーを参照できる物理サーバーで物理CDを使用することをお勧めします。これにより、違反が疑われる場合は安全であることが知られているこれらのツールの読み取り専用バージョンを参照できます。

関連情報