怎么用脚本获取安全日志

wen 实用脚本 3

本文目录导读:

怎么用脚本获取安全日志

  1. Windows 系统
  2. Linux 系统 (Ubuntu, CentOS, Debian 等)
  3. macOS 系统
  4. 使用 Python 脚本 (跨平台)
  5. 安全注意事项
  6. 最快的方法

要获取安全日志,脚本的方法取决于你使用的操作系统(Windows、Linux/macOS)以及你想要获取的日志类型(系统登录、防火墙、应用审计等)。

以下是针对不同平台的通用脚本方案。

Windows 系统

Windows 安全日志通常存储在 事件查看器 (Event Viewer) 中的 Security 日志下,最强大的脚本工具是 PowerShell

使用 PowerShell (推荐)

PowerShell 可以直接查询 Windows 事件日志。

基础脚本:获取最近 100 条安全日志

# 获取最新的 100 条安全日志,并展示关键信息
Get-WinEvent -LogName Security -MaxEvents 100 | Select-Object TimeCreated, Id, LevelDisplayName, Provider, Message | Format-Table -AutoSize

高级脚本:按事件ID过滤 (登录成功 4624,登录失败 4625)

# 获取过去24小时内所有失败的登录尝试 (EventID 4625)
$yesterday = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=$yesterday} | Select-Object TimeCreated, Message

实用脚本:将结果导出到 CSV 文件

# 导出所有安全日志到 csv 文件
Get-WinEvent -LogName Security | Export-Csv -Path "C:\temp\security_logs.csv" -NoTypeInformation
# 或者只导出特定类型的日志
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624,4625} | Export-Csv -Path "C:\temp\login_logs.csv"

注意:运行 PowerShell 脚本需要 管理员权限

使用 wevtutil.exe (命令行)

如果不想用 PowerShell,可以使用内置工具:

# 将安全日志导出为 evtx 文件
wevtutil epl Security C:\temp\security_logs.evtx
# 查看安全日志的统计信息
wevtutil gli Security

Linux 系统 (Ubuntu, CentOS, Debian 等)

Linux 安全日志通常存储在 /var/log/ 目录下,主要文件有:

  • /var/log/auth.log (Debian/Ubuntu 系列) - 认证日志
  • /var/log/secure (RedHat/CentOS 系列) - 安全日志
  • /var/log/syslog - 系统综合日志

使用 Bash 脚本 + grep/awk

基础脚本:获取所有失败的 SSH 登录尝试

#!/bin/bash
# 搜索认证日志中的 "Failed password" 条目
grep "Failed password" /var/log/auth.log | awk '{print $1, $2, $3, $9, $11}'

高级脚本:实时监控安全日志并报警

#!/bin/bash
# 监控认证日志,当出现新的失败登录时打印到终端
tail -f /var/log/auth.log | while read line; do
    if echo "$line" | grep -q "Failed password"; then
        echo "[ALERT] SSH失败登录: $line"
    fi
done

实用脚本:统计攻击最多的IP

#!/bin/bash
# 统计失败的 SSH 登录尝试按 IP 排序
grep "Failed password" /var/log/auth.log | grep -oP 'from \K\S+' | sort | uniq -c | sort -nr

使用 journalctl (Systemd 系统)

现代 Linux 发行版常用 systemd-journald

# 查看内核或认证相关的安全消息
sudo journalctl -u sshd.service --since "24 hours ago" | grep "Failed password"
# 查看所有安全相关的审计记录
sudo journalctl _TRANSPORT=audit

macOS 系统

macOS 日志系统基于 log 命令或传统的 system.log

使用 log 命令 (推荐)

# 获取最近的安全相关事件
log show --predicate 'subsystem contains "security"' --last 1h
# 查看登录尝试
log show --predicate 'eventMessage contains "Authentication"' --last 1h

读取 system.log

# 查看认证失败
grep "authentication failure" /var/log/system.log

使用 Python 脚本 (跨平台)

如果你想写一个更通用的脚本,Python 是一个很好的选择。

Python 脚本示例:扫描 Windows 安全日志 (需安装 pywin32)

import win32evtlog, win32evtlogutil
server = None  # 本地机器
logtype = 'Security'
hand = win32evtlog.OpenEventLog(server, logtype)
total = win32evtlog.GetNumberOfEventLogRecords(hand)
flags = win32evtlog.EVENTLOG_BACKWARDS_READ | win32evtlog.EVENTLOG_SEQUENTIAL_READ
events = win32evtlog.ReadEventLog(hand, flags, 0)
for event in events[:50]:  # 只取前50条
    print('Event ID:', event.EventID)
    print('Time:', event.TimeGenerated)
    print('Source:', event.SourceName)
    print('---')

Python 脚本示例:解析 Linux auth.log

import re
with open('/var/log/auth.log', 'r') as f:
    for line in f:
        if 'Failed password' in line:
            ip_match = re.search(r'from (\S+)', line)
            if ip_match:
                print(f"Failed login from: {ip_match.group(1)}")

安全注意事项

  1. 权限:读取安全日志通常需要 root / administrator 权限,运行脚本前请确保 sudo 或以管理员身份运行。
  2. 日志轮转:日志文件可能会被压缩或分割(如 auth.log.1auth.log.gz),使用 zcatzless 处理压缩文件。
  3. 性能:直接读取数百万行日志的 grepGet-WinEvent 可能非常缓慢。建议尽量按时间或事件ID过滤,而不是全量导出。
  4. 合规与隐私:安全日志可能包含敏感信息(如用户的登录名、IP地址),请确保你的脚本符合公司数据保护政策,不要将日志明文存储在共享目录中。

最快的方法

  • Windows 10/11/Server:管理员打开 PowerShell,输入 Get-WinEvent -LogName Security | Export-Csv C:\logs.csv
  • Ubuntu/Debiansudo grep "Failed password" /var/log/auth.log | tail -50
  • CentOS/RHELsudo grep "Failed password" /var/log/secure | tail -50

如果需要更具体的脚本(如针对特定软件如 IIS、Apache 或 MySQL 的安全日志),请补充说明你的具体环境。

抱歉,评论功能暂时关闭!