Linux 中的审计与系统调用(audit、syscall)

Linux审计与系统调用


介绍

Linux Audit 是 Linux 内核中的一个子系统,用于记录系统调用和文件访问等事件。通过 Audit,系统管理员可以监控系统中的安全相关事件,如文件访问、用户登录、权限更改等。Audit 提供了强大的日志记录功能,帮助管理员进行安全审计和故障排查。定期分析 Audit 日志可以帮助你及时发现潜在的安全问题,确保系统的安全性。


安装 Audit

在 CentOS 中,Audit 可以通过 yum 包管理器安装。

  1. 更新系统包:

    yum update -y
    
  2. 安装 Audit:

    yum install audit -y
    
  3. 验证安装:

    auditctl -v
    

    如果安装成功,会显示 Audit 的版本信息。


Audit 配置文件

Audit 的主要配置文件位于 /etc/audit/auditd.conf,用于配置 Audit 守护进程的行为。

配置文件示例

# 日志文件路径
log_file = /var/log/audit/audit.log

# 日志文件格式
log_format = RAW

# 日志文件大小(MB)
max_log_file = 50

# 保留的日志文件数量
num_logs = 5

# 日志文件权限
log_group = root

配置选项说明

  • log_file:指定日志文件的路径。
  • log_format:日志文件格式,可以是 RAWNOLOG
  • max_log_file:单个日志文件的最大大小(MB)。
  • num_logs:保留的日志文件数量。
  • log_group:日志文件的所属组。

Audit 相关命令

Audit 提供了多个命令用于配置和管理审计规则。

auditctl

用于配置和管理审计规则。

常用选项
  • -a:添加规则。
  • -d:删除规则。
  • -l:列出当前规则。
  • -s:显示审计系统状态。
  • -w:监控文件或目录。
选项详细解释
  1. -a:添加规则

    • 语法:auditctl -a <action>,<filter>
    • 参数:
      • <action>:规则的动作,可以是 alwaysnever
        • always:总是记录匹配的事件。
        • never:从不记录匹配的事件。
      • <filter>:规则的过滤器,可以是 taskexituserexclude
        • task:记录任务创建事件。
        • exit:记录系统调用退出事件。
        • user:记录用户空间事件。
        • exclude:排除特定事件。

    示例:

    auditctl -a always,exit
    

    解释:添加一条规则,总是记录系统调用退出事件。

  2. -d:删除规则

    • 语法:auditctl -d <action>,<filter>
    • 参数:与 -a 相同。

    示例:

    auditctl -d always,exit
    

    解释:删除一条规则,停止记录系统调用退出事件。

  3. -l:列出当前规则

    • 语法:auditctl -l
    • 参数:无。

    示例:

    auditctl -l
    

    解释:列出当前所有审计规则。

  4. -s:显示审计系统状态

    • 语法:auditctl -s
    • 参数:无。

    示例:

    auditctl -s
    

    解释:显示审计系统的当前状态,包括启用状态、日志文件信息等。

  5. -w:监控文件或目录

    • 语法:auditctl -w <path> -p <permissions> -k <key>
    • 参数:
      • <path>:要监控的文件或目录路径。
      • <permissions>:监控的操作类型,可以是 r(读)、w(写)、x(执行)、a(属性更改)的组合。
      • <key>:规则的键值,用于标识规则。

    示例:

    auditctl -w /etc/passwd -p rw -k passwd_access
    

    解释:监控 /etc/passwd 文件的读写操作,并使用键值 passwd_access 标识该规则。

  6. -F:指定过滤条件

    • 语法:auditctl -a <action>,<filter> -F <field>=<value>
    • 参数:
      • <field>:过滤字段,如 arch(系统架构)、uid(用户 ID)、gid(组 ID)等。
      • <value>:过滤字段的值。

    示例:

    auditctl -a always,exit -F arch=b64 -S open -k file_open
    

    解释:添加一条规则,总是记录 64 位系统架构下的 open 系统调用,并使用键值 file_open 标识该规则。

  7. -S:指定系统调用

    • 语法:auditctl -a <action>,<filter> -S <syscall>
    • 参数:
      • <syscall>:系统调用名称,如 openreadwrite 等。

    示例:

    auditctl -a always,exit -S open -k file_open
    

    解释:添加一条规则,总是记录 open 系统调用,并使用键值 file_open 标识该规则。

  8. -k:指定规则的键值

    • 语法:auditctl -a <action>,<filter> -k <key>
    • 参数:
      • <key>:规则的键值,用于标识规则。

    示例:

    auditctl -a always,exit -S open -k file_open
    

    解释:添加一条规则,总是记录 open 系统调用,并使用键值 file_open 标识该规则。


系统调用分类

在 Linux 系统中,系统调用(System Call)是用户空间程序与内核交互的接口。通过监控系统调用,可以深入了解程序的行为,包括文件操作、进程管理、网络通信等。Audit 系统支持监控多种系统调用,以下是一些常见的分类:

文件操作相关系统调用

这些系统调用用于文件的创建、读取、写入、删除等操作。

常见系统调用
  • open:打开文件。
  • read:读取文件内容。
  • write:写入文件内容。
  • close:关闭文件。
  • unlink:删除文件。
  • rename:重命名文件。
  • mkdir:创建目录。
  • rmdir:删除目录。
示例规则

监控 /etc/passwd 文件的读写操作:

auditctl -a always,exit -F arch=b64 -S open -S read -S write -F path=/etc/passwd -k passwd_access

进程管理相关系统调用

这些系统调用用于进程的创建、终止、权限切换等操作。

常见系统调用
  • fork:创建子进程。
  • execve:执行新程序。
  • exit:终止进程。
  • setuid:设置用户 ID。
  • setgid:设置组 ID。
  • kill:发送信号给进程。
示例规则

监控 execve 系统调用(程序执行):

auditctl -a always,exit -F arch=b64 -S execve -k program_exec

网络通信相关系统调用

这些系统调用用于网络套接字的创建、连接、数据传输等操作。

常见系统调用
  • socket:创建套接字。
  • bind:绑定套接字到地址。
  • connect:连接到远程地址。
  • accept:接受连接请求。
  • send:发送数据。
  • recv:接收数据。
  • close:关闭套接字。
示例规则

监控 socket 系统调用(网络套接字创建):

auditctl -a always,exit -F arch=b64 -S socket -k network_socket

权限管理相关系统调用

这些系统调用用于用户和权限的管理。

常见系统调用
  • chmod:修改文件权限。
  • chown:修改文件所有者。
  • setxattr:设置文件扩展属性。
  • capset:设置进程的能力(capabilities)。
示例规则

监控 chmod 系统调用(文件权限修改):

auditctl -a always,exit -F arch=b64 -S chmod -k file_permission_change

用户登录和会话管理相关系统调用

这些系统调用用于用户登录、会话管理等操作。

常见系统调用
  • login:用户登录。
  • setuid:切换用户 ID。
  • setgid:切换组 ID。
  • setsid:创建新会话。
示例规则

监控 setuid 系统调用(用户 ID 切换):

auditctl -a always,exit -F arch=b64 -S setuid -k user_switch

内存管理相关系统调用

这些系统调用用于内存的分配、释放等操作。

常见系统调用
  • mmap:映射文件或设备到内存。
  • munmap:取消内存映射。
  • mprotect:设置内存保护。
示例规则

监控 mmap 系统调用(内存映射):

auditctl -a always,exit -F arch=b64 -S mmap -k memory_map

时间管理相关系统调用

这些系统调用用于获取或设置系统时间。

常见系统调用
  • gettimeofday:获取当前时间。
  • settimeofday:设置系统时间。
  • adjtimex:调整系统时钟。
示例规则

监控 settimeofday 系统调用(系统时间修改):

auditctl -a always,exit -F arch=b64 -S settimeofday -k time_change

信号处理相关系统调用

这些系统调用用于信号的发送和处理。

常见系统调用
  • kill:发送信号给进程。
  • sigaction:设置信号处理函数。
  • signal:设置信号处理函数。
示例规则

监控 kill 系统调用(信号发送):

auditctl -a always,exit -F arch=b64 -S kill -k signal_send

设备管理相关系统调用

这些系统调用用于设备的访问和控制。

常见系统调用
  • ioctl:设备控制操作。
  • open:打开设备文件。
  • close:关闭设备文件。
示例规则

监控 ioctl 系统调用(设备控制):

auditctl -a always,exit -F arch=b64 -S ioctl -k device_control

其他常见系统调用

  • brk:调整堆内存大小。
  • clone:创建新线程或进程。
  • ptrace:进程跟踪(用于调试)。
  • mount:挂载文件系统。
  • umount:卸载文件系统。
示例规则

监控 mount 系统调用(文件系统挂载):

auditctl -a always,exit -F arch=b64 -S mount -k filesystem_mount

典型用法

监控文件访问

  1. 监控 /etc/passwd 文件的读写操作:

    auditctl -w /etc/passwd -p rw -k passwd_access
    
  2. 查看相关日志:

    ausearch -k passwd_access
    

监控用户登录

  1. 监控用户登录事件:

    auditctl -a always,exit -F arch=b64 -S login -k user_login
    
  2. 查看相关日志:

    ausearch -k user_login
    

监控系统调用

  1. 监控 open 系统调用:

    auditctl -a always,exit -F arch=b64 -S open -k file_open
    
  2. 查看相关日志:

    ausearch -k file_open
    

日志管理与分析

Audit 日志默认存储在 /var/log/audit/audit.log 中。为了更好地管理日志,可以配置日志轮转。

  1. 编辑日志轮转配置:

    vi /etc/logrotate.d/audit
    
  2. 添加以下内容:

    /var/log/audit/audit.log {
        weekly
        rotate 4
        compress
        missingok
        notifempty
    }
    
  3. 保存并退出编辑器。

  4. 手动测试日志轮转:

    logrotate -f /etc/logrotate.d/audit
    

常见问题

1. Audit 日志文件过大

如果 Audit 日志文件过大,可以调整日志文件大小和保留数量:

vi /etc/audit/auditd.conf

修改 max_log_filenum_logs 参数。

2. Audit 规则不生效

确保 Audit 服务正在运行:

systemctl status auditd

如果服务未启动,可以启动服务:

systemctl start auditd

3. 如何永久保存 Audit 规则

Audit 规则默认在重启后失效。可以将规则添加到 /etc/audit/rules.d/audit.rules 文件中:

auditctl -l >> /etc/audit/rules.d/audit.rules

参考文档


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值