收集 Cisco FireSIGHT Management Center 日志
本文档介绍了如何使用 Bindplane 代理将 Cisco FireSIGHT Management Center 日志注入到 Google Security Operations。
Cisco FireSIGHT Management Center (FMC)(以前称为 FireSIGHT Management Center 或 Firepower Management Center)是一个集中式管理控制台,可为 Cisco Secure Firewall Threat Defense 设备提供全面的政策管理、事件分析和报告功能。FMC 可以通过 syslog 将连接事件、安全情报事件、入侵事件、文件事件和恶意软件事件发送到外部 SIEM 系统。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - Bindplane 代理与 Cisco FireSIGHT Management Center 之间的网络连接
- 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开
- 对 Cisco FireSIGHT Management Center 网页界面的特权访问权限
- FMC 中的管理员或安全分析师用户角色
获取 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等待安装完成。
运行以下命令来验证安装:
sc query observiq-otel-collector该服务应显示为 RUNNING。
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh等待安装完成。
运行以下命令来验证安装:
sudo systemctl status observiq-otel-collector
该服务应显示为有效(正在运行)。
其他安装资源
如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南。
配置 Bindplane 代理以注入 syslog 并将其发送到 Google SecOps
找到配置文件
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
修改配置文件
将
config.yaml的全部内容替换为以下配置:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/cisco_fmc: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: CISCO_FIRESIGHT raw_log_field: body ingestion_labels: env: production source: fmc service: pipelines: logs/fmc_to_chronicle: receivers: - udplog exporters: - chronicle/cisco_fmc替换以下占位符:
接收器配置:
listen_address:设置为0.0.0.0:514可在 UDP 端口51上监听所有接口。如果端口514在 Linux 上需要 root 权限,请改用端口1514,并配置 FMC 以发送到该端口。
导出器配置:
creds_file_path:提取身份验证文件的完整路径:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID:替换为您的customer ID。如需了解详情,请参阅获取 Google SecOps 客户 ID。endpoint:区域端点网址:- 美国:
malachiteingestion-pa.googleapis.com - 欧洲:
europe-malachiteingestion-pa.googleapis.com - 亚洲:
asia-southeast1-malachiteingestion-pa.googleapis.com
- 美国:
log_type:设置为CISCO_FIRESIGHT(需要完全匹配)ingestion_labels:用于过滤和组织的可选标签
保存配置文件
修改后,保存文件:
- Linux:依次按
Ctrl+O、Enter和Ctrl+X - Windows:依次点击文件 > 保存
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请执行以下操作:
运行以下命令:
sudo systemctl restart observiq-otel-collector验证服务是否正在运行:
sudo systemctl status observiq-otel-collector检查日志是否存在错误:
sudo journalctl -u observiq-otel-collector -f
如需在 Windows 中重启 Bindplane 代理,请执行以下操作:
请从下列选项中选择一项:
以管理员身份运行命令提示符或 PowerShell:
net stop observiq-otel-collector && net start observiq-otel-collector服务控制台:
- 按
Win+R,输入services.msc,然后按 Enter 键。 - 找到 observIQ OpenTelemetry 收集器。
- 右键点击并选择重新启动。
- 按
验证服务是否正在运行:
sc query observiq-otel-collector检查日志是否存在错误:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
配置 Cisco FireSIGHT Management Center syslog 转发
本部分介绍如何配置 FMC,以将 Firepower Threat Defense 设备的安全事件 syslog 消息(连接、安全情报、入侵、文件和恶意软件事件)发送到 Bindplane 代理。
为 Firepower Threat Defense 设备配置 syslog 设置
- 登录 Cisco FireSIGHT Management Center 网页界面。
- 依次前往设备 > 平台设置。
- 修改与 Firepower Threat Defense 设备关联的平台设置政策,或创建新政策。
- 在左侧导航窗格中,点击 Syslog。
- 点击 Syslog 服务器,然后点击添加以配置新的 Syslog 服务器。
- 提供以下配置详细信息:
- IP 地址:输入 Bindplane 代理主机(例如
192.168.1.100)的 IP 地址。 - 协议:选择 UDP。
- 端口:输入
514(如果您已将 Bindplane 配置为监听非特权端口,则输入1514)。 - 接口:选择管理接口或可访问 Bindplane 代理的接口。
- IP 地址:输入 Bindplane 代理主机(例如
- 点击 OK 以保存 syslog 服务器配置。
- 点击 Syslog 设置,然后配置以下设置:
- 勾选 Enable Timestamp on Syslog Messages。
- 时间戳格式:选择 ISO 8601(建议用于 Chronicle)。
- 勾选启用 Syslog 设备 ID,并可选择性地输入自定义设备标识符。
- 点击日志记录设置。
- 选择是否以 EMBLEM 格式发送系统日志。对于 Chronicle 提取,支持任一格式。
- 点击保存以保存平台设置政策。
配置访问权限控制政策日志记录设置
- 在 Cisco FireSIGHT Management Center 网页界面中,依次前往政策 > 访问控制。
- 修改适用的访问权限控制政策。
- 点击日志记录标签页。
- 选择 FTD 6.3 及更高版本:使用部署在设备上的 FTD 平台设置政策中配置的 syslog 设置。
- (可选)选择一个 Syslog 严重程度级别(例如信息或提醒)。
- 如果您要发送文件和恶意软件事件,请选中针对文件和恶意软件事件发送 Syslog 消息。
- 点击保存。
为安全情报事件启用日志记录
- 在同一访问权限控制政策中,点击安全情报标签页。
- 在以下每个位置,点击日志记录并启用日志记录:
- 在 DNS 政策旁边:点击日志记录,启用在连接开始时记录和在连接结束时记录,并启用 Syslog 服务器。
- 在网络的屏蔽列表框中:点击日志记录,启用在连接开始时记录日志和在连接结束时记录日志,然后启用 Syslog 服务器。
- 在 网址 的阻止列表框中:点击日志记录,启用在连接开始时记录和在连接结束时记录,并启用 Syslog 服务器。
- 点击保存。
为访问权限控制规则启用 syslog 日志记录
- 在同一访问权限控制政策中,点击规则标签页。
- 点击相应规则即可进行修改。
- 点击规则中的日志记录标签页。
- 选择是否记录连接的开始或结束时间,或者同时记录两者:
- 选中在连接开始时记录日志(生成大量日志)。
- 勾选在连接结束时记录日志(建议在大多数使用场景下勾选)。
- 如果您要记录文件事件,请选中日志文件。
- 勾选 Syslog 服务器。
- 验证该规则是否在访问控制日志记录中使用默认 syslog 配置。不配置替换。
- 点击添加以保存此规则。
- 针对政策中要记录的每条规则重复执行第 2-8 步。
配置入侵政策 syslog 设置
- 依次前往政策 > 入侵。
- 修改与访问权限控制政策关联的入侵政策。
- 依次点击高级设置 > Syslog 提醒。
- 将 Syslog Alerting(Syslog 提醒)设置为 Enabled(已启用)。
- 点击 Syslog 提醒旁边的修改。
- 配置以下设置:
- 日志记录主机:留空此字段可使用在 FTD 平台设置中配置的 syslog 设置。如果您在此处指定了日志记录主机,则还必须配置设施和严重程度。
- 设施:仅当您指定日志记录主机时适用。选择一个设施(例如 AUTH 或 LOCAL0)。
- 严重程度:仅在您指定了日志记录主机时适用。选择严重程度(例如信息或提醒)。
- 点击 Back(返回)。
- 点击左侧导航窗格中的政策信息。
- 点击提交更改。
部署配置变更
- 配置完所有 syslog 设置后,将更改部署到受管设备。
- 在 Cisco FireSIGHT Management Center 网页界面中,点击右上角的部署。
- 选择要将配置部署到的设备。
- 点击部署以应用更改。
验证 Syslog 转发
- 在 Firepower Threat Defense 设备上生成测试流量或安全事件。
- 检查 Bindplane 代理日志,验证是否正在接收 syslog 消息:
Linux:
sudo journalctl -u observiq-otel-collector -fWindows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
登录 Google SecOps 控制台,并验证事件是否显示在事件查看器中。
支持的事件类型
Cisco FireSIGHT Management Center 可以通过 syslog 将以下事件类型发送到 Google SecOps:
| 事件类型 | 说明 |
|---|---|
| 连接事件 | 受监控主机与所有其他主机之间的网络连接数据 |
| 安全智能事件 | 与安全情报屏蔽名单(IP、网址、DNS)相关的事件 |
| 入侵事件 | 受管设备生成的入侵检测和防御事件 |
| 文件事件 | 文件分析事件 |
| 恶意软件事件 | 恶意软件检测事件 |
Syslog 消息格式
Cisco FireSIGHT Management Center 会以以下格式发送 syslog 消息:
连接事件示例:
<134>1 2024-01-15T10:15:45.123Z fmc-hostname %FTD-6-430003: EventPriority: Low, DeviceUUID: abc123, InstanceID: 1, FirstPacketSecond: 1705318545, ConnectionID: 12345, AccessControlRuleAction: Allow, SrcIP: 10.0.0.5, DstIP: 8.8.8.8, SrcPort: 54321, DstPort: 53, Protocol: udp, IngressInterface: inside, EgressInterface: outside, IngressZone: inside-zone, EgressZone: outside-zone, ACPolicy: Default-Policy, AccessControlRuleName: Allow-DNS, User: user@example.com, ApplicationProtocol: DNS, InitiatorBytes: 64, ResponderBytes: 128入侵事件示例:
<134>1 2024-01-15T10:16:30.456Z fmc-hostname %FTD-4-430001: EventPriority: High, DeviceUUID: abc123, InstanceID: 1, SrcIP: 192.168.1.100, DstIP: 10.0.0.50, SrcPort: 12345, DstPort: 80, Protocol: tcp, IngressInterface: outside, EgressInterface: inside, IngressZone: outside-zone, EgressZone: inside-zone, IntrusionPolicy: Security-Over-Connectivity, SignatureID: 1:2024123:1, SignatureGeneratorID: 1, Classification: web-application-attack, Priority: 1, Message: SQL injection attempt detected
syslog 消息包含以英文逗号分隔的键值对,因此适合由 Google SecOps 进行解析。
限制
- 事件从 FMC 发送后,最长可能需要 15 分钟才能显示在 Google SecOps 中。
- 无法通过 syslog 获取回顾性恶意软件事件。
- 通过 syslog 无法获取由 AMP for Endpoints 生成的事件。
- 通过 eStreamer API 提供的某些元数据未包含在 syslog 消息中(例如,来自 LDAP 的详细用户信息、扩展应用元数据、地理定位数据)。
- 如果您配置的对象名称(政策名称、规则名称)包含英文逗号等特殊字符,则可能会干扰 syslog 解析。避免在对象名称中使用特殊字符。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| WebApplication、网址Reputation、EgressInterface、IngressInterface、ACPolicy、NAPPolicy、ConnectionID、ssl_ticket_id、qoa_applied_interface、sinkhole_uuid、security_context、sec_zone_egress、sec_zone_ingress | additional.fields | 如果非空,则从各种标签字段合并 |
| eventType | extensions.auth.type | 如果 eventType 为“USER_LOGIN_INFORMATION”,则设置为“VPN” |
| 漏洞 | extensions.vulns.vulnerabilities | 如果非空,则从漏洞中合并 |
| flowStatistics.httpReferrer | http.referral_url | 直接复制值 |
| flowStatistics.httpResponse | http.response_code | 转换为整数 |
| flowStatistics.userAgent | http.user_agent | 直接复制值 |
| _intermediary | 中介 | 如果非空,则从 _intermediary 合并 |
| recordTypeDescription, entry.message | metadata.description | 如果 recordTypeDescription 不为空,则取自该字段;否则,取自 entry.message |
| event_second、connection_timestamp、_serverTimestamp | metadata.event_timestamp | 从 event_second 解析出的日期(如果不为空),否则为 connection_timestamp,否则为 _serverTimestamp |
| event_type | metadata.event_type | 直接复制值 |
| prod_event_type、eventId、recordTypeCategory、应用、_recordTypeName、eventType | metadata.product_event_type | 如果 prod_event_type 不为空,则为 prod_event_type 中的值;否则为 eventId;否则为 recordTypeCategory;否则为 app;否则为 _recordTypeName;否则为 eventType |
| DeviceUUID | metadata.product_log_id | 直接复制值 |
| flowStatistics.clientAppVersion, client_version | metadata.product_version | 如果 flowStatistics.clientAppVersion 不为空,则为该值;否则为 client_version |
| flowStatistics.clientAppURL | metadata.url_back_to_product | 直接复制值 |
| ApplicationProtocol | network.application_protocol | 如果匹配 (?i)ldap,则设置为“LDAP”;如果匹配 (?i)https,则设置为“HTTPS”;如果匹配 (?i)http,则设置为“HTTP” |
| 答案 | network.dns.answers | 从回答中合并 |
| flowStatistics.dnsQuery | network.dns.answers.name | 直接复制值 |
| flowStatistics.dnsTTL | network.dns.answers.ttl | 已转换为 uinteger |
| flowStatistics.dnsRecordType | network.dns.answers.type | 已转换为 uinteger |
| flowStatistics.dnsResponseType | network.dns.response_code | 已转换为 uinteger |
| user_agent | network.http.parsed_user_agent | 已转换为 parseduseragent |
| user_agent | network.http.user_agent | 直接复制值 |
| proto、Protocol、inputType、proto_type、protocol、ip_v4_protocol、protocol_number_src | network.ip_protocol | 根据具有协议映射和情形的各种字段进行设置 |
| ResponderBytes、flowStatistics.bytesReceived | network.received_bytes | 如果 ResponderBytes 不为空,则返回 ResponderBytes 中的值;否则,返回 flowStatistics.bytesReceived(转换为 uinteger) |
| ResponderPackets | network.received_packets | 转换为整数 |
| InitiatorBytes、flowStatistics.bytesSent | network.sent_bytes | 如果 InitiatorBytes 不为空,则使用该值;否则,使用 flowStatistics.bytesSent(转换为 uinteger) |
| InitiatorPackets、packet_data | network.sent_packets | 如果 InitiatorPackets 不为空,则使用 InitiatorPackets 中的值,否则使用 packet_data,并转换为整数 |
| ssl_session_id | network.session_id | 直接复制值 |
| ssl_cipher_suite | network.tls.cipher | 直接复制值 |
| agent_type、agent_version | observer.application | 如果两者都不为空,则串联为 agent_type agent_version |
| entry.host.hostname | observer.hostname | 直接复制值 |
| entry.host.ip | observer.ip | 从 entry.host.ip 合并 |
| entry.host.mac | observer.mac | 已从 entry.host.mac 合并 |
| clientApplication、hold.app_string | principal.application | 如果 clientApplication 中的值不为空,则为该值;否则为 hold.app_string |
| prin_host、DeviceAddress、principal_hostname | principal.asset.hostname | 如果 prin_host 不为空,则为 prin_host 中的值;否则,如果 sourceAddress 为空,则为 DeviceAddress;否则为 principal_hostname |
| SrcIP、principal_ip、source_address_IPv4v6 | principal.asset.ip | 从 SrcIP(经过 grok 验证)、principal_ip、source_address_IPv4v6(经过 grok 验证)合并 |
| file_sha_hash、sha_hash | principal.file.sha256 | 如果 file_sha_hash 不为空,则为 file_sha_hash 中的值;否则为 sha_hash |
| prin_host、DeviceAddress、principal_hostname | principal.hostname | 如果 prin_host 不为空,则为 prin_host 中的值;否则,如果 sourceAddress 为空,则为 DeviceAddress;否则为 principal_hostname |
| SrcIP、principal_ip、source_address_IPv4v6 | principal.ip | 从 SrcIP(经过 grok 验证)、principal_ip、source_address_IPv4v6(经过 grok 验证)合并 |
| flowStatistics.initiatorCountry.geolocation.countryName, src_ip_country | principal.location.country_or_region | 如果 flowStatistics.initiatorCountry.geolocation.countryName 不为空,则为该值;否则为 src_ip_country |
| entry.macAddress | principal.mac | 从 entry.macAddress 合并 |
| host_os_platform | principal.platform | 如果是 centos,则设置为 LINUX,否则设置为 entry.host.os.platform 的大写形式 |
| entry.host.os.kernel | principal.platform_patch_level | 直接复制值 |
| identityData.fingerprintUUID.osName, osFingerprint.fingerprintUUID.osName | principal.platform_version | 如果 identityData 不为空,则为串联的 osName osVersion;否则为 osFingerprint |
| SrcPort、entry.sourcePort、entry.sourcePortOrIcmpType、source_port、flowStatistics.initiatorPort、source_port_or_icmp_code | principal.port | 如果 SrcPort 不为空,则使用 SrcPort 中的值;否则,使用 entry.sourcePort;否则,使用 entry.sourcePortOrIcmpType;否则,使用 source_port;否则,使用 flowStatistics.initiatorPort;否则,使用 source_port_or_icmp_code;转换为整数 |
| isecurityZoneName | principal.resource.attribute.labels | 已从 isecurityZoneName 合并 |
| DeviceType | principal.resource.name | 直接复制值 |
| principal.resource.resource_type | 设置为“DEVICE” | |
| entry.computed.user | principal.user.user_display_name | 已转换为字符串 |
| entry.userId、user_id、flowStatistics.user.userId、entry.computed.user、userLoginInformation.userName | principal.user.userid | 如果 entry.userId 不为空,则返回该值;否则,返回 user_id;否则,返回 flowStatistics.user.userId;否则,返回 entry.computed.user;否则,返回 userLoginInformation.userName |
| connectionID_label、FirstPacketSecond_label | sec_result.about.resource.attribute.labels | 如果非空,则从 connectionID_label 和 FirstPacketSecond_label 合并 |
| sec_result_action | sec_result.action | 从 sec_result_action 合并 |
| flowStatistics.securityIntelligenceList1.securityIntelligenceListName | sec_result.category | 如果 rule_name 为 Malware,则设置为 NETWORK_MALICIOUS;如果 rule_name 为 Anomali_IP,则设置为 NETWORK_SUSPICIOUS |
| classification.description, userLoginInformation.description, sec_desc | sec_result.description | 如果 classification.description 不为空,则返回该值;否则,返回 userLoginInformation.description;否则,返回 sec_desc |
| entry.computed.priority | sec_result.priority | 大写 entry.computed.priority _PRIORITY |
| entry.ruleId, rule_ruleId | sec_result.rule_id | 如果 entry.ruleId 不为空,则为 entry.ruleId 中的值,否则为 rule_ruleId |
| AccessControlRuleName、rule_message、fw_rule、flowStatistics.securityIntelligenceList1.securityIntelligenceListName | sec_result.rule_name | 如果 AccessControlRuleName 不为空,则为 AccessControlRuleName 中的值;否则,为 rule_message;否则,为 fw_rule;否则,为 flowStatistics.securityIntelligenceList1.securityIntelligenceListName |
| EventPriority、sec_severity、severity_code、priority_name | sec_result.severity | 如果 EventPriority 为 Low,则设置为 LOW;如果为 High,则设置为 HIGH;如果为 Medium,则设置为 MEDIUM;否则,根据 sec_severity 映射设置;否则,根据 severity_code 映射设置;否则,将 priority_name 设置为大写 |
| 用户 | sec_result.summary | 直接复制值 |
| threat_name | sec_result.threat_name | 直接复制值 |
| security_result | security_result | 从 security_result 合并 |
| firewallRuleAction、hold.action、AccessControlRuleAction、sec_result_action、vendor_blocked | security_result.action | 如果不是 no_action,则为 firewallRuleAction 的大写值;否则为 hold.action;否则为 AccessControlRuleAction(区分大小写);否则为 sec_result_action;否则为 vendor_blocked(0 为 ALLOW,否则为 BLOCK) |
| disposition | security_result.action_details | 如果处置为 3,则设置为“已感染”,否则设置为“未知” |
| eventDescription | security_result.description | 直接复制值 |
| firewallRule | security_result.rule_name | 直接复制值 |
| threat_name | security_result.threat_name | 直接复制值 |
| hostService.webApplication.webApplication0.applicationId.webApplicationName | target.application | 直接复制值 |
| DstIP、entry.destinationIpAddress、dest_ip、flowStatistics.responderIPAddress、destination_address_IPv4v6 | target.asset.ip | 合并自 DstIP (grok)、entry.destinationIpAddress、dest_ip、flowStatistics.responderIPAddress、destination_address_IPv4v6 (grok) |
| InstanceID、flowStatistics.clientAppId | target.asset_id | 如果 InstanceID 不为空,则为 InstanceID 中的值;否则为“Client_app_id: ”+ flowStatistics.clientAppId |
| 文件 | target.file | 从文件重命名 |
| DstIP、entry.destinationIpAddress、dest_ip、flowStatistics.responderIPAddress、destination_address_IPv4v6 | target.ip | 合并自 DstIP (grok)、entry.destinationIpAddress、dest_ip、flowStatistics.responderIPAddress、destination_address_IPv4v6 (grok) |
| flowStatistics.responderCountry.geolocation.countryName, dest_ip_country, entry.country.data | target.location.country_or_region | 如果 flowStatistics.responderCountry.geolocation.countryName 不为空,则为该值;否则为 dest_ip_country;否则为 entry.country.data |
| MACAddress | target.mac | 小写 MACAddress(如果不是 00:00:00:00:00:00) |
| DstPort、entry.destinationPort、entry.destinationPortOrIcmpType、dest_port、flowStatistics.responderPort、destination_port_or_icmp_code | target.port | 如果 DstPort 不为空,则为 DstPort 中的值;否则为 entry.destinationPort;否则为 entry.destinationPortOrIcmpType;否则为 dest_port;否则为 flowStatistics.responderPort;否则为 destination_port_or_icmp_code,并转换为整数 |
| securityZoneName, det_engine, file_num, file_pos, rec_length | target.resource.attribute.labels | 如果 securityZoneName、det_engine、file_num、file_pos、rec_length 不为空,则合并这些值 |
| 网址 | target.url | 直接复制值 |
| entry.user.username.data | target.user.userid | 直接复制值 |
| descript | vulnerabilities.description | 直接复制值 |
| severity_detail | vulnerabilities.severity_details | 直接复制值 |
| 产品 | vulnerabilities.vendor | 直接复制值 |
| metadata.product_name | 设置为“CISCO_FIRESIGHT” | |
| metadata.vendor_name | 设置为“CISCO MANAGEMENT CENTER” |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。