自学内容网 自学内容网

监视你的脚本:自动 Linux 活动审计

大家好!我是大聪明-PLUS

在本文中,我想讨论一下 auditd,这是一个记录每个操作的实用 Linux 审计工具,以及一个可以将日志转换为可读报告和警报的脚本。

缺乏用户活动监控的 Linux 服务器就像一扇扇敞开的窗户。auditd 可以帮助解决以下问题:

  • 未经授权的访问(例如,谁使用了它以及何时使用sudo

  • 可疑命令(rm -rf、更改权限、访问任何文件)

  • 事件调查(服务器崩溃前谁发布了什么内容)

  • 遵守公司标准(也许信息安全需要记录操作或者您更喜欢控制)

解决方案:auditd+ 用于分析和警报的 Python 脚本。

设置 auditd

安装并启用 auditd

  • 让我们检查它是否已安装auditd

sudo apt install auditd -y  
sudo yum install audit      
  • 运行并添加到启动:

sudo systemctl enable --now auditd
sudo systemctl status auditd  

基本 auditctl 命令:

  • 查看当前设置的规则:

    sudo auditctl -l
  • 添加临时规则(重启后会消失):

    sudo auditctl -w /etc/passwd -p rwa -k sensitive_files

    在哪里:

    • -w- 文件/目录的路径。

    • -p- 权限(r — 读取、w — 写入、x — 执行、a — 更改属性)。

    • -k- 键(用于过滤日志的标签)。

  • 清除所有规则:

    sudo auditctl -D
  1. 常设审计规则

规则存储在 中/etc/audit/rules.d/audit.rules。示例配置:


-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes


-w /usr/bin/sudo -p x -k sudo_usage


-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k file_deletion


-w /bin/bash -p x -k shell_commands
-w /bin/zsh -p x -k shell_commands
-w /bin/sh -p x -k shell_commands


-w /etc/ -p wa -k etc_changes

我们应用以下规则:

sudo auditctl -R /etc/audit/rules.d/audit.rules

查看和分析日志

  1. 处理日志的基本实用程序

  • ausearch— 通过日志搜索。

    sudo ausearch -k sudo_usage  
    sudo ausearch -m EXECVE      
  • aureport— 报告生成。

sudo aureport --summary     
sudo aureport -f            
sudo aureport -u            
  1. 审计日志示例

标准条目/var/log/audit/audit.log

type=SYSCALL msg=audit(1620000000.123:456): arch=c000003e syscall=59 success=yes exit=0 a0=123 a1=456 a2=789 a3=0 items=2 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 comm="sudo" exe="/usr/bin/sudo" key="sudo_usage"

分析:

  • uid=0— 该命令以 root 身份执行。

  • comm="sudo"— 命令已启动sudo

  • key="sudo_usage"— 规则标签。

用于分析和警报的 Python 脚本

日志解析脚本

  • 我们创造audit_monitor.py

#!/usr/bin/env python3
import subprocess
import re
from datetime import datetime


def parse_audit_log():
    alerts = []
    for key, message in ALERT_RULES.items():
        cmd = f"ausearch -k {key} --raw | aureport -i -f"
        logs = subprocess.getoutput(cmd).split('\n')
        
        for line in logs:
            if not line:
                continue
            time_match = re.search(r"msg=audit\((\d+\.\d+)", line)
            user_match = re.search(r"auid=(\d+)", line)
            cmd_match = re.search(r'exe="([^"]+)"', line)
            
            if time_match and user_match:
                timestamp = datetime.fromtimestamp(float(time_match.group(1)))
                user = f"UID {user_match.group(1)}"
                details = f"{timestamp} | {user} | {line}"
                alerts.append(message.format(details=details))
    
    return alerts

if __name__ == "__main__":
    alerts = parse_audit_log()
    if alerts:
        print("\n".join(alerts))

使用示例:

  • 让我们测试一下触发器:

    sudo cat /etc/shadow
  • 运行脚本:

    chmod +x audit_monitor.py
    ./audit_monitor.py

    示例输出:

    Доступ к /etc/shadow: 2023-05-01 12:00:00 | UID 1000 | type=SYSCALL ... exe="/usr/bin/cat"
  • 添加到 cron 每 5 分钟检查一次:

    (crontab -l ; echo "*/5 * * * * /path/to/audit_monitor.py >> /var/log/audit_monitor.log") | crontab -

与 Telegram 集成以接收警报

  1. 让我们创建一个 Telegram 机器人:

  2. 我们来修改一下脚本:

    • 让我们取消注释块并替换我们自己的和。requests.post()TOKENchat_id

结论

本文介绍了一种auditd用于监控关键操作的设置,描述了一个用于分析日志的脚本,并探讨了向 Telegram 添加警报的可能性。您可以自行决定此工具的用途(如果有)。我很乐意听取您对此方法的实用价值的评论并进行讨论。


原文地址:https://blog.csdn.net/2501_93209230/article/details/153820606

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!