私の同僚がしばらく前に、私は企業セキュリティサーバーの根本原因分析を実行するように指示しました。私たちは、問題がrootとして実行されているプロセスの1つにあることを知っていますが、どのプロセスかはわかりません。
私はまず次のコマンドを実行して研究を始めました。
ps -aux | grep -v grep | grep root
これにより、数十のプロセスのリストが返されます。その後、同僚は次のコマンドを使用して検索を具体化するのに役立ちました。
ps -aux | grep -v grep | grep root | grep -Ev '[[]'| grep -v tty
この新しいコマンドは、返されるプロセスのリストを大幅に削減し、問題をすばやく見つけました。コマンドの最後の2つの部分がフィルタリングされます。
1) [ksoftirqd/0] のように [ ] で囲まれたプロセス 2) テレタイプ端末を介して実行されるプロセス
ps(1)は、見つからない引数を持つプロセスが角かっこ内に配置され(どういう意味かはわかりません)、ttyが現代のbash端末の前兆にすぎないことを伝えます。しかし、私はまだその重要性(またはマイナーであると言わなければならない)と、より「生産的な」ルートプロセスからそれらを削除できる理由を理解していません。
誰かがここで何かを明確にすることができますか?
ありがとう
答え1
「見つからないパラメータ」は通常、持つ通常のユーザープロセスではなくカーネルによって直接起動されるプロセスであるため、コマンドラインパラメータはありません。エラーが発生したプロセスを探している場合は、通常これらのカーネルプロセスの1つではないため、同僚はそれをフィルタリングすることを提案しました。
背骨はいいえ「現代のバッシュターミナルのパイオニアだけです」 bashやshellとは全く関係がなく、どんなものの全身でもありません。リストされているttyはps
プロセスの制御端末です(存在する場合)。 ttyを制御するプロセスは、対話型セッションの一部として一部のユーザーによって開始された可能性が高くなります(ローカルコンソール、ローカルシリアルポート、SSHセッション、画面などで開始されたセッションに関係なく)。重要ではありません。端末です。 ttyを制御しないプロセスは通常デーモンとシステムサービスです。同僚は、デーモンやシステムサービスで問題が発生する可能性が高いと提案しています。
コマンドラインの残りの部分は次のとおりです。
ps -aux | grep root
どのOSを使用しているかはわかりませんが、-styleパラメータを持つps
バージョンはaux
通常BSDレガシーです。私はBSDに精通していませんが、すべてのps
プロセスを一覧表示し、ルートが所有していないすべてのプロセスをフィルタリングするのではなく、特定のユーザーに属するプロセスだけを一覧表示するオプションがあると思います。たとえば、Linuxを使用している場合は、次のようになります。
ps -fu root
答え2
正直言って、ちょっと愚かなようです。
grep -Ev "[[]"
コマンドで開く括弧付きのプロセスを除外します。これは通常カーネルプロセスですが、通常のユーザースペースプログラムでもコマンドラインにこの文字を表示できます。
grep -Ev "tty"
水色も同じだ。出力行のどこかに「tty」文字列があるプロセスは除外されますps
。これにはターミナルデバイスを開くプロセス(擬似ターミナル(!)を開くプロセスではありません)が含まれるため、出力をデーモン操作に制限するように聞こえます。
ps
ただし、上記のように、次のように出力に表示されるプロセスも除外されます。
pid ? R+ 310:03 /home/pwned_user/bin/rootkit_tty[_rofl crack root-password
つまり、何でも発見すれば幸運ですが、すべてを見つけたと確信することはできません。あなたの質問に最初に「Enterprise Security Server」があることを考慮すると、このサーバーは別のレベルに上がります(必要に応じて下に移動します)。
答え3
一般的に言って、あなたはそれをしたくありませんps aux | grep -v grep
。それが目的ですpgrep
:
pgrep -u root
上記のコマンドは、によって開始されたすべてのプロセスを一覧表示しますroot
。ps
1)名前が含まれているユーザーを除く2)ttysにリストされていない実行中のユーザーを制限するには、[]
そうする必要があります。grep -v
一致する行を削除する代わりに、各文字列が一致しないように正確な場所を指定することで、他の回答で説明されている問題の一部を回避できます。どこかに):
ps aux | awk '$1=="root" && $7 !~/^tty[0-9]$/ && $NF!~/^\[.*\]$/'
---------- ---------------- ---------------
| | |
| | |-> If the last field
| | is within [ ]
| |---------------> If the 7th field starts
| with tty and ends in a digit
|----------------------------> If the 1st field is 'root'