收集 Sophos AV 日志
支持的语言:
Google SecOps
SIEM
本文档介绍了如何使用 Bindplane 收集 Sophos AV 日志。解析器会将 JSON 日志转换为统一数据模型 (UDM)。它从嵌套的 JSON 结构中提取字段,将其映射到 UDM 字段,并根据类型字段执行事件分类,从而针对不同的 Sophos AV 事件类型丰富数据,使其包含具体细节和操作。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows 2016 或更高版本,或者具有
systemd
的 Linux 主机 - 一台额外的 Windows 或 Linux 机器,能够持续运行 Python
- 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开
- 对 Sophos Central 管理控制台的特权访问权限
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 个人资料。
- 复制并保存组织详细信息部分中的客户 ID。
安装 Bindplane 代理
按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。
Windows 安装
- 以管理员身份打开命令提示符或 PowerShell。
运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安装资源
- 如需了解其他安装选项,请参阅此安装指南。
配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps
访问配置文件:
- 找到
config.yaml
文件。通常,它位于 Linux 上的/etc/bindplane-agent/
目录中,或位于 Windows 上的安装目录中。 - 使用文本编辑器(例如
nano
、vi
或记事本)打开该文件。
- 找到
按如下方式修改
config.yaml
文件:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'SOPHOS_AV' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 根据基础架构的需要替换端口和 IP 地址。
- 将
<customer_id>
替换为实际的客户 ID。 - 将
/path/to/ingestion-authentication-file.json
更新为获取 Google SecOps 提取身份验证文件部分中保存身份验证文件的路径。
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart bindplane-agent
如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:
net stop BindPlaneAgent && net start BindPlaneAgent
配置 Sophos Central API 访问权限
- 登录 Sophos Central Admin。
- 依次选择全局设置 > API 令牌管理。
- 点击添加令牌以创建新令牌。
- 输入令牌名称,然后点击保存。系统会显示所提供令牌的 API 令牌摘要。
- 在 API 令牌摘要部分,点击复制以复制 API 访问网址和标头。
在其他机器上安装 Python
- 打开网络浏览器,然后前往 Python 网站。
- 点击适用于您所用操作系统的 Download Python。
安装 Python:
- 在 Windows 上:
- 运行安装程序。
- 勾选显示 Add Python to PATH 的复选框。
- 点击立即安装。
在 Mac 上:
- Python 可能已安装,如果没有,您可以使用终端安装最新版本。
打开终端,然后输入以下命令:
python --version
- 在 Windows 上:
下载 Sophos 集成脚本
- 前往 Sophos Central SIEM Integration GitHub Repository 的 GitHub 页面。
- 依次点击绿色的“Code”按钮 >“Download ZIP”。
- 解压缩 ZIP 文件。
设置脚本配置
- 打开您解压缩 ZIP 归档文件的目录中的
config.ini
文件。 - 修改配置文件:
- API 令牌:输入之前从 Sophos Central 复制的 API 密钥。
- Syslog 服务器详细信息:输入 Syslog 服务器的详细信息。
- 主机:输入 BindPlane 代理 IP 地址。
- 端口:输入 BindPlane 代理端口号。
- 协议:输入 UDP(您也可以根据自己的设置使用 TCP 或 TLS)。
- 保存文件。
运行脚本
前往脚本文件夹。
在 Windows 上:
- 按 Windows 键,然后输入
cmd
。 - 点击命令提示符。
- 前往脚本文件夹:
cd C:/Users/YourName/Downloads/Sophos-Central-SIEM-Integration
- 按 Windows 键,然后输入
在 macOS 上:
- 依次前往应用 > 实用程序。
- 打开终端。
- 前往脚本文件夹:
cd /Users/YourName/Downloads/Sophos-Central-SIEM-Integration
运行脚本:
输入以下命令以启动脚本:
python siem.py
自动执行脚本,使其在 Windows 上持续运行(使用任务调度程序):
- 在“开始”菜单中输入任务计划程序,打开“任务计划程序”。
- 点击创建任务。
- 在常规标签页中:
- 为任务命名(例如,
Sophos AV Log Export
)。
- 为任务命名(例如,
- 在触发器标签页中:
- 点击新建,然后将任务设置为每天或启动时运行(具体取决于您的偏好)。
- 在操作标签页中:
- 点击新建,然后选择启动计划。
- 浏览以查找
python.exe
可执行文件(通常位于C:/Python/XX/python.exe
)。 - 在添加实参字段中,输入脚本的路径(例如
C:/Users/YourName/Downloads/Sophos-Central-SIEM-Integrationsiem.py
)。
- 点击确定以保存任务。
自动执行脚本,使其在 Mac 上持续运行(使用 Cron 作业):
- 打开终端。
- 输入
crontab -e
并按 Enter 键。 在文件末尾添加新行:
* * * * * /usr/bin/python /Users/YourName/Downloads/Sophos-Central-SIEM-Integration/siem.py
点击保存,然后退出编辑器。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
customer_id | target.resource.id | 直接映射 |
data.customer_id | target.resource.id | 直接映射 |
data.dhost | principal.hostname | 直接映射 |
data.end | 时间戳 | 直接映射 |
data.endpoint_id | principal.resource.id | 直接映射 |
data.group | security_result.category_details | 直接映射 |
data.id | principal.resource.id | 直接映射 |
data.location | principal.hostname | 直接映射 |
data.name | metadata.description | 直接映射 |
data.rt | 时间戳 | 直接映射 |
data.severity | security_result.severity | 直接映射 |
data.source | principal.user.user_display_name | 直接映射 |
data.source_info.ip | principal.ip | 直接映射 |
data.suser | principal.user.userid | 直接映射 |
data.threat | security_result.rule_name | 当 data.group 为“POLICY”时的直接映射 |
data.type | metadata.product_event_type | 直接映射 |
data.user_id | principal.user.userid | 直接映射 |
data.when | 时间戳 | 直接映射 |
dhost | principal.hostname | 直接映射 |
end | 时间戳 | 直接映射 |
endpoint_id | principal.resource.id | 直接映射 |
群组 | security_result.category_details | 直接映射 |
id | principal.resource.id | 直接映射 |
位置 | principal.hostname | 直接映射 |
name | metadata.description | 直接映射 |
rt | 时间戳 | 直接映射 |
和程度上减少 | security_result.severity | 直接映射 |
来源 | principal.user.user_display_name | 直接映射 |
source_info.ip | principal.ip | 直接映射 |
suser | principal.user.userid | 直接映射 |
类型 | metadata.product_event_type | 直接映射 |
user_id | principal.user.userid | 直接映射 |
时间 | 时间戳 | 直接映射 |
- | is_alert | 对于“严重程度”为“中”或“高”的事件,或者当“类型”字段指示值得提醒的事件(例如“Event::Endpoint::UpdateRebootRequired”)时,is_alert 字段会设置为 true。 |
- | is_significant | 对于“严重程度”为“中”或“高”的事件,is_significant 字段设置为 true。 |
- | metadata.description | 说明字段填充了原始日志中“name”字段的值。 |
- | metadata.event_timestamp | event_timestamp 字段填充的是原始日志中“end”“rt”或“when”字段的值。 |
- | metadata.event_type | event_type 字段派生自原始日志中的“type”字段,用于将特定的 Sophos 事件类型映射到 Chronicle UDM 事件类型。 |
- | metadata.log_type | 所有事件的 log_type 字段均设置为“SOPHOS_AV”。 |
- | metadata.product_event_type | product_event_type 字段填充了原始日志中“type”字段的值。 |
- | metadata.product_name | 所有事件的 product_name 字段均设置为“Sophos Anti-Virus”。 |
- | metadata.vendor_name | 所有事件的 vendor_name 字段均设置为“Sophos”。 |
- | network.direction | 对于所有“NETWORK_CONNECTION”事件,方向字段均设置为“OUTBOUND”。 |
- | network.ip_protocol | 对于存在“target.url”字段的“NETWORK_CONNECTION”事件,ip_protocol 字段设置为“TCP”。 |
- | principal.hostname | 主机名字段填充的是原始日志中“dhost”或“location”字段的值。 |
- | principal.ip | 系统会使用原始日志中“source_info.ip”字段的值填充 ip 字段。 |
- | principal.resource.id | id 字段填充了原始日志中“id”或“endpoint_id”字段的值。 |
- | principal.user.user_display_name | user_display_name 字段填充的是原始日志中“suser”或“source”字段的值。 |
- | principal.user.userid | userid 字段填充了原始日志中“suser”“user_id”或“data.suser”字段的值。 |
- | security_result.action | 操作字段源自原始日志中的“data.name”字段,用于将特定的 Sophos 操作映射到 Chronicle UDM 操作。 |
- | security_result.category_details | category_details 字段填充了原始日志中“group”字段的值。 |
- | security_result.rule_name | rule_name 字段是从原始日志的“data.name”字段中提取的,具体来说,是查找“Policy non-compliance: [rule_name]”或“Rule names: [rule_name]”等模式。 |
- | security_result.severity | 严重程度字段会填充原始日志中“严重程度”字段的值,并将其转换为相应的 Chronicle UDM 严重程度级别。 |
- | security_result.summary | 当事件类型为“GENERIC_EVENT”或“STATUS_HEARTBEAT”时,系统会使用原始日志中“name”字段的值填充摘要字段。 |
- | target.application | 如果事件类型为“NETWORK_CONNECTION”且说明中提及应用被屏蔽,则应用字段会填充原始日志中“data.name”字段的值。 |
- | target.asset_id | 如果事件类型为“NETWORK_CONNECTION”,且说明中提及了资产 ID,则 asset_id 字段会填充原始日志中“data.endpoint_id”字段的值。 |
- | target.file.full_path | full_path 字段是从原始日志的“data.name”字段中提取的,具体来说是查找“Source path: [full_path]”之类的模式。 |
- | target.file.size | 系统会从原始日志的“data.name”字段中提取 size 字段,具体来说,会查找“File size: [size]”之类的模式。 |
- | target.hostname | 如果事件类型为“NETWORK_CONNECTION”,并且说明中提及了目标主机名,则主机名字段会填充原始日志中“data.dhost”字段的值。 |
- | target.process.file.full_path | full_path 字段是从原始日志的“data.name”字段中提取的,具体来说,是查找“受控应用 [操作]:[full_path]”之类的模式。 |
- | target.resource.id | id 字段填充了原始日志中“customer_id”字段的值。 |
- | target.resource.name | 系统会根据事件类型在“名称”字段中填充特定值。对于“SETTING_CREATION”和“SETTING_MODIFICATION”,它分别设置为“设备注册”和“实时保护”。对于“SCAN_UNCATEGORIZED”,系统会使用原始日志中“data.name”字段的值填充该字段。 |
- | target.resource.type | 系统会根据事件类型填充 type 字段。对于“SETTING_CREATION”和“SETTING_MODIFICATION”,它设置为“SETTING”。对于“SCAN_UNCATEGORIZED”,它设置为“扫描”。对于“SCAN_NETWORK”,它设置为“设备”。 |
- | target.url | 网址字段是从原始日志的“data.name”字段中提取的,具体来说,是查找“'[url]' blocked”之类的模式。 |
- | target.user.userid | 当事件类型为“USER_CREATION”时,userid 字段会填充原始日志中“data.user_id”字段的值。 |
- | 时间戳 | 时间戳字段填充了原始日志中“end”“rt”或“when”字段的值。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。