vectra 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c9a1c188116e3e862f39524b91e6b7a6caa67ac
4
- data.tar.gz: e3432222c1f70cb6fe51c36fb487d9deed5868b3
3
+ metadata.gz: 80a30a2c4a8f5197d069da6bb592a3184a442a08
4
+ data.tar.gz: cc1e73c9e4091afa26927ef76308e718586ff2e6
5
5
  SHA512:
6
- metadata.gz: d9a6c36c751bf22194a6f3e48015801d64e5cc8a5a6e408877f4dfec524f5e295ff3c131e130d289d9a052aed694525a7154f47cc837618e0ec624d59e9b2aa3
7
- data.tar.gz: 7b68a33208086df1fad9b6602cc30b1b3467b11fb341980ca2e2ee2fea82a8570686642ee0e8f2fc68d0cb3a2e13c373a7c5f6ba84ee34d6a92e8f072897ed7a
6
+ metadata.gz: 9ab0eb156501023f4b4bdcda61e8ce1ccdbc170d88284f4a82ef2076ac0b2e4c487d4785283d987b910f4b7deecc1ee67389a3a550f174c58324aa9e6ee262ce
7
+ data.tar.gz: 12c2d1f0dfe8875d314513d17a7e41c524ad75fa2829bf8986842bec4b4508035df472fd97188cfb6589ce2e0d357c21a75a888367b538053511e9640651909c
data/.rock.yml CHANGED
@@ -2,4 +2,4 @@ runtime: ruby21
2
2
  build_gem: |
3
3
  rm -rf *.gem
4
4
  gem build vectra.gemspec
5
- push_gem: exec gem push *.gem
5
+ gem push *.gem
data/README.md CHANGED
@@ -38,7 +38,48 @@ You can also get a detection by ID or by referencing the detection URL:
38
38
  Vectra::Detections.get(1)
39
39
  Vectra::Detections.get('https://vectra/detection/1')
40
40
  ```
41
-
41
+
42
+ ### Detection Details
43
+
44
+ Within the response of a detection, you may find Detection Details. You can get more details on these like so:
45
+
46
+ ```ruby
47
+ Vectra::Detections.get(1)["detection_detail_set"].each do |d|
48
+ details = Vectra::DetectionDetails.get(d)
49
+ puts "--> #{details["destination"]}:#{details["dst_port"]}"
50
+ end
51
+ ```
52
+ ### Relayed Comms
53
+
54
+ Another type of detection detail you may see is the following:
55
+
56
+ ```ruby
57
+ Vectra::Detections.get(1)["relayed_comm_set"].each do |r|
58
+ details = Vectra::RelayComms.get(r)
59
+ puts "--> #{details['inbound_proto']} #{details["inbound_ip"]}:#{details["inbound_port"]} @ #{details['total_bytes_rcvd']} bytes"
60
+ end
61
+ ```
62
+
63
+ ### DNS
64
+
65
+ There is also a DNS set:
66
+
67
+ ```ruby
68
+ Vectra::Detections.get(1)["dns_set"].each do |d|
69
+ details = Vectra::DNS.get(r)
70
+ puts "--> DNS Server: #{details['dns_ip']} resolved #{details['dns_request']} to #{details['resp']}"
71
+ end
72
+ ```
73
+ ### SQL Injection
74
+
75
+ And lastly, an SQL Injection Set
76
+
77
+ ```ruby
78
+ Vectra::Detections.get(1)["sqli_set"].each do |s|
79
+ details = Vectra::SQLi.get(s)
80
+ puts "Injection Attempted: #{details['ngram']} to #{details['destination']}"
81
+ end
82
+ ```
42
83
  ## Hosts
43
84
 
44
85
  Do not use `::Hosts.all` if you are in production. This will be very costly if you have more than 5,000 discovered hosts.
@@ -3,13 +3,22 @@ require 'json'
3
3
  require 'fattr'
4
4
  require 'cgi'
5
5
 
6
+ # Config
6
7
  require 'vectra/config'
8
+
9
+ # Core Functions
7
10
  require 'vectra/api'
8
11
  require 'vectra/hosts'
9
12
  require 'vectra/detections'
10
13
  require 'vectra/sensors'
11
14
  require 'vectra/rules'
12
15
 
16
+ # Detection Sets
17
+ require 'vectra/relayed_comms'
18
+ require 'vectra/detection_details'
19
+ require 'vectra/sqli'
20
+ require 'vectra/dns'
21
+
13
22
  module Vectra
14
23
 
15
24
  extend self
@@ -0,0 +1,27 @@
1
+ module Vectra
2
+ class DetectionDetails
3
+
4
+ attr_accessor :target
5
+ @target = "/detection_details"
6
+
7
+ def self.all
8
+ Vectra::API.pull(@target)
9
+ end
10
+
11
+ def each
12
+ self.all.each do |host|
13
+ yield host
14
+ end
15
+ end
16
+
17
+ def self.get(id)
18
+ unless id.is_a? Integer
19
+ id = id.split("/").last
20
+ end
21
+
22
+ Vectra::API.pull("#{@target}/#{id}")
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ module Vectra
2
+ class DNS
3
+
4
+ attr_accessor :target
5
+ @target = "/dns"
6
+
7
+ def self.all
8
+ Vectra::API.pull(@target)
9
+ end
10
+
11
+ def each
12
+ self.all.each do |host|
13
+ yield host
14
+ end
15
+ end
16
+
17
+ def self.get(id)
18
+ unless id.is_a? Integer
19
+ id = id.split("/").last
20
+ end
21
+
22
+ Vectra::API.pull("#{@target}/#{id}")
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ module Vectra
2
+ class RelayedComms
3
+
4
+ attr_accessor :target
5
+ @target = "/relayed_comm"
6
+
7
+ def self.all
8
+ Vectra::API.pull(@target)
9
+ end
10
+
11
+ def each
12
+ self.all.each do |host|
13
+ yield host
14
+ end
15
+ end
16
+
17
+ def self.get(id)
18
+ unless id.is_a? Integer
19
+ id = id.split("/").last
20
+ end
21
+
22
+ Vectra::API.pull("#{@target}/#{id}")
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ module Vectra
2
+ class SQLi
3
+
4
+ attr_accessor :target
5
+ @target = "/sqli"
6
+
7
+ def self.all
8
+ Vectra::API.pull(@target)
9
+ end
10
+
11
+ def each
12
+ self.all.each do |host|
13
+ yield host
14
+ end
15
+ end
16
+
17
+ def self.get(id)
18
+ unless id.is_a? Integer
19
+ id = id.split("/").last
20
+ end
21
+
22
+ Vectra::API.pull("#{@target}/#{id}")
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Vectra
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vectra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Mackintosh
@@ -112,10 +112,14 @@ files:
112
112
  - lib/vectra.rb
113
113
  - lib/vectra/api.rb
114
114
  - lib/vectra/config.rb
115
+ - lib/vectra/detection_details.rb
115
116
  - lib/vectra/detections.rb
117
+ - lib/vectra/dns.rb
116
118
  - lib/vectra/hosts.rb
119
+ - lib/vectra/relayed_comms.rb
117
120
  - lib/vectra/rules.rb
118
121
  - lib/vectra/sensors.rb
122
+ - lib/vectra/sqli.rb
119
123
  - lib/vectra/version.rb
120
124
  - spec/spec_helper.rb
121
125
  - spec/vectra/vectra_spec.rb