mcpField
K
kernel-security

kernel-security

github.com/mohitmishra786セキュリティ269305 回インストール18 週間前に更新
リポジトリ

kernel-security について

セキュリティエンジニアやカーネル開発者向けのLinuxカーネルセキュリティガイドです。アクセス制御、システムコールのサンドボックス化、ハードウェア緩和策、メモリ検査、CVE影響分析を扱います。

主な機能

  1. 01SELinuxとAppArmorのポリシー作成
  2. 02seccomp-bpfによるシステムコール制限
  3. 03KASLRとハードウェア緩和策の確認
  4. 04KASANやKMSANなどの検査機能の有効化
  5. 05カーネルCVEの影響評価

活用シーン

  1. 01サービスの強制アクセス制御の設定
  2. 02プロセス用システムコールサンドボックスの構築
  3. 03ディストリビューションへのカーネル脆弱性の影響評価
  4. 04テストカーネルでのメモリエラー検出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill kernel-security

インストール後、Claude Code で/kernel-securityを入力して読み込まれたか確認します。

詳細

カーネルセキュリティ

目的

Linux カーネルセキュリティに関するエージェント向けガイドです。LSM フレームワーク(SELinux、AppArmor)、libseccomp を使った seccomp-bpf、KASLR とその回避策への対策、Intel CET(シャドウスタック+IBT)、ARM PAC と BTI、カーネルサニタイザー(KASAN、KMSAN)、カーネル脆弱性の CVE トリアージを扱います。

使用する場面

  • 制限対象サービス向けの SELinux または AppArmor ポリシーを作成する
  • seccomp-bpf フィルターでプロセスをサンドボックス化する
  • CET、PAC、または BTI でバイナリを強化する
  • 脆弱性調査用のカーネルビルドで KASAN を有効にする
  • 使用中のディストリビューション/カーネルバージョンに対するカーネル CVE の影響をトリアージする
  • コンテナーまたはマイクロサービスのセキュリティ境界を設計する

ワークフロー

1. LSM フレームワークの概要
Application syscall
    → DAC (uid/gid, file mode)
    → LSM hook (SELinux/AppArmor/Yama/...)
    → Capability check
    → seccomp filter
    → Kernel
# Active LSM
cat /sys/kernel/security/lsm
# common: lockdown,capability,yama,apparmor,safesetid
2. SELinux ポリシー
# Check SELinux status
getenforce
sestatus

# Context of file/process
ls -Z /usr/sbin/nginx
ps -eZ | grep nginx

# Audit denials
ausearch -m avc -ts recent
sealert -a /var/log/audit/audit.log

ポリシーモジュールの例:

# myapp.te
policy_module(myapp, 1.0.0)

type myapp_t;
type myapp_exec_t;
type myapp_log_t;

init_daemon_domain(myapp_t, myapp_exec_t)

allow myapp_t myapp_log_t:file { create write append open };
allow myapp_t self:tcp_socket { create bind listen accept };
checkmodule -M -m -o myapp.mod myapp.te
semodule_package -o myapp.pp -m myapp.mod
semodule -i myapp.pp
3. AppArmor プロファイル
# Generate complain-mode profile
aa-genprof /usr/bin/myapp

# Enforce
aa-enforce /etc/apparmor.d/usr.bin.myapp

# Check status
aa-status
# /etc/apparmor.d/usr.bin.myapp
#include <tunables/global>

/usr/bin/myapp {
  #include <abstractions/base>

  /usr/bin/myapp mr,
  /var/log/myapp.log w,
  /etc/myapp/config r,
  network bind tcp,
  deny /etc/shadow r,
}
4. libseccomp を使った seccomp-bpf
#include <seccomp.h>

int sandbox(void) {
    scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL_PROCESS);

    // Allow read/write/exit/mmap
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit_group), 0);
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap), 0);
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(brk), 0);

    // Return EPERM instead of kill for open
    seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(open), 0);
    seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(openat), 0);

    return seccomp_load(ctx);
}
# Export BPF filter for audit
scmp_filter_ctx ctx = ...;
seccomp_export_bpf(ctx, fd);

# strace to find needed syscalls before tightening
strace -c ./myapp
5. KASLR
# Check KASLR enabled
cat /proc/sys/kernel/randomize_va_space   # 2 = full
dmesg | grep KASLR

# Kernel cmdline
grep kaslr /proc/cmdline

KASLR 情報漏えいへの対策:

  • 信頼できないユーザーには /proc/<pid>/maps を公開しない
  • %pK printk でポインターをハッシュ化する
  • 非特権ユーザーによる eBPF の使用を制限する
6. Intel CET
# Compile with CET
gcc -fcf-protection=full -o app app.c

# Verify shadow stack and IBT
readelf -n app | grep -E 'SHSTK|IBT'
readelf --notes app | grep -A2 GNU_PROPERTY
機能防御対象
SHSTK(シャドウスタック)ROP によるリターンアドレスの上書き
IBT(間接分岐追跡)ENDBR 以外をターゲットとする CALL/JMP

CET 対応 CPU(Intel Tiger Lake 以降、シャドウスタックをサポートする CPU の AMD Zen 3 以降)と、CET 対応カーネルが必要です。

7. ARM PAC と BTI
# GCC/Clang branch protection
gcc -mbranch-protection=standard -o app app.c
# PAC (pointer authentication) + BTI (branch target identification)

# Verify
readelf -n app | grep -E 'GNU_PROPERTY_AARCH64_FEATURE_1'
llvm-objdump -d app | grep bti

PAC は暗号鍵を使ってリターンアドレスとポインターに署名します(ARMv8.3 以降)。 BTI は有効な分岐先をマークし、無効なジャンプが発生するとフォールトになります。

8. カーネルメモリーのタグ付け
# KASAN kernel build
# CONFIG_KASAN=y in kernel .config
make menuconfig  # Kernel hacking → KASAN

# Boot with KASAN kernel
# Reports use-after-free, OOB with stack trace

# KMSAN (uninitialized memory)
# CONFIG_KMSAN=y — kernel equivalent of MSan
# KASAN report example fields
# BUG: KASAN: slab-out-of-bounds in ...
# Call trace: ...
9. CVE トリアージのワークフロー
# Check kernel version
uname -r

# Distro security tracker
# Ubuntu: ubuntu-security-notices
# RHEL: errata

# NVD lookup
# https://nvd.nist.gov/vuln/detail/CVE-XXXX-XXXXX

# Is patch backported?
zgrep -l CVE-2024-XXXX /usr/share/doc/linux-*/changelog.Debian.gz

トリアージのチェックリスト:

  1. 影響を受けるサブシステムはどれですか(net、fs、drivers)?
  2. エクスプロイトはローカルですか、それともリモートですか?
  3. 使用中のカーネルバージョンで修正されていますか?
  4. パッチを適用せずにできる緩和策はありますか(モジュールの無効化、sysctl など)?

よくある問題

症状原因解決策
SELinux による拒否allow ルールが不足しているaudit2allow を使い、ポリシーを調整する
AppArmor プロファイルの不具合パスが一致しないプロファイルのパスを更新し、glob を使う
seccomp がアプリを終了させるシステムコールが不足しているstrace を使い、allow ルールを追加する
CET が有効にならないCPU/カーネルが古い/proc/cpuinfo のフラグを確認する
KASAN によるカーネルの低速化2~5 倍のオーバーヘッドテスト用 VM でのみ使用する
誤った安心感カーネルのバグを利用した LSM の回避多層防御を徹底し、カーネルを最新の状態に保つ

関連スキル

  • skills/virtualization/containers-internals — コンテナーの seccomp と capabilities
  • skills/runtimes/binary-hardening — ユーザー空間の CET、RELRO、PIE
  • skills/runtimes/sanitizers — ユーザー空間における ASan/HWASan の対応機能
  • skills/observability/ebpf — LSM BPF プログラム
  • skills/kernel/kernel-debugging — KASAN レポートの分析
  • skills/security/reverse-engineering — エクスプロイトの分析

コメント