mcpField
K
kernel-security

kernel-security

github.com/mohitmishra786安全269305 次安装18 周前更新
代码仓库

关于 kernel-security

面向安全工程师和内核开发者的 Linux 内核安全指导,涵盖访问控制、系统调用沙箱、硬件缓解措施、内存检测及 CVE 影响分析。

主要功能

  1. 01编写 SELinux 与 AppArmor 策略
  2. 02使用 seccomp-bpf 限制系统调用
  3. 03检查 KASLR 与硬件缓解措施
  4. 04启用 KASAN、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确认已加载。

详细介绍

内核安全

用途

指导 Agent 了解 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+;支持影子栈的 AMD Zen 3+ CPU)和内核 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 配置文件失效路径不匹配更新配置文件路径;使用通配符
seccomp 终止应用缺少系统调用使用 strace;添加 allow 规则
CET 未启用CPU/内核版本过旧检查 /proc/cpuinfo 标志
KASAN 内核运行缓慢开销为 2-5x仅在测试 VM 中使用
虚假的安全感LSM 可被内核漏洞绕过纵深防御;保持内核更新

相关技能

  • skills/virtualization/containers-internals — 容器 seccomp 和 caps
  • 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 — 漏洞利用分析

评论

支持 Markdown