aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm
diff options
context:
space:
mode:
authorAshlee Young <ashlee@onosfw.com>2015-09-09 22:21:41 -0700
committerAshlee Young <ashlee@onosfw.com>2015-09-09 22:21:41 -0700
commit8879b125d26e8db1a5633de5a9c692eb2d1c4f83 (patch)
treec7259d85a991b83dfa85ab2e339360669fc1f58e /framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm
parent13d05bc8458758ee39cb829098241e89616717ee (diff)
suricata checkin based on commit id a4bce14770beee46a537eda3c3f6e8e8565d5d0a
Change-Id: I9a214fa0ee95e58fc640e50bd604dac7f42db48f
Diffstat (limited to 'framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm')
-rw-r--r--framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm49
1 files changed, 49 insertions, 0 deletions
diff --git a/framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm b/framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm
new file mode 100644
index 00000000..c9c7a5f9
--- /dev/null
+++ b/framework/src/suricata/contrib/file_processor/Processor/ShadowServer.pm
@@ -0,0 +1,49 @@
+package Processor::ShadowServer;
+use Moose;
+extends 'Processor';
+use Data::Dumper;
+use LWP::UserAgent;
+use JSON;
+
+has 'md5' => (is => 'ro', isa => 'Str', required => 1);
+has 'ua' => (is => 'rw', isa => 'LWP::UserAgent', required => 1, default => sub { return LWP::UserAgent->new(agent => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1'); });
+has 'url_template' => (is => 'ro', isa => 'Str', required => 1, default => 'http://innocuous.shadowserver.org/api/?query=%s');
+sub name { 'ShadowServer' }
+sub description { 'Processor for shadowserver.com' }
+
+sub process {
+ my $self = shift;
+ my $url = sprintf($self->url_template, $self->md5);
+ $self->log->debug('Getting url ' . $url);
+ my $response = $self->ua->get($url);
+ if ($response->code eq 200){
+ if ($response->decoded_content =~ /No match/){
+ $self->log->debug('No result');
+ return 0;
+ }
+ elsif ($response->decoded_content =~ /Whitelisted/){
+ $self->log->info('Whitelisted');
+ return 0;
+ }
+ $self->log->info('Got shadowserver.com result');
+ my $ret;
+ eval {
+ my ($meta,$json) = split(/\n/, $response->decoded_content);
+ my @meta_cols = qw(md5 sha1 first_date last_date type ssdeep);
+ my %metas;
+ @metas{@meta_cols} = split(/\,/, $meta);
+ $ret = { meta => \%metas, results => decode_json($json) };
+ };
+ if ($@){
+ $self->log->error($@);
+ return 0;
+ }
+ return $ret;
+ }
+ else {
+ $self->log->debug('Communications failure: ' . Dumper($response));
+ return 0;
+ }
+}
+
+1