auditd无法直接审计扇区级I/O,因其仅监控系统调用(如open/read/write),不解析内核块层的LBA信息;需结合blktrace、eBPF或udev等工具实现细粒度追踪。

auditd 本身不直接记录物理磁盘扇区级(sector-level)的 I/O 访问,它工作在内核系统调用层,监控的是 文件路径、设备节点、系统调用(如 read/write/execve)等抽象行为,而非底层块设备(如 /dev/sda)的扇区读写。真正的扇区级访问通常绕过文件系统,走 raw I/O 或直接操作 block device,auditd 默认无法捕获这类细粒度硬件行为。
为什么 auditd 难以直接审计扇区访问
auditd 的规则基于系统调用(syscall)拦截,例如 open()、read()、pwrite64() 等。当程序通过 /dev/sda 这类块设备文件进行原始读写时,auditd 可以监控对该设备文件的 open 和 write 操作;但它无法解析或记录具体读写了哪些 LBA(逻辑块地址)扇区——这些信息不出现在 syscall 参数中,而是由内核块层(block layer)处理。
- 执行 dd if=/dev/sda of=/tmp/dump bs=512 count=100 是能被 auditd 捕获的(因为涉及 open("/dev/sda") 和 write()),但日志里只有“对 /dev/sda 执行了写”,没有“写入了扇区 1024–1123”
- 使用 ioctl() 直接向块设备发 BLKSSZGET、BLKGETSIZE64 等命令,auditd 可记录 ioctl 调用,但同样不包含扇区号
- 内核模块、DMA 攻击、固件级工具(如某些恶意 SSD 固件)完全绕过 syscall 接口,auditd 无感知
可行的监控与排查组合策略
虽然不能直接记录扇区号,但可通过多层关联缩小可疑行为范围,辅助识别异常磁盘扫描或窃取行为:
-
监控对原始块设备文件的访问:添加规则捕获所有对 /dev/sd*、/dev/nvme*、/dev/loop* 等设备节点的 open+read/write 操作
-w /dev/sda -p rw -k disk_raw_access
-w /dev/nvme0n1 -p rw -k nvme_raw_access -
跟踪高风险系统调用链:监控 execve + open + read/write 组合,尤其是非标准路径、root 权限下执行的二进制
-a always,exit -F arch=b64 -S execve,openat,read,write -F uid=0 -k privileged_disk_io - 结合内核日志和块层追踪:启用 kernel block trace(需 CONFIG_BLK_DEV_IO_TRACE=y)并用 blktrace/btt 分析 I/O 模式;或使用 perf record -e block:block_rq_issue 收集请求级事件(含 sector 字段)
- 检查进程内存与参数:当发现可疑 dd、ddrescue、sg_dd、hexdump -C /dev/sda 类进程时,用 ausearch -m execve -i | grep sda 定位启动命令,并用 /proc/PID/cmdline 和 /proc/PID/environ 还原完整上下文
日志分析中的关键线索
在 /var/log/audit/audit.log 中,重点筛查以下特征:
- 高频短读模式:同一进程在短时间内对 /dev/sda 发起大量小 size(如 512/4096 字节)read 调用,可能是在逐扇区扫描
- 非交互式 root 进程:auid=4294967295(unset)或 auid=0 + tty=(none) + comm="dd" 表示后台静默执行
- 异常文件输出目标:ausearch -k disk_raw_access --start recent | grep "exe.*dd" 后,再查该进程是否 write 到临时目录、加密文件或网络 socket
- 时间戳密集性:用 aureport -ts today -i --key disk_raw_access 查看单位时间内触发次数突增
补充建议:增强检测能力
单靠 auditd 不足以覆盖扇区级窃取,需叠加其他机制:
- 部署 eBPF 工具(如 bcc 工具集中的 biosnoop、biotop)实时捕获块设备 I/O 请求,含精确 sector、rwbs、comm 字段
- 配置 udev 规则对 /dev/sd* 设备变更生成日志,识别未授权设备挂载
- 定期校验 /dev 下块设备文件的 inode、mtime、权限变化,防止恶意替换为伪造设备节点
- 对敏感主机禁用 raw device 访问:在 /etc/security/limits.conf 中限制 memlock,或通过 SELinux/AppArmor 策略禁止非白名单进程 open /dev/sd*


















