klogctl検知回避機能を備えたSingularity Linuxカーネルルートキット

最新の6.xカーネルを標的とするステルス重視のLinuxカーネルモジュール(LKM)ルートキット「Singularity」は、従来のカーネルログインターフェース(klogctlなど)を通じた検知を防ぐ強力なログ回避機能を追加しました。

防御側にとっての「ラスボス」ルートキットとして設計されたSingularityは、侵害されたシステム上で不可視のまま居続けるために、深いカーネルフック、高度なログ無害化、EDR回避技術を備えていると述べています

6.8.0-79-genericや6.12といったカーネルを実行する現代的なディストリビューション向けに開発されており、ftraceベースのシステムコール/関数フックを用いて、完全にカーネル空間で動作します。

いったんロードされると、このモジュールは自身を隠蔽し、再起動なしにはアンロードできず、一般的なインシデント対応や検知のワークフローを強力に無力化します。

作者のキャッチフレーズ「フォレンジックに少し仕事を与えようか?」は、このプロジェクトの明確な目的――LinuxにおけるDFIRと脅威ハンティングのハードルを引き上げること――を反映しています。

最新の強化点は、klogctlおよび/proc/kmsgに依存するカーネルログ検査ツールによる検知を防ぐことに焦点を当てています。

Singularityは、/proc/kmsg/var/log/kern.logsyslogauth.log/proc/kallsyms/proc/vmallocinfo、および/sys/kernel/debug/tracing/*のようなカーネルトレーシングパスを含む複数のログソースから、機微な文字列や指標をリアルタイムでフィルタリングします。

「singularity」「Singularity」「matheuz」「zer0t」「obliviate」「kallsyms_lookup_name」「taint」といったルートキット関連の識別子への参照は、ユーザー空間に到達する前に削除されます。これにより、dmesgjournalctl、あるいはklogctl上に構築されたツールに依存して悪意あるカーネル活動を見つけようとするアナリストは、事実上目隠しされた状態になります。

Singularity Linuxカーネルルートキット

このログ無害化は、Singularityが持つより広範なステルス機能群の一要素にすぎません。このルートキットは、/procpstophtopなどの監視ツールからプロセスを完全に隠蔽することをサポートし、sched_process_forkトレースポイントを介して子プロセスを自動的に追跡・隠蔽します。

また、設定可能なパターンに基づいてファイルやディレクトリを隠し、隠されたパスへのchdirをブロックし、ssnetstatlsof、および/proc/net/*からTCP UDP接続とポートを隠蔽します。

選択したポートのネットワークトラフィックはRAWソケット層でフィルタリングされ、ICMPトリガーのリバースシェルにより、完全に隠されたリモートrootセッションが提供されます。mkdir singularity
echo “secret” > singularity/data.txt.

Image
ファイル&ディレクトリを隠す。

権限昇格も組み込まれています。攻撃者は、特別な環境変数を設定する(例:MAGIC=mtzでシェルを起動する)か、特定のシグナル(例:kill -59 $$)を送ることでrootを取得できます。どちらも呼び出し元をUID 0へ昇格させ、設定によってはプロセスを隠蔽します。

これらの仕組みはカスタマイズ可能で、オペレーターは「マジック」ワード、ICMPシーケンス、隠しポート、パターン、プロセス名、スレッド名を変更し、シグネチャベースの検知や脅威インテリジェンスのフィンガープリントを回避できます。

現代のテレメトリおよびEDRツールに対抗するため、Singularityは可観測性の仕組みに対して積極的に干渉します。

Image
ICMPリバースシェル。

eBPF関連のシステムコールをインターセプトしてブロックし、トレーシング、kprobe、LSMプログラムのロードを防止するとともに、BPF_PROG_LOADBPF_ITER_CREATEBPF_PROG_GET_NEXT_IDBPF_RAW_TRACEPOINT_OPENといった操作を妨害します。

また、トレーシングを無効化したりftrace_enabledを変更したりする試みを透過的にブロックしてftrace制御を保護し、これらの保護を回避しようとするio_uringベースの試みに対する特別な処理も含まれています。

Tracee、bpftrace、bpftool、そしてio_uringベースのモニターといったセキュリティツールが明確に標的とされています。

実際には、これによりSingularityは、unhidechkrootkitrkhunter、プロセス/ファイルシステム監視、tcpdumpやWiresharkのようなパケットアナライザ、モジュール検査ツール(lsmod/proc/modules/sys/module)、および公開ケーススタディで文書化されたいくつかのLinux EDRソリューションを含む、従来型および最新の幅広い検知ツール群を回避できるようになります。

緩和策

公開されている例の1つでは、プロセス隠蔽、ログ無害化、テレメトリ妨害を組み合わせることで、SingularityがElasticのEDR機能を回避できることが示されています。

その深さにもかかわらず、作者はSingularityが完全に検知不能というわけではないと述べ、条件次第では執念深いフォレンジックアナリストが痕跡を見つけられる可能性を示唆しています。

それでも、klogctlおよび関連ログチャネルを通じた可視性を遮断し、監査ログやカーネルメッセージを積極的にフィルタリングし、一般的な可観測性の経路を無効化することで、このルートキットは検知の取り組みを大幅に困難にします。

防御側にとってSingularityは、Linuxのカーネルレベル脅威が急速に進化しており、ユーザー空間ログや標準ツール、あるいは保護されていないeBPF/ftraceベースの検知だけに依存するのはもはや不十分である、という厳しい現実を突きつける存在です。

翻訳元: https://gbhackers.com/singularity-linux-kernel/

ソース: gbhackers.com