收集 VanDyke VShell SFTP 日志
本文档介绍了如何使用 Bindplane 和 Syslog 或 Amazon S3 和日志传送器将 VanDyke VShell SFTP 日志注入到 Google Security Operations。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 对 VanDyke VShell 服务器或管理控制台的特权访问权限
- 对于选项 1:一个安装了
systemd的 Windows 2016 或更高版本或 Linux 主机(用于 Bindplane 代理) - 对于方法 2:具有 S3 访问权限的 AWS 账号,以及 VShell 服务器上的 NXLog/Fluent Bit
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载数据注入身份验证文件。
- 将该文件安全地保存在将要安装 Bindplane 的系统上,或者您将要配置 Feed 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 配置文件。
- 复制并保存组织详细信息部分中的客户 ID。
选项 1:通过 Bindplane 和 Syslog 进行集成
此选项可提供延迟时间最短的实时日志流式传输,建议在大多数部署中使用。
安装 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 代理安装指南。
配置 BindPlane 代理以注入 Syslog 并将其发送到 Google SecOps
访问配置文件:
- 找到
config.yaml文件。通常,该文件位于 Linux 上的/opt/observiq-otel-collector/目录中或 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: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Custom log type - requires parser extension log_type: 'VANDYKE_SFTP' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- 根据基础架构的需要替换端口和 IP 地址。
- 将
YOUR_CUSTOMER_ID替换为实际的客户 ID。 - 将
/path/to/ingestion-authentication-file.json更新为保存身份验证文件的文件路径。 - 如果使用 TCP 而不是 UDP,请将
udplog替换为tcplog。
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart observiq-otel-collector如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:
net stop observiq-otel-collector && net start observiq-otel-collector
在 VanDyke VShell 上配置 Syslog 转发
适用于 Windows 的 VShell
- 登录 VShell 控制面板。
- 前往日志记录设置。
- 配置远程 syslog 日志记录:
- 启用向远程 syslog 服务器的日志记录。
- 服务器地址:输入 Bindplane IP 地址。
- 端口:输入 514(或您配置的端口)。
- 协议:选择 UDP(或 TCP,如果已配置)。
- 消息组:选择连接、身份验证、SFTP、FTPS、HTTPS、错误、警告 和信息。
- 依次点击应用 > 确定。
适用于 Linux/macOS 上的 VShell
- 修改 vshelld_config 文件(通常为
/etc/vshell/vshelld_config)。 配置以下参数:
SyslogFacility LOG_LOCAL3 LogLevel INFO配置系统的 syslog,以将 LOG_LOCAL3 转发到 Bindplane 代理:
- 修改
/etc/rsyslog.conf或/etc/syslog-ng/syslog-ng.conf。 - 添加:
local3.* @bindplane-agent-ip:514(对于 UDP)或local3.* @@bindplane-agent-ip:514(对于 TCP)。
- 修改
重启 VShell 服务和 syslog 服务:
sudo systemctl restart vshelld sudo systemctl restart rsyslog
选项 2:通过 AWS S3 进行集成
此选项适用于需要日志归档或无法直接转发 syslog 的环境。请注意,由于 AWS Lambda 无法访问本地文件,因此需要在 VShell 服务器上安装日志传送程序。
为 Google SecOps 配置 AWS S3 存储桶和 IAM
- 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶
- 保存存储桶名称和区域以供日后参考(例如
vandyke-sftp-logs)。 - 按照以下用户指南创建用户:创建 IAM 用户。
- 选择创建的用户。
- 选择安全凭据标签页。
- 在访问密钥部分中,点击创建访问密钥。
- 选择第三方服务作为使用情形。
- 点击下一步。
- 可选:添加说明标记。
- 点击创建访问密钥。
- 点击下载 .csv 文件以保存访问密钥和密钥,供日后参考。
- 点击完成。
- 选择权限标签页。
- 在权限政策部分中,点击添加权限。
- 选择添加权限。
- 选择直接附加政策。
- 搜索 AmazonS3FullAccess 政策。
- 选择相应政策。
- 点击下一步。
- 点击添加权限。
在 VShell 服务器上安装和配置日志传送程序
根据您的操作系统,从下列选项中选择一项:
选项 A:使用 NXLog (Windows)
- 从 nxlog.co 下载并安装 NXLog 社区版。
修改
C:\Program Files\nxlog\conf\nxlog.conf:<Extension json> Module xm_json </Extension> <Extension syslog> Module xm_syslog </Extension> <Input vshell_log> Module im_file File "C:\\Program Files\\VanDyke Software\\VShell\\Log\\VShell.log" SavePos TRUE <Exec> # Parse VShell log format if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) "(.*)"$/ { $EventTime = $1; $Protocol = $2; $EventType = $3; $SessionID = $4; $ClientIP = $5; $ClientPort = $6; $Username = $7; $Filename = $9; $BytesDown = $10; $BytesUp = $11; $ServerIP = $14; $ServerPort = $15; $EventMessage = $16; # Convert to JSON to_json(); } </Exec> </Input> <Output s3> Module om_exec Command C:\scripts\upload_to_s3.ps1 Args %FILEPATH% </Output> <Route vshell_to_s3> Path vshell_log => s3 </Route>创建 PowerShell 脚本
C:\scripts\upload_to_s3.ps1:param([string]$FilePath) $bucket = "vandyke-sftp-logs" $key = "vshell/$(Get-Date -Format 'yyyy/MM/dd/HH')/$(Get-Date -Format 'yyyyMMddHHmmss').json" # Batch logs $logs = Get-Content $FilePath | ConvertFrom-Json $jsonLines = $logs | ForEach-Object { $_ | ConvertTo-Json -Compress } $content = $jsonLines -join "`n" # Upload to S3 Write-S3Object -BucketName $bucket -Key $key -Content $content -ProfileName default创建 AWS 凭据配置文件:
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default使用任务计划程序将 PowerShell 脚本安排为每 5 分钟运行一次。
选项 B:使用 Fluent Bit (Linux)
安装 Fluent Bit:
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh配置
/etc/fluent-bit/fluent-bit.conf:[SERVICE] Flush 5 Daemon On Log_Level info [INPUT] Name tail Path /var/log/vshell/vshell.log Parser vshell_parser Tag vshell.* Refresh_Interval 5 Mem_Buf_Limit 10MB [PARSER] Name vshell_parser Format regex Regex ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<protocol>\S+) (?<event_type>\S+) (?<session_id>\S+) (?<client_ip>\S+) (?<client_port>\S+) (?<username>\S+) (?<dash>\S+) (?<filename>\S+) (?<bytes_down>\S+) (?<bytes_up>\S+) (?<field1>\S+) (?<field2>\S+) (?<server_ip>\S+) (?<server_port>\S+) "(?<event_message>[^"]*)" [OUTPUT] Name s3 Match vshell.* bucket vandyke-sftp-logs region us-east-1 use_put_object On total_file_size 5M upload_timeout 10s compression gzip s3_key_format /vshell/%Y/%m/%d/%H/%{hostname}_%{uuid}.json.gz配置 AWS 凭据:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY启动 Fluent Bit:
sudo systemctl enable fluent-bit sudo systemctl start fluent-bit
在 Google SecOps 中配置 Feed 以注入 VanDyke VShell 日志
- 依次前往 SIEM 设置 > Feed。
- 点击 + 添加新 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如
VanDyke VShell SFTP logs)。 - 选择 Amazon S3 V2 作为来源类型。
- 选择 VanDyke SFTP 作为日志类型(自定义)。
- 点击下一步。
- 为以下输入参数指定值:
- S3 URI:
s3://vandyke-sftp-logs/vshell/ - 源删除选项:根据您的偏好选择保留(推荐)或删除选项。
- 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
- 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。
- 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
- 资源命名空间:资源命名空间。
- 注入标签:应用于此 Feed 中事件的标签。
- S3 URI:
- 点击下一步。
- 在最终确定界面中查看新的 Feed 配置,然后点击提交。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
agent.id |
read_only_udm.observer.asset_id |
将“filebeat:”与 agent.id 字段的值串联起来 |
agent.type |
read_only_udm.observer.application |
直接映射 agent.type 字段的值 |
agent.version |
read_only_udm.observer.platform_version |
直接映射 agent.version 字段的值 |
ecs.version |
read_only_udm.metadata.product_version |
直接映射 ecs.version 字段的值 |
host.architecture |
read_only_udm.target.asset.hardware.cpu_platform |
直接映射 host.architecture 字段的值 |
host.hostname |
read_only_udm.target.hostname |
直接映射 host.hostname 字段的值 |
host.id |
read_only_udm.principal.asset_id |
将“VANDYKE_SFTP:”与 host.id 字段的值串联起来 |
host.ip |
read_only_udm.target.ip |
将 host.ip 数组中的每个 IP 地址直接映射到单独的 read_only_udm.target.ip 字段 |
host.mac |
read_only_udm.target.mac |
将 host.mac 数组中的每个 MAC 地址直接映射到单独的 read_only_udm.target.mac 字段 |
host.os.kernel |
read_only_udm.target.platform_patch_level |
直接映射 host.os.kernel 字段的值 |
host.os.platform |
read_only_udm.target.platform |
根据 host.os.platform 的值,将其映射到 WINDOWS、LINUX、MAC 或 UNKNOWN_PLATFORM |
host.os.version |
read_only_udm.target.platform_version |
直接映射 host.os.version 字段的值 |
log.file.path |
read_only_udm.principal.process.file.full_path |
直接映射 log.file.path 字段的值 |
logstash.collect.timestamp |
read_only_udm.metadata.collected_timestamp |
解析 logstash.collect.timestamp 字段中的时间戳,并将其转换为时间戳对象 |
logstash.irm_environment |
read_only_udm.additional.fields.value.string_value |
直接映射 logstash.irm_environment 字段的值。键设置为“irm_environment” |
logstash.irm_region |
read_only_udm.additional.fields.value.string_value |
直接映射 logstash.irm_region 字段的值。键设置为“irm_region” |
logstash.irm_site |
read_only_udm.additional.fields.value.string_value |
直接映射 logstash.irm_site 字段的值。键设置为“irm_site” |
logstash.process.host |
read_only_udm.observer.hostname |
直接映射 logstash.process.host 字段的值 |
message |
用于使用 Grok 模式和正则表达式提取各种字段 | |
read_only_udm.metadata.event_type |
设置为“NETWORK_FTP” | |
read_only_udm.metadata.log_type |
设置为“VANDYKE_SFTP” | |
read_only_udm.metadata.product_event_type |
使用 Grok 模式从消息字段中提取 | |
read_only_udm.metadata.product_name |
设置为“VANDYKE_SFTP” | |
read_only_udm.metadata.vendor_name |
设置为“VANDYKE SOFTWARE” | |
read_only_udm.network.application_protocol |
如果说明字段包含“SSH2”或“SSH”,则设置为“SSH”;否则,如果方法字段与 HTTP 方法匹配,则设置为“HTTP” | |
read_only_udm.network.http.method |
使用 Grok 模式从消息字段中提取,仅当匹配常见的 HTTP 方法时才提取 | |
read_only_udm.network.http.referral_url |
使用 Grok 模式从消息字段中提取 | |
read_only_udm.network.http.response_code |
使用 Grok 模式从消息字段中提取并转换为整数 | |
read_only_udm.network.ip_protocol |
如果说明字段包含“TCP”,则设置为“TCP” | |
read_only_udm.principal.ip |
使用 Grok 模式从消息字段中提取 | |
read_only_udm.principal.port |
使用 Grok 模式从消息字段中提取并转换为整数 | |
read_only_udm.security_result.description |
使用 Grok 模式从消息字段中提取 | |
read_only_udm.security_result.severity |
如果 syslog_severity 为“error”或“warning”,则设置为“HIGH”;如果为“notice”,则设置为“MEDIUM”;如果为“information”或“info”,则设置为“LOW” | |
read_only_udm.security_result.severity_details |
直接映射 syslog_severity 字段的值 | |
read_only_udm.target.ip |
使用 Grok 模式从消息字段中提取 | |
read_only_udm.target.port |
使用 Grok 模式从消息字段中提取并转换为整数 | |
read_only_udm.target.process.pid |
使用 Grok 模式从消息字段中提取 | |
syslog_severity |
用于确定 security_result 的严重程度 |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。