Suricata EVE JSON format is becoming the de-facto standard for this IDS. All type of events are now exported to this format. The JSON format allows a nice handling of data in external tool like Elasticsearch or even DOM. The output is readable by human but as an event/record can contain a lot of data it can be difficult to do a by-eye analysis when looking at a file. The following screenshot give you an idea of the possible output:
Using standard unix tools like grep on the EVE JSON file is not the perfect idea. For example if you want to extract a field to get some statistics you may want to try using grep, cut or awk but you may find it painful. And it is worthed to mention here that JSON fields are not ordered.
Here to the rescue comes the jq utility. jq is a tool dedicated to the transformation/parsing of a JSON entry. It is Debian packaged, so a simple
apt-get install jq is enough for the install.
The most basic usage is to colorize the entry. To do that, just do something like
$ tail -n100 eve.json| jq '.'
To extract a single field from the JSON events, one can do:
$ jq '.src_ip' eve.json
The point to remember is that the point in
.src_ip is a place holder for the current entry.
By default when a field is not present
null is displayed in the output. To fix that, it is possible to filter the event to only get the one we are interested in. This is done via the
select keyword. For instance to select the SSH events and extract the information about the client part one can do:
$ tail eve.json | jq -c 'select(.event_type == "ssh")|.ssh.client'