Finally figured out what was going on with the Windows Event log decoder:

I originally had this:

<decoder name="winevt">
<prematch>^WinEvtLog: Security: AUDIT_FAILURE\(\d+\): Security\.* Logon Failure: </prematch> <regex offset="after_prematch">User Name: (\w+) \.* Source Network Address: (\d+.\d+.\d+.\d+)</regex>
<order>user,srcip</order>
</decoder>

When I copied and pasted an event from the alert log (see WinEvtLog in thread below) into ossec-logtest, everything matched and it worked fine. The problem with that approach is that tabs and other characters get converted to spaces.

When I ran the command: sed -n 16741p logs/alerts/2011/May/ossec-alerts-04.log | bin/ossec-logtest from within /var/ossec, the decoder did not extract the user and srcip fields. I then ran: sed -n 16741p logs/alerts/2011/May/ossec-alerts-04.log | od -a and found that each Name: Value pair was
preceded by a variable number of spaces and then a *TAB *character.

It turns out that *\s* only matches spaces, not any white-space character. So I changed my regex to this:

<regex offset="after_prematch">User\s+Name:\s*(\w+)\s+\.*Source Network Address:\s+(\d+.\d+.\d+.\d+)\s+</regex>

and it  now works.

Thanks to everyone who offered suggestions, especially Andy who pointed me to ossec-logtest.

Martin


On 4/23/2011 5:26 PM, Andy Cockroft (andic) wrote:

Hi

I didn't have that much success with a Regex similar to the one you wrote, I ended up having to specify everything in a very long-handed way -- as I said perhaps someone could write the decoder far more eloquently than I -- especially constructs such as \.* in the middle of the Regex

However, what I did do, is make my changes to the decoder and run ossec-logtest -- this makes checking the decoder and rules so much easier without actually affecting production operation

Best I can do for now -- hope you have your Rules sorted as well -- ossec-logtest will check these at the same time

Andy

*From:*ossec-list@googlegroups.com [mailto:ossec-list@googlegroups.com] *On Behalf Of *Martin Gottlieb
*Sent:* Sunday, 24 April 2011 3:16 a.m.
*To:* ossec-list@googlegroups.com
*Subject:* Re: [ossec-list] Re: Active Response on Windows events


Awesome, thanks!  The events I'm seeing generally take 2 forms:

SQL Server Events:

WinEvtLog: Application: AUDIT_FAILURE(18456): MSSQLSERVER: (no user): no domain: WINSERVER: Login failed for user 'admin'. [CLIENT: 203.81.30.248]


And general Windows Events:

WinEvtLog: Security: AUDIT_FAILURE(529): Security: SYSTEM: NT AUTHORITY: 
WINSERVER: Logon Failure:       Reason:        Unknown user name or bad 
password     User Name: admin            Domain:        WINSERVER      Logon 
Type: 10         Logon Process: User32              Authentication Package: 
Negotiate     Workstation Name: WINSERVER           Caller User Name: 
WINSERVER$          Caller Domain: WINDOMAIN       Caller Logon ID: (0x0,0x3E7) 
           Caller Process ID: 532         Transited Services: -          Source 
Network Address: 118.126.5.109          Source Port: 3041

Would these work as the corresponding decoders:

<decoder name="mssql">
<prematch>^WinEvtLog: Application: AUDIT_FAILURE\(\d+\): MSSQLSERVER: \.* Login failed for user</prematch> <regex offset="after_prematch">'(\w+)'. [CLIENT: (\d+.\d+.\d+.\d+)]</regex>
<order>user,srcip</order>
</decoder>

<decoder name="winevt">
<prematch>^WinEvtLog: Security: AUDIT_FAILURE\(\d+\): Security\.* Logon Failure: </prematch> <regex offset="after_prematch">User Name: (\w+) \.* Source Network Address: (\d+.\d+.\d+.\d+)</regex>
<order>user,srcip</order>
</decoder>

Thanks.

Martin


On 4/22/2011 7:28 PM, AndiC wrote:

The problem I found was that the Windows decoder in the server /dev/
ossec/etc/decoder.xml does not extract the "srcip", so you have
nothing to work with to block
Now this is what I replaced mine with: <decoder name="windows">
   <type>windows</type>
   <prematch>^WinEvtLog:</prematch>
   <regex offset="after_prematch">^\.+: (\w+)\((\d+)\): (\.+):</regex>
   <regex>(\.+): \.+: (\S+):</regex>
   <regex>  \.+: \.+: \.+: \.+: \.+: \.+:</regex>
   <regex>\.+: \.+: \.+: \.+: \.+: \.+: \.+: \.+:</regex>
   <regex>\.(\S+)</regex>
   <order>status, id, extra_data, user, system_name, srcip</order>
   <fts>name, location, user, system_name</fts>  </decoder>
Then, in /dev/ossec/rules/msauth.xml, I replaced rule 18152 with: <rule id="181521" level="10" frequency="$MS_FREQ" timeframe="240">
     <if_matched_group>win_authentication_failed</if_matched_group>
     <same_source_ip />
     <description>Multiple Windows Logon Failures Same IP.</
description>
     <group>authentication_failures,</group>
   </rule>
   <rule id="181522" level="10" frequency="$MS_FREQ" timeframe="240">
     <if_matched_group>win_authentication_failed</if_matched_group>
     <description>Multiple Windows Logon Failures.</description>
     <group>authentication_failures,</group>
   </rule>
I also dropped $MS_FREQ (start of msauth.xml) to 3 This works for me, and my Windows clients are well protected. I am sure someone could write a far more eloquent decode Regex - sorry
I'm just coming to grips with that. I'm also uncertain if this will
work against anything other than Server 2003 for which it is written
But this is only the decoder that needs some tuning, the rest seems
fine
Regards Andy On Apr 23, 9:08 am, Martin Gottlieb<mar...@axion-it.net> <mailto:mar...@axion-it.net> wrote:

    Shouldn't this block from the config on the OSSEC server:

    <active-response>

    <!-- Firewall Drop response. Block the IP for

             - 600 seconds on the firewall (iptables,

             - ipfilter, etc).

            -->

    <command>firewall-drop</command>

    <location>as</location>

    <level>6</level>

    <timeout>3600</timeout>

    </active-response>

    cause the firewall drop script to be run on the server for any event

    that is level 6 or higher, regardless of

    which agent it came from?  That's all I'm trying to accomplish, I don't

    need anything to run on the Windows

    agent if I can get the firewall drop script to run on the server.

    Thanks.

    Martin

    On 4/22/2011 4:58 PM, dan (ddp) wrote:

        Hi Martin,

        On Fri, Apr 22, 2011 at 4:37 PM, Martin Gottlieb<mar...@axion-it.net>  
<mailto:mar...@axion-it.net>    wrote:

            I guess what I'm trying to understand is this:

            When an event is triggered from a Linux agent, the firewall drop 
script is

            run on the

            OSSEC server (in addition to the hosts deny script being called on 
the

            agent).  I don't recall

            doing anything special to make this happen when I installed OSSEC, 
I assume

            it is part of

            the default behavior.

        The default actions (if I'm reading

        https://bitbucket.org/dcid/ossec-hids/src/4908b28513b0/etc/ossec-serv...

        correctly) is that the script is run on the system where the log

        message originated.

        Unless you changed the configurations the scripts shouldn't be running

        on both the server and the agents.

            When an event is triggered on a Windows agent, the firewall drop 
script is

            NOT called on the server,

            but I would like it to be.  I would like the default behavior on 
Windows

            agents to be the same

            as Linux agents, at least as far as what happens on the OSSEC 
server.  The

            Windows agent is

            obviously reporting the event to the server as it logs it and 
reports it to

            me.

            Am I understanding the responses so far to mean that I have to 
write a

            script to make this

            happen, and that the script needs to reside on the Windows agent?

            Thanks again.

            Martin

        The script would have to reside on all of the systems you want it to

        run on. Having it run on both Windows and Linux systems may be

        difficult.- Hide quoted text -

    - Show quoted text -


Reply via email to