
まったくの偶然ですが、コンピューターから離れているときに、あるプロセスが 1 つのコアを 100% 占有していることが時々あることを発見しました。CPU を使用しているときは 1% 未満ですが、コンピューターが IDL 状態、つまり画面がオフでしばらく誰も PC に触れていない状態になると、このプロセスが CPU を集中的に使用し始めることがあります。何らかの入力によって画面が起動するとすぐに、プロセスは再び「正常」になります。
どのプロセスが CPU を大量に消費しているかをログに記録するスクリプトを作成し、次のことがわかりましたkwin
(cmdline = kwin-session1011dcae5a5000144224709
.....)
画面がオフのときにウィンドウ マネージャーが CPU を 100% 使用してはいけないと聞いたので、コンピューターにクラックやハッキングがないか探しています。
私の質問は次のとおりです:
- このプロセスがクラック/ハッキングされているかどうかを確認するには、どのような手順に従う必要がありますか?
- この仮定は意味をなしていますか?
注: ほとんど/proc/xxx
フォルダーをコピーしたので、かなりの情報があります。
答え1
- このプロセスがクラック/ハッキングされているかどうかを確認するには、どのような手順に従う必要がありますか?
現在実行中のシステムで単一のプロセスが何を行っているかを確認する唯一の方法は、そのプロセスをデバッグするか、システム全体 (カーネル) をデバッグすることです。前者はかなり簡単で、いくつかのツールを使用すると、疑わしいプロセスでライブで実行できます。どのstrace
システム コールが実行されるか、ltrace
どの共有ライブラリ関数が呼び出されるかを確認したり、gdb
全体として現在実行されている命令を確認したりできます。後者の場合、そのプロセスをフリーズする (デフォルト モード) だけでなく、ソース コードを適切kwin
な場所に配置して、gdb がそれをロードし、停止した行を表示できるようにする必要があります。そうしないと、特別なコマンドを含むマシン命令のみが表示されます。
カーネルをデバッグするには、特別なセットアップが必要ですが、すでに実行中のシステムではおそらく不可能です (ブート時にそのようなセットアップが準備されていない場合)。これにより、ローカル (kgdb の kdb) またはリモート (kgdb と gdb) でシステム全体を停止し、メモリ、レジスタを検査し、コードを逆アセンブルするだけでなく、いくつかの有用な情報をダンプできます。ただし、これを効果的に解釈するには、少なくとも x86 asm の基本を知っておく必要があります。
カーネルは少なくとも擬似ファイル/proc/pid/memを提供するが、これは通常モードでは読み取れないが、https://github.com/siblynx/lynxware/blob/master/dumpmem.cは、/proc/pid/maps で提供されるマッピングに基づいてこのスパース ファイルを読み取るラッパーです。その後、逆アセンブラを使用してダンプされたファイルを検査できます。プロセスの状態を気にしない場合は、を使用してコア ダンプを強制できますkill -SEGV pid
が、起動時にコア ファイルのダンプが許可されていない場合 ( ulimit -c size
)、コア ダンプは実行されずに終了し、取得したい情報の一部が失われます。
同じタスクを目的としたより特殊なフォレンジック ツールもありますが、通常は経験豊富なユーザーを対象としています。
- この仮定は意味をなしていますか?
そうは思いません。私の fvwm がそのような動作を始めたら、あるいは twm (慣れていれば) がそのような動作を始めたらと少し心配していましたが、kwin (および一般的な KDE) に関しては、今日の KDE は巨大であり、そのような動作は KDE にとって「普通」なので、そのような動作を予想していました。
たとえば、fvwm でこのような動作をした場合、まずプロセスの /proc/pid/exe が正しいバイナリを指しているかどうかを確認し、次に でそのバイナリの作成時間をチェックしstat -c %z /path/to/binary
、それが正当であれば strace を実行し、そうでない場合は常に準備されている kdb に急いで送信してシステムをフリーズさせます。「無駄な」アクティビティのほとんどは、プログラムのバグまたはソフトウェアの肥大化です。
- 注: ほとんど
/proc/xxx
フォルダーをコピーしたので、かなりの情報があります。
mem
/proc ファイルは完全に仮想的なものであり、それらの重要なファイル (疑似ファイルなど) は通常の方法で要求された場合には読み取ることができないため、これは意味がありません。