Hi Risto

Yes, you are right. Event output of first rule is modified to avoid infinite 
loop and its working fine now. However we can see the increase in CPU 
processing.
Will further work on your suggestions. Thanks for the help. You are doing great.

Regards,
Santosh.S
Mob: +91-7022415151

From: Risto Vaarandi <risto.vaara...@gmail.com>
Sent: Tuesday, July 10, 2018 12:52 PM
To: S, Santosh <santos...@rakuten.com>
Cc: simple-evcorr-users@lists.sourceforge.net
Subject: Re: [Simple-evcorr-users] Whitelisting or Blacklisting

hi Santosh,

as I can see, the first rule (SingleWithScript) employs the 'event' action for 
creating a synthetic event which apparently serves as an input for the second 
rule. For creating a synthetic event, a prefix "Suppressed Alert" will be added 
to the original input line. Unfortunately, this creates an event loop, since 
the synthetic event contains all characters from original event line, and will 
thus match the first rule (the one which created it). The match will trigger 
another synthetic event which leads to another match, etc. For resolving this 
issue, you can change 'event %s' action of the first rule and replace %s with a 
different string (or edit the 'desc' field of the first rule by replacing the 
$0 variable). Also, the pipe symbol (|) is unnecessary for the 'pipe' action in 
the second rule, and leaving it in place will result in a syntax error from 
shell.

The approach you are using might also lead to performance issues if you have 
many incoming events which need to be matched against blacklists or whitelists, 
since every such event will fork a new process. It is much more efficient to 
keep blacklist or whitelist data as sec contexts. For example, the following 
sample ruleset assumes that a hostname whitelist is stored in a file 
whitelist.txt, and the whitelist is loaded when sec is started (or HUP or ABRT 
signals are received):

# the name of this rulefile is test.sec

type=Single
ptype=RegExp
pattern=(?:SEC_STARTUP|SEC_RESTART|SEC_SOFTRESTART)
desc=load blacklist
action=delete WL; create WL; \
       lcall %events -> ( sub { scalar `cat whitelist.txt` } ); \
       cevent WHITELIST 0 %events

type=Single
ptype=RegExp
pattern=.
context=WHITELIST
desc=create a whitelist entry
action=alias WL WL_$0

type=Single
ptype=RegExp
pattern=event from host (\S+)
context=!WL_$1
desc=event from bad host $1
action=write - %s

When you start sec with the following commandline

sec --conf=test.sec --input=input.log  --intevents --intcontexts

the first rule will load the whitelist of hostnames, so that whitelist entries 
serve as aliases to a single context WL (this allows for dropping the entire 
whitelist by just deleting one context with 'delete WL').
In order to create the aliases, the first rule generates relevant synthetic 
events which are captured by the second rule, and the second rule invokes the 
'alias' action. In order to ensure that the second rule would match proper 
events, an internal context WHITELIST is set by 'cevent' action, in order to 
avoid accidental matches by similarly looking events from regular input file. 
(Note that you could use the same technique for avoiding the message loop in 
your original solution, since internal contexts allow for distinguishing events 
by their source.)

The third rule will check if hostname is whitelisted by a context expression 
evaluation which involves a simple hash table lookup. It consumes *much* less 
resources that forking a process, especially if the ruleset has to handle large 
event volumes. If you definitely want to have external process around, I would 
recommend the following approach -- fork it once when sec starts up with a 
cspawn action, and provide input data via file system fifo to this process. 
Since the process has been started with 'cspawn' action, whatever line(s) it 
writes to standard output will be received by sec as synthetic event(s).

Hope this helps,
risto





2018-07-10 9:52 GMT+03:00 S, Santosh 
<santos...@rakuten.com<mailto:santos...@rakuten.com>>:
Hi Risto

I recently come across this wonderful product and researching about its 
utilization on security events. Query on whitelisting or blacklisting. Need 
your inputs as I couldn’t find any topic specific to this. I’m suppressing 
security alerts based on its name and IP address. But looking for a best way to 
perform whitelist or blacklist specific attacks.

Ideally the goal is to maintain a separate list of Attack Name’s, so the 
suppress rule will ignore or consider it as out of scope.

Tried something like this but no luck. Can you please check and help me with 
the below scenario,
---------------------------------------------------------------------------------------------------------------------------------------
# Suppress Duplicate Alerts Based on Attack Name and Source & Destination IP 
for 24hrs except SQLI
type=SingleWithScript
ptype=RegExp
pattern=Attack Name.*([\w:\s\-\/]+).*dst":"([\d\.]+).*src":"([\d\.]+)
script=/usr/bin/python /usr/bin/sec-rules/whitelist.py $1
continue=takenext
desc=Suppressed Alert $0
action= logonly; event %s

type=SingleWithSuppress
ptype=regexp
pattern=Suppressed Alert.*Attack 
Name.*([\w:\s\-\/]+).*dst":"([\d\.]+).*src":"([\d\.]+)
continue=dontcont
desc=[SEC][Critical]Suppressed $1 Security Alert towards $2
action = logonly; pipe '$0' | nc test.com<http://test.com> 80
window = 86400
---------------------------------------------------------------------------------------------------------------------------------------
whitelist.py

#! /usr/bin/python

import sys
import urllib2

IP = sys.argv[1]
TI1 = [sql injection, xss attack, bruteforce attempt]

if IP in TI1:
        sys.exit(1)
else:
        sys.exit(0)
---------------------------------------------------------------------------------------------------------------------------------------------------------------

Regards,
Santosh.S


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to