关于 kernel-security
面向安全工程师和内核开发者的 Linux 内核安全指导,涵盖访问控制、系统调用沙箱、硬件缓解措施、内存检测及 CVE 影响分析。
主要功能
- 01编写 SELinux 与 AppArmor 策略
- 02使用 seccomp-bpf 限制系统调用
- 03检查 KASLR 与硬件缓解措施
- 04启用 KASAN、KMSAN 等检测器
- 05分析内核 CVE 的影响范围
适用场景
- 01为服务配置强制访问控制
- 02为进程构建系统调用沙箱
- 03排查内核漏洞对发行版的影响
- 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 - 在
%pKprintk 中对指针进行哈希处理 - 限制非特权用户使用 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
分析清单:
- 受影响的子系统(net、fs、drivers)?
- 漏洞可在本地还是远程利用?
- 你的内核版本是否已修复?
- 是否有无需打补丁的缓解措施(禁用模块、sysctl)?
常见问题
| 症状 | 原因 | 解决方法 |
|---|---|---|
| SELinux 拒绝访问 | 缺少 allow 规则 | 使用 audit2allow;完善策略 |
| AppArmor 配置文件失效 | 路径不匹配 | 更新配置文件路径;使用通配符 |
| seccomp 终止应用 | 缺少系统调用 | 使用 strace;添加 allow 规则 |
| CET 未启用 | CPU/内核版本过旧 | 检查 /proc/cpuinfo 标志 |
| KASAN 内核运行缓慢 | 开销为 2-5x | 仅在测试 VM 中使用 |
| 虚假的安全感 | LSM 可被内核漏洞绕过 | 纵深防御;保持内核更新 |
相关技能
skills/virtualization/containers-internals— 容器 seccomp 和 capsskills/runtimes/binary-hardening— 用户空间 CET、RELRO、PIEskills/runtimes/sanitizers— 用户空间对应的 ASan/HWASanskills/observability/ebpf— LSM BPF 程序skills/kernel/kernel-debugging— 分析 KASAN 报告skills/security/reverse-engineering— 漏洞利用分析
评论
支持 Markdown