我正在使用一个用例来检测基于某些传入事件的登录暴力攻击。为此,我必须使用wso2 + siddhi(不是可选的)。
Code I&ve; ve build的结构是:
一旦我在新表中有每个条目,我想知道表中存储了多少事件,以便能够检测蛮力(如果事件数大于20,例如,这意味着正在发生暴力攻击。)
partition with (Target_IP4 of I_Events)
begin
from I_Events[Category == 'Attempt.Login']#window.time(5 sec)
select meta_EventTime, correlation__id, Source_IP4, Source_Proto, Source_Hostname, Target_IP4, Target_Proto, Target_Hostnmae, Category, count() as attempts
insert into #login_attempts;
from #login_attempts[attempts > 20]#window.time(5 sec)
select ...
insert into alert;
end;
从上面的代码中可以看出,我已尝试使用count()函数,但它不起作用,每次添加新元素时它只会将值增加1例如,添加的第一个元素将具有尝试= 1,第二个元素尝试= 2,等等。
如果无法做出上述想法......至少有人知道如果给定条件满满,如何选择字符串的所有元素?例如,如果流的一个元素的属性设置为true,则从该流中选择所有元素。
答案 0 :(得分:0)
您可以使用以下Siddhi查询来满足您的要求。
partition with (Target_IP4 of I_Events)
begin
from I_Events[Category == 'Attempt.Login']#window.time(5 sec)
select meta_EventTime, correlation__id, Source_IP4, Source_Proto, Source_Hostname, Target_IP4, Target_Proto, Target_Hostnmae, Category, count() as attempts
having attempts > 20
insert into alert;
end;
此前,在5分钟内进入相同目标ip的前20个事件将不会产生任何警报。之后,在20分钟内超过该限制的每个事件都将产生警报。这种实现的一个缺点是,如果你有大量不同的target_ip,它将导致大量的分区创建,这将导致服务器进入OOM。解决方法是使用group by。
Tishan