Hello Giorgio,
Sorry for the late response.
Yes, you may extract the fields and indeed it is simple to decode messages separated by spaces and whose field names are specified before an "=" character.
However since Sonicwall messages don't always have the same fields it is necessary to configure the decoders to account for the different possible cases.
This can be done by adding a decoder for each of the possible message patterns or by using sibling decoders.
From the different Sonicwall messages I have seen there are 25 fields present:
app, appName, arg, c, Category, check, code, dst, dstMac, dstV6, dstname, fw, id, m, msg, n, note, pri, proto, rule, sn, src, srcMac, srcV6, time
Where the fields src and dst can have different formats depending on whether it has port and network information. And some of the fields may have spaces in them and their value is enclosed in quotes.
So for example a way of decoding all of these would be by using this custom decoder file:
<decoder name="sonicwall">
<prematch>^id=\w+\s+sn=\w+\s+time="\.+"\s+fw=\S+ </prematch>
<plugin_decoder>SonicWall_Decoder</plugin_decoder>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>app=(\S+)</regex>
<order>app</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>appName="(\.+)"</regex>
<order>appName</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>arg=(\S+)</regex>
<order>arg</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>c=(\S+)</regex>
<order>c</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>Category="(\.+)"</regex>
<order>Category</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>check=(\S+)</regex>
<order>check</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>code=(\S+)</regex>
<order>code</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>dstMac=(\S+)</regex>
<order>dstMac</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>dstV6=(\S+)</regex>
<order>dstV6</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>dstname=(\S+)</regex>
<order>dstname</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>fw=(\S+)</regex>
<order>fw</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>id=(\S+)</regex>
<order>id</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>m=(\S+)</regex>
<order>m</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>msg="(\.+)"</regex>
<order>msg</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>n=(\S+)</regex>
<order>n</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>note="(\.+)"</regex>
<order>note</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>proto=(\S+)</regex>
<order>proto</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>rule="(\.+)"</regex>
<order>rule</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>sn=(\S+)</regex>
<order>sn</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>srcMac=(\S+)</regex>
<order>srcMac</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>srcV6=(\S+)</regex>
<order>srcV6</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>time="(\.+)"</regex>
<order>time</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>pri=(\S+)</regex>
<order>status</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex> msg="(\.+)"</regex>
<order>action</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>dst=(\d+.\d+.\d+.\d+)</regex>
<order>dstip</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>src=(\d+.\d+.\d+.\d+)</regex>
<order>srcip</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>dst=\d+.\d+.\d+.\d+:(\d+)</regex>
<order>dstport</order>
</decoder>
<decoder name="sonicwall-fields">
<parent>sonicwall</parent>
<regex>src=\d+.\d+.\d+.\d+:(\d+)</regex>
<order>srcport</order>
</decoder>
More fields may be added as necessary.
Also don't forget to exclude the default rule file by adding this to the
<ruleset> section of the manager's
ossec.conf file:
<decoder_exclude>ruleset/decoders/0295-sonicwall_decoders.xml</decoder_exclude>
Let me know if this helps, we will be soon posting a more detailed explanation of sibling decoders on our blog.