fidius-evasiondb 0.0.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 (55) hide show
  1. data/.gitignore +9 -0
  2. data/.yardopts +6 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE +57 -0
  5. data/README.md +180 -0
  6. data/Rakefile +33 -0
  7. data/bin/fidius-evasiondb +111 -0
  8. data/evasion-db.gemspec +37 -0
  9. data/lib/db/db-install.rb +103 -0
  10. data/lib/db/migrations/001_create_packets.rb +18 -0
  11. data/lib/db/migrations/002_create_idmef_events.rb +23 -0
  12. data/lib/db/migrations/003_create_attack_modules.rb +14 -0
  13. data/lib/db/migrations/004_create_attack_options.rb +14 -0
  14. data/lib/db/migrations/005_create_attack_payloads.rb +13 -0
  15. data/lib/evasion-db/base.rb +80 -0
  16. data/lib/evasion-db/idmef-fetchers/fetchers.rb +67 -0
  17. data/lib/evasion-db/idmef-fetchers/prelude-db/fetcher.rb +8 -0
  18. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/additional_data.rb +16 -0
  19. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/address.rb +8 -0
  20. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/alert.rb +46 -0
  21. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/analyzer.rb +18 -0
  22. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/classification.rb +10 -0
  23. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/connection.rb +10 -0
  24. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/detect_time.rb +10 -0
  25. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/impact.rb +19 -0
  26. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/prelude_event.rb +120 -0
  27. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/service.rb +10 -0
  28. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/patches/postgres_patch.rb +12 -0
  29. data/lib/evasion-db/idmef-fetchers/prelude-db/lib/prelude_event_fetcher.rb +67 -0
  30. data/lib/evasion-db/idmef-fetchers/test-fetcher/fetcher.rb +6 -0
  31. data/lib/evasion-db/idmef-fetchers/test-fetcher/lib/test_fetcher.rb +19 -0
  32. data/lib/evasion-db/knowledge/attack_module.rb +41 -0
  33. data/lib/evasion-db/knowledge/attack_option.rb +12 -0
  34. data/lib/evasion-db/knowledge/attack_payload.rb +13 -0
  35. data/lib/evasion-db/knowledge/connection.rb +7 -0
  36. data/lib/evasion-db/knowledge/idmef_event.rb +21 -0
  37. data/lib/evasion-db/knowledge/packet.rb +17 -0
  38. data/lib/evasion-db/knowledge.rb +128 -0
  39. data/lib/evasion-db/log_matches_helper.rb +43 -0
  40. data/lib/evasion-db/recorders/msf-recorder/lib/msf-recorder.rb +78 -0
  41. data/lib/evasion-db/recorders/msf-recorder/recorder.rb +6 -0
  42. data/lib/evasion-db/recorders/recorders.rb +61 -0
  43. data/lib/evasion-db/version.rb +5 -0
  44. data/lib/fidius-evasiondb.rb +27 -0
  45. data/lib/msf-plugins/database.yml.example +24 -0
  46. data/lib/msf-plugins/evasiondb.rb +378 -0
  47. data/test/config/database.yml +11 -0
  48. data/test/config/prelude.sql +439 -0
  49. data/test/helper.rb +50 -0
  50. data/test/preludedb_helper.rb +70 -0
  51. data/test/test_fetchers.rb +34 -0
  52. data/test/test_knowledge.rb +102 -0
  53. data/test/test_preludedb.rb +41 -0
  54. data/test/test_recorders.rb +115 -0
  55. metadata +238 -0
@@ -0,0 +1,439 @@
1
+
2
+
3
+ CREATE TABLE "Prelude_Action" (
4
+ "_message_ident" bigint(20) NOT NULL,
5
+ "_index" tinyint(4) NOT NULL,
6
+ "description" varchar(255) DEFAULT NULL,
7
+ "category" varchar(255) NOT NULL,
8
+ PRIMARY KEY ("_message_ident","_index")
9
+ );
10
+
11
+
12
+
13
+ CREATE TABLE "Prelude_AdditionalData" (
14
+ "_message_ident" bigint(20) NOT NULL,
15
+ "_parent_type" varchar(255) NOT NULL,
16
+ "_index" tinyint(4) NOT NULL,
17
+ "type" varchar(255) NOT NULL,
18
+ "meaning" varchar(255) DEFAULT NULL,
19
+ "data" blob NOT NULL,
20
+ PRIMARY KEY ("_parent_type","_message_ident","_index")
21
+ );
22
+
23
+
24
+
25
+ CREATE TABLE "Prelude_Address" (
26
+ "_message_ident" bigint(20) NOT NULL,
27
+ "_parent_type" varchar(255) NOT NULL,
28
+ "_parent0_index" smallint(6) NOT NULL,
29
+ "_index" tinyint(4) NOT NULL,
30
+ "ident" varchar(255) DEFAULT NULL,
31
+ "category" varchar(255) NOT NULL,
32
+ "vlan_name" varchar(255) DEFAULT NULL,
33
+ "vlan_num" int(10) DEFAULT NULL,
34
+ "address" varchar(255) NOT NULL,
35
+ "netmask" varchar(255) DEFAULT NULL,
36
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index","_index")
37
+ );
38
+
39
+
40
+
41
+ CREATE TABLE "Prelude_Alert" (
42
+ "_ident" bigint(20) NOT NULL,
43
+ "messageid" varchar(255) DEFAULT NULL,
44
+ PRIMARY KEY ("_ident")
45
+ );
46
+
47
+
48
+
49
+ CREATE TABLE "Prelude_Alertident" (
50
+ "_message_ident" bigint(20) NOT NULL,
51
+ "_index" int(11) NOT NULL,
52
+ "_parent_type" varchar(255) NOT NULL,
53
+ "alertident" varchar(255) NOT NULL,
54
+ "analyzerid" varchar(255) DEFAULT NULL,
55
+ PRIMARY KEY ("_parent_type","_message_ident","_index")
56
+ );
57
+
58
+
59
+
60
+ CREATE TABLE "Prelude_Analyzer" (
61
+ "_message_ident" bigint(20) NOT NULL,
62
+ "_parent_type" varchar(255) DEFAULT NULL,
63
+ "_index" tinyint(4) DEFAULT NULL,
64
+ "analyzerid" varchar(255) DEFAULT NULL,
65
+ "name" varchar(255) DEFAULT NULL,
66
+ "manufacturer" varchar(255) DEFAULT NULL,
67
+ "model" varchar(255) DEFAULT NULL,
68
+ "version" varchar(255) DEFAULT NULL,
69
+ "class" varchar(255) DEFAULT NULL,
70
+ "ostype" varchar(255) DEFAULT NULL,
71
+ "osversion" varchar(255) DEFAULT NULL,
72
+ PRIMARY KEY ("_parent_type","_message_ident","_index")
73
+ );
74
+
75
+
76
+
77
+ CREATE TABLE "Prelude_AnalyzerTime" (
78
+ "_message_ident" bigint(20) NOT NULL,
79
+ "_parent_type" varchar(255) NOT NULL,
80
+ "time" datetime NOT NULL,
81
+ "usec" int(10) NOT NULL,
82
+ "gmtoff" int(11) NOT NULL,
83
+ PRIMARY KEY ("_parent_type","_message_ident")
84
+ );
85
+
86
+
87
+
88
+ CREATE TABLE "Prelude_Assessment" (
89
+ "_message_ident" bigint(20) NOT NULL,
90
+ PRIMARY KEY ("_message_ident")
91
+ );
92
+
93
+
94
+
95
+ CREATE TABLE "Prelude_Checksum" (
96
+ "_message_ident" bigint(20) NOT NULL,
97
+ "_parent0_index" smallint(6) NOT NULL,
98
+ "_parent1_index" tinyint(4) NOT NULL,
99
+ "_index" tinyint(4) NOT NULL,
100
+ "algorithm" varchar(255) NOT NULL,
101
+ "value" varchar(255) NOT NULL,
102
+ "checksum_key" varchar(255) DEFAULT NULL,
103
+ PRIMARY KEY ("_message_ident","_parent0_index","_parent1_index","_index")
104
+ );
105
+
106
+
107
+
108
+ CREATE TABLE "Prelude_Classification" (
109
+ "_message_ident" bigint(20) NOT NULL,
110
+ "ident" varchar(255) DEFAULT NULL,
111
+ "text" varchar(255) NOT NULL,
112
+ PRIMARY KEY ("_message_ident")
113
+ );
114
+
115
+
116
+
117
+ CREATE TABLE "Prelude_Confidence" (
118
+ "_message_ident" bigint(20) NOT NULL,
119
+ "confidence" float DEFAULT NULL,
120
+ "rating" varchar(255) NOT NULL,
121
+ PRIMARY KEY ("_message_ident")
122
+ );
123
+
124
+
125
+
126
+ CREATE TABLE "Prelude_CorrelationAlert" (
127
+ "_message_ident" bigint(20) NOT NULL,
128
+ "name" varchar(255) NOT NULL,
129
+ PRIMARY KEY ("_message_ident")
130
+ );
131
+
132
+
133
+
134
+ CREATE TABLE "Prelude_CreateTime" (
135
+ "_message_ident" bigint(20) NOT NULL,
136
+ "_parent_type" varchar(255) NOT NULL,
137
+ "time" datetime NOT NULL,
138
+ "usec" int(10) NOT NULL,
139
+ "gmtoff" int(11) NOT NULL,
140
+ PRIMARY KEY ("_parent_type","_message_ident")
141
+ );
142
+
143
+
144
+
145
+ CREATE TABLE "Prelude_DetectTime" (
146
+ "_message_ident" bigint(20) NOT NULL,
147
+ "time" datetime NOT NULL,
148
+ "usec" int(10) DEFAULT NULL,
149
+ "gmtoff" int(11) DEFAULT NULL,
150
+ PRIMARY KEY ("_message_ident")
151
+ );
152
+
153
+
154
+
155
+ CREATE TABLE "Prelude_File" (
156
+ "_message_ident" bigint(20) NOT NULL,
157
+ "_parent0_index" smallint(6) NOT NULL,
158
+ "_index" tinyint(4) NOT NULL,
159
+ "ident" varchar(255) DEFAULT NULL,
160
+ "path" varchar(255) NOT NULL,
161
+ "name" varchar(255) NOT NULL,
162
+ "category" varchar(255) DEFAULT NULL,
163
+ "create_time" datetime DEFAULT NULL,
164
+ "create_time_gmtoff" int(11) DEFAULT NULL,
165
+ "modify_time" datetime DEFAULT NULL,
166
+ "modify_time_gmtoff" int(11) DEFAULT NULL,
167
+ "access_time" datetime DEFAULT NULL,
168
+ "access_time_gmtoff" int(11) DEFAULT NULL,
169
+ "data_size" int(10) DEFAULT NULL,
170
+ "disk_size" int(10) DEFAULT NULL,
171
+ "fstype" varchar(255) DEFAULT NULL,
172
+ "file_type" varchar(255) DEFAULT NULL,
173
+ PRIMARY KEY ("_message_ident","_parent0_index","_index")
174
+ );
175
+
176
+
177
+
178
+ CREATE TABLE "Prelude_FileAccess" (
179
+ "_message_ident" bigint(20) NOT NULL,
180
+ "_parent0_index" smallint(6) NOT NULL,
181
+ "_parent1_index" tinyint(4) NOT NULL,
182
+ "_index" tinyint(4) NOT NULL,
183
+ PRIMARY KEY ("_message_ident","_parent0_index","_parent1_index","_index")
184
+ );
185
+
186
+
187
+
188
+ CREATE TABLE "Prelude_FileAccess_Permission" (
189
+ "_message_ident" bigint(20) NOT NULL,
190
+ "_parent0_index" smallint(6) NOT NULL,
191
+ "_parent1_index" tinyint(4) NOT NULL,
192
+ "_parent2_index" tinyint(4) NOT NULL,
193
+ "_index" tinyint(4) NOT NULL,
194
+ "permission" varchar(255) NOT NULL,
195
+ PRIMARY KEY ("_message_ident","_parent0_index","_parent1_index","_parent2_index","_index")
196
+ );
197
+
198
+
199
+
200
+ CREATE TABLE "Prelude_Heartbeat" (
201
+ "_ident" bigint(20) NOT NULL,
202
+ "messageid" varchar(255) DEFAULT NULL,
203
+ "heartbeat_interval" int(11) DEFAULT NULL,
204
+ PRIMARY KEY ("_ident")
205
+ );
206
+
207
+
208
+
209
+ CREATE TABLE "Prelude_Impact" (
210
+ "_message_ident" bigint(20) NOT NULL,
211
+ "description" text,
212
+ "severity" varchar(255) DEFAULT NULL,
213
+ "completion" varchar(255) DEFAULT NULL,
214
+ "type" varchar(255) DEFAULT NULL,
215
+ PRIMARY KEY ("_message_ident")
216
+ );
217
+
218
+
219
+
220
+ CREATE TABLE "Prelude_Inode" (
221
+ "_message_ident" bigint(20) NOT NULL,
222
+ "_parent0_index" smallint(6) NOT NULL,
223
+ "_parent1_index" tinyint(4) NOT NULL,
224
+ "change_time" datetime DEFAULT NULL,
225
+ "change_time_gmtoff" int(11) DEFAULT NULL,
226
+ "number" int(10) DEFAULT NULL,
227
+ "major_device" int(10) DEFAULT NULL,
228
+ "minor_device" int(10) DEFAULT NULL,
229
+ "c_major_device" int(10) DEFAULT NULL,
230
+ "c_minor_device" int(10) DEFAULT NULL,
231
+ PRIMARY KEY ("_message_ident","_parent0_index","_parent1_index")
232
+ );
233
+
234
+
235
+
236
+ CREATE TABLE "Prelude_Linkage" (
237
+ "_message_ident" bigint(20) NOT NULL,
238
+ "_parent0_index" smallint(6) NOT NULL,
239
+ "_parent1_index" tinyint(4) NOT NULL,
240
+ "_index" tinyint(4) NOT NULL,
241
+ "category" varchar(255) NOT NULL,
242
+ "name" varchar(255) NOT NULL,
243
+ "path" varchar(255) NOT NULL,
244
+ PRIMARY KEY ("_message_ident","_parent0_index","_parent1_index","_index")
245
+ );
246
+
247
+
248
+
249
+ CREATE TABLE "Prelude_Node" (
250
+ "_message_ident" bigint(20) NOT NULL,
251
+ "_parent_type" varchar(255) NOT NULL,
252
+ "_parent0_index" smallint(6) NOT NULL,
253
+ "ident" varchar(255) DEFAULT NULL,
254
+ "category" varchar(255) DEFAULT NULL,
255
+ "location" varchar(255) DEFAULT NULL,
256
+ "name" varchar(255) DEFAULT NULL,
257
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index")
258
+ );
259
+
260
+
261
+
262
+ CREATE TABLE "Prelude_OverflowAlert" (
263
+ "_message_ident" bigint(20) NOT NULL,
264
+ "program" varchar(255) NOT NULL,
265
+ "size" int(10) DEFAULT NULL,
266
+ "buffer" blob,
267
+ PRIMARY KEY ("_message_ident")
268
+ );
269
+
270
+
271
+
272
+ CREATE TABLE "Prelude_Process" (
273
+ "_message_ident" bigint(20) NOT NULL,
274
+ "_parent_type" varchar(255) NOT NULL,
275
+ "_parent0_index" smallint(6) NOT NULL,
276
+ "ident" varchar(255) DEFAULT NULL,
277
+ "name" varchar(255) NOT NULL,
278
+ "pid" int(10) DEFAULT NULL,
279
+ "path" varchar(255) DEFAULT NULL,
280
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index")
281
+ );
282
+
283
+
284
+
285
+ CREATE TABLE "Prelude_ProcessArg" (
286
+ "_message_ident" bigint(20) NOT NULL,
287
+ "_parent_type" varchar(255) NOT NULL DEFAULT 'A',
288
+ "_parent0_index" smallint(6) NOT NULL,
289
+ "_index" tinyint(4) NOT NULL,
290
+ "arg" varchar(255) NOT NULL,
291
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index","_index")
292
+ );
293
+
294
+
295
+
296
+ CREATE TABLE "Prelude_ProcessEnv" (
297
+ "_message_ident" bigint(20) NOT NULL,
298
+ "_parent_type" varchar(255) NOT NULL,
299
+ "_parent0_index" smallint(6) NOT NULL,
300
+ "_index" tinyint(4) NOT NULL,
301
+ "env" varchar(255) NOT NULL,
302
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index","_index")
303
+ );
304
+
305
+
306
+
307
+ CREATE TABLE "Prelude_Reference" (
308
+ "_message_ident" bigint(20) NOT NULL,
309
+ "_index" tinyint(4) NOT NULL,
310
+ "origin" varchar(255) NOT NULL,
311
+ "name" varchar(255) NOT NULL,
312
+ "url" varchar(255) NOT NULL,
313
+ "meaning" varchar(255) DEFAULT NULL,
314
+ PRIMARY KEY ("_message_ident","_index")
315
+ );
316
+
317
+
318
+
319
+ CREATE TABLE "Prelude_Service" (
320
+ "_message_ident" bigint(20) NOT NULL,
321
+ "_parent_type" varchar(255) DEFAULT NULL,
322
+ "_parent0_index" smallint(6) DEFAULT NULL,
323
+ "ident" varchar(255) DEFAULT NULL,
324
+ "ip_version" tinyint(3) DEFAULT NULL,
325
+ "name" varchar(255) DEFAULT NULL,
326
+ "port" smallint(5) DEFAULT NULL,
327
+ "iana_protocol_number" tinyint(3) DEFAULT NULL,
328
+ "iana_protocol_name" varchar(255) DEFAULT NULL,
329
+ "portlist" varchar(255) DEFAULT NULL,
330
+ "protocol" varchar(255) DEFAULT NULL,
331
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index")
332
+ );
333
+
334
+
335
+
336
+ CREATE TABLE "Prelude_SnmpService" (
337
+ "_message_ident" bigint(20) NOT NULL,
338
+ "_parent_type" varchar(255) NOT NULL,
339
+ "_parent0_index" smallint(6) NOT NULL,
340
+ "snmp_oid" varchar(255) DEFAULT NULL,
341
+ "message_processing_model" int(10) DEFAULT NULL,
342
+ "security_model" int(10) DEFAULT NULL,
343
+ "security_name" varchar(255) DEFAULT NULL,
344
+ "security_level" int(10) DEFAULT NULL,
345
+ "context_name" varchar(255) DEFAULT NULL,
346
+ "context_engine_id" varchar(255) DEFAULT NULL,
347
+ "command" varchar(255) DEFAULT NULL,
348
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index")
349
+ );
350
+
351
+
352
+
353
+ CREATE TABLE "Prelude_Source" (
354
+ "_message_ident" bigint(20) NOT NULL,
355
+ "_index" smallint(6) NOT NULL,
356
+ "ident" varchar(255) DEFAULT NULL,
357
+ "spoofed" varchar(255) NOT NULL,
358
+ "interface" varchar(255) DEFAULT NULL,
359
+ PRIMARY KEY ("_message_ident","_index")
360
+ );
361
+
362
+
363
+
364
+ CREATE TABLE "Prelude_Target" (
365
+ "_message_ident" bigint(20) NOT NULL,
366
+ "_index" smallint(6) NOT NULL,
367
+ "ident" varchar(255) DEFAULT NULL,
368
+ "decoy" varchar(255) NOT NULL,
369
+ "interface" varchar(255) DEFAULT NULL,
370
+ PRIMARY KEY ("_message_ident","_index")
371
+ );
372
+
373
+
374
+
375
+ CREATE TABLE "Prelude_ToolAlert" (
376
+ "_message_ident" bigint(20) NOT NULL,
377
+ "name" varchar(255) NOT NULL,
378
+ "command" varchar(255) DEFAULT NULL,
379
+ PRIMARY KEY ("_message_ident")
380
+ );
381
+
382
+
383
+
384
+ CREATE TABLE "Prelude_User" (
385
+ "_message_ident" bigint(20) NOT NULL,
386
+ "_parent_type" varchar(255) NOT NULL,
387
+ "_parent0_index" smallint(6) NOT NULL,
388
+ "ident" varchar(255) DEFAULT NULL,
389
+ "category" varchar(255) NOT NULL,
390
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index")
391
+ );
392
+
393
+
394
+
395
+ CREATE TABLE "Prelude_UserId" (
396
+ "_message_ident" bigint(20) NOT NULL,
397
+ "_parent_type" varchar(255) NOT NULL,
398
+ "_parent0_index" smallint(6) NOT NULL,
399
+ "_parent1_index" tinyint(4) NOT NULL,
400
+ "_parent2_index" tinyint(4) NOT NULL,
401
+ "_index" tinyint(4) NOT NULL,
402
+ "ident" varchar(255) DEFAULT NULL,
403
+ "type" varchar(255) NOT NULL,
404
+ "name" varchar(255) DEFAULT NULL,
405
+ "tty" varchar(255) DEFAULT NULL,
406
+ "number" int(10) DEFAULT NULL,
407
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index","_parent1_index","_parent2_index","_index")
408
+ );
409
+
410
+
411
+
412
+ CREATE TABLE "Prelude_WebService" (
413
+ "_message_ident" bigint(20) NOT NULL,
414
+ "_parent_type" varchar(255) NOT NULL,
415
+ "_parent0_index" smallint(6) NOT NULL,
416
+ "url" varchar(255) NOT NULL,
417
+ "cgi" varchar(255) DEFAULT NULL,
418
+ "http_method" varchar(255) DEFAULT NULL,
419
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index")
420
+ );
421
+
422
+
423
+
424
+ CREATE TABLE "Prelude_WebServiceArg" (
425
+ "_message_ident" bigint(20) NOT NULL,
426
+ "_parent_type" varchar(255) NOT NULL,
427
+ "_parent0_index" smallint(6) NOT NULL,
428
+ "_index" tinyint(4) NOT NULL,
429
+ "arg" varchar(255) NOT NULL,
430
+ PRIMARY KEY ("_parent_type","_message_ident","_parent0_index","_index")
431
+ );
432
+
433
+
434
+
435
+ CREATE TABLE "_format" (
436
+ "name" varchar(255) NOT NULL,
437
+ "version" varchar(255) NOT NULL
438
+ );
439
+
data/test/helper.rb ADDED
@@ -0,0 +1,50 @@
1
+ require 'rubygems'
2
+ require 'sqlite3'
3
+
4
+ TEST_DIR = File.dirname(File.expand_path(__FILE__))
5
+ LIB_DIR = File.expand_path(File.join File.dirname(__FILE__),"..","lib") #File.join File.dirname(__FILE__),"..","lib"
6
+ begin
7
+ require 'simplecov'
8
+ SimpleCov.add_group 'Core', "./lib/evasion-db"
9
+ SimpleCov.add_group 'Knowledge', "./lib/evasion-db/knowledge/*"
10
+ SimpleCov.add_group 'Fetchers', "./lib/evasion-db/idmef-fetchers/*"
11
+ SimpleCov.add_group 'Recorders', "./lib/evasion-db/recorders/*"
12
+
13
+ SimpleCov.add_filter "./lib/db/*"
14
+ SimpleCov.start
15
+ rescue
16
+ # do nothing
17
+ puts "Coverage not possible:#{$!.message}"
18
+ end
19
+ require 'test/unit'
20
+ require "#{LIB_DIR}/fidius-evasiondb"
21
+ require "#{LIB_DIR}/db/db-install"
22
+ require "#{TEST_DIR}/preludedb_helper.rb"
23
+
24
+ module FIDIUS
25
+ module EvasionDB
26
+
27
+ def self.prepare_tests
28
+ $config_file = File.join(TEST_DIR, 'config', 'database.yml')
29
+ $yml_config = YAML.load(File.read($config_file))
30
+ self.prepare_test_db
31
+ FIDIUS::EvasionDB.config($config_file)
32
+ self.fill_db_with_values
33
+ end
34
+
35
+ def self.prepare_test_db
36
+ File.delete($yml_config["evasion_db"]["database"]) if File.exists?($yml_config["evasion_db"]["database"])
37
+ db_config_path = File.join(TEST_DIR, 'config')
38
+ migrations_path = File.join(LIB_DIR, 'db', 'migrations')
39
+ #delete and migrate new test db
40
+ migrate(migrations_path, db_config_path)
41
+ end
42
+
43
+
44
+ def self.fill_db_with_values
45
+ # fill db with example values (use previous tests?)
46
+ end
47
+ end
48
+ end
49
+ include FIDIUS::EvasionDB
50
+ FIDIUS::EvasionDB.prepare_tests
@@ -0,0 +1,70 @@
1
+ module PreludeDBHelper
2
+ def self.setup_prelude_db(config)
3
+ File.delete(config["database"]) if File.exists?(config["database"])
4
+ FIDIUS::PreludeDB::Connection.establish_connection config
5
+ sql = File.read(File.join(TEST_DIR,"config","prelude.sql"))
6
+ sql.split(';').each do |sql_statement|
7
+ sql_statement = sql_statement.lstrip
8
+ if sql_statement != ""
9
+ FIDIUS::PreludeDB::Connection.connection.execute sql_statement
10
+ end
11
+ end
12
+ end
13
+
14
+ def self.insert_event(ident,text,analyzer)
15
+ a = FIDIUS::PreludeDB::Alert.new
16
+ a.messageid = "00042a60-1fd5-11df-ad31"
17
+ a._ident=ident
18
+ a.save
19
+ c = FIDIUS::PreludeDB::Classification.new
20
+ c.text = text
21
+ c._message_ident = ident
22
+ c.save
23
+
24
+ a = FIDIUS::PreludeDB::Address.new
25
+ a.category = "ipv4-addr"
26
+ a._parent0_index = 1
27
+ a._index = 1
28
+ a._message_ident = ident
29
+ a._parent_type = "T"
30
+ a.address = "127.0.0.1"
31
+ a.save
32
+ a = FIDIUS::PreludeDB::Address.new
33
+ a.category = "ipv4-addr"
34
+ a._parent0_index = 1
35
+ a._index = 1
36
+ a._message_ident = ident
37
+ a._parent_type = "S"
38
+ a.address = "127.0.0.1"
39
+ a.save
40
+
41
+ i = FIDIUS::PreludeDB::Impact.new
42
+ i._message_ident = ident
43
+ i.severity = "high"
44
+ i.save
45
+
46
+ a = FIDIUS::PreludeDB::Analyzer.new
47
+ a._message_ident = ident
48
+ a.model = analyzer
49
+ a.name = analyzer
50
+ a.save
51
+
52
+ t = FIDIUS::PreludeDB::DetectTime.new
53
+ t.time = Time.now
54
+ t._message_ident = ident
55
+ t.save
56
+
57
+ s = FIDIUS::PreludeDB::Service.new
58
+ s._message_ident = ident
59
+ s._parent_type = "S"
60
+ s.port = 445
61
+ s.save
62
+
63
+ s = FIDIUS::PreludeDB::Service.new
64
+ s._message_ident = ident
65
+ s._parent_type = "T"
66
+ s.port = 446
67
+ s.save
68
+
69
+ end
70
+ end
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+
3
+ class TestFetchers < Test::Unit::TestCase
4
+ def test_prelude_event_fetcher
5
+ PreludeDBHelper.setup_prelude_db($yml_config["ids_db"])
6
+ PreludeDBHelper.insert_event(223,"BadExploit","snort")
7
+
8
+ FIDIUS::EvasionDB.use_fetcher "PreludeDB"
9
+ FIDIUS::EvasionDB::current_fetcher.begin_record
10
+ FIDIUS::EvasionDB.current_fetcher.local_ip = "127.0.0.1"
11
+ PreludeDBHelper.insert_event(224,"BadExploit1","snort")
12
+ PreludeDBHelper.insert_event(225,"BadExploit2","snort")
13
+ PreludeDBHelper.insert_event(226,"BadExploit3","snort")
14
+ events = FIDIUS::EvasionDB::current_fetcher.fetch_events
15
+ assert_equal 4,FIDIUS::PreludeDB::Alert.all.size
16
+ assert_equal 3, events.size
17
+ end
18
+
19
+ def test_overwrites
20
+ fetcher = FIDIUS::EvasionDB::Fetcher.new("a") do
21
+
22
+ end
23
+ assert_raises RuntimeError do
24
+ fetcher.config("a")
25
+ end
26
+ assert_raises RuntimeError do
27
+ fetcher.begin_record
28
+ end
29
+ assert_raises RuntimeError do
30
+ fetcher.fetch_events
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,102 @@
1
+ require_relative 'helper'
2
+ class TestKnowledge < Test::Unit::TestCase
3
+ include FIDIUS::EvasionDB::Knowledge
4
+
5
+ def test_options_hash_finder
6
+ AttackModule.destroy_all
7
+ 5.times do
8
+ AttackModule.find_or_create_by_name_and_options("windows-exploit",{:a=>3,:b=>7})
9
+ end
10
+ assert_equal 1, AttackModule.all.size
11
+ assert_equal 2, AttackOption.all.size
12
+
13
+ 5.times do
14
+ AttackModule.find_or_create_by_name_and_options("windows-exploit",{:a=>3,:b=>5})
15
+ end
16
+ assert_equal 2, AttackModule.all.size
17
+ assert_equal 4, AttackOption.all.size
18
+ 5.times do
19
+ AttackModule.find_or_create_by_name_and_options("windows-exploit",{:a=>3,:b=>5,:c=>9})
20
+ end
21
+ assert_equal 3, AttackModule.all.size
22
+ assert_equal 7, AttackOption.all.size
23
+ end
24
+
25
+ def test_idmef_event
26
+ event_payload = "hallo"
27
+ event = IdmefEvent.create(:text=>"testexploit",:payload=>event_payload)
28
+ exploit = AttackModule.create(:name=>"exploit")
29
+ payload = AttackPayload.create(:name=>"meterpreter")
30
+ event.attack_module = exploit
31
+ event.attack_payload = payload
32
+ event.save
33
+
34
+ event = IdmefEvent.find(event.id)
35
+ assert_equal event_payload.size, event.payload_size
36
+ assert_equal event_payload, event.payload
37
+ assert_equal exploit.id, event.attack_module.id
38
+ assert_equal payload.id, event.attack_payload.id
39
+ event = IdmefEvent.create(:text=>"testexploit")
40
+ assert_equal 0, event.payload_size
41
+ end
42
+
43
+ def test_packet
44
+ payload = "hallo"
45
+ packet = Packet.create
46
+ assert_equal [], packet.payload
47
+ packet = Packet.create(:payload=>payload)
48
+ assert_equal payload, packet.payload
49
+ end
50
+
51
+ def test_finders
52
+ payload = "hallo"
53
+ AttackModule.destroy_all
54
+ Packet.destroy_all
55
+ IdmefEvent.destroy_all
56
+
57
+ exploit = AttackModule.create(:name=>"exploit")
58
+ packet = Packet.create(:payload=>payload)
59
+ event = IdmefEvent.create(:text=>"testexploit",:payload=>payload)
60
+
61
+ assert_equal 1,FIDIUS::EvasionDB::Knowledge.get_exploits.size
62
+ assert_equal packet, FIDIUS::EvasionDB::Knowledge.get_packet(packet.id)
63
+
64
+ assert_equal 1, FIDIUS::EvasionDB::Knowledge.get_events.size
65
+ assert_equal event, FIDIUS::EvasionDB::Knowledge.get_event(event.id)
66
+ assert_equal packet, FIDIUS::EvasionDB::Knowledge.get_packet(packet.id)
67
+
68
+ assert_equal event, FIDIUS::EvasionDB::Knowledge.get_event(event.id)
69
+ p = FIDIUS::EvasionDB::Knowledge.get_packet_for_event(event.id)
70
+ assert_equal packet, p[:packet]
71
+ assert_equal 5, p[:length]
72
+ assert_equal 0, p[:index]
73
+ end
74
+
75
+ def test_find_events_for_exploit
76
+ AttackModule.destroy_all
77
+ Packet.destroy_all
78
+ IdmefEvent.destroy_all
79
+ name = "windows/meterpreter/bind_tcp"
80
+ a = AttackModule.find_or_create_by_name_and_options(name,{"Payload"=>"windows/meterpreter/bind_tcp","RHOST"=>"10.20.20.1"})
81
+ a.idmef_events << IdmefEvent.create(:text=>"ET EXPLOIT x86 JmpCallAdditive Encoder")
82
+ a.idmef_events << IdmefEvent.create(:text=>"ET EXPLOIT x86 JmpCallAdditive Encoder")
83
+ a.idmef_events << IdmefEvent.create(:text=>"COMMUNITY SIP TCP/IP message flooding directed to SIP")
84
+ a.save
85
+ assert_equal 3, a.idmef_events.size
86
+ a = AttackModule.find_or_create_by_name_and_options(name,{"Payload"=>"windows/messagebox","RHOST"=>"10.20.20.1"})
87
+ a.idmef_events << IdmefEvent.create(:text=>"COMMUNITY SIP TCP/IP message flooding directed to SIP")
88
+ a.save
89
+ assert_equal 1, a.idmef_events.size
90
+
91
+ events = FIDIUS::EvasionDB::Knowledge.find_events_for_exploit(name)
92
+ assert_equal 1,events.size
93
+ assert_equal "COMMUNITY SIP TCP/IP message flooding directed to SIP", events.first.text
94
+
95
+ events = FIDIUS::EvasionDB::Knowledge.find_events_for_exploit(name,{},FIDIUS::EvasionDB::Knowledge::MAX_EVENTS)
96
+ assert_equal 3,events.size
97
+
98
+ events = FIDIUS::EvasionDB::Knowledge.find_events_for_exploit(name,{"Payload"=>"windows/messagebox"},FIDIUS::EvasionDB::Knowledge::MAX_EVENTS)
99
+ assert_equal 1,events.size
100
+
101
+ end
102
+ end