Linux--审计工具Audit

news/2024/10/8 10:42:36/文章来源:https://www.cnblogs.com/Xinenhui/p/18439195

一、简介

Linux 审计系统提供了一种方式来跟踪系统上与安全相关的信息,根据预配置的规则,审计会生成日志条目,来尽可能多地记录系统上所发生的事件的相关信息。对于关键任务环境而言至关重要,可用来确定安全策略的违反者及其所执行的操作,便于在发生网络入侵等安全事件时,能够为追踪溯源提供日志及时间节点的支撑。

 

在 Linux 服务器主机系统中常常使用 audit 相关工具来对账户管理、权限管理、文件系统管理、日志文件操作管理以及网络配置管理等资源的操作监控,并根据审计规则进行对应的日志记录,最后使用 syslog 服务进行将日志转发到企业的日志中心服务器上,以便于发生安全事件后溯源查询。

 

主要功能:

  • 安全审计audit 用于记录与安全相关的事件,包括用户身份验证、文件访问、系统调用等。
  • 合规性:帮助组织满足各种合规性要求(如 PCI-DSS、HIPAA 等),确保系统活动的可追溯性。
  • 问题追踪:能够追踪系统中的可疑活动,帮助系统管理员识别潜在的安全威胁。

 

主要组件:

  • auditd:审计守护进程,负责收集、记录和管理审计事件。
  • auditctl:命令行工具,用于配置和控制审计规则。
  • ausearch:用于搜索审计日志的工具,可以根据特定条件过滤和查找事件。
  • aureport:用于生成审计报告的工具,提供易于理解的输出格式。

 

二、各步骤简叙

2.1 安装

# Debian/Ubuntu
sudo apt-get install auditd# CentOS/RHEL
sudo yum install audit -y# Fedora
sudo dnf install audit# SUSE
sudo zypper install audit

 

2.2 配置文件

在 /etc/audit/目录下主要有3个配置文件:

  • /etc/audit/auditd.conf:主要配置文件,定义了审计守护进程的行为和日志记录策略
  • /etc/audit/audit.rules:用于定义审计规则,通常在系统启动时加载;在某些系统中,这个文件可能会被 /etc/audit/rules.d/audit.rules 文件覆盖
  • /etc/audit/audit-stop.rules:在停止 auditd 守护进程时需要应用的审计规则,比如在服务停止时移除或禁用特定的审计规则,防止在下次启动时继续监控不再需要的事件;确保在停止审计守护进程时,相关的审计规则不会影响系统的正常运行。

 

/etc/audit/auditd.conf文件:

#
# This file controls the configuration of the audit daemon
#
# 是否记录本地事件,开启后,即使不手动编写审计规则,系统仍然会记录一些基本的事件
local_events = yes# 是否将审计事件写入日志文件
write_logs = yes# 审计日志文件的路径
log_file = /var/log/audit/audit.log# 定义日志文件的组权限
log_group = root# 指定审计日志的格式,默认 ENRICHED 将解析所有uid、gid、syscall、体系结构和套接字地址信息同时意味着需要更大的空间,更适合用于日常审计和调查活动。
# RAW 格式:只包含原始的系统调用信息,不包含额外的上下文信息,以减少日志文件大小和性能开销,更适合用于高性能环境。
log_format = RAW# 定义日志刷新策略,none(日志不写到磁盘),incremental (日志写到磁盘),incremental-async (日志异步写到磁盘),data(保持部分数据和磁盘的一直同步),sync(每次记录都写到磁盘)
flush = INCREMENTAL_ASYNC# 设置日志刷新的频率(以行数为单位)
freq = 50# 设置单个审计日志文件的最大大小(单位为 MB)
max_log_file = 8# 设置保留的旧日志文件数量
num_logs = 5# 设置审计守护进程的优先级提升
priority_boost = 4# 设置分发服务的服务质量(QoS),lossy 表示可以接受丢失一些日志
disp_qos = lossy# 指定事件分发器程序的路径
dispatcher = /sbin/audispd# 指定日志文件命名格式,NONE 表示不使用特定命名格式
name_format = NONE
# name = mydomain# 定义日志文件达到最大大小后的操作,默认为轮询(ROTATE),其他可选值 ignore、syslog、suspend and keep_logs
max_log_file_action = ROTATE# 设置剩余空间低于该值时的警告阈值(单位:MB)
space_left = 75# 定义当剩余空间低于 space_left 时的操作,默认值为 syslog ,其他有效值为 ignore, syslog, rotate, email, exec, suspend, single, and halt.
space_left_action = SYSLOG# 是否验证电子邮件地址
verify_email = yes# 指定接收审计警告邮件的账户
action_mail_acct = root# 设置在磁盘剩余空间低于该值时的阈值(单位:MB)
admin_space_left = 50# 定义当剩余空间低于 admin_space_left 时的操作,默认值为 suspend(暂停审计) ,其他有效值为 ignore, syslog, rotate, exec, suspend, single, and halt.
admin_space_left_action = SUSPEND# 设置磁盘已满时的操作
disk_full_action = SUSPEND# 设置磁盘错误时的操作
disk_error_action = SUSPEND# 是否使用 TCP Wrapper 来控制访问
use_libwrap = yes
# tcp_listen_port = 60# 设置 TCP 监听队列的最大连接数
tcp_listen_queue = 5# 每个地址允许的最大连接数,默认值为 1,最大值为 1024
tcp_max_per_addr = 1# 监听端口范围
# tcp_client_ports = 1024-65535# 客户端最大空闲时间(单位:秒),0 表示没有限制
tcp_client_max_idle = 0# 是否启用 Kerberos 5 认证
enable_krb5 = no# 指定 Kerberos 主体名称
krb5_principal = auditd
# krb5_key_file = /etc/audit/audit.key

# 是否启用网络分发审计事件
distribute_network = no

 

2.3 启动

# systemctl管理
systemctl start auditd# 绝对路径启动
/usr/sbin/auditd# 容器里启动,由于audit涉及到内核,需要以privilege权限启动才能正常使用
docker run --privileged -it your_image_name bash

 

2.4 auditctl

auditctl 是用于管理 Linux 审计系统 (auditd) 的命令行工具,允许用户添加、删除和查看审计规则。

 

添加规则

auditctl -w /path/to/file -p rwxa -k key_name
    • -w:监控指定的文件或目录
-p
    :指定权限,使用字母组合(不指定时默认监控所有事件):
    • r:读取
    • w:写入
    • x:执行
    • a:属性修改
  • -k:为规则指定一个关键字,便于后续搜索日志。

为了在系统重启后自动加载规则,可以将规则添加到 /etc/audit/rules.d/ 目录下的文件中。

echo "-w /etc/passwd -p wa -k passwd_changes" >> /etc/audit/rules.d/audit.rules

 

使用 auditctl -s 可以查看当前审计系统的状态信息

enabled 1                         # 指示审计系统是否启用:1 启用,0 禁用
failure 1                         # 指示当审计记录失败时的处理方式:1 记录失败信息,0 忽略失败
pid 1527                          # 前审计守护进程 (auditd) 的进程 ID
rate_limit 0                      # 设置审计事件的速率限制,用于防止过多事件导致的日志膨胀,后面的值表示每秒允许的最大事件数,0 不限制
rate_limit_action 1               # 当达到速率限制时的处理方式:1 记录到日志,0 忽略
backlog_limit 8192                # 审计事件的最大积压数量,值:表示可以在内存中等待处理的最大事件数
lost 0                            # 表示由于速率限制或其他原因而丢失的事件数量
backlog 0                         # 当前积压的事件数量
loginuid_immutable 0 unlocked     # 指示 login UID 的可变性:1 不可变,0 可变

 

2.5 日志

auditd 生成的审计日志记录了系统中的各种安全事件,通常存储在 /var/log/audit/audit.log 中

 

日志类型

auditd 主要记录以下几种类型的日志:

  • 用户活动日志:记录用户登录、登出、执行命令等活动。
  • 文件访问日志:监控对特定文件或目录的读取、写入和执行操作。
  • 系统调用日志:记录特定系统调用的执行情况,例如 openreadwrite 等。
  • 权限变更日志:记录对系统权限和配置的修改,如用户添加、删除或权限更改。
  • 安全事件日志:记录与安全相关的事件,如 SELinux 相关的操作和其他安全策略的执行。

 

日志格式

审计日志的格式通常为文本格式,每条日志记录包含多个字段,如

type=SYSCALL msg=audit(1633044800.123:123): arch=c000003e syscall=2 success=yes exit=3 a0=0x7fffa3f4d720 a1=0x0 a2=0x0 a3=0x0 items=1 ppid=1234 pid=5678 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/usr/bin/cat" key="file_access"

主要字段解释:

  • type:事件类型,如 SYSCALLUSER_LOGIN 等。
  • msg:包含时间戳和事件 ID,格式为 audit(timestamp:ID)
  • arch:系统架构(例如 c000003e 表示 x86_64)。
  • syscall:系统调用编号,表示执行的系统调用。
  • success:表示系统调用是否成功(yes 或 no)。
  • exit:系统调用的退出状态。
  • a0, a1, a2, a3:系统调用的参数。
  • items:相关项的数量。
  • ppid:父进程 ID。
  • pid:进程 ID。
  • auid:审计用户 ID,表示启动进程的用户。
  • uid:用户 ID。
  • gid:组 ID。
  • euidsuidfsuid:有效用户 ID、设置用户 ID 和文件系统用户 ID。
  • egidsgidfsgid:有效组 ID、设置组 ID 和文件系统组 ID。
  • tty:终端类型。
  • ses:会话 ID。
  • comm:执行的命令。
  • exe:命令的完整路径。
  • key:与该事件关联的关键字,便于后续检索。

 

2.6 ausearch

ausearch 是 auditd 审计系统中用于查询和过滤审计日志的命令行工具。它允许用户根据多种条件检索特定的审计事件,帮助系统管理员分析和审计系统活动。

常用参数:

参数描述示例
-k 根据关键字搜索 ausearch -k file_access
-c 根据命令名过滤 ausearch -c passwd
-ts 指定开始时间 ausearch -ts today,ausearch -ts "18:00:00"
-te 指定结束时间 ausearch -te now
-ua 根据审计用户 ID 过滤 ausearch -ua 1000
-p 根据进程 ID 过滤 ausearch -p 1234
-m 根据事件类型过滤 ausearch -m USER_LOGIN
-f 根据文件路径过滤 ausearch -f /etc/passwd
-i 以可读格式显示输出,转换事件代码为文本 ausearch -i

 

2.7 aureport

aureport 是 auditd 审计系统中的一个工具,用于生成审计报告,提供系统活动的汇总和统计信息。它可以帮助系统管理员快速了解审计日志中的重要信息。

常用参数

参数描述示例
--users 生成用户活动的汇总报告 aureport --users
--comm 生成命令执行的汇总报告 aureport --comm
--syscall 生成系统调用的汇总报告 aureport --syscall
--file 生成文件访问的汇总报告 aureport --file
--start,--end 指定时间范围 aureport --users --start today --end now
--html 生成 HTML 格式的报告 aureport --users --html > user_report.html
--csv 生成 CSV 格式的报告 aureport --comm --csv > command_report.csv

 

示例

运行 aureport --users

================================================================================
# date            login      logout     tty         pid    exec
================================================================================
2023-09-29 12:00:00  user1     12:30:00   pts/0      1234  bash
2023-09-29 12:05:00  user2     12:35:00   pts/1      5678  ssh

运行 aureport --comm 

================================================================================
# command             count
================================================================================
ssh                   50
bash                  30
passwd                10

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809838.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非煤矿山电子封条视频监控系统

非煤矿山电子封条视频监控系统采用现场摄像头和图像分析终端等设备,非煤矿山电子封条视频监控系统通过对煤矿关键地点进行实时监测和数据分析。当有异常情况发生时,非煤矿山电子封条视频监控系统可以通过人工智能算法将自动识别异常情况并记录信息,及时通知现场管理人员进行…

NewStarCtf 2024第一周writeup(部分)

是公开赛道的菜狗,web有两道题没做出来,pwn和reverse不会,主打一个写都写了记录下吧。 Signin 操作内容:做选择题得出flag。 flag值: flag{I_Agr3e_to_FoL10w_th3_ru1es_c41fa97d} MISC 兑换码 操作内容: 题目提示flag在图片下方,010修改图片宽度,得到flag。flag值: f…

《Programming from the Ground Up》阅读笔记:p147-p180

《Programming from the Ground Up》学习第9天,p147-p180总结,总计34页。 一、技术总结 1.Physical memeory p152, Physical memory refers to the actual RAM chips inside your computer and what they contain. 物理地址指的RAM,即我们买电脑所说的“内存”。 2.Virtual …

labview和QT编程

LabView LabView所面向的并非传统意义上的程序员。他的所有功能都可以通过组合某些组件来完成。程序的流程控制,比如循环之类的也是通过画图一样的操作来做的。 所有的程序功能几乎都可以通过鼠标来构造出来。优点是做一个能运行的程序非常简单。做一个虚拟的仪器很容易。也不…

kitti 数据集 可视化

1. 网址 KITTI官网网址:https://www.cvlibs.net/datasets/kitti/index.php 下载数据集:https://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d KITTI数据集论文:Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite github可视化代…

table 单元格合并

table 元素合并单元格,用法倒是很简单,但过程中遇到了点小问题,记录下: 1、多行多列合并,使用 rowSpan、colSpan 设置要合并的行列数,再将合并后的多余单元格删除即可:function merge(table, px, py, row, col, remove = true) {py--;let target = table.rows[px].cell…

php网站登录密码忘记了的三种解决办法

如果你忘记了PHP网站的登录密码,可以通过以下三种方法来解决这个问题: 1. 通过数据库直接修改密码 步骤如下:登录数据库:使用命令行工具(如 mysql 或 phpMyAdmin)登录到数据库。 例如,通过命令行登录 MySQL 数据库:mysql -u root -p选择对应的数据库:选择包含用户表的…

还不知道这个原则的程序员,要小心了

“无规矩不成方圆”,来了禅道以后才发现,其实小公司也应该有自己的代码规范。大家好,我是陈哥,今天聊聊规范优先原则 ~背景 前几天,和我同事闲谈,聊到我在来禅道之前参与过的一个项目。当时,小团队对代码规范不够重视,结果合并代码时出现大量格式冲突,解决问题费时费力…

phpinfo函数的作用

phpinfo() 函数是 PHP 中的一个内置函数,主要用于显示关于 PHP 配置的各种信息。这些信息包括 PHP 版本、已加载的扩展、环境变量、HTTP 头信息、目录路径设置等。这对于调试和了解当前 PHP 运行环境非常有用。作用包括:显示 PHP 的版本号。 列出所有已启用的扩展及其版本信息…

宝塔面板打不开怎么办

如果遇到宝塔面板无法打开的问题,可以尝试以下几个步骤来排查和解决问题:检查网络连接确保服务器与客户端之间的网络连接正常,尝试访问其他网站或服务以确认网络状况。查看端口是否开放宝塔面板默认使用的端口号为8888(或自定义端口),确保该端口在服务器防火墙中已经开放…

[Markdown] Markdown 及文档格式转换

1 概述 : Markdown Markdown 的诞生什么是 Markdown? Markdown 的诞生初衷Markdown 是一种用于编写结构化文档的纯文本格式,基于在电子邮件和 usenet 帖子中指示格式的约定。 它由 John Gruber 开发(在 Aaron Swartz 的帮助下),并于 2004 年以 语法描述 和用于将 Markdown…