recog 2.3.20 → 2.3.23
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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/ci.yml +1 -1
- data/.github/workflows/verify.yml +89 -0
- data/.vscode/bin/monitor-recog-fingerprints.sh +54 -0
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +8 -0
- data/.vscode/tasks.json +77 -0
- data/CONTRIBUTING.md +8 -0
- data/README.md +17 -0
- data/bin/recog_standardize +28 -13
- data/bin/recog_verify +42 -8
- data/cpe-remap.yaml +62 -3
- data/features/data/schema_failure.xml +4 -0
- data/features/data/tests_with_failures.xml +6 -0
- data/features/support/hooks.rb +9 -0
- data/features/verify.feature +85 -21
- data/identifiers/fields.txt +6 -5
- data/identifiers/hw_device.txt +8 -0
- data/identifiers/hw_family.txt +8 -0
- data/identifiers/hw_product.txt +54 -0
- data/identifiers/os_device.txt +2 -0
- data/identifiers/os_family.txt +2 -0
- data/identifiers/os_product.txt +18 -2
- data/identifiers/service_product.txt +26 -0
- data/identifiers/vendor.txt +62 -1
- data/lib/recog/db.rb +2 -1
- data/lib/recog/fingerprint.rb +33 -6
- data/lib/recog/fingerprint_parse_error.rb +10 -0
- data/lib/recog/nizer.rb +1 -82
- data/lib/recog/verifier.rb +9 -9
- data/lib/recog/verify_reporter.rb +17 -6
- data/lib/recog/version.rb +1 -1
- data/requirements.txt +1 -1
- data/spec/data/external_example_fingerprint/hp_printer_ex_01.txt +1 -0
- data/spec/data/external_example_fingerprint/hp_printer_ex_02.txt +1 -0
- data/spec/data/external_example_fingerprint.xml +8 -0
- data/spec/data/external_example_illegal_path_fingerprint.xml +7 -0
- data/spec/lib/fingerprint_self_test_spec.rb +1 -0
- data/spec/lib/recog/db_spec.rb +84 -61
- data/spec/lib/recog/fingerprint_spec.rb +4 -4
- data/spec/lib/recog/verify_reporter_spec.rb +73 -4
- data/tools/dev/hooks/pre-commit +21 -0
- data/update_cpes.py +130 -37
- data/xml/apache_os.xml +98 -56
- data/xml/architecture.xml +15 -1
- data/xml/dhcp_vendor_class.xml +206 -0
- data/xml/dns_versionbind.xml +26 -13
- data/xml/favicons.xml +236 -47
- data/xml/fingerprints.xsd +9 -1
- data/xml/ftp_banners.xml +213 -197
- data/xml/h323_callresp.xml +101 -101
- data/xml/hp_pjl_id.xml +84 -84
- data/xml/html_title.xml +715 -45
- data/xml/http_cookies.xml +143 -80
- data/xml/http_servers.xml +510 -310
- data/xml/http_wwwauth.xml +177 -75
- data/xml/imap_banners.xml +10 -10
- data/xml/mdns_device-info_txt.xml +421 -26
- data/xml/mysql_banners.xml +3 -2
- data/xml/nntp_banners.xml +12 -9
- data/xml/ntp_banners.xml +97 -97
- data/xml/operating_system.xml +98 -83
- data/xml/pop_banners.xml +27 -27
- data/xml/rsh_resp.xml +3 -3
- data/xml/sip_banners.xml +46 -8
- data/xml/sip_user_agents.xml +180 -27
- data/xml/smb_native_lm.xml +5 -5
- data/xml/smb_native_os.xml +28 -25
- data/xml/smtp_banners.xml +258 -254
- data/xml/smtp_ehlo.xml +1 -1
- data/xml/smtp_help.xml +11 -11
- data/xml/smtp_noop.xml +2 -2
- data/xml/snmp_sysdescr.xml +1554 -1429
- data/xml/snmp_sysobjid.xml +27 -27
- data/xml/ssh_banners.xml +27 -20
- data/xml/telnet_banners.xml +256 -57
- data/xml/tls_jarm.xml +48 -6
- data/xml/x11_banners.xml +3 -3
- data/xml/x509_issuers.xml +69 -2
- data/xml/x509_subjects.xml +144 -33
- metadata +24 -4
- data/lib/recog/verifier_factory.rb +0 -13
data/update_cpes.py
CHANGED
@@ -7,56 +7,117 @@ import sys
|
|
7
7
|
import yaml
|
8
8
|
from lxml import etree
|
9
9
|
|
10
|
+
BASE_LOG_FORMAT = '%(levelname)s: %(message)s'
|
11
|
+
|
12
|
+
# CPE w/o 2.3 component: cpe:/a:nginx:nginx:0.1.0"
|
13
|
+
REGEX_CPE = re.compile('^cpe:/([aho]):([^:]+):([^:]+)')
|
14
|
+
# CPE w/ 2.3 component: cpe:2.3:a:f5:nginx:0.1.0:*:*:*:*:*:*:*
|
15
|
+
REGEX_CPE_23 = re.compile('^cpe:2.3:([aho]):([^:]+):([^:]+)')
|
16
|
+
|
17
|
+
XML_PATH_DEPRECATED_BY = "./{http://scap.nist.gov/schema/cpe-extension/2.3}cpe23-item/{http://scap.nist.gov/schema/cpe-extension/2.3}deprecation/{http://scap.nist.gov/schema/cpe-extension/2.3}deprecated-by"
|
18
|
+
|
19
|
+
|
10
20
|
def parse_r7_remapping(file):
|
11
21
|
with open(file) as remap_file:
|
12
22
|
return yaml.safe_load(remap_file)["mappings"]
|
13
23
|
|
24
|
+
|
25
|
+
def update_vp_map(target_map, cpe_type, vendor, product):
|
26
|
+
"""Add an entry to the dict tracking valid combinations
|
27
|
+
"""
|
28
|
+
|
29
|
+
if cpe_type not in target_map:
|
30
|
+
target_map[cpe_type] = {}
|
31
|
+
|
32
|
+
if vendor not in target_map[cpe_type]:
|
33
|
+
target_map[cpe_type][vendor] = set()
|
34
|
+
|
35
|
+
product = product.replace('%2f', '/')
|
36
|
+
target_map[cpe_type][vendor].add(product)
|
37
|
+
|
38
|
+
|
39
|
+
def update_deprecated_map(target_map, dep_string, entry):
|
40
|
+
"""Add an entry to the dict tracking deprecations
|
41
|
+
|
42
|
+
target_map example:
|
43
|
+
|
44
|
+
{
|
45
|
+
"a:100plus:101eip":
|
46
|
+
{
|
47
|
+
"deprecated_date": "2021-06-10T15:28:05.490Z",
|
48
|
+
"deprecated_by": "a:hundredplus:101eip"
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
Args:
|
53
|
+
target_map (dict): dict containing deprecations
|
54
|
+
dep_string (str): key to add in the format of 'type:vendor:product'
|
55
|
+
entry (lxml.etree._Element): XML element to pull additional data from
|
56
|
+
|
57
|
+
Returns:
|
58
|
+
None, target_map modified in place
|
59
|
+
"""
|
60
|
+
|
61
|
+
deprecated_date = entry.get("deprecation_date", "")
|
62
|
+
|
63
|
+
# Find the CPE that deprecated this entry
|
64
|
+
raw_dep_by = entry.find(XML_PATH_DEPRECATED_BY).get('name')
|
65
|
+
|
66
|
+
# Extract the type, vendor, product
|
67
|
+
dep_by_match = REGEX_CPE_23.match(raw_dep_by)
|
68
|
+
if not dep_by_match:
|
69
|
+
logging.error("CPE %s is deprecated but we can't build the deprecation mapping entry for some reason.", dep_string)
|
70
|
+
return
|
71
|
+
|
72
|
+
dep_type, dep_vendor, dep_product = dep_by_match.group(1, 2, 3)
|
73
|
+
deprecated_by = "{}:{}:{}".format(dep_type, dep_vendor, dep_product)
|
74
|
+
|
75
|
+
if dep_string not in target_map:
|
76
|
+
target_map[dep_string] = {}
|
77
|
+
|
78
|
+
if not target_map[dep_string].get('deprecated_date'):
|
79
|
+
target_map[dep_string]['deprecated_date'] = deprecated_date
|
80
|
+
|
81
|
+
if not target_map[dep_string].get('deprecated_by'):
|
82
|
+
target_map[dep_string]['deprecated_by'] = deprecated_by
|
83
|
+
|
84
|
+
|
14
85
|
def parse_cpe_vp_map(file):
|
86
|
+
deprecated_map = {}
|
15
87
|
vp_map = {} # cpe_type -> vendor -> products
|
88
|
+
|
16
89
|
parser = etree.XMLParser(remove_comments=False)
|
17
90
|
doc = etree.parse(file, parser)
|
18
|
-
namespaces = {
|
91
|
+
namespaces = {
|
92
|
+
'ns': 'http://cpe.mitre.org/dictionary/2.0',
|
93
|
+
'meta': 'http://scap.nist.gov/schema/cpe-dictionary-metadata/0.2'
|
94
|
+
}
|
19
95
|
for entry in doc.xpath("//ns:cpe-list/ns:cpe-item", namespaces=namespaces):
|
20
96
|
cpe_name = entry.get("name")
|
21
97
|
if not cpe_name:
|
22
98
|
continue
|
23
99
|
|
24
|
-
|
25
|
-
if entry.get("deprecated"):
|
26
|
-
continue
|
27
|
-
|
28
|
-
cpe_match = re.match('^cpe:/([aho]):([^:]+):([^:]+)', cpe_name)
|
29
|
-
|
100
|
+
cpe_match = REGEX_CPE.match(cpe_name)
|
30
101
|
if cpe_match:
|
31
102
|
cpe_type, vendor, product = cpe_match.group(1, 2, 3)
|
32
|
-
|
33
|
-
|
34
|
-
if
|
35
|
-
|
36
|
-
|
37
|
-
vp_map[cpe_type][vendor].add(product)
|
38
|
-
else:
|
39
|
-
logging.error("Unexpected CPE %s", cpe_name)
|
103
|
+
# If the entry is deprecated then don't add it to our list of valid
|
104
|
+
# CPEs, but instead add it to a list for reference later.
|
105
|
+
if entry.get("deprecated"):
|
106
|
+
# This will be the key under which we store the deprecation data
|
107
|
+
deprecated_string = "{}:{}:{}".format(cpe_type, vendor, product)
|
40
108
|
|
41
|
-
|
109
|
+
update_deprecated_map(deprecated_map, deprecated_string, entry)
|
110
|
+
continue
|
42
111
|
|
43
|
-
|
44
|
-
if len(sys.argv) != 4:
|
45
|
-
logging.critical("Expecting exactly 3 arguments; recog XML file, CPE 2.3 XML dictionary, JSON remapping, got %s", (len(sys.argv) - 1))
|
46
|
-
sys.exit(1)
|
112
|
+
update_vp_map(vp_map, cpe_type, vendor, product)
|
47
113
|
|
48
|
-
|
49
|
-
|
50
|
-
logging.critical("No CPE vendor => product mappings read from CPE 2.3 XML dictionary %s", sys.argv[2])
|
51
|
-
sys.exit(1)
|
114
|
+
else:
|
115
|
+
logging.error("Unexpected CPE %s", cpe_name)
|
52
116
|
|
53
|
-
|
54
|
-
if not r7_vp_map:
|
55
|
-
logging.warning("No Rapid7 vendor/product => CPE mapping read from %s", sys.argv[3])
|
117
|
+
return vp_map, deprecated_map
|
56
118
|
|
57
|
-
update_cpes(sys.argv[1], cpe_vp_map, r7_vp_map)
|
58
119
|
|
59
|
-
def lookup_cpe(vendor, product, cpe_type, cpe_table, remap):
|
120
|
+
def lookup_cpe(vendor, product, cpe_type, cpe_table, remap, deprecated_map):
|
60
121
|
"""Identify the correct vendor and product values for a CPE
|
61
122
|
|
62
123
|
This function attempts to determine the correct CPE using vendor and product
|
@@ -64,7 +125,7 @@ def lookup_cpe(vendor, product, cpe_type, cpe_table, remap):
|
|
64
125
|
these values to more correct values used by NIST.
|
65
126
|
|
66
127
|
For example, the remapping might tell us that a value of 'alpine' for the
|
67
|
-
vendor string should be '
|
128
|
+
vendor string should be 'alpinelinux' instead, or for product 'solaris'
|
68
129
|
should be 'sunos'.
|
69
130
|
|
70
131
|
This function should only emit values seen in the official NIST CPE list
|
@@ -82,6 +143,8 @@ def lookup_cpe(vendor, product, cpe_type, cpe_table, remap):
|
|
82
143
|
cpe_type (str): CPE type - o, a, h, etc.
|
83
144
|
cpe_table (dict): dict containing the official NIST CPE data
|
84
145
|
remap (dict): dict containing the remapping values
|
146
|
+
deprecated_cves (set): set of all deprecated CPEs in the format
|
147
|
+
'type:vendor:product'
|
85
148
|
Returns:
|
86
149
|
success, vendor, product
|
87
150
|
"""
|
@@ -130,13 +193,20 @@ def lookup_cpe(vendor, product, cpe_type, cpe_table, remap):
|
|
130
193
|
# Found remap vendor, remap product
|
131
194
|
return True, new_vendor, possible_product
|
132
195
|
|
196
|
+
deprecated_string = "{}:{}:{}".format(cpe_type, vendor, product)
|
197
|
+
if deprecated_map.get(deprecated_string, False):
|
198
|
+
dep_by = deprecated_map[deprecated_string].get("deprecated_by", "")
|
199
|
+
dep_date = deprecated_map[deprecated_string].get("deprecated_date", "")
|
200
|
+
logging.error("Product %s from vendor %s invalid for CPE %s and no mapping. This combination is DEPRECATED by %s at %s",
|
201
|
+
product, vendor, cpe_type, dep_by, dep_date)
|
202
|
+
else:
|
203
|
+
logging.error("Product %s from vendor %s invalid for CPE %s and no mapping.",
|
204
|
+
product, vendor, cpe_type)
|
133
205
|
|
134
|
-
logging.error("Product %s from vendor %s invalid for CPE %s and no mapping",
|
135
|
-
product, vendor, cpe_type)
|
136
206
|
return False, None, None
|
137
207
|
|
138
208
|
|
139
|
-
def update_cpes(xml_file, cpe_vp_map, r7_vp_map):
|
209
|
+
def update_cpes(xml_file, cpe_vp_map, r7_vp_map, deprecated_cves):
|
140
210
|
parser = etree.XMLParser(remove_comments=False, remove_blank_text=True)
|
141
211
|
doc = etree.parse(xml_file, parser)
|
142
212
|
|
@@ -160,7 +230,6 @@ def update_cpes(xml_file, cpe_vp_map, r7_vp_map):
|
|
160
230
|
raise ValueError('Duplicated fingerprint named {} in fingerprint {} in file {}'.format(name, fingerprint.attrib['pattern'], xml_file))
|
161
231
|
params[fp_type][name] = param
|
162
232
|
|
163
|
-
|
164
233
|
# for each of the applicable os/service param groups, build a CPE
|
165
234
|
for fp_type in params:
|
166
235
|
if fp_type == 'os':
|
@@ -210,7 +279,7 @@ def update_cpes(xml_file, cpe_vp_map, r7_vp_map):
|
|
210
279
|
if (vendor.startswith('{') and vendor.endswith('}')) or (product.startswith('{') and product.endswith('}')):
|
211
280
|
continue
|
212
281
|
|
213
|
-
success, vendor, product = lookup_cpe(vendor, product, cpe_type, cpe_vp_map, r7_vp_map)
|
282
|
+
success, vendor, product = lookup_cpe(vendor, product, cpe_type, cpe_vp_map, r7_vp_map, deprecated_cves)
|
214
283
|
if not success:
|
215
284
|
continue
|
216
285
|
|
@@ -245,6 +314,30 @@ def update_cpes(xml_file, cpe_vp_map, r7_vp_map):
|
|
245
314
|
with open(xml_file, 'wb') as xml_out:
|
246
315
|
xml_out.write(etree.tostring(root, pretty_print=True, xml_declaration=True, encoding=doc.docinfo.encoding))
|
247
316
|
|
317
|
+
|
318
|
+
def main():
|
319
|
+
if len(sys.argv) != 4:
|
320
|
+
logging.critical("Expecting exactly 3 arguments; recog XML file, CPE 2.3 XML dictionary, JSON remapping, got %s", (len(sys.argv) - 1))
|
321
|
+
sys.exit(1)
|
322
|
+
|
323
|
+
cpe_vp_map, deprecated_map = parse_cpe_vp_map(sys.argv[2])
|
324
|
+
if not cpe_vp_map:
|
325
|
+
logging.critical("No CPE vendor => product mappings read from CPE 2.3 XML dictionary %s", sys.argv[2])
|
326
|
+
sys.exit(1)
|
327
|
+
|
328
|
+
r7_vp_map = parse_r7_remapping(sys.argv[3])
|
329
|
+
if not r7_vp_map:
|
330
|
+
logging.warning("No Rapid7 vendor/product => CPE mapping read from %s", sys.argv[3])
|
331
|
+
|
332
|
+
# update format string for the logging handler to include the recog XML filename
|
333
|
+
logging.basicConfig(force=True, format=f"{sys.argv[1]}: {BASE_LOG_FORMAT}")
|
334
|
+
|
335
|
+
update_cpes(sys.argv[1], cpe_vp_map, r7_vp_map, deprecated_map)
|
336
|
+
|
337
|
+
|
248
338
|
if __name__ == '__main__':
|
249
|
-
|
250
|
-
|
339
|
+
logging.basicConfig(format=BASE_LOG_FORMAT)
|
340
|
+
try:
|
341
|
+
sys.exit(main())
|
342
|
+
except KeyboardInterrupt:
|
343
|
+
pass
|
data/xml/apache_os.xml
CHANGED
@@ -6,16 +6,18 @@
|
|
6
6
|
against the following patterns to extract OS information.
|
7
7
|
-->
|
8
8
|
|
9
|
-
<fingerprint pattern="
|
9
|
+
<fingerprint pattern="\(iSeries\)">
|
10
10
|
<description>IBM i5/OS iSeries (OS/400)</description>
|
11
|
+
<example>Apache/2.0.52 (iSeries)</example>
|
11
12
|
<param pos="0" name="os.vendor" value="IBM"/>
|
12
13
|
<param pos="0" name="os.family" value="OS/400"/>
|
13
14
|
<param pos="0" name="os.product" value="OS/400"/>
|
14
15
|
<param pos="0" name="os.cpe23" value="cpe:/o:ibm:os_400:-"/>
|
15
16
|
</fingerprint>
|
16
17
|
|
17
|
-
<fingerprint pattern="
|
18
|
+
<fingerprint pattern="\(Mandrake Linux/\d+\.\d+\.92mdk\)">
|
18
19
|
<description>Mandriva (formerly Mandrake) Linux 9.2</description>
|
20
|
+
<example>Apache-AdvancedExtranetServer/2.0.47 (Mandrake Linux/6.3.92mdk) mod_ssl/2.0.47 OpenSSL/0.9.7b PHP/4.3.2</example>
|
19
21
|
<param pos="0" name="os.certainty" value="0.9"/>
|
20
22
|
<param pos="0" name="os.vendor" value="Mandriva"/>
|
21
23
|
<param pos="0" name="os.family" value="Linux"/>
|
@@ -24,8 +26,9 @@
|
|
24
26
|
<param pos="0" name="os.cpe23" value="cpe:/o:mandriva:linux:9.2"/>
|
25
27
|
</fingerprint>
|
26
28
|
|
27
|
-
<fingerprint pattern="
|
29
|
+
<fingerprint pattern="\(Mandrake Linux/\d+\.\d+\.100mdk\)">
|
28
30
|
<description>Mandriva (formerly Mandrake) Linux 10.0</description>
|
31
|
+
<example>Apache-AdvancedExtranetServer/2.0.48 (Mandrake Linux/6.11.100mdk)</example>
|
29
32
|
<param pos="0" name="os.certainty" value="0.9"/>
|
30
33
|
<param pos="0" name="os.vendor" value="Mandriva"/>
|
31
34
|
<param pos="0" name="os.family" value="Linux"/>
|
@@ -34,31 +37,35 @@
|
|
34
37
|
<param pos="0" name="os.cpe23" value="cpe:/o:mandriva:linux:10.0"/>
|
35
38
|
</fingerprint>
|
36
39
|
|
37
|
-
<fingerprint pattern="
|
40
|
+
<fingerprint pattern="\((?:Mandrake|Mandriva) Linux/">
|
38
41
|
<description>Mandriva (formerly Mandrake) Linux unknown version</description>
|
42
|
+
<example>Apache-AdvancedExtranetServer/2.0.44 (Mandrake Linux/11mdk) mod_perl/1.99_08 Perl/v5.8.0 mod_ssl/2.0.44 OpenSSL/0.9.7a PHP/4.3.1 mod_jk2/2.0.0</example>
|
39
43
|
<param pos="0" name="os.vendor" value="Mandriva"/>
|
40
44
|
<param pos="0" name="os.family" value="Linux"/>
|
41
45
|
<param pos="0" name="os.product" value="Linux"/>
|
42
46
|
<param pos="0" name="os.cpe23" value="cpe:/o:mandriva:linux:-"/>
|
43
47
|
</fingerprint>
|
44
48
|
|
45
|
-
<fingerprint pattern="
|
49
|
+
<fingerprint pattern="\(Mandrakelinux/">
|
46
50
|
<description>Mandriva (formerly Mandrake) Linux unknown version - variant 2</description>
|
51
|
+
<example>Apache-AdvancedExtranetServer/2.0.53 (Mandrakelinux/PREFORK-9mdk) mod_ssl/2.0.53 OpenSSL/0.9.7e PHP/4.3.10 mod_perl/1.999.21 Perl/v5.8.6</example>
|
47
52
|
<param pos="0" name="os.vendor" value="Mandriva"/>
|
48
53
|
<param pos="0" name="os.family" value="Linux"/>
|
49
54
|
<param pos="0" name="os.product" value="Linux"/>
|
50
55
|
<param pos="0" name="os.cpe23" value="cpe:/o:mandriva:linux:-"/>
|
51
56
|
</fingerprint>
|
52
57
|
|
53
|
-
<fingerprint pattern="
|
58
|
+
<fingerprint pattern="\(PalmOS\)">
|
54
59
|
<description>PalmOS</description>
|
60
|
+
<example>Apache/1.2.42 (PalmOS)</example>
|
55
61
|
<param pos="0" name="os.vendor" value="Palm"/>
|
56
62
|
<param pos="0" name="os.family" value="PalmOS"/>
|
57
63
|
<param pos="0" name="os.product" value="PalmOS"/>
|
58
64
|
</fingerprint>
|
59
65
|
|
60
|
-
<fingerprint pattern="
|
66
|
+
<fingerprint pattern="\(Win32\)">
|
61
67
|
<description>Microsoft Windows</description>
|
68
|
+
<example>Apache/2.2.25 (Win32)</example>
|
62
69
|
<param pos="0" name="os.certainty" value="0.75"/>
|
63
70
|
<param pos="0" name="os.vendor" value="Microsoft"/>
|
64
71
|
<param pos="0" name="os.family" value="Windows"/>
|
@@ -66,106 +73,119 @@
|
|
66
73
|
<param pos="0" name="os.cpe23" value="cpe:/o:microsoft:windows:-"/>
|
67
74
|
</fingerprint>
|
68
75
|
|
69
|
-
<fingerprint pattern="
|
76
|
+
<fingerprint pattern="\(Darwin\)">
|
70
77
|
<description>Apple Mac OS X</description>
|
78
|
+
<example>Apache/1.3.33 (Darwin)</example>
|
71
79
|
<param pos="0" name="os.vendor" value="Apple"/>
|
72
80
|
<param pos="0" name="os.family" value="Mac OS X"/>
|
73
81
|
<param pos="0" name="os.product" value="Mac OS X"/>
|
74
82
|
<param pos="0" name="os.cpe23" value="cpe:/o:apple:mac_os_x:-"/>
|
75
83
|
</fingerprint>
|
76
84
|
|
77
|
-
<fingerprint pattern="
|
85
|
+
<fingerprint pattern="\(Ubuntu\)">
|
78
86
|
<description>Ubuntu</description>
|
87
|
+
<example>Apache (Ubuntu)</example>
|
79
88
|
<param pos="0" name="os.vendor" value="Ubuntu"/>
|
80
89
|
<param pos="0" name="os.family" value="Linux"/>
|
81
90
|
<param pos="0" name="os.product" value="Linux"/>
|
82
91
|
<param pos="0" name="os.cpe23" value="cpe:/o:canonical:ubuntu_linux:-"/>
|
83
92
|
</fingerprint>
|
84
93
|
|
85
|
-
<fingerprint pattern="
|
94
|
+
<fingerprint pattern=".{0,512}(?:Sun )?Cobalt \(Unix\)?">
|
86
95
|
<description>Sun Cobalt RaQ (Red Hat based Linux)</description>
|
96
|
+
<example>Apache/1.3.3 Cobalt (Unix) (Red Hat/Linux)</example>
|
87
97
|
<param pos="0" name="os.vendor" value="Sun"/>
|
88
98
|
<param pos="0" name="os.family" value="Linux"/>
|
89
99
|
<param pos="0" name="os.product" value="Cobalt RaQ"/>
|
90
100
|
</fingerprint>
|
91
101
|
|
92
|
-
<fingerprint pattern="
|
102
|
+
<fingerprint pattern="\(BlueQuartz\)">
|
93
103
|
<description>Blue Quartz is created by a Cobalt RaQ UG</description>
|
104
|
+
<example>Apache/2.0.52 (BlueQuartz)</example>
|
94
105
|
<param pos="0" name="os.vendor" value="Sun"/>
|
95
106
|
<param pos="0" name="os.family" value="Linux"/>
|
96
107
|
<param pos="0" name="os.product" value="Cobalt RaQ"/>
|
97
108
|
</fingerprint>
|
98
109
|
|
99
|
-
<fingerprint pattern="^Apache\/2\.2\.11.*\(Fedora\)
|
110
|
+
<fingerprint pattern="^Apache\/2\.2\.11.*\(Fedora\)">
|
100
111
|
<description>Red Hat Fedora 11</description>
|
101
|
-
<
|
112
|
+
<example>Apache/2.2.11 (Fedora)</example>
|
113
|
+
<param pos="0" name="os.vendor" value="Fedora Project"/>
|
102
114
|
<param pos="0" name="os.family" value="Linux"/>
|
103
|
-
<param pos="0" name="os.product" value="Fedora Core
|
115
|
+
<param pos="0" name="os.product" value="Fedora Core"/>
|
104
116
|
<param pos="0" name="os.version" value="11"/>
|
105
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:
|
117
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:fedoraproject:fedora_core:11"/>
|
106
118
|
</fingerprint>
|
107
119
|
|
108
|
-
<fingerprint pattern="^Apache\/2\.2\.15.*\(Fedora\)
|
120
|
+
<fingerprint pattern="^Apache\/2\.2\.15.*\(Fedora\)">
|
109
121
|
<description>Red Hat Fedora 13</description>
|
110
|
-
<
|
122
|
+
<example>Apache/2.2.15 (Fedora)</example>
|
123
|
+
<param pos="0" name="os.vendor" value="Fedora Project"/>
|
111
124
|
<param pos="0" name="os.family" value="Linux"/>
|
112
|
-
<param pos="0" name="os.product" value="Fedora Core
|
125
|
+
<param pos="0" name="os.product" value="Fedora Core"/>
|
113
126
|
<param pos="0" name="os.version" value="13"/>
|
114
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:
|
127
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:fedoraproject:fedora_core:13"/>
|
115
128
|
</fingerprint>
|
116
129
|
|
117
|
-
<fingerprint pattern="^Apache\/2\.2\.16.*\(Fedora\)
|
130
|
+
<fingerprint pattern="^Apache\/2\.2\.16.*\(Fedora\)">
|
118
131
|
<description>Red Hat Fedora 14</description>
|
119
|
-
<
|
132
|
+
<example>Apache/2.2.16 (Fedora)</example>
|
133
|
+
<param pos="0" name="os.vendor" value="Fedora Project"/>
|
120
134
|
<param pos="0" name="os.family" value="Linux"/>
|
121
|
-
<param pos="0" name="os.product" value="Fedora Core
|
135
|
+
<param pos="0" name="os.product" value="Fedora Core"/>
|
122
136
|
<param pos="0" name="os.version" value="14"/>
|
123
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:
|
137
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:fedoraproject:fedora_core:14"/>
|
124
138
|
</fingerprint>
|
125
139
|
|
126
|
-
<fingerprint pattern="^Apache\/2\.2\.23.*\(Fedora\)
|
140
|
+
<fingerprint pattern="^Apache\/2\.2\.23.*\(Fedora\)">
|
127
141
|
<description>Red Hat Fedora 17</description>
|
128
|
-
<
|
142
|
+
<example>Apache/2.2.23 (Fedora)</example>
|
143
|
+
<param pos="0" name="os.vendor" value="Fedora Project"/>
|
129
144
|
<param pos="0" name="os.family" value="Linux"/>
|
130
|
-
<param pos="0" name="os.product" value="Fedora Core
|
145
|
+
<param pos="0" name="os.product" value="Fedora Core"/>
|
131
146
|
<param pos="0" name="os.version" value="17"/>
|
132
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:
|
147
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:fedoraproject:fedora_core:17"/>
|
133
148
|
</fingerprint>
|
134
149
|
|
135
|
-
<fingerprint pattern="^Apache\/2\.4\.3.*\(Fedora\)
|
150
|
+
<fingerprint pattern="^Apache\/2\.4\.3.*\(Fedora\)">
|
136
151
|
<description>Red Hat Fedora 18</description>
|
137
|
-
<
|
152
|
+
<example>Apache/2.4.3 (Fedora) PHP/5.4.12</example>
|
153
|
+
<param pos="0" name="os.vendor" value="Fedora Project"/>
|
138
154
|
<param pos="0" name="os.family" value="Linux"/>
|
139
|
-
<param pos="0" name="os.product" value="Fedora Core
|
155
|
+
<param pos="0" name="os.product" value="Fedora Core"/>
|
140
156
|
<param pos="0" name="os.version" value="18"/>
|
141
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:
|
157
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:fedoraproject:fedora_core:18"/>
|
142
158
|
</fingerprint>
|
143
159
|
|
144
|
-
<fingerprint pattern="
|
160
|
+
<fingerprint pattern="\(Fedora\)">
|
145
161
|
<description>Red Hat Fedora</description>
|
146
|
-
<
|
162
|
+
<example>Apache (Fedora)</example>
|
163
|
+
<param pos="0" name="os.vendor" value="Fedora Project"/>
|
147
164
|
<param pos="0" name="os.family" value="Linux"/>
|
148
|
-
<param pos="0" name="os.product" value="Fedora Core
|
149
|
-
<param pos="0" name="os.cpe23" value="cpe:/o:
|
165
|
+
<param pos="0" name="os.product" value="Fedora Core"/>
|
166
|
+
<param pos="0" name="os.cpe23" value="cpe:/o:fedoraproject:fedora_core:-"/>
|
150
167
|
</fingerprint>
|
151
168
|
|
152
|
-
<fingerprint pattern="
|
169
|
+
<fingerprint pattern="\(RHEL\)">
|
153
170
|
<description>Red Hat Enterprise Linux</description>
|
171
|
+
<example>Apache/2.0.53 (RHEL)</example>
|
154
172
|
<param pos="0" name="os.vendor" value="Red Hat"/>
|
155
173
|
<param pos="0" name="os.family" value="Linux"/>
|
156
174
|
<param pos="0" name="os.product" value="Enterprise Linux"/>
|
157
175
|
<param pos="0" name="os.cpe23" value="cpe:/o:redhat:enterprise_linux:-"/>
|
158
176
|
</fingerprint>
|
159
177
|
|
160
|
-
<fingerprint pattern="
|
178
|
+
<fingerprint pattern="\(Red[ -]Hat(?:[/ ]Linux)?\)">
|
161
179
|
<description>Red Hat Linux</description>
|
180
|
+
<example>Apache (Red Hat Linux)</example>
|
181
|
+
<example>Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6b PHP/4.3.11</example>
|
162
182
|
<param pos="0" name="os.vendor" value="Red Hat"/>
|
163
183
|
<param pos="0" name="os.family" value="Linux"/>
|
164
184
|
<param pos="0" name="os.product" value="Linux"/>
|
165
185
|
<param pos="0" name="os.cpe23" value="cpe:/o:redhat:linux:-"/>
|
166
186
|
</fingerprint>
|
167
187
|
|
168
|
-
<fingerprint pattern="
|
188
|
+
<fingerprint pattern="\(Red Hat Enterprise (?:Linux)?\)">
|
169
189
|
<description>Apache OS: Red Hat Enterprise Linux</description>
|
170
190
|
<example os.vendor="Red Hat">Apache/2.4.6 (Red Hat Enterprise Linux) OpenSSL/1.0.2k-fips</example>
|
171
191
|
<param pos="0" name="os.vendor" value="Red Hat"/>
|
@@ -174,136 +194,158 @@
|
|
174
194
|
<param pos="0" name="os.cpe23" value="cpe:/o:redhat:enterprise_linux:-"/>
|
175
195
|
</fingerprint>
|
176
196
|
|
177
|
-
<fingerprint pattern="
|
197
|
+
<fingerprint pattern="Debian(?:[/ ]GNU)?(?:/Linux)?">
|
178
198
|
<description>Debian Linux</description>
|
199
|
+
<example>Debian GNU/Linux</example>
|
200
|
+
<example>Apache/1.3.26 (Unix) Debian GNU/Linux</example>
|
179
201
|
<param pos="0" name="os.vendor" value="Debian"/>
|
180
202
|
<param pos="0" name="os.family" value="Linux"/>
|
181
203
|
<param pos="0" name="os.product" value="Linux"/>
|
182
204
|
<param pos="0" name="os.cpe23" value="cpe:/o:debian:debian_linux:-"/>
|
183
205
|
</fingerprint>
|
184
206
|
|
185
|
-
<fingerprint pattern="
|
207
|
+
<fingerprint pattern="\((?:Linux/)?S[uU]SE(?:/Linux)?\)">
|
186
208
|
<description>Novell SuSE Linux</description>
|
209
|
+
<example>Apache (SuSE/Linux)</example>
|
210
|
+
<example>Apache/2.2.12 (Linux/SUSE)</example>
|
187
211
|
<param pos="0" name="os.vendor" value="SuSE"/>
|
188
212
|
<param pos="0" name="os.family" value="Linux"/>
|
189
213
|
<param pos="0" name="os.product" value="Linux"/>
|
190
214
|
<param pos="0" name="os.cpe23" value="cpe:/o:suse:linux:-"/>
|
191
215
|
</fingerprint>
|
192
216
|
|
193
|
-
<fingerprint pattern="
|
217
|
+
<fingerprint pattern="\(NETWARE\)">
|
194
218
|
<description>Novell NetWare</description>
|
219
|
+
<example>Apache/2.0.64 (NETWARE)</example>
|
195
220
|
<param pos="0" name="os.vendor" value="Novell"/>
|
196
221
|
<param pos="0" name="os.family" value="NetWare"/>
|
197
222
|
<param pos="0" name="os.product" value="NetWare"/>
|
198
223
|
<param pos="0" name="os.cpe23" value="cpe:/o:novell:netware:-"/>
|
199
224
|
</fingerprint>
|
200
225
|
|
201
|
-
<fingerprint pattern="
|
226
|
+
<fingerprint pattern="HP-UX_Apache-based_Web_Server">
|
202
227
|
<description>HP HP-UX</description>
|
228
|
+
<example>Apache/2.0.58 HP-UX_Apache-based_Web_Server</example>
|
203
229
|
<param pos="0" name="os.vendor" value="HP"/>
|
204
230
|
<param pos="0" name="os.family" value="HP-UX"/>
|
205
231
|
<param pos="0" name="os.product" value="HP-UX"/>
|
206
232
|
<param pos="0" name="os.cpe23" value="cpe:/o:hp:hp-ux:-"/>
|
207
233
|
</fingerprint>
|
208
234
|
|
209
|
-
<fingerprint pattern="
|
235
|
+
<fingerprint pattern="\(CentOS\)">
|
210
236
|
<description>CentOS Linux</description>
|
237
|
+
<example>Apache/2.2.15 (CentOS)</example>
|
211
238
|
<param pos="0" name="os.vendor" value="CentOS"/>
|
212
239
|
<param pos="0" name="os.family" value="Linux"/>
|
213
240
|
<param pos="0" name="os.product" value="Linux"/>
|
214
241
|
<param pos="0" name="os.cpe23" value="cpe:/o:centos:centos:-"/>
|
215
242
|
</fingerprint>
|
216
243
|
|
217
|
-
<fingerprint pattern="
|
244
|
+
<fingerprint pattern="\(Turbolinux\)">
|
218
245
|
<description>Turbolinux</description>
|
246
|
+
<example>Apache/2.2.6 (Turbolinux)</example>
|
219
247
|
<param pos="0" name="os.vendor" value="Turbolinux"/>
|
220
248
|
<param pos="0" name="os.family" value="Linux"/>
|
221
249
|
<param pos="0" name="os.product" value="Linux"/>
|
222
250
|
</fingerprint>
|
223
251
|
|
224
|
-
<fingerprint pattern="
|
252
|
+
<fingerprint pattern="\(FreeBSD\)">
|
225
253
|
<description>FreeBSD</description>
|
254
|
+
<example>Apache/2.4.51 (FreeBSD) OpenSSL/1.1.1h-freebsd</example>
|
226
255
|
<param pos="0" name="os.vendor" value="FreeBSD"/>
|
227
256
|
<param pos="0" name="os.family" value="FreeBSD"/>
|
228
257
|
<param pos="0" name="os.product" value="FreeBSD"/>
|
229
258
|
<param pos="0" name="os.cpe23" value="cpe:/o:freebsd:freebsd:-"/>
|
230
259
|
</fingerprint>
|
231
260
|
|
232
|
-
<fingerprint pattern="
|
261
|
+
<fingerprint pattern="\(Asianux\)">
|
233
262
|
<description>Asianux Linux</description>
|
263
|
+
<example>Apache/2.2.15 (Asianux)</example>
|
234
264
|
<param pos="0" name="os.vendor" value="Asianux"/>
|
235
265
|
<param pos="0" name="os.family" value="Linux"/>
|
236
266
|
<param pos="0" name="os.product" value="Linux"/>
|
237
267
|
</fingerprint>
|
238
268
|
|
239
|
-
<fingerprint pattern="
|
269
|
+
<fingerprint pattern="\(Gentoo(?:/Linux)?\)">
|
240
270
|
<description>Gentoo Linux</description>
|
271
|
+
<example>Apache/2.2.6 (Gentoo) DAV/2 mod_python/3.3.1</example>
|
241
272
|
<param pos="0" name="os.vendor" value="Gentoo"/>
|
242
273
|
<param pos="0" name="os.family" value="Linux"/>
|
243
274
|
<param pos="0" name="os.product" value="Linux"/>
|
244
275
|
<param pos="0" name="os.cpe23" value="cpe:/o:gentoo:linux:-"/>
|
245
276
|
</fingerprint>
|
246
277
|
|
247
|
-
<fingerprint pattern="
|
278
|
+
<fingerprint pattern="\(Conectiva(?:/Linux)?\)">
|
248
279
|
<description>Conectiva Linux</description>
|
280
|
+
<example>Apache/1.3.33 (Unix) (Conectiva/Linux)</example>
|
249
281
|
<param pos="0" name="os.vendor" value="Conectiva"/>
|
250
282
|
<param pos="0" name="os.family" value="Linux"/>
|
251
283
|
<param pos="0" name="os.product" value="Linux"/>
|
252
284
|
<param pos="0" name="os.cpe23" value="cpe:/o:conectiva:linux:-"/>
|
253
285
|
</fingerprint>
|
254
286
|
|
255
|
-
<fingerprint pattern="
|
287
|
+
<fingerprint pattern="\(Trustix Secure Linux(?:/Linux)?\)">
|
256
288
|
<description>Trustix Linux</description>
|
289
|
+
<example>Apache/2.0.55 (Trustix Secure Linux/Linux)</example>
|
257
290
|
<param pos="0" name="os.vendor" value="Trustix"/>
|
258
291
|
<param pos="0" name="os.family" value="Linux"/>
|
259
292
|
<param pos="0" name="os.product" value="Secure Linux"/>
|
260
293
|
<param pos="0" name="os.cpe23" value="cpe:/o:trustix:secure_linux:-"/>
|
261
294
|
</fingerprint>
|
262
295
|
|
263
|
-
<fingerprint pattern="
|
296
|
+
<fingerprint pattern="\(White Box\)">
|
264
297
|
<description>White Box Enterprise Linux</description>
|
298
|
+
<example>Apache/2.0.46 (White Box)</example>
|
265
299
|
<param pos="0" name="os.vendor" value="White Box"/>
|
266
300
|
<param pos="0" name="os.family" value="Linux"/>
|
267
301
|
<param pos="0" name="os.product" value="Enterprise Linux"/>
|
268
302
|
</fingerprint>
|
269
303
|
|
270
|
-
<fingerprint pattern="
|
304
|
+
<fingerprint pattern="\(UnitedLinux\)">
|
271
305
|
<description>UnitedLinux</description>
|
306
|
+
<example>Apache/1.3.26 (UnitedLinux) mod_ssl/2.8.10</example>
|
272
307
|
<param pos="0" name="os.vendor" value="UnitedLinux"/>
|
273
308
|
<param pos="0" name="os.family" value="Linux"/>
|
274
309
|
<param pos="0" name="os.product" value="Linux"/>
|
275
310
|
</fingerprint>
|
276
311
|
|
277
|
-
<fingerprint pattern="
|
312
|
+
<fingerprint pattern="\(PLD/Linux\)">
|
278
313
|
<description>PLD Linux</description>
|
314
|
+
<example>Apache/1.3.42 (PLD/Linux)</example>
|
279
315
|
<param pos="0" name="os.vendor" value="PLD"/>
|
280
316
|
<param pos="0" name="os.family" value="Linux"/>
|
281
317
|
<param pos="0" name="os.product" value="Linux"/>
|
282
318
|
</fingerprint>
|
283
319
|
|
284
|
-
<fingerprint pattern="
|
320
|
+
<fingerprint pattern="\(Vine/Linux\)">
|
285
321
|
<description>Vine Linux</description>
|
322
|
+
<example>Apache/1.3.27 (Unix) (Vine/Linux)</example>
|
286
323
|
<param pos="0" name="os.vendor" value="Vine"/>
|
287
324
|
<param pos="0" name="os.family" value="Linux"/>
|
288
325
|
<param pos="0" name="os.product" value="Linux"/>
|
289
326
|
</fingerprint>
|
290
327
|
|
291
|
-
<fingerprint pattern="
|
328
|
+
<fingerprint pattern="\(rPath\)">
|
292
329
|
<description>rPath Linux</description>
|
330
|
+
<example>Apache/2.2.9 (rPath)</example>
|
293
331
|
<param pos="0" name="os.vendor" value="rPath"/>
|
294
332
|
<param pos="0" name="os.family" value="Linux"/>
|
295
333
|
<param pos="0" name="os.product" value="Linux"/>
|
296
334
|
</fingerprint>
|
297
335
|
|
298
|
-
<fingerprint pattern="
|
336
|
+
<fingerprint pattern="\(StartCom(?: Linux)?\)">
|
299
337
|
<description>StartCom Linux</description>
|
338
|
+
<example>Apache/2.2.3 (StartCom)</example>
|
339
|
+
<example>Apache/2.2.3 (StartCom) (Release 31.SEL5_4)</example>
|
340
|
+
<example>Apache/2.2.0 (StartCom Linux)</example>
|
300
341
|
<param pos="0" name="os.vendor" value="StartCom"/>
|
301
342
|
<param pos="0" name="os.family" value="Linux"/>
|
302
343
|
<param pos="0" name="os.product" value="Linux"/>
|
303
344
|
</fingerprint>
|
304
345
|
|
305
|
-
<fingerprint pattern="
|
346
|
+
<fingerprint pattern="Linux">
|
306
347
|
<description>Generic Linux fallback</description>
|
348
|
+
<example>Apache/Linux</example>
|
307
349
|
<param pos="0" name="os.certainty" value="0.75"/>
|
308
350
|
<param pos="0" name="os.family" value="Linux"/>
|
309
351
|
<param pos="0" name="os.product" value="Linux"/>
|