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.
- data/.gitignore +9 -0
- data/.yardopts +6 -0
- data/Gemfile +5 -0
- data/LICENSE +57 -0
- data/README.md +180 -0
- data/Rakefile +33 -0
- data/bin/fidius-evasiondb +111 -0
- data/evasion-db.gemspec +37 -0
- data/lib/db/db-install.rb +103 -0
- data/lib/db/migrations/001_create_packets.rb +18 -0
- data/lib/db/migrations/002_create_idmef_events.rb +23 -0
- data/lib/db/migrations/003_create_attack_modules.rb +14 -0
- data/lib/db/migrations/004_create_attack_options.rb +14 -0
- data/lib/db/migrations/005_create_attack_payloads.rb +13 -0
- data/lib/evasion-db/base.rb +80 -0
- data/lib/evasion-db/idmef-fetchers/fetchers.rb +67 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/fetcher.rb +8 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/additional_data.rb +16 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/address.rb +8 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/alert.rb +46 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/analyzer.rb +18 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/classification.rb +10 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/connection.rb +10 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/detect_time.rb +10 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/impact.rb +19 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/prelude_event.rb +120 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/models/service.rb +10 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/patches/postgres_patch.rb +12 -0
- data/lib/evasion-db/idmef-fetchers/prelude-db/lib/prelude_event_fetcher.rb +67 -0
- data/lib/evasion-db/idmef-fetchers/test-fetcher/fetcher.rb +6 -0
- data/lib/evasion-db/idmef-fetchers/test-fetcher/lib/test_fetcher.rb +19 -0
- data/lib/evasion-db/knowledge/attack_module.rb +41 -0
- data/lib/evasion-db/knowledge/attack_option.rb +12 -0
- data/lib/evasion-db/knowledge/attack_payload.rb +13 -0
- data/lib/evasion-db/knowledge/connection.rb +7 -0
- data/lib/evasion-db/knowledge/idmef_event.rb +21 -0
- data/lib/evasion-db/knowledge/packet.rb +17 -0
- data/lib/evasion-db/knowledge.rb +128 -0
- data/lib/evasion-db/log_matches_helper.rb +43 -0
- data/lib/evasion-db/recorders/msf-recorder/lib/msf-recorder.rb +78 -0
- data/lib/evasion-db/recorders/msf-recorder/recorder.rb +6 -0
- data/lib/evasion-db/recorders/recorders.rb +61 -0
- data/lib/evasion-db/version.rb +5 -0
- data/lib/fidius-evasiondb.rb +27 -0
- data/lib/msf-plugins/database.yml.example +24 -0
- data/lib/msf-plugins/evasiondb.rb +378 -0
- data/test/config/database.yml +11 -0
- data/test/config/prelude.sql +439 -0
- data/test/helper.rb +50 -0
- data/test/preludedb_helper.rb +70 -0
- data/test/test_fetchers.rb +34 -0
- data/test/test_knowledge.rb +102 -0
- data/test/test_preludedb.rb +41 -0
- data/test/test_recorders.rb +115 -0
- 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
|