hi James, for addressing this problem, you could try the following EventGroup rule:
type=EventGroup ptype=RegExp pattern=^\S+\s+\S+\s+((?:\d{1,3}\.){3}\d{1,3})\s+\d+\s+(?:\d{1,3}\.){3}\d{1,3}\s+88\s+AS\s+(\S+)\s+(\S+)\s+F\s+KDC_ERR_PREAUTH_FAILED context=!WORKSTATION_$1_LOGIN_FAILURE_$2 && !ALERT_ISSUED_FOR_$1 count=create WORKSTATION_$1_LOGIN_FAILURE_$2 60 desc=Workstation IP $1 has failed to login with three different user accounts action=write - %s; create ALERT_ISSUED_FOR_$1 3600 window=60 thresh=3 The regular expression of this EventGroup rule will set $1 match variable to IP address of the workstation and $2 to user account. I have assumed that the user account is provided by "user/domain" field in your example event. The EventGroup rule matches login failure events and starts event counting operations for these events, so that there is a separate operation for each workstation IP address (because 'desc' field of the rule contains $1 variable). After the regular expression has matched a login failure event, the 'context' field of the rule makes sure that the context WORKSTATION_<ip>_LOGIN_FAILURE_<useraccount> does not exist. Note that the presence of this context indicates that the login failure event for the given user account and workstation IP has already been counted during the last 60 seconds. If this context does not exist, event matches the rule and will be counted by the operation that runs for the given workstation IP address. After the event has been counted, the context WORKSTATION_<ip>_LOGIN_FAILURE_<useraccount> will be created for 60 seconds (see the 'count' field of the rule) which prevents login failure event for the same workstation and user account counted twice in the window of 60 seconds. Due to the use of these context, a counting operation which runs for some workstation IP address can only observe 3 events within 60 seconds if three user accounts for these events are *all* different. Finally, after a counting operation has issued an alarm (see the 'action' field), the rule also sets up a context ALERT_ISSUED_FOR_<ip> for 1 hour. The purpose of this context is to suppress repeated alarms if the workstation continues to probe user accounts after initial alarm. Without this context, you might get a new alarm about the same workstation after each 60 seconds, while ALERT_ISSUED_FOR_<ip> context suppresses such repeated alarms for 1 hour. In order to illustrate how the EventGroup rule works, suppose the following five events appear for workstations 10.1.1.1 and 10.1.1.2: 2019-03-15T10:50:30-0600 CAnW7i1DW5gZp7c6Vd 10.1.1.1 62469 192.168.1.1 88 AS bob/mydomain krbtgt/domain F KDC_ERR_PREAUTH_FAILED - 2037-09-12T20:48:05-0600 - T T - 2019-03-15T10:50:31-0600 CAnW7i1DW5gZp7c6Vd 10.1.1.1 62471 192.168.1.1 88 AS alice/mydomain krbtgt/domain F KDC_ERR_PREAUTH_FAILED - 2037-09-12T20:48:05-0600 - T T - 2019-03-15T10:50:32-0600 CAnW7i1DW5gZp7c6Vd 10.1.1.1 62472 192.168.1.1 88 AS alice/mydomain krbtgt/domain F KDC_ERR_PREAUTH_FAILED - 2037-09-12T20:48:05-0600 - T T - 2019-03-15T10:50:34-0600 CAnW7i1DW5gZp7c6Vd 10.1.1.2 41916 192.168.1.1 88 AS bob/mydomain krbtgt/domain F KDC_ERR_PREAUTH_FAILED - 2037-09-12T20:48:05-0600 - T T - 2019-03-15T10:50:38-0600 CAnW7i1DW5gZp7c6Vd 10.1.1.1 62473 192.168.1.1 88 AS donald/mydomain krbtgt/domain F KDC_ERR_PREAUTH_FAILED - 2037-09-12T20:48:05-0600 - T T - After seeing these events, the EventGroup rule would start two counting operations for workstations 10.1.1.1 and 10.1.1.2 (operation for 10.1.1.1 is started at 10:50:30 and operation for 10.1.1.2 at 10:50:34). Also, the operation which runs for 10.1.1.1 would fire an alarm when the fifth event appears (at 10:50:38), since at that point the operation has see login failure events for three distinct user accounts bob/mydomain, alice/mydomain and donald/mydomain. Note that the operation would not count the third event, since alice/mydomain has already been observed during the last 60 seconds (see the second event). Also, the fourth event is irrelevant for the counting operation which runs for 10.1.1.1, since the workstation IP address is different from 10.1.1.1 in this event. I hope this example is helpful. kind regards, risto Kontakt James Lay (<j...@slave-tothe-box.net>) kirjutas kuupäeval R, 15. märts 2019 kell 22:13: > So I have a log file that logs user login attempts made to a domain > controller like so (bro/zeek): > > 2019-03-15T10:50:30-0600 CAnW7i1DW5gZp7c6Vd cx.x.x.x > 62469 sx.x.x.x 88 AS user/domain krbtgt/domain > F KDC_ERR_PREAUTH_FAILED - 2037-09-12T20:48:05-0600 > - T T - > > In looking at the man page at: http://simple-evcorr.github.io/man.html > I'm looking at: > > type=SingleWithThreshold > ptype=RegExp > pattern=sshd\[\d+\]: Failed .+ for (\S+) from [\d.]+ port \d+ ssh2 > desc=Three SSH login failures within 1m for user $1 > action=pipe '%s' /bin/mail -s 'SSH login alert' root@localhost > window=60 > thresh=3 > > My plan is to match on the cx.x.x.x IP address and username. From the > above I know I can do this, but I do NOT want to match on the same > user...the idea is catch a single IP address (workstation) that fails to > login to a Windows Domain Controller using more than one username > (domain user brute force). I don't want to match just one username (in > this case at least) as, say if a user password expires over the weekend, > then multiple failed attempts would happen for the same user. Any > advice on how to, in layman's terms, "match on a single ip with 3 failed > attempts from three different user names in 60 seconds". > > Thank you. > > James > > > _______________________________________________ > Simple-evcorr-users mailing list > Simple-evcorr-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users >
_______________________________________________ Simple-evcorr-users mailing list Simple-evcorr-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users