收集 Imperva WAF 日志

支持的语言:

本文档介绍了如何使用 API(拉取)或 Amazon S3(推送)从 Imperva Web 应用防火墙 (WAF) 收集日志到 Google Security Operations。解析器会将 SYSLOG+KV、JSON、CEF 和 LEEF 格式的日志转换为统一数据模型 (UDM)。它会处理各种日志结构,提取相关字段,将其归一化为 UDM 属性,并使用上下文信息丰富数据,以增强安全性分析。

准备工作

确保您满足以下前提条件:

  • 最符合您的配置要求的提取类型(API 或 Amazon S3)。
  • Google SecOps 实例。
  • 对 AWS 的特权访问权限。
  • 对 Imperva WAF 的特权访问权限。

使用 API 收集 Imperva WAF 日志

为 Imperva WAF 配置只读用户

  1. 使用具有特权权限的账号登录 Imperva 控制台
  2. 依次前往设置 > 用户和角色
  3. 点击 Add User(添加用户)。
  4. 填写必填字段:
    • 用户名:输入唯一的用户名。
    • 密码:设置安全系数高的密码。
    • 电子邮件地址:提供用户的电子邮件地址。
    • 角色部分,选择阅读者角色。
  5. 点击保存以创建具有只读权限的用户。

可选:将 Reader 用户配置为“仅限 API”

  1. 用户列表中,找到新创建的用户。
  2. 点击用户名称旁边的操作按钮(三点状图标)。
  3. 选择设为仅限 API 的用户

生成 API ID 和 API 密钥

  1. 用户列表中,选择新创建的用户。
  2. 选择设置,然后点击 API 密钥
  3. 点击 Add API Key
  4. 填写必填字段:
    • 名称:为 API 密钥输入一个描述性名称。
    • 可选:说明:提供说明(可选)。
    • API 密钥将在以下时间过期列表中,选择永不过期
    • 如需启用,请选择状态
  5. 点击保存

系统会显示 API ID 和 API 密钥。请复制并保存这些凭据,因为它们不会再次显示。

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed
  • 内容中心 > 内容包

通过“SIEM 设置”>“Feed”设置 Feed

如需配置 Feed,请按以下步骤操作:

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称,例如 Imperva Incapsula WAF 日志
  5. 选择第三方 API 作为来源类型
  6. 选择 Imperva 作为日志类型
  7. 点击下一步
  8. 为以下输入参数指定值:
    • 身份验证 HTTP 标头:在两行中输入 Imperva API ID 和密钥:apiId:<YOUR_API_ID>apiKey:<YOUR_API_KEY>
  9. 点击下一步
  10. 最终确定界面中检查 Feed 配置,然后点击提交

设置来自内容中心的 Feed

为以下字段指定值:

  • 身份验证 HTTP 标头:在两行中输入 Imperva API ID 和密钥:apiId:<YOUR_API_ID>apiKey:<YOUR_API_KEY>

高级选项

  • Feed 名称:用于标识 Feed 的预填充值。
  • 来源类型:用于将日志收集到 Google SecOps 中的方法。
  • 资源命名空间:与 Feed 关联的命名空间。
  • 提取标签:应用于相应 Feed 中所有事件的标签。

使用 Amazon S3 收集 Imperva WAF 日志

配置 AWS IAM 和 S3

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存相应存储桶的名称区域以备后用。
  3. 按照以下用户指南创建用户创建 IAM 用户
  4. 选择创建的用户
  5. 选择安全凭据标签页。
  6. 访问密钥部分中,点击创建访问密钥
  7. 选择第三方服务作为使用情形
  8. 点击下一步
  9. 可选:添加说明标记。
  10. 点击创建访问密钥
  11. 点击下载 .csv 文件,然后保存访问密钥密钥以供日后使用。
  12. 点击完成
  13. 选择权限标签页。
  14. 权限政策部分中,点击添加权限
  15. 选择添加权限
  16. 选择直接附加政策
  17. 搜索并选择 AmazonS3FullAccess 政策。
  18. 点击下一步
  19. 点击添加权限

配置 Imperva WAF Amazon S3 连接

  1. 使用具有特权权限的账号登录 Imperva 控制台
  2. 依次前往日志 > 日志设置
  3. 选择 Amazon S3
  4. 填写必填字段:
    • 访问密钥
    • 密钥
    • 路径:以以下格式输入路径:<Amazon S3 bucket name>/<log folder>;例如:MyBucket/MyIncapsulaLogFolder
  5. 点击测试连接,以执行完整的测试周期,在此期间,系统会将测试文件传输到您指定的目标文件夹。
  6. 选择日志文件的格式为 CEF
  7. 默认情况下,日志文件会进行压缩。将选项设置为不压缩文件。

在 Google SecOps 中配置 Feed 以从 Amazon S3 注入 Imperva WAF 日志

  1. 依次前往 SIEM 设置> Feed
  2. 点击新增
  3. Feed name(Feed 名称)字段中,输入 Feed 的名称,例如 Imperva WAF Logs
  4. 选择 Amazon S3 作为来源类型
  5. 选择 Imperva 作为日志类型
  6. 点击下一步
  7. 为以下输入参数指定值:

    • 区域:Amazon S3 存储桶所在的区域。
    • S3 URI:存储桶 URI。
      • s3://your-log-bucket-name/
      • your-log-bucket-name 替换为存储桶的实际名称。
    • URI is a:选择目录目录(包括子目录)
    • 来源删除选项:根据您的偏好设置选择删除选项。
    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。
    • 私有访问密钥:有权访问 S3 存储桶的用户的私有密钥。
    • 资源命名空间资源命名空间
    • 注入标签:要应用于此 Feed 中事件的标签。
  8. 点击下一步

  9. 最终确定界面中查看新的 Feed 配置,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
account_id target.user.userid JSON 对象中的账号 ID
act security_result.action 如果 actallowedalert、以 REQ_PASSED 开头或以 REQ_CACHED 开头,则设置为 ALLOW。如果 actdenyblocked、以 REQ_BLOCKED 开头或以 REQ_CHALLENGE 开头,则设置为 BLOCK。如果 act 与正则表达式 (?i)REQ_BAD 匹配,则设置为 FAIL。否则,请将其设置为 UNKNOWN_ACTION
应用 network.application_protocol 已从 kv.app 重命名。已转换为大写。
calCountryOrRegion principal.location.country_or_region 已从 calCountryOrRegion 重命名。
security_result.action_details 如果 catREQ_PASSEDREQ_CACHED 开头,请将 action 设置为 ALLOW,并将 action_details 设置为基于 cat 值的说明。如果 catREQ_BAD 开头,则将 action 设置为 FAIL,并将 action_details 设置为基于 cat 值的说明。如果 catREQ_BLOCKEDREQ_CHALLENGE 开头,请将 action 设置为 BLOCK,并将 action_details 设置为基于 cat 值的说明。
cicode principal.location.city 已从 cicode 重命名。
classified_client security_result.detection_fields 如果 classified_client 不为空,则创建一个新的 detection_fields 条目,其键为 classified_client,值为 classified_client
client.domain principal.hostname、principal.asset.hostname 已从 client.domain 重命名。
client.geo.country_iso_code principal.location.country_or_region 已从 client.geo.country_iso_code 重命名。
client.ip principal.ip、principal.asset.ip 已合并到 principal.ipprincipal.asset.ip 中。
cn1 network.http.response_code 已从 cn1 重命名。已转换为整数。
context_key target.resource.name 已从 context_key 重命名。
国家/地区 principal.location.country_or_region 已从 country 重命名。
credentials_leaked security_result.detection_fields 已转换为字符串。如果不为空,则创建一个新的 detection_fields 条目,其键为 credentials_leaked,值为 credentials_leaked
cs1 security_result.detection_fields 如果 cs1 不为空,则为 NA 或 `, create a newdetection_fieldsentry with keycs1Labeland valuecs1`。
cs1Label security_result.detection_fields 用作根据 cs1 创建的 detection_fields 条目的键。
cs2 security_result.detection_fields 如果 cs2 不为空,则创建一个新的 detection_fields 条目,其中键为 cs2Label,值为 cs2
cs2Label security_result.detection_fields 用作根据 cs2 创建的 detection_fields 条目的键。
cs3 security_result.detection_fields 如果 cs3 不为空,则为 - 或 `, create a newdetection_fieldsentry with keycs3Labeland valuecs3`。
cs3Label security_result.detection_fields 用作根据 cs3 创建的 detection_fields 条目的键。
cs4 security_result.detection_fields 如果 cs4 不为空,则创建一个新的 detection_fields 条目,其中键为 cs4Label,值为 cs4
cs4Label security_result.detection_fields 用作根据 cs4 创建的 detection_fields 条目的键。
cs5 security_result.detection_fields 如果 cs5 不为空,则创建一个新的 detection_fields 条目,其中键为 cs5Label,值为 cs5
cs5Label security_result.detection_fields 用作根据 cs5 创建的 detection_fields 条目的键。
cs6 principal.application 已从 cs6 重命名。
cs7 principal.location.region_latitude 如果 cs7Labellatitude,则重命名为 principal.location.region_latitude。已转换为浮点数。
cs7Label 如果 cs7Labellatitude,则用于确定 cs7 的映射。
cs8 principal.location.region_longitude 如果 cs8Labellongitude,则重命名为 principal.location.region_longitude。已转换为浮点数。
cs8Label 如果 cs8Labellongitude,则用于确定 cs8 的映射。
cs9 security_result.rule_name, extensions.vulns.vulnerabilities.name 如果 cs9 不为空,则将其设置为 security_result.rule_name,并创建一个名为 cs9 的新 vulnerabilities 条目。
客户 target.user.user_display_name 已从 Customer 重命名。
declared_client security_result.detection_fields 如果 declared_client 不为空,则创建一个新的 detection_fields 条目,其键为 declared_client,值为 declared_client
说明 security_result.threat_name 已从 description 重命名。
deviceExternalId network.community_id 已从 deviceExternalId 重命名。
deviceReceiptTime metadata.event_timestamp 解析为日期并设置为 metadata.event_timestamp。如果为空,则改用 log_timestampkv.start
dhost target.hostname 已从 kv.dhost 重命名。
dproc security_result.category_details 已从 dproc 重命名。
dpt target.port 已从 kv.dpt 重命名。已转换为整数。
dst target.ip、target.asset.ip 如果 dst 不为空,则合并到 target.iptarget.asset.ip 中。
dstPort target.port 已从 dstPort 重命名。已转换为整数。
duser target.user.userid 如果 duser 与正则表达式 .*?Alert.* 不匹配且不为空,则重命名为 target.user.userid
end security_result.detection_fields 如果 end 不为空,则创建一个新的 detection_fields 条目,其中键为 event_end_time,值为 end
event.id JSON 对象中的活动 ID
event.provider principal.user.user_display_name 已从 event.provider 重命名。
failed_logins_last_24h security_result.detection_fields 已转换为字符串。如果不为空,则创建一个新的 detection_fields 条目,其键为 failed_logins_last_24h,值为 failed_logins_last_24h
文件 ID network.session_id 已从 fileId 重命名。
filePermission security_result.detection_fields 如果 filePermission 不为空,则创建一个新的 detection_fields 条目,其键为 filePermission,值为 filePermission
fileType security_result.detection_fields 如果 fileType 不为空,则创建一个新的 detection_fields 条目,其键为 fileType,值为 fileType
指纹 security_result.detection_fields 如果 fingerprint 不为空,则创建一个新的 detection_fields 条目,其中键为 log_imperva_fingerprint,值为 fingerprint
flexString1 network.http.response_code 已从 kv.flexString1 重命名。已转换为整数。
http.request.body.bytes network.sent_bytes 转换为无符号整数。已从 http.request.body.bytes 重命名。
http.request.method network.http.method 已从 http.request.method 重命名。
imperva.abp.apollo_rule_versions security_result.detection_fields 对于 imperva.abp.apollo_rule_versions 中的每个条目,创建一个新 detection_fields 条目,其键为 apollo_rule_versions_{index},值为相应条目。
imperva.abp.bot_behaviors security_result.detection_fields 对于 imperva.abp.bot_behaviors 中的每个条目,创建一个新 detection_fields 条目,其键为 bot_behaviors_{index},值为相应条目。
imperva.abp.bot_deciding_condition_ids security_result.detection_fields 对于 imperva.abp.bot_deciding_condition_ids 中的每个条目,创建一个新 detection_fields 条目,其键为 bot_deciding_condition_ids_{index},值为相应条目。
imperva.abp.bot_deciding_condition_names security_result.detection_fields 对于 imperva.abp.bot_deciding_condition_names 中的每个条目,创建一个新 detection_fields 条目,其键为 bot_deciding_condition_names_{index},值为相应条目。
imperva.abp.bot_triggered_condition_ids security_result.detection_fields 对于 imperva.abp.bot_triggered_condition_ids 中的每个条目,创建一个新 detection_fields 条目,其键为 bot_triggered_condition_ids_{index},值为相应条目。
imperva.abp.bot_triggered_condition_names security_result.detection_fields 对于 imperva.abp.bot_triggered_condition_names 中的每个条目,创建一个新 detection_fields 条目,其键为 bot_triggered_condition_names_{index},值为相应条目。
imperva.abp.bot_violations security_result.detection_fields 对于 imperva.abp.bot_violations 中的每个条目,创建一个新 detection_fields 条目,其键为 bot_violations_{index},值为相应条目。
imperva.abp.customer_request_id network.session_id 已从 imperva.abp.customer_request_id 重命名。
imperva.abp.headers_accept_encoding security_result.detection_fields 如果 imperva.abp.headers_accept_encoding 不为空,则创建一个新的 detection_fields 条目,其中键为 Accept Encoding,值为 imperva.abp.headers_accept_encoding
imperva.abp.headers_accept_language security_result.detection_fields 如果 imperva.abp.headers_accept_language 不为空,则创建一个新的 detection_fields 条目,其中键为 Accept Language,值为 imperva.abp.headers_accept_language
imperva.abp.headers_connection security_result.detection_fields 如果 imperva.abp.headers_connection 不为空,则创建一个新的 detection_fields 条目,其中键为 headers_connection,值为 imperva.abp.headers_connection
imperva.abp.headers_referer network.http.referral_url 已从 imperva.abp.headers_referer 重命名。
imperva.abp.hsig security_result.detection_fields 如果 imperva.abp.hsig 不为空,则创建一个新的 detection_fields 条目,其中键为 hsig,值为 imperva.abp.hsig
imperva.abp.monitor_action security_result.action、security_result.severity 如果 imperva.abp.monitor_action 与正则表达式 (?i)allow 匹配,则将 security_action 设置为 ALLOW,并将 severity 设置为 INFORMATIONAL。如果 imperva.abp.monitor_action 与正则表达式 (?i)captcha(?i)block 匹配,则将 security_action 设置为 BLOCK
imperva.abp.pid principal.process.pid 已从 imperva.abp.pid 重命名。
imperva.abp.policy_id security_result.detection_fields 如果 imperva.abp.policy_id 不为空,则创建一个新的 detection_fields 条目,其中键为 Policy Id,值为 imperva.abp.policy_id
imperva.abp.policy_name security_result.detection_fields 如果 imperva.abp.policy_name 不为空,则创建一个新的 detection_fields 条目,其中键为 Policy Name,值为 imperva.abp.policy_name
imperva.abp.random_id additional.fields 如果 imperva.abp.random_id 不为空,则创建一个新的 additional.fields 条目,其中键为 Random Id,值为 imperva.abp.random_id
imperva.abp.request_type principal.labels 如果 imperva.abp.request_type 不为空,则创建一个新的 principal.labels 条目,其中键为 request_type,值为 imperva.abp.request_type
imperva.abp.selector security_result.detection_fields 如果 imperva.abp.selector 不为空,则创建一个新的 detection_fields 条目,其中键为 selector,值为 imperva.abp.selector
imperva.abp.selector_derived_id security_result.detection_fields 如果 imperva.abp.selector_derived_id 不为空,则创建一个新的 detection_fields 条目,其中键为 selector_derived_id,值为 imperva.abp.selector_derived_id
imperva.abp.tls_fingerprint security_result.description 已从 imperva.abp.tls_fingerprint 重命名。
imperva.abp.token_id target.resource.product_object_id 已从 imperva.abp.token_id 重命名。
imperva.abp.zuid additional.fields 如果 imperva.abp.zuid 不为空,则创建一个新的 additional.fields 条目,其中键为 zuid,值为 imperva.abp.zuid
imperva.additional_factors additional.fields 对于 imperva.additional_factors 中的每个条目,创建一个新 additional.fields 条目,其键为 additional_factors_{index},值为相应条目。
imperva.audit_trail.event_action security_result.detection_fields 如果 imperva.audit_trail.event_action 不为空,则创建一个新的 detection_fields 条目,其中键为 imperva.audit_trail.event_action,值为 imperva.audit_trail.event_action_description
imperva.audit_trail.event_action_description security_result.detection_fields 用作根据 imperva.audit_trail.event_action 创建的 detection_fields 条目的值。
imperva.audit_trail.event_context security_result.detection_fields 如果 imperva.audit_trail.event_context 不为空,则创建一个新的 detection_fields 条目,其中键为 imperva.audit_trail.event_context,值为 imperva.audit_trail.event_context_description
imperva.audit_trail.event_context_description security_result.detection_fields 用作根据 imperva.audit_trail.event_context 创建的 detection_fields 条目的值。
imperva.country principal.location.country_or_region 已从 imperva.country 重命名。
imperva.declared_client security_result.detection_fields 如果 imperva.declared_client 不为空,则创建一个新的 detection_fields 条目,其中键为 declared_client,值为 imperva.declared_client
imperva.device_reputation additional.fields 对于 imperva.device_reputation 中的每个条目,创建一个新 additional.fields 条目,其键为 device_reputation,列表值为包含该条目的列表。
imperva.domain_risk security_result.detection_fields 如果 imperva.domain_risk 不为空,则创建一个新的 detection_fields 条目,其中键为 domain_risk,值为 imperva.domain_risk
imperva.failed_logins_last_24h security_result.detection_fields 已转换为字符串。如果不为空,则创建一个新的 detection_fields 条目,其键为 failed_logins_last_24h,值为 failed_logins_last_24h
imperva.fingerprint security_result.detection_fields 如果 imperva.fingerprint 不为空,则创建一个新的 detection_fields 条目,其中键为 log_imperva_fingerprint,值为 imperva.fingerprint
imperva.ids.account_id metadata.product_log_id 已从 imperva.ids.account_id 重命名。
imperva.ids.account_name metadata.product_event_type 已从 imperva.ids.account_name 重命名。
imperva.ids.site_id additional.fields 如果 imperva.ids.site_id 不为空,则创建一个新的 additional.fields 条目,其中键为 site_id,值为 imperva.ids.site_id
imperva.ids.site_name additional.fields 如果 imperva.ids.site_name 不为空,则创建一个新的 additional.fields 条目,其中键为 site_name,值为 imperva.ids.site_name
imperva.referrer network.http.referral_url 已从 imperva.referrer 重命名。
imperva.request_session_id network.session_id 已从 imperva.request_session_id 重命名。
imperva.request_user security_result.detection_fields 如果 imperva.request_user 不为空,则创建一个新的 detection_fields 条目,其中键为 request_user,值为 imperva.request_user
imperva.risk_level security_result.severity_details 已从 imperva.risk_level 重命名。
imperva.risk_reason security_result.description 已从 imperva.risk_reason 重命名。
imperva.significant_domain_name security_result.detection_fields 如果 imperva.significant_domain_name 不为空,则创建一个新的 detection_fields 条目,其中键为 significant_domain_name,值为 imperva.significant_domain_name
imperva.violated_directives security_result.detection_fields 对于 imperva.violated_directives 中的每个条目,创建一个新 detection_fields 条目,其键为 violated_directives,值为相应条目。
英寸 network.received_bytes 已从 in 重命名。转换为无符号整数。
log_timestamp metadata.event_timestamp 如果 deviceReceiptTime 为空且 kv.start 为空,则设置为 metadata.event_timestamp
消息 metadata.description 如果 message 不为空,且 event.providerimperva.ids.account_nameclient.ip 均为空,则设置为 metadata.description
postbody security_result.detection_fields 如果 postbody 不为空,则创建一个新的 detection_fields 条目,其中键为 post_body_info,值为 postbody
proto network.application_protocol 已从 proto 重命名。
protoVer network.tls.version、network.tls.cipher 如果 protoVer 不为空,则进行解析以提取 tls_versiontls_cipher,然后分别重命名为 network.tls.versionnetwork.tls.cipher
请求 target.url 已从 kv.request 重命名。
requestClientApplication network.http.user_agent 已从 requestClientApplication 重命名。
requestMethod network.http.method 已从 requestMethod 重命名。已转换为大写。
resource_id target.resource.id 已从 resource_id 重命名。
resource_type_key target.resource.type 已从 resource_type_key 重命名。
rt metadata.event_timestamp 解析以提取 deviceReceiptTime,然后将其解析为日期并设置为 metadata.event_timestamp
security_result.action security_result.action _action 字段的值合并。
security_result.severity security_result.severity 如果 sevserrorwarning,则设置为 HIGH。如果 sevscritical,则设置为 CRITICAL。如果 sevsmediumnotice,则设置为 MEDIUM。如果 sevsinformationinfo,则设置为 LOW
server.domain target.hostname、target.asset.hostname 已从 server.domain 重命名。
server.geo.name target.location.name 已从 server.geo.name 重命名。
和程度上减少 security_result.threat_id 已从 severity 重命名。
siteid security_result.detection_fields 如果 siteid 不为空,则创建一个新的 detection_fields 条目,其键为 siteid,值为 siteid
sourceServiceName target.hostname 已从 kv.sourceServiceName 重命名。
spt principal.port 已从 kv.spt 重命名。已转换为整数。
src principal.ip、principal.asset.ip 如果 src 不为空,则合并到 principal.ipprincipal.asset.ip 中。
srcPort principal.port 已从 srcPort 重命名。已转换为整数。
start security_result.detection_fields、metadata.event_timestamp 如果 start 不为空,则创建一个新的 detection_fields 条目,其中键为 event_start_time,值为 start。如果 deviceReceiptTime 为空,则也会解析为日期并设置为 metadata.event_timestamp
successful_logins_last_24h security_result.detection_fields 已转换为字符串。如果不为空,则创建一个新的 detection_fields 条目,其键为 successful_logins_last_24h,值为 successful_logins_last_24h
suid target.user.userid 已从 suid 重命名。
时间 metadata.event_timestamp 已转换为字符串。解析为日期并设置为 metadata.event_timestamp
type_key metadata.product_event_type 已从 type_key 重命名。
网址 target.process.file.full_path 如果 url.path 不为空或不为 /,则设置为 target.process.file.full_path
网址 target.url 已从 url 重命名。如果 qstr 不为空,则附加到 url,并使用 ? 分隔符。
user.email principal.user.email_addresses 如果 user.email 不为空且与正则表达式 ^.+@.+$ 匹配,则合并到 principal.user.email_addresses 中。
user_agent network.http.user_agent 已从 user_agent 重命名。
user_agent.original network.http.parsed_user_agent 如果 user_agent.original 不为空或不为 *,则转换为 parseduseragent 并重命名为 network.http.parsed_user_agent
user_details principal.user.email_addresses 如果 user_details 不为空且与正则表达式 ^.+@.+$ 匹配,则合并到 principal.user.email_addresses 中。
user_id principal.user.userid 已从 user_id 重命名。
ver network.tls.version、network.tls.cipher 如果 ver 不为空,则进行解析以提取 tls_versiontls_cipher,然后分别重命名为 network.tls.versionnetwork.tls.cipher
xff intermediary.ip、intermediary.asset.ip、intermediary.hostname、intermediary.asset.hostname 如果 xff 不为空,则进行处理以提取 IP 地址和主机名。IP 地址合并到 intermediary.ipintermediary.asset.ip 中。主机名设置为 intermediary.hostnameintermediary.asset.hostname

需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。