CAPE-Utils

 view release on metacpan or  search on metacpan

src_bin/suricata_extract_submit  view on Meta::CPAN

#!/usr/bin/env perl

use File::Find::Rule;
use warnings;
use strict;
use Config::Tiny;
use File::Slurp qw(append_file write_file read_file);
use Time::Piece;
use File::MimeInfo::Magic;
use Net::Subnet qw(subnet_matcher);
use LWP::UserAgent;
use HTTP::Request::Common;
use File::Temp qw/ tempdir  /;
use File::Copy;
use POSIX 'strftime';
use Sys::Syslog;
use JSON;
use Sys::Hostname;
use Proc::PID::File;
use Pod::Usage;
use Getopt::Long;
use Web::ACL;

=head1 NAME

suricata_extract_submit - Submits files extracted by Suricata to mojo_cape_submit for detonation via CAPEv2

=head1 VERSION

1.0.0

=cut

sub version {
	print "suricata_extract_submit v. 1.0.0\n";
}

=head1 SYNOPSIS

suricata_extract_submit

*/5 * * * * /usr/local/bin/suricata_extract_submit 2> /dev/null > /dev/null

=head1 DESCRIPTION

What is printed to standard out is also sent to syslog.

This requires having the file-store output configured akin to below.

      - file-store:
          version: 2
          enabled: yes
          dir: /var/log/suricata/files
          write-fileinfo: yes
          stream-depth: 0
          force-hash: [sha1, md5]
          xff:
            enabled: no
            mode: extra-data
            deployment: reverse
            header: X-Forwarded-For

The force-hash values are optional as this script will automatically compute
those for inclusion as well SHA256.

This will use `/var/run/suricata_extract_submit.pid` as a PID file
to ensure only a single instance is running.

May be checked to see if it has hung like below. Below will alert if a PID
file with a M time of older than 5 minutes.

    /usr/local/libexec/nagios/check_file_age -i -f /var/run/suricata_extract_submit.pid

Safe to dump the output of this to dev null in cron as the output is also sent to syslog
as 'suricata_extract_submit' to the 'daemon' log.

=head1 CONFIGURATION

The config file used is '/usr/local/etc/suricata_extract_submit.ini'.

    # the API key to use if needed
    #apikey=

    # URL to find mojo_cape_submit at
    url=http://192.168.14.15:8080/

    # the group/client/whathaveya slug
    slug=foo

    # where Suricata has the file store at
    filestore=/var/log/suricata/files

    # a file of IPs or subnets to ignore SRC or DEST IPs of
    #ignore=

    # a file of regex to use for checking host names to ignore
    #ignoreHosts=

    # a file of regex to use for checking host names to ignore
    #ignoreHosts=

    # a file of regex to use for checking user agents to ignore
    #ignoreUAs=

    # a file of regex to use for checking path chunks of the URL to ignore
    #ignorePaths=

    # a file of regex to use for checking path chunks of the URL to ignore
    ignoreMaxSize=52428800

    # a JSON file to use for using with Web::ACL for checking for ignores
    #ignoreWebACL=/usr/local/etc/suricata_extract_submit_webacl.json

    # if it should use HTTPS_PROXY and HTTP_PROXY from ENV or not
    env_proxy=0

    # stats file holding only the stats for the last run
    stats_file=/var/cache/suricata_extract_submit_stats.json

    # stats dir
    stats_dir=/var/cache/suricata_extract_submit_stats/



( run in 1.488 second using v1.01-cache-2.11-cpan-39bf76dae61 )