ルートキットとは、悪意のあるソフトウェアツールの集合体であり、攻撃者にエンドポイントへの管理者レベルのアクセス権限を提供します。さらに、ほとんどのルートキットは自身を隠蔽するよう設計されているため、検出が困難です。
ルートキットという名称は、感染したシステム上で攻撃者があたかもrootユーザーであるかのように動作することを可能にするソフトウェア「キット」であることに由来します。Linuxやその他のUnix系オペレーティングシステムにおいて、rootは完全なアクセス権を持つアカウントの名称です。(明確に申し上げますと、ルートキットはLinuxのみにリスクをもたらすものではなく、Windows、macOS、そしてシステム上の管理者またはスーパーユーザーレベルのアカウントがrootと呼ばれていなくても、事実上あらゆる種類のオペレーティングシステムに影響を及ぼす可能性があります。)
ルートキットの概要、その動作原理、種類、そしてルートキット攻撃を防ぐ方法についてのガイドを、引き続きご覧ください。
ルートキットはどのように機能するのか?
以下で説明するルートキットの手法に関するセクションで詳述しますが、攻撃者がシステムにルートキットをインストールする方法は様々であり、ルートキットはシステムの複数の異なる部分で動作する可能性があります。
しかしながら、全てのルートキットは基本的に同じ仕組みで動作し、以下のプロセスを経ます:
- 攻撃者は(例えばソフトウェアの脆弱性を悪用するなどして)システムへのアクセス権を取得し、マルウェアをインストールします。
- マルウェアは標準的なアクセス制御を回避し、攻撃者にrootユーザーまたは管理者ユーザーと同等の権限を行使する能力を与えます。
- ルートキットソフトウェアは、バイナリやプロセスを改変して悪意のあるものに見えないようにすることで、自身の存在を隠蔽します。
このプロセスが完了すると、攻撃者はエンドポイントを利用して不正なソフトウェア(例:暗号通貨マイナー)を実行したり、機密情報を収集したりすることが可能となります。
ルートキットとトロイの木馬およびバックドアの比較
ルートキットはマルウェアの一種ですが、トロイの木馬やバックドアに関連するマルウェアなど、ルートキットとは異なる種類のマルウェアも存在します。
ルートキットとトロイの木馬は異なります。トロイの木馬とは、攻撃者にシステムの一部へのアクセス権を与えるあらゆる種類のソフトウェアを指します。多くの場合、トロイの木馬が攻撃者に提供するアクセス権限は限定的です。例えば、機密データの閲覧は可能でも、管理者ユーザーとしてコマンドを実行することはできません。これに対し、ルートキットは完全な管理者レベルのアクセス権限を提供します。
同様に、ルートキットはバックドアとも異なります。バックドアとは、システムへの不正アクセスを可能にするあらゆるマルウェアを指し、必ずしもルートキットが提供する管理者レベルのアクセス権限を意味するわけではありません。
なお、トロイの木馬とバックドアという用語には曖昧さが伴う点に留意が必要です。これらは広範なマルウェアの種類や攻撃手法を指し得る総称です。議論の余地はあるものの、ルートキットはトロイの木馬の一種であると同時にバックドアの一種とも説明できますが、トロイの木馬やバックドアには他にも多くの種類が存在します。
ルートキットの手法
ルートキットは、その動作方法に基づいて分類することができます。
カーネルモード・ルートキット
カーネルレベル・ルートキットは、いわゆるカーネル空間で動作します。つまり、カーネルによって直接制御されるプログラムとして実行され、カーネルプロセスと同等のオペレーティングシステムへのアクセス権限を有します。カーネルはオペレーティングシステム内部で他のすべての操作を制御する中核プログラムであるため、カーネルモードで動作することは、ルートキットがシステム上のあらゆるリソースに容易にアクセスできることを意味します。
ユーザーモードルートキット
ユーザーモードルートキットは、ユーザースペースまたはユーザーランドと呼ばれる領域で動作します。これは標準アプリケーションがホストされるオペレーティングシステムの領域と同じです。カーネルレベルからシステムを制御する代わりに、ユーザーモードルートキットは通常、オペレーティングシステムの他の種類の脆弱性(アクセス制御システム内の弱点など)を悪用します。これにより、実際にはカーネルレベルの特権で実行されていなくても、管理者レベルのアクセス権を取得することが可能となります。
ブートキット
ブートキットとは、エンドポイントのブートレコードにインストールされるルートキットです。システムが起動する際にロードされるため、各システムセッションの開始直後から、システムのあらゆる側面を制御することが可能となります。
攻撃者にとってこの手法の利点は、起動時にルートキットをロードすることで隠蔽が容易になる点です。ルートキット検出用ソフトウェアはシステムが完全に起動するまで動作しない場合があるため、それ以前にロードされたブートキットを検知できません。またブートキットは通常、標準的なファイルシステムパーティションではなくブートレコードに潜伏するため、場合によっては検出がさらに困難になります。
ハイパーバイザーベースのルートキット
ハイパーバイザーベースのルートキットは、仮想マシンの起動と管理を行うソフトウェアであるハイパーバイザー内で動作します。ルートキットはハイパーバイザーから、仮想マシン内部の操作を制御し、リソースにアクセスすることが可能です。
この種のルートキットは仮想マシンでのみ機能し、物理サーバーでは動作しません。しかし、今日の多くのワークロードが仮想化されているため、ハイパーバイザーベースのルートキットは重大なリスクとなっています。
ルートキット攻撃の防止と軽減
ルートキットがシステムに感染すると、即座に被害をもたらし始め、重大な損害が発生するまで検出が困難な場合があります。そのため、攻撃者がルートキットをインストールするのを未然に防ぐこと、および万一インストールされた場合にその影響を軽減する対策を講じることが重要です。
ルートキット防止に向けた最も重要な対策は、ソフトウェアを最新の状態に保ち、脆弱性スキャンを実施することです。攻撃者はルートキットをインストールするために、オペレーティングシステムやアプリケーションの脆弱性を悪用することが多いため、システムを脆弱性から守ることで、ほとんどのルートキット攻撃を防止できます。
不要なネットワークポートをブロックすることも、攻撃者がネットワーク経由で脆弱性を見つけ出し悪用するのを困難にすることで、ルートキット防止に役立ちます。同様に、ユーザーアカウントの設定時には最小権限の原則に従うことも有効です。攻撃者は制御下にあるユーザーアカウントの過剰な権限を利用してルートキットソフトウェアをインストールする可能性があるためです。
ルートキットの影響軽減策としては、リソースを相互に分離する手法が有効です。これにより、攻撃者がシステムを掌握した場合にアクセス可能なリソースの範囲を最小限に抑えられます。ネットワークレベルでの分離を徹底することで、あるエンドポイントに対するルートキット攻撃が他のエンドポイントに拡散するリスクを低減できます。さらに、物理サーバーを仮想マシンに分割し、各仮想マシンを異なるワークロードに割り当てることで、ワークロードの分離を実現し、ある仮想マシンにインストールされたルートキットが他の仮想マシン上のワークロードに影響を与えるリスクを軽減できます(ただし、ハイパーバイザーベースのルートキットは、このシナリオ下でもすべての仮想マシンに感染する可能性があります)。
ルートキットの検知と対応
ルートキットのインストールを防止し、その攻撃範囲を軽減するための対策を講じることに加え、組織は自社のシステムに潜んでいる可能性のあるルートキットを積極的に探知するよう努めるべきです。ルートキットは検知を回避するよう設計されていますが、以下の手法により特定が可能です:
- ファイル整合性監視:ファイルの変更は、特に通常変更されないバイナリ(低レベルOSプログラムやブートレコードデータを実行するファイルなど)に関わる場合、ルートキット攻撃の兆候となる可能性があります。ファイルを継続的に監視し、異常な変更を検知することで、ルートキット攻撃を発見できる場合があります。
- プロセス監視:予期せぬプロセスの分岐や名前変更など、異常なプロセス活動もルートキット攻撃の兆候となり得ます。
- パフォーマンスの変化:場合によっては、ルートキットがシステムのパフォーマンス変化(起動時間の延長や応答速度の低下など)を引き起こすことがあります。こうした変化を他の要因に帰せられない場合、ルートキットの存在が疑われます。
- メモリ検査:システムメモリに保存されたデータを分析することで、特にルートキットの活動に関連する方法でデータを保存している場合、一部のルートキットを発見できる可能性があります。
Sysdig Inspectのようなツールは、セキュリティリスクや異常な変更をシステム内でスキャンするオープンソースソリューションであり、ルートキットを含む様々なリスクの検出プロセスを自動化するのに役立ちます。
ルートキットの除去と復旧
ルートキットを検知したら、すぐに除去すべきです。ルートキットの全コンポーネントを検知するのは困難な場合があるため、最善の除去方法は感染したシステムを完全に消去し、一から再構築するか(バックアップがある場合は)、ルートキットが存在しないと判断できる以前の状態に復元することです。ただし、場合によっては、動作に使用するバイナリファイルを単純に削除するだけで除去できる可能性もあります。ただし、それらのバイナリファイルの所在について高い確信がある場合に限ります。
もちろん、そもそもルートキットがどのようにインストールされたのかを把握し、ルートキット攻撃を可能にした脆弱性に対処することも重要です。そうしなければ、除去後に攻撃者が再びルートキットをインストールする可能性があります。
最後に、過去に感染したシステム上のファイル、ユーザーアカウント、アプリケーション、その他のリソースを分析し、ルートキットによる変更がないか確認してください。例えば、データが削除または改変されていないこと、また攻撃者がルートキットを利用して、ルートキット自体の一部ではない他のマルウェアをインストールしておらず、ルートキット除去後もシステムに残存していないことを確認する必要があります。
結論
攻撃者に広範なアクセス権を提供するルートキットは、現代のシステムにおいて発生し得る最も危険な攻撃手法の一つです。攻撃者がルートキットソフトウェアを展開・隠蔽する新たな方法を考案するにつれ、その手法も絶えず進化しています。
幸いなことに、システムおよびその上で動作するソフトウェアに脆弱性がないことを確実にすることで、ルートキットに対する強力な防御を構築することが可能です。セグメンテーションなどの技術もルートキット攻撃のリスクを軽減でき、包括的なシステムスキャンにより多くの種類のルートキットを検出できるため、侵害が発生した後の被害を封じ込めることが可能です。
