analyzing-linux-kernel-rootkits について
Linuxカーネルルートキットをメモリフォレンジック、クロスビュー分析、ライブスキャンで調べるセキュリティ分析スキルです。インシデント対応担当者やSOCアナリスト、脅威ハンター向けに、Volatility3とルートキットスキャナーを使う手順をまとめています。
主な機能
- 01Volatility3によるメモリダンプ分析
- 02システムコールフックと隠しモジュールの検査
- 03カーネルインターフェース間のクロスビュー分析
- 04rkhunterとchkrootkitによるライブスキャン
- 05構造化JSONレポートの作成
活用シーン
- 01Linuxカーネルルートキットの疑いがある事案の調査
- 02隠しモジュールやシステムコールフックの探索
- 03/proc、/sys、カーネルの各ビューの整合性確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill analyzing-linux-kernel-rootkitsインストール後、Claude Code で/analyzing-linux-kernel-rootkitsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
Linux カーネルルートキットの分析
概要
Linux カーネルルートキットはリング 0 で動作し、カーネルのデータ構造を変更して、プロセス、ファイル、ネットワーク接続、カーネルモジュールをユーザー空間のツールから隠します。検出には、メモリフォレンジック(Volatility3 を使って物理メモリダンプを分析する方法)またはクロスビュー分析(/proc、/sys、カーネルのデータ構造を比較して不整合を調べる方法)が必要です。このスキルでは、Volatility3 Linux プラグインを使ってシステムコールテーブルのフック、隠されたカーネルモジュール、変更された関数ポインターを検出する方法と、rkhunter および chkrootkit によるライブシステムスキャンについて説明します。
使用する場面
- Linux カーネルルートキットの分析が必要なセキュリティインシデントを調査する場合
- この分野の検出ルールや脅威ハンティングクエリを作成する場合
- SOC アナリストがこの種の分析に向けた体系的な手順を必要としている場合
- 関連する攻撃手法に対するセキュリティ監視の網羅性を検証する場合
前提条件
- Volatility3 がインストールされていること(pip install volatility3)
- Linux メモリダンプ(LiME、AVML、または /proc/kcore を使って取得)
- 対象カーネルのバージョンに一致する Volatility3 Linux シンボルテーブル(ISF)
- ライブシステムスキャン用の rkhunter と chkrootkit
- 比較用の既知の正常なカーネルイメージ
手順
ステップ 1: メモリダンプの取得
LiME カーネルモジュールまたは AVML を使って、クラウドインスタンスの物理メモリを取得します。
ステップ 2: Volatility3 による分析
linux.check_syscall、linux.lsmod、linux.hidden_modules、linux.check_idt プラグインを実行し、ルートキットの痕跡を検出します。
ステップ 3: クロスビュー分析
/proc/modules、lsmod、/sys/module のモジュールリストを比較し、あるビューでは隠されているものの別のビューには存在するモジュールを特定します。
ステップ 4: ライブシステムスキャン
rkhunter と chkrootkit を実行し、既知のルートキットシグネチャ、不審なファイル、変更されたシステムバイナリを検出します。
期待される出力
検出されたシステムコールフック、隠されたカーネルモジュール、変更された IDT エントリー、不審な /proc の不整合、rkhunter の検出結果を含む JSON レポート。
出力例
$ sudo python3 rootkit_analyzer.py --memory /evidence/linux-mem.lime --profile Ubuntu2204
Linux Kernel Rootkit Analysis Report
=====================================
Memory Image: /evidence/linux-mem.lime
Kernel Version: 5.15.0-91-generic (Ubuntu 22.04 LTS)
Analysis Time: 2024-01-18 09:15:32 UTC
[+] Scanning syscall table for hooks...
Syscall Table Base: 0xffffffff82200300
Total syscalls checked: 449
HOOKED SYSCALLS DETECTED:
┌─────────┬──────────────────┬──────────────────────┬──────────────────────┐
│ NR │ Syscall │ Expected Address │ Current Address │
├─────────┼──────────────────┼──────────────────────┼──────────────────────┤
│ 0 │ sys_read │ 0xffffffff8139a0e0 │ 0xffffffffc0a12000 │
│ 2 │ sys_open │ 0xffffffff8139b340 │ 0xffffffffc0a12180 │
│ 78 │ sys_getdents64 │ 0xffffffff813f5210 │ 0xffffffffc0a12300 │
│ 62 │ sys_kill │ 0xffffffff8110c4a0 │ 0xffffffffc0a12480 │
└─────────┴──────────────────┴──────────────────────┴──────────────────────┘
WARNING: 4 syscall hooks detected - rootkit behavior confirmed
[+] Checking for hidden kernel modules...
Loaded modules (lsmod): 147
Modules in kobject list: 149
HIDDEN MODULES:
- "netfilter_helper" at 0xffffffffc0a10000 (size: 12288)
- "kworker_sched" at 0xffffffffc0a14000 (size: 8192)
[+] Scanning /proc for discrepancies...
Processes in task_struct list: 234
Processes visible in /proc: 231
HIDDEN PROCESSES:
- PID 31337 cmd: "[kworker/0:3]" (disguised as kernel thread)
- PID 31442 cmd: "rsyslogd" (fake, real rsyslogd is PID 892)
- PID 31500 cmd: "" (unnamed process)
[+] Checking IDT entries...
IDT entries scanned: 256
Modified entries: 0 (clean)
[+] Running rkhunter scan...
Checking for known rootkits: 68 variants checked
Diamorphine rootkit: WARNING - signatures match
System binary checks:
/usr/bin/ps: MODIFIED (SHA-256 mismatch)
/usr/bin/netstat: MODIFIED (SHA-256 mismatch)
/usr/bin/ls: MODIFIED (SHA-256 mismatch)
/usr/sbin/ss: OK
[+] Network analysis...
Hidden connections (not in /proc/net/tcp):
ESTABLISHED 0.0.0.0:0 -> 198.51.100.47:4443 (PID 31337)
ESTABLISHED 0.0.0.0:0 -> 198.51.100.47:8080 (PID 31442)
Summary:
Rootkit Type: Loadable Kernel Module (LKM)
Probable Family: Diamorphine variant
Syscall Hooks: 4 (read, open, getdents64, kill)
Hidden Modules: 2
Hidden Processes: 3
Hidden Connections: 2 (C2: 198.51.100.47)
Modified Binaries: 3 (/usr/bin/ps, netstat, ls)
Risk Level: CRITICAL