Google SecOps Chronicle YARA-L规则IP列表检测失效问题
Google SecOps Chronicle YARA-L规则:修复未知IP登录检测问题
问题分析
你当前的规则只覆盖了「未知用户登录」的场景,「已知用户从未知IP登录」的分支触发失败,大概率是逻辑条件的组合方式、IP提取/匹配的语法细节出了问题——比如没明确分组逻辑优先级、IP字段提取不完整,或者列表类型与匹配语法不对应。
正确规则示例
以下是能同时覆盖两种触发场景的YARA-L规则,适配不同类型的已知IP列表:
场景1:已知IP列表为CIDR格式(如%known_ips = ["192.168.0.0/24", "10.0.0.0/8"])
rule detect_suspicious_login_success { meta: description = "检测未知用户成功登录,或已知用户从未知IP地址登录" events: // 匹配成功登录事件,根据你的日志类型调整event_type字段 $login.metadata.event_type = "USER_LOGIN_SUCCESS" // 提取登录用户名 $login.principal.user = $username // 提取登录源IP,确保IP字段存在 $login.principal.ip = $source_ip condition: // 核心逻辑:两种场景满足其一即触发 (not $username in %known_users) OR ( $username in %known_users and not $source_ip in cidr %known_ips ) }
场景2:已知IP列表为单个IP字符串格式(如%known_ip_str = ["192.168.1.10", "10.0.0.5"])
只需把条件中的not $source_ip in cidr %known_ips替换为not $source_ip in %known_ip_str即可。
关键注意事项
- 逻辑优先级:必须用括号明确分组「已知用户+未知IP」的条件,避免OR和AND的优先级冲突导致逻辑失效
- IP字段处理:如果日志中
principal.ip是数组类型(比如存在多个IP),需要用any关键字遍历匹配:any $ip in $login.principal.ip: not $ip in cidr %known_ips - 事件过滤:确保只匹配成功登录的事件,避免把登录失败的日志纳入检测范围
- 列表类型匹配:CIDR格式的列表必须用
in cidr语法,纯字符串IP列表用in语法,混用会导致匹配失败
内容的提问来源于stack exchange,提问作者Fayez Khwaja
相关产品推荐
相关产品推荐

