收集 ESET AV 日志
支持的语言:
Google SecOps
SIEM
本文档介绍了如何使用 Bindplane 将 ESET AV 日志注入到 Google Security Operations。Logstash 解析器代码从采用 SYSLOG 或 JSON 格式的 ESET_AV 日志中提取安全事件数据。它首先对原始消息进行归一化处理,然后根据识别出的格式对其进行解析,将提取的字段映射到相应的统一数据模型 (UDM) 架构,以便进行一致的表示和分析。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows 2016 或更高版本,或者具有
systemd
的 Linux 主机 - 如果在代理后运行,防火墙端口处于开放状态
- 对 ESET Protect 的特权访问权限
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载注入身份验证文件。将该文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 配置文件。
- 复制并保存组织详细信息部分中的客户 ID。
安装 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 ingestion_labels: log_type: 'ESET_AV' raw_log_field: body 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
为 ESET PROTECT 本地版配置 Syslog
- 登录 ESET Protect Web 控制台。
- 依次前往更多 > 设置 > 高级设置 > Syslog 服务器。
- 选择启用 Syslog 旁边的切换开关。
- 提供以下配置详细信息:
- 主机:输入 Bindplane 代理 IP 地址
- 端口:输入 Bindplane 代理端口号(UDP 为
514
) - 格式:选择 Syslog
- 传输:选择 UDP
- 跟踪记录日志详细程度:选择信息
- “将日志导出到 Syslog”切换开关:选择启用
- 导出的日志格式:选择 JSON
- 点击保存。
为 ESET PROTECT Cloud 配置 Syslog
- 登录 ESET Protect Web 控制台。
- 依次前往更多 > 设置 > Syslog 服务器。
- 选择启用 Syslog 旁边的切换开关。
- 提供以下配置详细信息:
- 载荷格式:选择 JSON
- 信封格式:选择 Syslog
- 最低日志级别:选择 Informational
- 要记录的事件类型:选择所有事件类型
- 目标 IP:输入 Bindplane 代理 IP 地址
- 端口:输入 Bindplane 代理端口号(UDP 为
514
)
- 点击保存。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
账号 | principal.administrative_domain | 使用 grok 模式 %{DATA:admin_domain}\\\\%{WORD:user_id} 从 account 字段中提取。 |
账号 | principal.user.userid | 使用 grok 模式 %{DATA:admin_domain}\\\\%{WORD:user_id} 从 account 字段中提取。 |
操作 | security_result.action | 如果 action 为 Block (不区分大小写),则设置为 BLOCK 。如果 action 为 Start (不区分大小写),则设置为 ALLOW 。 |
action_taken | security_result.action_details | 直接从 action_taken 字段映射。 |
computer_severity_score | security_result.detection_fields | 系统会创建一个键值对,其中包含键 computer_severity_score 和 computer_severity_score 字段中的值。此键值对会附加到 security_result.detection_fields 数组。 |
detail | security_result.description | 直接从 detail 字段映射。 |
网域 | principal.domain.name | 直接从 domain 字段映射。 |
eialarmid | security_result.detection_fields | 系统会创建一个键值对,其中包含键 eialarmid 和 eialarmid 字段中的值。此键值对会附加到 security_result.detection_fields 数组。 |
eiconsolelink | principal.url | 直接从 eiconsolelink 字段映射。 |
事件 | metadata.description | 已将 event 重命名为 event_desc ,并映射到 metadata.description 。 |
event_type | metadata.product_event_type | 直接从 event_type 字段映射。 |
group_name | principal.group.group_display_name | 直接从 group_name 字段映射。 |
哈希 | principal.file.sha1 | 转换为小写。如果小写值与 SHA-1 正则表达式匹配,则映射到 principal.file.sha1 。 |
哈希 | principal.resource.attribute.labels | 系统会创建一个键值对,其中包含键 hash 和 hash 字段中的值。此键值对会附加到 principal.resource.attribute.labels 数组。 |
主机名 | principal.asset.hostname | 直接从 hostname 字段映射。 |
主机名 | principal.hostname | 直接从 hostname 字段映射。 |
入站 | network.direction | 如果为 true,则设置为 INBOUND 。如果为 false,则设置为 OUTBOUND 。 |
ipv4 | target.asset.ip | 如果 target_address 为空,则直接从 ipv4 字段映射。 |
ipv4 | target.ip | 如果 target_address 为空,则直接从 ipv4 字段映射。 |
json_data | 解析为 JSON 以提取各种字段。 | |
消息 | 使用 grok 进行解析,以提取时间戳、主机和 json_data。 | |
need_restart | additional.fields | 系统会创建一个键值对,其中键为 need_restart ,值为 need_restart 字段中的值(转换为字符串)。此键值对会附加到 additional.fields 数组。 |
os_name | principal.platform | 如果包含 Window 或 window (不区分大小写),则设为 WINDOWS 。如果包含 Linux 或 linux (不区分大小写),则设为 LINUX 。如果包含 Mac 或 mac (不区分大小写),则设为 MAC 。 |
os_name | principal.platform_version | 直接从 os_name 字段映射。 |
process_name | principal.process.file.full_path | 直接从 process_name 字段映射。如果为空,则取值为 processname 。 |
processname | principal.process.file.full_path | 如果 process_name 为空,则映射到 process_name 。 |
协议 | network.ip_protocol | 已转换为大写。如果大写值与已知协议(TCP、UDP、ICMP 等)匹配,则映射到 network.ip_protocol 。 |
结果 | security_result.summary | 直接从 result 字段映射。 |
rulename | security_result.rule_name | 直接从 rulename 字段映射。 |
scan_id | security_result.detection_fields | 系统会创建一个键值对,其中包含键 scan_id 和 scan_id 字段中的值。此键值对会附加到 security_result.detection_fields 数组。 |
scanner_id | security_result.detection_fields | 系统会创建一个键值对,其中包含键 scanner_id 和 scanner_id 字段中的值。此键值对会附加到 security_result.detection_fields 数组。 |
和程度上减少 | security_result.severity | 如果包含 Warn 或 warn (不区分大小写),则设为 HIGH 。如果包含 Info 或 info (不区分大小写),则设为 LOW 。 |
severity_score | security_result.detection_fields | 系统会创建一个键值对,其中包含键 severity_score 和 severity_score 字段中的值。此键值对会附加到 security_result.detection_fields 数组。 |
source_address | principal.asset.ip | 直接从 source_address 字段映射。 |
source_address | principal.ip | 直接从 source_address 字段映射。 |
source_port | principal.port | 转换为字符串,然后再转换为整数。映射到 principal.port 。 |
source_uuid | metadata.product_log_id | 直接从 source_uuid 字段映射。 |
目标 | 已重命名为 target1 。 |
|
target_address | target.asset.ip | 直接从 target_address 字段映射。 |
target_address | target.ip | 直接从 target_address 字段映射。 |
target_port | target.port | 转换为字符串,然后再转换为整数。映射到 target.port 。 |
threat_handled | security_result.detection_fields | 系统会创建一个键值对,其中键为 threat_handled ,值为 threat_handled 字段中的值(转换为字符串)。此键值对会附加到 security_result.detection_fields 数组。 |
threat_name | security_result.threat_name | 直接从 threat_name 字段映射。 |
threat_type | security_result.threat_id | 直接从 threat_type 字段映射。 |
时间 | metadata.event_timestamp | 用于填充 metadata.event_timestamp 。 |
用户名 | principal.user.userid | 如果 user_id 和 user 为空,则直接从 username 字段映射。 |
用户 | principal.user.userid | 如果 user_id 为空,则直接从 user 字段映射。 |
metadata.event_type | 如果 source_address 和 target_address 不为空,则设置为 NETWORK_CONNECTION 。否则,如果 has_user 为 true,则设置为 USER_UNCATEGORIZED 。否则,如果 has_principal 为 true,则设置为 STATUS_UPDATE 。否则,请将其设置为 GENERIC_EVENT 。 |
|
metadata.log_type | 设置为 ESET_AV 。 |
|
metadata.product_name | 设置为 ESET_AV 。 |
|
metadata.vendor_name | 设置为 ESET_AV 。 |
|
intermediary.hostname | 此字段的值取自从日志消息中提取的 host 字段。 |
|
principal.user.userid | 如果 account 字段不为空,解析器会使用 grok 模式从 account 字段中提取用户 ID。否则,它会检查字段 user 是否不为空,如果不为空,则取其值。如果 account 和 user 均为空,则检查字段 username 是否不为空,如果不为空,则取其值。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。