unified2 0.5.4 → 0.6.0
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/ChangeLog.md +10 -0
- data/README.md +41 -35
- data/Rakefile +3 -2
- data/bin/ru2 +76 -0
- data/example/example.rb +10 -18
- data/example/example2.rb +44 -0
- data/example/seeds/classification.config +1 -1
- data/example/seeds/gen-msg.map +86 -9
- data/example/seeds/sid-msg.map +2849 -316
- data/example/seeds/unified2-current.log +0 -0
- data/example/seeds/{unified2.log → unified2-legacy.log} +0 -0
- data/gemspec.yml +2 -1
- data/lib/unified2/classification.rb +12 -0
- data/lib/unified2/config_file.rb +4 -1
- data/lib/unified2/constructor/construct.rb +52 -6
- data/lib/unified2/constructor/event_ip4.rb +18 -3
- data/lib/unified2/constructor/event_ip6.rb +22 -4
- data/lib/unified2/constructor/extra_construct.rb +46 -0
- data/lib/unified2/constructor/extra_data.rb +37 -0
- data/lib/unified2/constructor/extra_data_header.rb +28 -0
- data/lib/unified2/constructor/legacy_event_ip4.rb +54 -0
- data/lib/unified2/constructor/legacy_event_ip6.rb +52 -0
- data/lib/unified2/constructor/packet.rb +9 -1
- data/lib/unified2/constructor/primitive/ipv4.rb +9 -0
- data/lib/unified2/constructor/record_header.rb +9 -0
- data/lib/unified2/constructor.rb +2 -1
- data/lib/unified2/core_ext/string.rb +2 -1
- data/lib/unified2/event.rb +290 -165
- data/lib/unified2/exceptions/binary_read_error.rb +11 -0
- data/lib/unified2/exceptions/file_not_found.rb +4 -1
- data/lib/unified2/exceptions/file_not_readable.rb +4 -1
- data/lib/unified2/exceptions/unknown_load_type.rb +4 -1
- data/lib/unified2/exceptions.rb +2 -1
- data/lib/unified2/extra.rb +128 -0
- data/lib/unified2/packet.rb +211 -0
- data/lib/unified2/protocol.rb +54 -63
- data/lib/unified2/sensor.rb +14 -2
- data/lib/unified2/signature.rb +12 -0
- data/lib/unified2/version.rb +4 -1
- data/lib/unified2.rb +65 -81
- data/spec/event_spec.rb +40 -27
- data/spec/legacy_event_spec.rb +122 -0
- data/spec/spec_helper.rb +10 -21
- data/spec/unified2_spec.rb +3 -3
- metadata +124 -140
- data/lib/unified2/payload.rb +0 -114
Binary file
|
File without changes
|
data/gemspec.yml
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
1
4
|
module Unified2
|
2
5
|
#
|
3
6
|
# Classification
|
@@ -23,6 +26,15 @@ module Unified2
|
|
23
26
|
@severity = classification[:severity]
|
24
27
|
end
|
25
28
|
|
29
|
+
#
|
30
|
+
# String
|
31
|
+
#
|
32
|
+
# @return [String] Signature name
|
33
|
+
#
|
34
|
+
def to_s
|
35
|
+
@name
|
36
|
+
end
|
37
|
+
|
26
38
|
end # class Classification
|
27
39
|
|
28
40
|
end # module Unified2
|
data/lib/unified2/config_file.rb
CHANGED
@@ -1,17 +1,27 @@
|
|
1
1
|
require 'unified2/constructor/event_ip4'
|
2
2
|
require 'unified2/constructor/event_ip6'
|
3
|
+
require 'unified2/constructor/extra_construct'
|
4
|
+
require 'unified2/constructor/extra_data'
|
5
|
+
require 'unified2/constructor/legacy_event_ip4'
|
6
|
+
require 'unified2/constructor/legacy_event_ip6'
|
3
7
|
require 'unified2/constructor/record_header'
|
4
8
|
require 'unified2/constructor/packet'
|
5
9
|
|
10
|
+
#
|
11
|
+
# Unified2
|
12
|
+
#
|
6
13
|
module Unified2
|
14
|
+
|
7
15
|
#
|
8
16
|
# Unified2 Constructor Namespace
|
9
17
|
#
|
10
18
|
module Constructor
|
19
|
+
|
11
20
|
#
|
12
21
|
# Unified2 Construction
|
13
22
|
#
|
14
23
|
class Construct < ::BinData::Record
|
24
|
+
|
15
25
|
#
|
16
26
|
# Rename record_header to header
|
17
27
|
# to simplify and cut down on verbosity
|
@@ -21,13 +31,16 @@ module Unified2
|
|
21
31
|
#
|
22
32
|
# Unified2 data types
|
23
33
|
#
|
24
|
-
# Currently rUnified2 only supports packet,
|
25
|
-
# event_ip4 and event_ip6.
|
26
|
-
#
|
27
34
|
choice :data, :selection => :type_selection do
|
28
35
|
packet "packet"
|
36
|
+
|
29
37
|
event_ip4 "ev4"
|
30
38
|
event_ip6 "ev6"
|
39
|
+
|
40
|
+
legacy_event_ip4 "lev4"
|
41
|
+
legacy_event_ip6 "lev6"
|
42
|
+
|
43
|
+
extra_construct "extra_data"
|
31
44
|
end
|
32
45
|
|
33
46
|
#
|
@@ -41,27 +54,60 @@ module Unified2
|
|
41
54
|
# Deterime and call data type based on
|
42
55
|
# the unified2 type attribute
|
43
56
|
#
|
57
|
+
# SNORT DEFINES
|
58
|
+
# Long time ago...
|
59
|
+
# define UNIFIED2_EVENT 1
|
60
|
+
#
|
61
|
+
# CURRENT
|
62
|
+
# define UNIFIED2_PACKET 2
|
63
|
+
# define UNIFIED2_IDS_EVENT 7
|
64
|
+
# define UNIFIED2_IDS_EVENT_IPV6 72
|
65
|
+
# define UNIFIED2_IDS_EVENT_MPLS 99
|
66
|
+
# define UNIFIED2_IDS_EVENT_IPV6_MPLS 100
|
67
|
+
# define UNIFIED2_IDS_EVENT_VLAN 104
|
68
|
+
# define UNIFIED2_IDS_EVENT_IPV6_VLAN 105
|
69
|
+
# define UNIFIED2_EXTRA_DATA 110
|
70
|
+
#
|
44
71
|
def type_selection
|
45
72
|
case header.u2type.to_i
|
46
73
|
when 1
|
74
|
+
# LEGACY
|
47
75
|
# define UNIFIED2_EVENT 1
|
48
76
|
when 2
|
49
77
|
# define UNIFIED2_PACKET 2
|
50
78
|
"packet"
|
51
79
|
when 7
|
52
80
|
# define UNIFIED2_IDS_EVENT 7
|
53
|
-
"
|
81
|
+
"lev4"
|
54
82
|
when 66
|
83
|
+
# LEGACY
|
55
84
|
# define UNIFIED2_EVENT_EXTENDED 66
|
56
85
|
when 67
|
86
|
+
# LEGACY
|
57
87
|
# define UNIFIED2_PERFORMANCE 67
|
58
88
|
when 68
|
89
|
+
# LEGACY
|
59
90
|
# define UNIFIED2_PORTSCAN 68
|
60
91
|
when 72
|
61
92
|
# define UNIFIED2_IDS_EVENT_IPV6 72
|
93
|
+
"lev6"
|
94
|
+
when 99
|
95
|
+
# define UNIFIED2_IDS_EVENT_MPLS 99
|
96
|
+
puts "99"
|
97
|
+
when 100
|
98
|
+
# define UNIFIED2_IDS_EVENT_IPV6_MPLS
|
99
|
+
puts "100"
|
100
|
+
when 104
|
101
|
+
# define UNIFIED2_IDS_EVENT_VLAN 104
|
102
|
+
"ev4"
|
103
|
+
when 105
|
104
|
+
# define UNIFIED2_IDS_EVENT_IPV6_VLAN 105
|
62
105
|
"ev6"
|
106
|
+
when 110
|
107
|
+
# define UNIFIED2_EXTRA_DATA 110
|
108
|
+
"extra_data"
|
63
109
|
else
|
64
|
-
"unknown type #{header.u2type}"
|
110
|
+
raise "unknown type #{header.u2type}"
|
65
111
|
end
|
66
112
|
end
|
67
113
|
|
@@ -80,4 +126,4 @@ module Unified2
|
|
80
126
|
|
81
127
|
end # module Construct
|
82
128
|
|
83
|
-
end # module Unified2
|
129
|
+
end # module Unified2
|
@@ -1,14 +1,18 @@
|
|
1
1
|
require 'unified2/constructor/primitive/ipv4'
|
2
2
|
|
3
|
+
#
|
4
|
+
# Unified2
|
5
|
+
#
|
3
6
|
module Unified2
|
4
7
|
|
5
8
|
module Constructor
|
9
|
+
|
6
10
|
#
|
7
11
|
# Event IP Version 4
|
8
12
|
#
|
9
13
|
class EventIP4 < ::BinData::Record
|
10
14
|
|
11
|
-
endian
|
15
|
+
endian :big
|
12
16
|
|
13
17
|
uint32 :sensor_id
|
14
18
|
|
@@ -38,10 +42,21 @@ module Unified2
|
|
38
42
|
|
39
43
|
uint8 :protocol
|
40
44
|
|
41
|
-
uint8 :
|
42
|
-
|
45
|
+
uint8 :impact_flag
|
46
|
+
|
47
|
+
uint8 :impact
|
48
|
+
|
49
|
+
uint8 :blocked
|
50
|
+
|
51
|
+
uint32 :mpls_label
|
52
|
+
|
53
|
+
uint16 :vlanId
|
54
|
+
|
55
|
+
uint16 :pad2
|
56
|
+
|
43
57
|
end # class EventIP4
|
44
58
|
|
45
59
|
end # module Constructor
|
46
60
|
|
47
61
|
end # module Unified2
|
62
|
+
|
@@ -1,11 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
1
4
|
module Unified2
|
2
5
|
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
3
9
|
module Constructor
|
10
|
+
|
4
11
|
#
|
5
12
|
# Event IP Version 6
|
6
13
|
#
|
7
14
|
class EventIP6 < ::BinData::Record
|
8
|
-
|
15
|
+
|
16
|
+
endian :big
|
9
17
|
|
10
18
|
uint32 :sensor_id
|
11
19
|
|
@@ -35,10 +43,20 @@ module Unified2
|
|
35
43
|
|
36
44
|
uint8 :protocol
|
37
45
|
|
38
|
-
uint8 :
|
39
|
-
|
46
|
+
uint8 :impact_flag
|
47
|
+
|
48
|
+
uint8 :impact
|
49
|
+
|
50
|
+
uint8 :blocked
|
51
|
+
|
52
|
+
uint32 :mpls_label
|
53
|
+
|
54
|
+
uint16 :vlanId
|
55
|
+
|
56
|
+
uint16 :pad2
|
57
|
+
|
40
58
|
end # class EventIP6
|
41
59
|
|
42
60
|
end # module Constructor
|
43
61
|
|
44
|
-
end # module Unified2
|
62
|
+
end # module Unified2
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'unified2/constructor/extra_data'
|
2
|
+
require 'unified2/constructor/extra_data_header'
|
3
|
+
|
4
|
+
#
|
5
|
+
# Unified2
|
6
|
+
#
|
7
|
+
module Unified2
|
8
|
+
|
9
|
+
#
|
10
|
+
# Unified2 Constructor Namespace
|
11
|
+
#
|
12
|
+
module Constructor
|
13
|
+
|
14
|
+
#
|
15
|
+
# Unified2 Construction
|
16
|
+
#
|
17
|
+
class ExtraConstruct < ::BinData::Record
|
18
|
+
|
19
|
+
#
|
20
|
+
# Rename record_header to header
|
21
|
+
# to simplify and cut down on verbosity
|
22
|
+
#
|
23
|
+
extra_data_header :header
|
24
|
+
|
25
|
+
#
|
26
|
+
# Unified2 data types
|
27
|
+
#
|
28
|
+
extra_data :data
|
29
|
+
|
30
|
+
#
|
31
|
+
# Sometimes the data needs extra padding
|
32
|
+
#
|
33
|
+
def padding_length
|
34
|
+
if header.event_length > data.num_bytes
|
35
|
+
header.event_length - data.num_bytes
|
36
|
+
else
|
37
|
+
0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end # class ExtraConstruct
|
42
|
+
|
43
|
+
end # module Construct
|
44
|
+
|
45
|
+
end # module Unified2
|
46
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
4
|
+
module Unified2
|
5
|
+
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
9
|
+
module Constructor
|
10
|
+
|
11
|
+
#
|
12
|
+
# Event Packet
|
13
|
+
#
|
14
|
+
class ExtraData < ::BinData::Record
|
15
|
+
|
16
|
+
endian :big
|
17
|
+
|
18
|
+
uint32 :sensor_id
|
19
|
+
|
20
|
+
uint32 :event_id
|
21
|
+
|
22
|
+
uint32 :event_second
|
23
|
+
|
24
|
+
uint32 :extra_type
|
25
|
+
|
26
|
+
uint32 :data_type
|
27
|
+
|
28
|
+
uint32 :blob_length
|
29
|
+
|
30
|
+
string :blob, :read_length => lambda { blob_length - 8 }
|
31
|
+
|
32
|
+
end # class ExtraData
|
33
|
+
|
34
|
+
end # module Constructor
|
35
|
+
|
36
|
+
end # module Unified2
|
37
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
4
|
+
module Unified2
|
5
|
+
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
9
|
+
module Constructor
|
10
|
+
|
11
|
+
#
|
12
|
+
# Extra Data Header
|
13
|
+
#
|
14
|
+
class ExtraDataHeader < ::BinData::Record
|
15
|
+
|
16
|
+
endian :big
|
17
|
+
|
18
|
+
uint32 :event_type
|
19
|
+
|
20
|
+
uint32 :event_length
|
21
|
+
|
22
|
+
end # class ExtraDataHeader
|
23
|
+
|
24
|
+
end # module Constructor
|
25
|
+
|
26
|
+
end # module Unified2
|
27
|
+
|
28
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'unified2/constructor/primitive/ipv4'
|
2
|
+
|
3
|
+
#
|
4
|
+
# Unified2
|
5
|
+
#
|
6
|
+
module Unified2
|
7
|
+
|
8
|
+
#
|
9
|
+
# Constructor
|
10
|
+
#
|
11
|
+
module Constructor
|
12
|
+
|
13
|
+
#
|
14
|
+
# Legacy Event IP Version 4
|
15
|
+
#
|
16
|
+
class LegacyEventIP4 < ::BinData::Record
|
17
|
+
|
18
|
+
endian :big
|
19
|
+
|
20
|
+
uint32 :sensor_id
|
21
|
+
|
22
|
+
uint32 :event_id
|
23
|
+
|
24
|
+
uint32 :event_second
|
25
|
+
|
26
|
+
uint32 :event_microsecond
|
27
|
+
|
28
|
+
uint32 :signature_id
|
29
|
+
|
30
|
+
uint32 :generator_id
|
31
|
+
|
32
|
+
uint32 :signature_revision
|
33
|
+
|
34
|
+
uint32 :classification_id
|
35
|
+
|
36
|
+
uint32 :priority_id
|
37
|
+
|
38
|
+
ipv4 :ip_source
|
39
|
+
|
40
|
+
ipv4 :ip_destination
|
41
|
+
|
42
|
+
uint16 :sport_itype
|
43
|
+
|
44
|
+
uint16 :dport_icode
|
45
|
+
|
46
|
+
uint8 :protocol
|
47
|
+
|
48
|
+
uint8 :packet_action
|
49
|
+
|
50
|
+
end # class EventIP4
|
51
|
+
|
52
|
+
end # module Constructor
|
53
|
+
|
54
|
+
end # module Unified2
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
4
|
+
module Unified2
|
5
|
+
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
9
|
+
module Constructor
|
10
|
+
|
11
|
+
#
|
12
|
+
# Legacy Event IP Version 6
|
13
|
+
#
|
14
|
+
class LegacyEventIP6 < ::BinData::Record
|
15
|
+
|
16
|
+
endian :big
|
17
|
+
|
18
|
+
uint32 :sensor_id
|
19
|
+
|
20
|
+
uint32 :event_id
|
21
|
+
|
22
|
+
uint32 :event_second
|
23
|
+
|
24
|
+
uint32 :event_microsecond
|
25
|
+
|
26
|
+
uint32 :signature_id
|
27
|
+
|
28
|
+
uint32 :generator_id
|
29
|
+
|
30
|
+
uint32 :signature_revision
|
31
|
+
|
32
|
+
uint32 :classification_id
|
33
|
+
|
34
|
+
uint32 :priority_id
|
35
|
+
|
36
|
+
uint128 :ip_source
|
37
|
+
|
38
|
+
uint128 :ip_destination
|
39
|
+
|
40
|
+
uint16 :sport_itype
|
41
|
+
|
42
|
+
uint16 :dport_icode
|
43
|
+
|
44
|
+
uint8 :protocol
|
45
|
+
|
46
|
+
uint8 :packet_action
|
47
|
+
|
48
|
+
end # class EventIP6
|
49
|
+
|
50
|
+
end # module Constructor
|
51
|
+
|
52
|
+
end # module Unified2
|
@@ -1,10 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
1
4
|
module Unified2
|
2
5
|
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
3
9
|
module Constructor
|
10
|
+
|
4
11
|
#
|
5
12
|
# Event Packet
|
6
13
|
#
|
7
14
|
class Packet < ::BinData::Record
|
15
|
+
|
8
16
|
endian :big
|
9
17
|
|
10
18
|
uint32 :sensor_id
|
@@ -27,4 +35,4 @@ module Unified2
|
|
27
35
|
|
28
36
|
end # module Constructor
|
29
37
|
|
30
|
-
end # module Unified2
|
38
|
+
end # module Unified2
|
@@ -1,14 +1,23 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
1
4
|
module Unified2
|
2
5
|
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
3
9
|
module Constructor
|
10
|
+
|
4
11
|
#
|
5
12
|
# Unified2 Primitive Namespace
|
6
13
|
#
|
7
14
|
module Primitive
|
15
|
+
|
8
16
|
#
|
9
17
|
# BinData Primitive IP4 Constructor
|
10
18
|
#
|
11
19
|
class IPV4 < ::BinData::Primitive
|
20
|
+
|
12
21
|
array :octets, :type => :uint8, :initial_length => 4
|
13
22
|
|
14
23
|
# IPV4#set
|
@@ -1,13 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Unified2
|
3
|
+
#
|
1
4
|
module Unified2
|
2
5
|
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
3
9
|
module Constructor
|
10
|
+
|
4
11
|
#
|
5
12
|
# Unified2 Header
|
6
13
|
#
|
7
14
|
class RecordHeader < ::BinData::Record
|
15
|
+
|
8
16
|
endian :big
|
9
17
|
|
10
18
|
uint32 :u2type
|
19
|
+
|
11
20
|
uint32 :u2length
|
12
21
|
|
13
22
|
end # class RecordHeader
|
data/lib/unified2/constructor.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
require 'unified2/constructor/construct'
|
1
|
+
require 'unified2/constructor/construct'
|
2
|
+
require 'unified2/constructor/extra_construct'
|