一、背景引入

在现代企业网络环境中,SMB(Server Message Block)协议被广泛应用于文件共享和网络资源访问。然而,SMB协议的广泛使用也带来了一定的安全风险,例如未经授权的文件访问、异常的数据传输等。为了保障企业网络安全,对SMB协议相关的文件操作行为进行监控、异常检测以及安全告警是非常必要的。

二、应用场景分析

2.1 企业内部网络

在企业内部,不同部门之间可能会通过SMB协议共享文件。这时就需要对这些共享文件的操作行为进行监控,防止敏感信息被泄露或者恶意篡改。比如,财务部门的财务报表文件通常是ensitive的,如果有非财务人员异常访问或者尝试修改这些文件,监控系统就应该及时发出告警。

2.2 数据中心

在大型的数据中心中,会有大量的服务器通过SMB协议进行文件传输和共享。对这些操作进行监控可以确保数据的完整性和安全性,及时发现潜在的异常行为,例如数据的异常外传等。

三、SMB协议审计工具介绍

3.1 工具功能概述

SMB协议审计工具能够实时监控通过SMB协议进行的文件操作,包括文件的创建、读取、修改和删除等行为。同时,它可以通过预设的规则对这些行为进行分析,检测是否存在异常。一旦发现异常,就会触发安全告警,通知相关人员进行处理。

3.2 常用工具及优缺点

  • 微软自带的审核策略
    • 优点:与Windows系统集成度高,无需额外安装其他软件,配置相对简单。例如,在Windows Server上,可以通过组策略轻松配置SMB文件操作的审核,能够快速启用对特定文件夹的访问监控。
    • 缺点:功能相对有限,对于复杂的异常检测和深度分析能力不足。它主要侧重于基本的操作记录,难以对异常行为进行智能判断。
  • 第三方审计工具(以Netwrix Auditor为例)
    • 优点:功能强大,支持丰富的规则配置,可以实现复杂的异常检测逻辑。例如,可以根据用户的登录时间、操作频率等多个维度来判断是否存在异常行为。同时,它还提供直观的报表和可视化界面,方便管理员查看和分析监控数据。
    • 缺点:通常需要付费购买,并且部署和配置相对复杂,对系统资源有一定的要求。

四、SMB协议审计工具部署

4.1 环境准备

假设我们选择在Linux系统上部署一个开源的SMB协议审计工具,这里以Samba Audit为例。 首先,确保系统已经安装了必要的依赖包,例如Samba服务。可以使用以下命令进行安装:

# 安装Samba服务
sudo apt-get update
sudo apt-get install samba -y

4.2 工具安装与配置

  • 安装Samba Audit Samba Audit可以通过源代码编译安装。首先从官方仓库下载源代码:
# 下载Samba Audit源代码
wget https://github.com/samba-team/samba/archive/master.zip
unzip master.zip
cd samba-master

然后进行配置和编译:

# 配置编译选项
./configure --enable-audit
# 编译并安装
make
sudo make install
  • 配置审计规则 打开Samba的配置文件/etc/samba/smb.conf,添加以下内容来启用审计功能:
# 开启审计功能
audit = required
# 定义审计日志文件路径
audit log file = /var/log/samba/audit.log

保存配置文件后,重启Samba服务:

sudo systemctl restart smbd

五、SMB文件操作行为监控实现

5.1 实时监控

Samba Audit会将SMB文件操作的记录写入指定的日志文件中。可以使用tail命令实时查看日志内容:

# 实时查看审计日志
tail -f /var/log/samba/audit.log

日志内容示例如下:

[2024/07/15 10:30:00.123456,  3] smbd/audit.c:1234(audit_event)
    user=john, ip=192.168.1.100, share=public, file=/test.txt, operation=open, result=success
  • 注释:这条日志记录了用户john从IP地址192.168.1.100通过SMB协议尝试打开public共享文件夹下的test.txt文件,并且操作成功。

5.2 数据采集与存储

为了方便后续的分析和查询,可以将日志数据采集并存储到数据库中。这里以MySQL数据库为例,首先创建一个数据库和表:

-- 创建SMB审计数据库
CREATE DATABASE smb_audit;

-- 使用数据库
USE smb_audit;

-- 创建审计记录表
CREATE TABLE audit_records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    timestamp DATETIME,
    user VARCHAR(255),
    ip VARCHAR(15),
    share VARCHAR(255),
    file_path VARCHAR(255),
    operation VARCHAR(255),
    result VARCHAR(255)
);

然后使用Python脚本将日志数据采集到数据库中:

import re
import mysql.connector
from datetime import datetime

# 连接MySQL数据库
mydb = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="smb_audit"
)
mycursor = mydb.cursor()

# 读取审计日志文件
with open('/var/log/samba/audit.log', 'r') as f:
    for line in f:
        # 使用正则表达式匹配日志内容
        match = re.search(r'\[(.*?)\].*?user=(.*?), ip=(.*?), share=(.*?), file=(.*?), operation=(.*?), result=(.*?)$', line)
        if match:
            timestamp_str = match.group(1)
            user = match.group(2)
            ip = match.group(3)
            share = match.group(4)
            file_path = match.group(5)
            operation = match.group(6)
            result = match.group(7)

            # 将时间戳转换为datetime对象
            timestamp = datetime.strptime(timestamp_str, '%Y/%m/%d %H:%M:%S.%f')

            # 插入数据到数据库
            sql = "INSERT INTO audit_records (timestamp, user, ip, share, file_path, operation, result) VALUES (%s, %s, %s, %s, %s, %s, %s)"
            val = (timestamp, user, ip, share, file_path, operation, result)
            mycursor.execute(sql, val)
            mydb.commit()

# 关闭数据库连接
mydb.close()
  • 注释:这段Python脚本首先连接到MySQL数据库,然后读取Samba审计日志文件。使用正则表达式匹配日志中的关键信息,将时间戳转换为合适的格式,最后将数据插入到数据库的audit_records表中。

六、异常检测与安全告警

6.1 异常检测规则

可以根据不同的场景定义多种异常检测规则,例如:

  • 频繁操作异常:如果某个用户在短时间内对同一个文件进行了大量的操作,可能存在异常。可以通过统计数据库中特定时间段内的操作次数来实现。
-- 查询某个用户在1小时内对同一个文件的操作次数
SELECT user, file_path, COUNT(*) as operation_count
FROM audit_records
WHERE timestamp >= NOW() - INTERVAL 1 HOUR
GROUP BY user, file_path
HAVING operation_count > 10;
  • 非工作时间操作异常:如果用户在非工作时间(例如晚上10点到早上6点)进行文件操作,可能存在异常。
-- 查询非工作时间的文件操作记录
SELECT *
FROM audit_records
WHERE HOUR(timestamp) NOT BETWEEN 6 AND 22;

6.2 安全告警实现

当检测到异常行为时,需要及时发出告警。可以使用Python脚本结合邮件服务来实现邮件告警:

import smtplib
from email.mime.text import MIMEText
import mysql.connector

# 连接MySQL数据库
mydb = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="smb_audit"
)
mycursor = mydb.cursor()

# 查询异常操作记录
sql = "SELECT * FROM audit_records WHERE HOUR(timestamp) NOT BETWEEN 6 AND 22"
mycursor.execute(sql)
results = mycursor.fetchall()

if results:
    # 构建告警邮件内容
    message = "以下是检测到的异常SMB操作记录:\n"
    for result in results:
        message += f"时间: {result[1]}, 用户: {result[2]}, IP: {result[3]}, 共享文件夹: {result[4]}, 文件: {result[5]}, 操作: {result[6]}, 结果: {result[7]}\n"

    # 配置邮件信息
    sender = 'your_email@example.com'
    receivers = ['recipient_email@example.com']
    msg = MIMEText(message)
    msg['Subject'] = 'SMB操作异常告警'
    msg['From'] = sender
    msg['To'] = ', '.join(receivers)

    # 发送邮件
    try:
        smtpObj = smtplib.SMTP('smtp.example.com')
        smtpObj.sendmail(sender, receivers, msg.as_string())
        print("告警邮件发送成功")
    except smtplib.SMTPException:
        print("发送告警邮件时发生错误")

# 关闭数据库连接
mydb.close()
  • 注释:这段Python脚本首先查询数据库中是否存在非工作时间的异常操作记录。如果存在,则构建告警邮件内容,并使用SMTP协议发送邮件给指定的收件人。

七、注意事项

7.1 性能影响

审计工具的部署和运行会对系统性能产生一定的影响,尤其是在高并发的环境下。因此,需要合理配置审计规则,避免过度审计导致系统资源消耗过大。

7.2 数据安全

审计日志中包含了大量的敏感信息,如用户账号、IP地址等。需要确保审计日志文件和存储数据库的安全性,防止数据泄露。

7.3 规则更新

随着网络环境的变化和攻击手段的不断更新,需要定期更新异常检测规则,以确保能够及时发现新的异常行为。

八、文章总结

通过对SMB协议审计工具的部署和使用,可以实现对SMB文件操作行为的监控、异常检测和安全告警。在部署过程中,需要根据实际需求选择合适的工具,并进行合理的配置。同时,要注意性能影响、数据安全和规则更新等问题。通过实时监控和异常检测,可以及时发现潜在的安全风险,保障企业网络的安全稳定运行。