考虑一个用例,我们需要找到攻击模式,例如从同一设备和相同的用户名登录 10 次失败,然后从不同的设备但相同的用户名成功登录。这应该在 10 分钟内发生。
假设我们有 10 个登录失败的 Windows 事件,其中用户 A 作为用户名,B 作为设备名,并且我们从用户 A 使用不同的设备 C 成功登录,我们应该发出警报。请让我知道如何使用 flink CEP 来解决此案。
考虑一个用例,我们需要找到攻击模式,例如从同一设备和相同的用户名登录 10 次失败,然后从不同的设备但相同的用户名成功登录。这应该在 10 分钟内发生。
假设我们有 10 个登录失败的 Windows 事件,其中用户 A 作为用户名,B 作为设备名,并且我们从用户 A 使用不同的设备 C 成功登录,我们应该发出警报。请让我知道如何使用 flink CEP 来解决此案。
这与具有相同值的 Apache Flink-Matching Fields非常相似。在这种情况下,您可以尝试 MATCH_RECOGNIZE 使用以下内容:
PARTITION BY user
...
PATTERN (F{10} S) WITHIN INTERVAL '10' MINUTE
DEFINE
F.status = 'failure' AND (LAST(F.device, 1) IS NULL OR F.device = LAST(F.device, 1)),
S AS S.status = 'success' AND S.device <> LAST(F.device, 1)
这个想法是检查每个新的 F 是否与前一个相同的设备,而 S 是不同的设备。
顺便说一句,在实践中,您可能宁愿指定F{10,}
模式匹配连续 10 次或更多失败的尝试,而不是恰好匹配 10 次。