Unhideで隠れたLinuxプロセスを発見する方法:ルートキット対策でシステムセキュリティを強化
Unhideとは?隠れたプロセスとルートキットの脅威
GNU/Linuxは非常に安全性の高いオペレーティングシステムですが、その安心感がかえって油断につながることも少なくありません。「安全な環境だから何も起こらないはずだ」という思い込みは危険です。確かにLinux環境にはWindowsほど多くのマルウェアは存在しませんが、それでもシステムが完全に侵害される可能性はゼロではありません。システム管理者にとって、ルートキットなどの攻撃を想定した対策は重要な業務の一つです。
ルートキットとは、第三者が不正にコンピュータシステムへのアクセスを取得した後に使用するツール群のことです。このツールキットを使うことで、正規のユーザーに気づかれることなくファイルを改ざんすることが可能になります。unhideパッケージは、こうした不正なソフトウェアを素早く検出するための技術を提供します。
Unhideのインストール
Unhideは主要なLinuxディストリビューションのほとんどでリポジトリから入手できます。DebianやUbuntu系の場合、以下のコマンドでインストールできます。
sudo apt-get install unhide
GUI環境のあるサーバーではSynapticパッケージマネージャーを使ってもよいでしょう。FedoraやArch Linuxにも、それぞれのパッケージ管理システム向けにビルド済みのunhideが用意されています。インストールが完了すれば、システム管理者は複数の方法でunhideを活用できるようになります。
方法1:プロセスIDのブルートフォーススキャン
最も基本的な手法は、各プロセスIDを総当たり(ブルートフォース)でチェックし、ユーザーから隠されているプロセスがないか確認するものです。root権限を持っていない場合は、CLIプロンプトで次のコマンドを実行します。
sudo unhide brute -d
-dオプションを付けるとテストが二重化され、誤検知(false positive)の数を減らすことができます。
出力は非常にシンプルです。著作権表示の後に、実行されるチェック内容の説明が表示されます。まず次のような行が出力されます。
[*]Starting scanning using brute force against PIDS with fork()
続いて次の行も表示されます。
[*]Starting scanning using brute force against PIDS with pthread functions
これ以外の出力がなければ、問題はないと考えてよいでしょう。プログラムのbruteサブルーチンが何かを検出すると、次のような報告が表示されます。
Found HIDDEN PID: 0000
「0000」の部分には実際の数値が入ります。一時的なプロセス(transitory process)である旨だけが表示される場合は、誤検知の可能性があります。クリーンな結果が得られるまで何度かテストを実行してみてください。より詳細な情報が表示された場合は、追加の調査が必要かもしれません。ログが必要な場合は-fスイッチを使用すると、カレントディレクトリにログファイルが作成されます。新しいバージョンではファイル名はunhide-linux.logとなり、プレーンテキスト形式で出力されます。
方法2:/procと/bin/psの比較
別の方法として、/bin/psと/procのプロセスリストを比較させ、Unixファイルツリー上の2つの独立したリストが一致しているかを確認することもできます。不整合がある場合、プログラムは異常なPIDを報告します。Unixの規則では、実行中のプロセスはこれら両方のリストにID番号を提示しなければならないためです。テストを開始するには、次のコマンドを実行します。
sudo unhide proc -v
vオプションを付けると詳細(verbose)モードになります。
この方法では次のようなプロンプトが返されます。
[*]Searching for Hidden processes through /proc stat scanning
異常が検出された場合は、この行の後に表示されます。
方法3:ProcとProcfsの両技法の組み合わせ
必要に応じて、/bin/psと/procのUnixファイルツリーリストの比較に加え、/bin/psリストの全情報を仮想的なprocfsエントリとも照合することができます。これにより、Unixファイルツリーの規則とprocfsデータの両方がチェックされます。実行するには次のコマンドを入力します。
sudo unhide procall -v
このテストはすべての/proc統計情報をスキャンし、さらに複数のチェックを行うため、かなりの時間がかかることがあります。サーバー上のすべてが正常であることを徹底的に確認したい場合に最適な方法です。
方法4:procfsの結果と/bin/psの比較
前述のテストは多くの用途には複雑すぎるため、procファイルシステムのチェックを単独で実行すると手軽です。次のコマンドを実行します。
sudo unhide procfs -m
-mオプションを追加すると、さらにいくつかのチェックが実行されます。
このテストもやや時間がかかり、3つの独立した出力行が返されます。
なお、いずれのテストでも-fオプションを付けることで完全なログを作成できます。
方法5:クイックスキャンの実行
詳細なチェックは不要で、手軽にスキャンしたいだけであれば、次のコマンドを実行します。
sudo unhide quick
名前の通り短時間で完了します。この手法はprocリストとprocファイルシステムをスキャンするほか、/bin/psから収集した情報とシステムリソースへのコールから得られた情報を比較するチェックも実行します。出力は1行のみですが、残念ながら誤検知のリスクが高まります。事前に他の結果を確認済みの場合のダブルチェックとして利用すると便利です。
出力は次のようになります。
[*]Searching for Hidden processes through comparison of results of system calls, proc, dir and ps
このスキャンを実行すると、いくつかの一時的なプロセスが検出されることがあります。
方法6:リバーススキャンの実行
ルートキットを見つけ出す優れた手法として、すべてのpsスレッドの検証があります。CLIプロンプトでpsコマンドを実行すると、ターミナルから実行されたコマンドの一覧を確認できます。リバーススキャンでは、psが表示する各プロセッサスレッドが有効なシステムコールを持ち、procfsリストで参照できることを検証します。これは、ルートキットによって何かが強制終了されていないかを確認するのに最適な方法です。実行するには次のコマンドを入力します。
sudo unhide reverse
非常に高速に実行されます。実行時には、偽のプロセス(fake process)を探している旨が通知されます。
方法7:/bin/psとシステムコールの比較
最後に紹介する最も包括的なチェックは、/bin/psリストの全情報を、有効なシステムコールから取得した情報と比較するものです。開始するには次のコマンドを実行します。
sudo unhide sys
他のテストよりも実行に時間がかかる可能性が高いでしょう。多数の出力行が生成されるため、後で見返しやすいよう-fオプションでログをファイルに保存しておくことをおすすめします。
著者について

Kevin Arrows(ケビン・アローズ)
Kevin Arrowsは、10年以上の業界経験を持つ高度に熟練したテクノロジースペシャリストです。Microsoft認定テクノロジースペシャリスト(MCTS)の資格を保有し、最新の技術動向を追いかけることに深い情熱を注いでいます。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど幅広い技術分野について執筆しており、その専門性と知識は同業者から広く認められ、尊敬されています。複雑な技術的概念を明快かつ簡潔に説明する能力でも高い評価を得ています。
-
LinuxでRen'Pyビジュアルノベルを楽しむ方法:初心者向けステップバイステップガイド
ビジュアルノベルは、日本のアニメや漫画からインスピレーションを得た静止画を中心としたインタラクティブなゲームで、現在非常に人気のあるジャンルです。その名の通り、アニメベースのマルチメディア小説に近い形式を持っており、一般的に高性能なハードウェアを必要としない点も魅力です。RenPyビジュアルノベルエンジンは、その手軽さから絶大な人気を誇るソフトウェアで、Linuxも公式にサポートされています。さらに嬉しいことに、趣味で制作された多くのビジュアルノベルゲームは無料で公開されています。商用ゲームの中にも同じRenPyエンジンを採用している作品があり、その場合も本記事と同じ手順でインストール・起動が
-
WindowsからLinuxへの移行がぐっと簡単に!Android開発者向けディストロ「FWUL」徹底解説
Linuxを試してみたいWindowsユーザーの前に立ちはだかるハードルは少なくありません。中でも最大の壁は、物事への「Linux流」のアプローチに慣れることです。Ubuntuのような人気で使いやすいディストリビューションであっても、初心者はコマンドターミナル内で長い時間を過ごし、サポートフォーラムを読み漁り、画面に向かって悪態をつく羽目になりがちです。これは、Android開発に関心のある人にとって特に顕著です。「自分に合うかどうか軽くLinuxを試してみる」のと、「Android開発を目的としてLinuxへ本格的に移行する」のは、まったく別次元の話だからです。突然、Linuxターミナルは正