最近ハッキングされたサーバーをクリーンアップする必要がありました。悪意のあるプロセスは、実行可能ファイルが/ proc / [pid] / statusに表示される文字の束であっても、「ps aux」出力に「who」または「ifconfig eth0」などのように見えます。
このプロセスがどのように自分自身を選ぶのか疑問に思います。
答え1
argv[] 変更は移植可能ではありません。 Linuxでは、より長い文字列を指すようにargv [0]を単純に変更することはできません。既存のパラメータを上書きし、後でアドレス空間の環境変数を上書きしないように注意する必要があります。
libbsd実装を提供しますプロセスタイトルの設定(3)Linuxの場合、これはより簡単になります。
答え2
これを行う2つのLinux標準方法があります。そのうちの1つはglibcによって提供され、Linux以外のシステムに移植可能です。
- glibc
pthread_setname_np()
もっと良い方法かもしれません。 - Linux
prctl()
また利用できます
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を使用することをお勧めします。これにより、違反が疑われる場合は安全であることが知られているこれらのツールの読み取り専用バージョンを参照できます。