threatinator 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +23 -0
  3. data/CONTRIBUTING.md +119 -0
  4. data/Gemfile +28 -0
  5. data/LICENSE +165 -0
  6. data/README.md +45 -0
  7. data/Rakefile +45 -0
  8. data/VERSION +1 -0
  9. data/bin/threatinator +5 -0
  10. data/lib/threatinator.rb +3 -0
  11. data/lib/threatinator/action.rb +14 -0
  12. data/lib/threatinator/actions/list.rb +2 -0
  13. data/lib/threatinator/actions/list/action.rb +53 -0
  14. data/lib/threatinator/actions/list/config.rb +10 -0
  15. data/lib/threatinator/actions/run.rb +2 -0
  16. data/lib/threatinator/actions/run/action.rb +45 -0
  17. data/lib/threatinator/actions/run/config.rb +32 -0
  18. data/lib/threatinator/actions/run/coverage_observer.rb +54 -0
  19. data/lib/threatinator/actions/run/output_config.rb +59 -0
  20. data/lib/threatinator/cli.rb +13 -0
  21. data/lib/threatinator/cli/action_builder.rb +33 -0
  22. data/lib/threatinator/cli/list_action_builder.rb +19 -0
  23. data/lib/threatinator/cli/parser.rb +113 -0
  24. data/lib/threatinator/cli/run_action_builder.rb +41 -0
  25. data/lib/threatinator/config.rb +6 -0
  26. data/lib/threatinator/config/base.rb +35 -0
  27. data/lib/threatinator/config/feed_search.rb +25 -0
  28. data/lib/threatinator/decoder.rb +24 -0
  29. data/lib/threatinator/decoders/gzip.rb +30 -0
  30. data/lib/threatinator/event.rb +27 -0
  31. data/lib/threatinator/event_builder.rb +41 -0
  32. data/lib/threatinator/exceptions.rb +61 -0
  33. data/lib/threatinator/feed.rb +82 -0
  34. data/lib/threatinator/feed_builder.rb +156 -0
  35. data/lib/threatinator/feed_registry.rb +47 -0
  36. data/lib/threatinator/feed_runner.rb +118 -0
  37. data/lib/threatinator/fetcher.rb +22 -0
  38. data/lib/threatinator/fetchers/http.rb +46 -0
  39. data/lib/threatinator/filter.rb +12 -0
  40. data/lib/threatinator/filters/block.rb +18 -0
  41. data/lib/threatinator/filters/comments.rb +16 -0
  42. data/lib/threatinator/filters/whitespace.rb +19 -0
  43. data/lib/threatinator/output.rb +50 -0
  44. data/lib/threatinator/parser.rb +23 -0
  45. data/lib/threatinator/parsers/csv.rb +7 -0
  46. data/lib/threatinator/parsers/csv/parser.rb +77 -0
  47. data/lib/threatinator/parsers/getline.rb +8 -0
  48. data/lib/threatinator/parsers/getline/parser.rb +45 -0
  49. data/lib/threatinator/parsers/json.rb +8 -0
  50. data/lib/threatinator/parsers/json/adapters/oj.rb +65 -0
  51. data/lib/threatinator/parsers/json/parser.rb +45 -0
  52. data/lib/threatinator/parsers/json/record.rb +20 -0
  53. data/lib/threatinator/parsers/xml.rb +8 -0
  54. data/lib/threatinator/parsers/xml/node.rb +79 -0
  55. data/lib/threatinator/parsers/xml/node_builder.rb +39 -0
  56. data/lib/threatinator/parsers/xml/parser.rb +44 -0
  57. data/lib/threatinator/parsers/xml/path.rb +70 -0
  58. data/lib/threatinator/parsers/xml/pattern.rb +53 -0
  59. data/lib/threatinator/parsers/xml/record.rb +14 -0
  60. data/lib/threatinator/parsers/xml/sax_document.rb +64 -0
  61. data/lib/threatinator/plugin_loader.rb +115 -0
  62. data/lib/threatinator/plugins/output/csv.rb +47 -0
  63. data/lib/threatinator/plugins/output/null.rb +17 -0
  64. data/lib/threatinator/plugins/output/rubydebug.rb +16 -0
  65. data/lib/threatinator/property_definer.rb +101 -0
  66. data/lib/threatinator/record.rb +22 -0
  67. data/lib/threatinator/registry.rb +53 -0
  68. data/lib/threatinator/util.rb +15 -0
  69. data/spec/feeds/ET_compromised-ip_reputation_spec.rb +50 -0
  70. data/spec/feeds/alienvault-ip_reputation_spec.rb +50 -0
  71. data/spec/feeds/arbor_fastflux-domain_reputation_spec.rb +50 -0
  72. data/spec/feeds/arbor_ssh-ip_reputation_spec.rb +50 -0
  73. data/spec/feeds/autoshun_shunlist_spec.rb +42 -0
  74. data/spec/feeds/blocklist_de_apache-ip_reputation_spec.rb +50 -0
  75. data/spec/feeds/blocklist_de_bots-ip_reputation_spec.rb +50 -0
  76. data/spec/feeds/blocklist_de_ftp-ip_reputation_spec.rb +50 -0
  77. data/spec/feeds/blocklist_de_imap-ip_reputation_spec.rb +50 -0
  78. data/spec/feeds/blocklist_de_pop3-ip_reputation_spec.rb +50 -0
  79. data/spec/feeds/blocklist_de_proftpd-ip_reputation_spec.rb +50 -0
  80. data/spec/feeds/blocklist_de_sip-ip_reputation_spec.rb +50 -0
  81. data/spec/feeds/blocklist_de_ssh-ip_reputation_spec.rb +50 -0
  82. data/spec/feeds/blocklist_de_strongips-ip_reputation_spec.rb +50 -0
  83. data/spec/feeds/ciarmy-ip_reputation_spec.rb +50 -0
  84. data/spec/feeds/cruzit-ip_reputation_spec.rb +50 -0
  85. data/spec/feeds/dan_me_uk_torlist-ip_reputation_spec.rb +50 -0
  86. data/spec/feeds/data/ET_compromised-ip_reputation.txt +11 -0
  87. data/spec/feeds/data/alienvault-ip_reputation.txt +18 -0
  88. data/spec/feeds/data/arbor_domainlist.txt +11 -0
  89. data/spec/feeds/data/arbor_ssh.txt +16 -0
  90. data/spec/feeds/data/autoshun_shunlist.csv +20 -0
  91. data/spec/feeds/data/blocklist_de_apache-ip-reputation.txt +17 -0
  92. data/spec/feeds/data/blocklist_de_bots-ip-reputation.txt +15 -0
  93. data/spec/feeds/data/blocklist_de_ftp-ip-reputation.txt +7 -0
  94. data/spec/feeds/data/blocklist_de_imap-ip-reputation.txt +8 -0
  95. data/spec/feeds/data/blocklist_de_pop3-ip-reputation.txt +11 -0
  96. data/spec/feeds/data/blocklist_de_proftpd-ip-reputation.txt +12 -0
  97. data/spec/feeds/data/blocklist_de_sip-ip-reputation.txt +9 -0
  98. data/spec/feeds/data/blocklist_de_ssh-ip-reputation.txt +10 -0
  99. data/spec/feeds/data/blocklist_de_strongips-ip-reputation.txt +11 -0
  100. data/spec/feeds/data/ciarmy-ip-reputation.txt +11 -0
  101. data/spec/feeds/data/cruzit-ip-reputation.txt +14 -0
  102. data/spec/feeds/data/dan_me_uk_torlist-ip-reputation.txt +11 -0
  103. data/spec/feeds/data/dshield_topattackers.xml +4 -0
  104. data/spec/feeds/data/feodo_domainlist.txt +18 -0
  105. data/spec/feeds/data/feodo_iplist.txt +20 -0
  106. data/spec/feeds/data/infiltrated_iplist.txt +16 -0
  107. data/spec/feeds/data/malc0de_domainlist.txt +18 -0
  108. data/spec/feeds/data/malc0de_iplist.txt +14 -0
  109. data/spec/feeds/data/mirc_domainlist.txt +31 -0
  110. data/spec/feeds/data/nothink_irc_iplist.txt +14 -0
  111. data/spec/feeds/data/nothink_ssh_iplist.txt +10 -0
  112. data/spec/feeds/data/openbl_iplist.txt +12 -0
  113. data/spec/feeds/data/palevo_domainlist.txt +25 -0
  114. data/spec/feeds/data/palevo_iplist.txt +24 -0
  115. data/spec/feeds/data/phishtank-sample.json.gz +0 -0
  116. data/spec/feeds/data/spyeye_domainlist.txt +16 -0
  117. data/spec/feeds/data/spyeye_iplist.txt +19 -0
  118. data/spec/feeds/data/t-arend-de_ssh_iplist.txt +17 -0
  119. data/spec/feeds/data/the_haleys_ssh_iplist.txt +12 -0
  120. data/spec/feeds/data/yourcmc_ssh-ip_reputation.txt +27 -0
  121. data/spec/feeds/data/zeus-ip_reputation.txt +285 -0
  122. data/spec/feeds/data/zeus_domainlist.txt +27 -0
  123. data/spec/feeds/dshield_attackers-top1000_spec.rb +43 -0
  124. data/spec/feeds/feodo-domain_reputation_spec.rb +50 -0
  125. data/spec/feeds/feodo-ip_reputation_spec.rb +50 -0
  126. data/spec/feeds/infiltrated-ip_reputation_spec.rb +50 -0
  127. data/spec/feeds/malc0de-domain_reputation_spec.rb +50 -0
  128. data/spec/feeds/malc0de-ip_reputation_spec.rb +50 -0
  129. data/spec/feeds/mirc-domain_reputation_spec.rb +50 -0
  130. data/spec/feeds/nothink_irc-ip_reputation_spec.rb +50 -0
  131. data/spec/feeds/nothink_ssh-ip_reputation_spec.rb +50 -0
  132. data/spec/feeds/openbl-ip_reputation_spec.rb +50 -0
  133. data/spec/feeds/palevo-domain_reputation_spec.rb +50 -0
  134. data/spec/feeds/palevo-ip_reputation_spec.rb +50 -0
  135. data/spec/feeds/phishtank_spec.rb +45 -0
  136. data/spec/feeds/spyeye-domain_reputation_spec.rb +50 -0
  137. data/spec/feeds/spyeye-ip_reputation_spec.rb +50 -0
  138. data/spec/feeds/t-arend-de_ssh-ip_reputation_spec.rb +50 -0
  139. data/spec/feeds/the_haleys_ssh-ip_reputation_spec.rb +50 -0
  140. data/spec/feeds/yourcmc_ssh-ip_reputation_spec.rb +50 -0
  141. data/spec/feeds/zeus-domain_reputation_spec.rb +50 -0
  142. data/spec/feeds/zeus-ip_reputation_spec.rb +50 -0
  143. data/spec/fixtures/feed/provider1/feed1.feed +6 -0
  144. data/spec/fixtures/parsers/test.xml +13 -0
  145. data/spec/fixtures/parsers/test_self_closing.xml +20 -0
  146. data/spec/fixtures/plugins/bad/threatinator/plugins/test_error1/plugin.rb +1 -0
  147. data/spec/fixtures/plugins/bad/threatinator/plugins/test_missing1/plugin.rb +0 -0
  148. data/spec/fixtures/plugins/fake.rb +19 -0
  149. data/spec/fixtures/plugins/good/threatinator/plugins/test_type1/plugin_a.rb +8 -0
  150. data/spec/fixtures/plugins/good/threatinator/plugins/test_type1/plugin_b.rb +8 -0
  151. data/spec/fixtures/plugins/good/threatinator/plugins/test_type2/plugin_c.rb +8 -0
  152. data/spec/fixtures/plugins/good/threatinator/plugins/test_type2/plugin_d.rb +8 -0
  153. data/spec/fixtures/plugins/good/threatinator/plugins/test_type3/plugin_e.rb +8 -0
  154. data/spec/fixtures/plugins/good/threatinator/plugins/test_type3/plugin_f.rb +8 -0
  155. data/spec/spec_helper.rb +52 -0
  156. data/spec/support/bad_feeds/missing_fetcher.feed +7 -0
  157. data/spec/support/bad_feeds/missing_name.feed +6 -0
  158. data/spec/support/bad_feeds/missing_parser.feed +3 -0
  159. data/spec/support/bad_feeds/missing_provider.feed +5 -0
  160. data/spec/support/factories/event.rb +27 -0
  161. data/spec/support/factories/feed.rb +32 -0
  162. data/spec/support/factories/feed_builder.rb +65 -0
  163. data/spec/support/factories/feed_registry.rb +8 -0
  164. data/spec/support/factories/output.rb +11 -0
  165. data/spec/support/factories/record.rb +17 -0
  166. data/spec/support/factories/xml_node.rb +33 -0
  167. data/spec/support/helpers/io.rb +11 -0
  168. data/spec/support/helpers/models.rb +13 -0
  169. data/spec/support/shared/action_builder.rb +47 -0
  170. data/spec/support/shared/decoder.rb +70 -0
  171. data/spec/support/shared/feeds.rb +218 -0
  172. data/spec/support/shared/fetcher.rb +48 -0
  173. data/spec/support/shared/filter.rb +14 -0
  174. data/spec/support/shared/io-like.rb +7 -0
  175. data/spec/support/shared/output.rb +120 -0
  176. data/spec/support/shared/parsers.rb +51 -0
  177. data/spec/support/shared/record.rb +111 -0
  178. data/spec/threatinator/actions/list/action_spec.rb +93 -0
  179. data/spec/threatinator/actions/run/action_spec.rb +89 -0
  180. data/spec/threatinator/actions/run/config_spec.rb +39 -0
  181. data/spec/threatinator/actions/run/coverage_observer_spec.rb +116 -0
  182. data/spec/threatinator/actions/run/output_config_spec.rb +89 -0
  183. data/spec/threatinator/cli/list_action_builder_spec.rb +57 -0
  184. data/spec/threatinator/cli/run_action_builder_spec.rb +133 -0
  185. data/spec/threatinator/cli_spec.rb +175 -0
  186. data/spec/threatinator/config/base_spec.rb +39 -0
  187. data/spec/threatinator/config/feed_search_spec.rb +76 -0
  188. data/spec/threatinator/decoders/gzip_spec.rb +75 -0
  189. data/spec/threatinator/event_builder_spec.rb +33 -0
  190. data/spec/threatinator/event_spec.rb +30 -0
  191. data/spec/threatinator/feed_builder_spec.rb +636 -0
  192. data/spec/threatinator/feed_registry_spec.rb +198 -0
  193. data/spec/threatinator/feed_runner_spec.rb +155 -0
  194. data/spec/threatinator/feed_spec.rb +169 -0
  195. data/spec/threatinator/fetcher_spec.rb +12 -0
  196. data/spec/threatinator/fetchers/http_spec.rb +32 -0
  197. data/spec/threatinator/filter_spec.rb +13 -0
  198. data/spec/threatinator/filters/block_spec.rb +16 -0
  199. data/spec/threatinator/filters/comments_spec.rb +13 -0
  200. data/spec/threatinator/filters/whitespace_spec.rb +12 -0
  201. data/spec/threatinator/parser_spec.rb +13 -0
  202. data/spec/threatinator/parsers/csv/parser_spec.rb +202 -0
  203. data/spec/threatinator/parsers/getline/parser_spec.rb +83 -0
  204. data/spec/threatinator/parsers/json/parser_spec.rb +106 -0
  205. data/spec/threatinator/parsers/json/record_spec.rb +30 -0
  206. data/spec/threatinator/parsers/xml/node_spec.rb +335 -0
  207. data/spec/threatinator/parsers/xml/parser_spec.rb +263 -0
  208. data/spec/threatinator/parsers/xml/path_spec.rb +209 -0
  209. data/spec/threatinator/parsers/xml/pattern_spec.rb +72 -0
  210. data/spec/threatinator/parsers/xml/record_spec.rb +27 -0
  211. data/spec/threatinator/plugin_loader_spec.rb +238 -0
  212. data/spec/threatinator/plugins/output/csv_spec.rb +46 -0
  213. data/spec/threatinator/plugins/output/null_spec.rb +17 -0
  214. data/spec/threatinator/plugins/output/rubydebug_spec.rb +37 -0
  215. data/spec/threatinator/property_definer_spec.rb +155 -0
  216. data/spec/threatinator/record_spec.rb +19 -0
  217. data/spec/threatinator/registry_spec.rb +97 -0
  218. data/spec/threatinator/runner_spec.rb +273 -0
  219. metadata +376 -0
@@ -0,0 +1,53 @@
1
+ require 'threatinator/exceptions'
2
+
3
+ module Threatinator
4
+ # Just a simple class that holds stuff. Yup, a glorified hash.
5
+ class Registry
6
+ include Threatinator::Exceptions
7
+
8
+ def initialize()
9
+ @data= Hash.new
10
+ end
11
+
12
+ # @param [Object] key The object to use as the key for storing the object
13
+ # @param [Object] object The object to be stored
14
+ # @raise [Threatinator::Exceptions::dAlreadyRegisteredError] if an object
15
+ # with the same key is already registered.
16
+ def register(key, object)
17
+ if @data.has_key?(key)
18
+ raise AlreadyRegisteredError.new(key)
19
+ end
20
+ @data[key] = object
21
+ end
22
+
23
+ # @param [Object] key
24
+ # @return [Object]
25
+ def get(key)
26
+ @data[key]
27
+ end
28
+
29
+ # @return [Array<Object>] an array of keys
30
+ def keys
31
+ @data.keys
32
+ end
33
+
34
+ # @return [Integer] the number of objects in the registry
35
+ def count
36
+ @data.count
37
+ end
38
+
39
+ # Enumerates through each object in our registry
40
+ # @yield [object]
41
+ # @yieldparam [Object] object An object within the registry
42
+ def each(&block)
43
+ return enum_for(:each) unless block_given?
44
+ @data.each_pair(&block)
45
+ end
46
+
47
+ # Removes all objects from the registry
48
+ def clear
49
+ @data.clear
50
+ end
51
+ end
52
+ end
53
+
@@ -0,0 +1,15 @@
1
+
2
+ module Threatinator
3
+ module Util
4
+ def underscore2cc(str)
5
+ str.to_s.split('_').map {|e| e.capitalize }.join
6
+ end
7
+ module_function :underscore2cc
8
+
9
+ def cc2underscore(str)
10
+ str.to_s.split('_').map {|e| e.capitalize }.join
11
+ end
12
+ module_function :underscore2cc
13
+ end
14
+ end
15
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/ET_compromised-ip_reputation.feed', :feed do
4
+ let(:provider) { 'emergingthreats' }
5
+ let(:name) { 'compromised_ip_reputation' }
6
+
7
+ it_fetches_url 'http://rules.emergingthreats.net/open/suricata/rules/compromised-ips.txt'
8
+
9
+ describe_parsing_the_file feed_data('ET_compromised-ip_reputation.txt') do
10
+ it "should have parsed 11 records" do
11
+ expect(num_records_parsed).to eq(11)
12
+ end
13
+ it "should have filtered 0 records" do
14
+ expect(num_records_filtered).to eq(0)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '1.93.24.90' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['1.93.24.90']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record '1.93.26.32' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:scanning) }
45
+ its(:ipv4s) { is_expected.to match_array(['1.93.26.32']) }
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/alienvault-ip_reputation.feed', :feed do
4
+ let(:provider) { 'alienvault' }
5
+ let(:name) { 'ip_reputation' }
6
+
7
+ it_fetches_url 'https://reputation.alienvault.com/reputation.generic'
8
+
9
+ describe_parsing_the_file feed_data('alienvault-ip_reputation.txt') do
10
+ it "should have parsed 10 records" do
11
+ expect(num_records_parsed).to eq(10)
12
+ end
13
+ it "should have filtered 8 records" do
14
+ expect(num_records_filtered).to eq(8)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '37.205.198.162 # Scanning Host IT,,42.8333015442,12.8332996368' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['37.205.198.162']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record '108.59.1.5 # Scanning Host A1,,0.0,0.0' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:scanning) }
45
+ its(:ipv4s) { is_expected.to match_array(['108.59.1.5']) }
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/arbor_fastflux-domain_reputation.feed', :feed do
4
+ let(:provider) { 'arbor' }
5
+ let(:name) { 'fastflux_domain_reputation' }
6
+
7
+ it_fetches_url 'http://atlas.arbor.net/summary/domainlist'
8
+
9
+ describe_parsing_the_file feed_data('arbor_domainlist.txt') do
10
+ it "should have parsed 2 records" do
11
+ expect(num_records_parsed).to eq(2)
12
+ end
13
+ it "should have filtered 9 records" do
14
+ expect(num_records_filtered).to eq(9)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record 'brylanehome.com' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:c2) }
31
+ its(:fqdns) { is_expected.to match_array(['brylanehome.com']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record 'emltrk.com' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:c2) }
45
+ its(:fqdns) { is_expected.to match_array(['emltrk.com']) }
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/arbor_ssh-ip_reputation.feed', :feed do
4
+ let(:provider) { 'arbor' }
5
+ let(:name) { 'ssh_ip_reputation' }
6
+
7
+ it_fetches_url 'http://atlas-public.ec2.arbor.net/public/ssh_attackers'
8
+
9
+ describe_parsing_the_file feed_data('arbor_ssh.txt') do
10
+ it "should have parsed 15 records" do
11
+ expect(num_records_parsed).to eq(15)
12
+ end
13
+ it "should have filtered 1 records" do
14
+ expect(num_records_filtered).to eq(1)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '190.255.48.99' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['190.255.48.99']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record '184.172.196.132' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:scanning) }
45
+ its(:ipv4s) { is_expected.to match_array(['184.172.196.132']) }
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/autoshun_shunlist.feed', :feed do
4
+ let(:provider) { 'autoshun' }
5
+ let(:name) { 'shunlist' }
6
+
7
+ it_fetches_url 'http://www.autoshun.org/files/shunlist.csv'
8
+
9
+ describe_parsing_the_file feed_data('autoshun_shunlist.csv') do
10
+ it "should have parsed 19 records" do
11
+ expect(num_records_parsed).to eq(19)
12
+ end
13
+ it "should have filtered 1 records" do
14
+ expect(num_records_filtered).to eq(1)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '1.93.34.230,2014-07-16 08:01:23,SSH Brute Force' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['1.93.34.230']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record 'Shunlist as of Mon, 21 Jul 2014 13:30:02 -0500' do
36
+ it "should have been filtered" do
37
+ expect(status).to eq(:filtered)
38
+ end
39
+ end
40
+ end
41
+
42
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/blocklist_de_apache-ip_reputation.feed', :feed do
4
+ let(:provider) { 'blocklist_de' }
5
+ let(:name) { 'apache_ip_reputation' }
6
+
7
+ it_fetches_url 'http://www.blocklist.de/lists/apache.txt'
8
+
9
+ describe_parsing_the_file feed_data('blocklist_de_apache-ip-reputation.txt') do
10
+ it "should have parsed 15 records" do
11
+ expect(num_records_parsed).to eq(15)
12
+ end
13
+ it "should have filtered 2 records" do
14
+ expect(num_records_filtered).to eq(2)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '109.228.235.167' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['109.228.235.167']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record '109.70.54.11' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:scanning) }
45
+ its(:ipv4s) { is_expected.to match_array(['109.70.54.11']) }
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/blocklist_de_bots-ip_reputation.feed', :feed do
4
+ let(:provider) { 'blocklist_de' }
5
+ let(:name) { 'bots_ip_reputation' }
6
+
7
+ it_fetches_url 'http://www.blocklist.de/lists/bots.txt'
8
+
9
+ describe_parsing_the_file feed_data('blocklist_de_bots-ip-reputation.txt') do
10
+ it "should have parsed 13 records" do
11
+ expect(num_records_parsed).to eq(13)
12
+ end
13
+ it "should have filtered 2 records" do
14
+ expect(num_records_filtered).to eq(2)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '101.71.196.164' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['101.71.196.164']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record '200.93.43.157' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:scanning) }
45
+ its(:ipv4s) { is_expected.to match_array(['200.93.43.157']) }
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'feeds/blocklist_de_ftp-ip_reputation.feed', :feed do
4
+ let(:provider) { 'blocklist_de' }
5
+ let(:name) { 'ftp_ip_reputation' }
6
+
7
+ it_fetches_url 'http://www.blocklist.de/lists/ftp.txt'
8
+
9
+ describe_parsing_the_file feed_data('blocklist_de_ftp-ip-reputation.txt') do
10
+ it "should have parsed 7 records" do
11
+ expect(num_records_parsed).to eq(7)
12
+ end
13
+ it "should have filtered 0 records" do
14
+ expect(num_records_filtered).to eq(0)
15
+ end
16
+ it "should have missed 0 records" do
17
+ expect(num_records_missed).to eq(0)
18
+ end
19
+ end
20
+
21
+ describe_parsing_a_record '111.192.138.169' do
22
+ it "should have parsed" do
23
+ expect(status).to eq(:parsed)
24
+ end
25
+ it "should have parsed 1 event" do
26
+ expect(events.count).to eq(1)
27
+ end
28
+ describe 'event 0' do
29
+ subject { events[0] }
30
+ its(:type) { is_expected.to be(:scanning) }
31
+ its(:ipv4s) { is_expected.to match_array(['111.192.138.169']) }
32
+ end
33
+ end
34
+
35
+ describe_parsing_a_record '112.198.77.229' do
36
+ it "should have parsed" do
37
+ expect(status).to eq(:parsed)
38
+ end
39
+ it "should have parsed 1 event" do
40
+ expect(events.count).to eq(1)
41
+ end
42
+ describe 'event 0' do
43
+ subject { events[0] }
44
+ its(:type) { is_expected.to be(:scanning) }
45
+ its(:ipv4s) { is_expected.to match_array(['112.198.77.229']) }
46
+ end
47
+ end
48
+ end
49
+
50
+