intrigue-ident 0.4 → 0.6

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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/Gemfile.lock +0 -6
  4. data/data/logos/apache.png +0 -0
  5. data/data/logos/generic.png +0 -0
  6. data/data/logos/oracle_java.png +0 -0
  7. data/data/logos/php.png +0 -0
  8. data/data/logos/varnish.png +0 -0
  9. data/intrigue-ident.gemspec +2 -2
  10. data/lib/checks/acquia.rb +26 -0
  11. data/lib/checks/adobe.rb +38 -0
  12. data/lib/checks/akamai.rb +6 -4
  13. data/lib/checks/amazon.rb +54 -8
  14. data/lib/checks/apache.rb +113 -0
  15. data/lib/checks/aruba.rb +6 -3
  16. data/lib/checks/atlassian.rb +46 -28
  17. data/lib/checks/automattic.rb +189 -0
  18. data/lib/checks/axis.rb +24 -0
  19. data/lib/checks/banu.rb +28 -0
  20. data/lib/checks/base.rb +58 -0
  21. data/lib/checks/checkpoint.rb +55 -0
  22. data/lib/checks/chef.rb +16 -12
  23. data/lib/checks/cisco.rb +85 -12
  24. data/lib/checks/citrix.rb +81 -6
  25. data/lib/checks/cloudflare.rb +40 -30
  26. data/lib/checks/cpanel.rb +8 -6
  27. data/lib/checks/craft.rb +25 -0
  28. data/lib/checks/django.rb +8 -6
  29. data/lib/checks/docuwiki.rb +25 -0
  30. data/lib/checks/drupal.rb +25 -8
  31. data/lib/checks/f5.rb +35 -7
  32. data/lib/checks/fastly.rb +22 -7
  33. data/lib/checks/generic.rb +34 -6
  34. data/lib/checks/gitlab.rb +12 -6
  35. data/lib/checks/google.rb +19 -6
  36. data/lib/checks/grafana.rb +8 -6
  37. data/lib/checks/groovy.rb +24 -0
  38. data/lib/checks/heroku.rb +27 -0
  39. data/lib/checks/hp.rb +25 -0
  40. data/lib/checks/ibm.rb +77 -0
  41. data/lib/checks/ivanti.rb +27 -0
  42. data/lib/checks/jamf.rb +26 -0
  43. data/lib/checks/jekyll.rb +28 -0
  44. data/lib/checks/jenkins.rb +24 -18
  45. data/lib/checks/jive.rb +25 -0
  46. data/lib/checks/jobvite.rb +25 -0
  47. data/lib/checks/joomla.rb +9 -6
  48. data/lib/checks/jupyter.rb +26 -0
  49. data/lib/checks/lighttpd.rb +28 -0
  50. data/lib/checks/limesuvey.rb +8 -6
  51. data/lib/checks/lithium.rb +15 -11
  52. data/lib/checks/lotus.rb +27 -0
  53. data/lib/checks/magento.rb +8 -6
  54. data/lib/checks/mailchimp.rb +25 -0
  55. data/lib/checks/mcafee.rb +8 -6
  56. data/lib/checks/mediawiki.rb +31 -32
  57. data/lib/checks/microsoft.rb +240 -34
  58. data/lib/checks/microtik.rb +27 -0
  59. data/lib/checks/nagios.rb +8 -6
  60. data/lib/checks/new_relic.rb +25 -0
  61. data/lib/checks/nginx.rb +40 -0
  62. data/lib/checks/okta.rb +25 -0
  63. data/lib/checks/ookla.rb +27 -0
  64. data/lib/checks/openresty.rb +25 -0
  65. data/lib/checks/oracle.rb +208 -17
  66. data/lib/checks/palo_alto.rb +6 -4
  67. data/lib/checks/pantheon.rb +26 -0
  68. data/lib/checks/pardot.rb +8 -6
  69. data/lib/checks/perfectsense.rb +27 -0
  70. data/lib/checks/pfsense.rb +8 -9
  71. data/lib/checks/php.rb +41 -0
  72. data/lib/checks/phpmyadmin.rb +8 -6
  73. data/lib/checks/ping_identity.rb +27 -0
  74. data/lib/checks/pivotal.rb +24 -0
  75. data/lib/checks/plesk.rb +41 -0
  76. data/lib/checks/pulse_secure.rb +27 -0
  77. data/lib/checks/rabbitmq.rb +15 -11
  78. data/lib/checks/restlet.rb +28 -0
  79. data/lib/checks/ruckus_wireless.rb +24 -0
  80. data/lib/checks/sailpoint.rb +27 -0
  81. data/lib/checks/sap.rb +43 -0
  82. data/lib/checks/tableau.rb +26 -0
  83. data/lib/checks/team_city.rb +8 -6
  84. data/lib/checks/telerik.rb +23 -8
  85. data/lib/checks/varnish.rb +8 -11
  86. data/lib/checks/vmware.rb +38 -0
  87. data/lib/checks/webmin.rb +41 -0
  88. data/lib/checks/wp_engine.rb +10 -6
  89. data/lib/checks/yaws.rb +29 -0
  90. data/lib/checks/zeit.rb +28 -0
  91. data/lib/checks/zendesk.rb +39 -0
  92. data/lib/checks/zimbra.rb +24 -0
  93. data/lib/checks/zscaler.rb +28 -0
  94. data/{ident.rb → lib/intrigue-ident.rb} +66 -32
  95. data/lib/traverse_exceptions.rb +196 -0
  96. data/util/check.rb +20 -0
  97. data/util/list.rb +9 -0
  98. metadata +58 -9
  99. data/lib/checks/asp_net.rb +0 -70
  100. data/lib/checks/cloudfront.rb +0 -41
  101. data/lib/checks/spring.rb +0 -31
  102. data/lib/checks/tomcat.rb +0 -22
  103. data/lib/checks/wordpress.rb +0 -120
@@ -0,0 +1,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Microtik < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "application",
10
+ :vendor =>"Microtik",
11
+ :product =>"RouterOS",
12
+ :match_details => "page title",
13
+ :match_type => :content_body,
14
+ :match_content => /<title>RouterOS router configuration page/,
15
+ :version => nil,
16
+ :dynamic_version => lambda { |x| _first_body_capture(x,/<h1>RouterOS v(.*?)<\/h1>/) },
17
+ :examples => ["http://91.211.58.34:80"],
18
+ :verify => ["aWJtI0ludHJpZ3VlOjpFbnRpdHk6OlVyaSNodHRwOi8vOTEuMjExLjU4LjM0Ojgw"],
19
+ :paths => ["#{url}"]
20
+ }
21
+ ]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
data/lib/checks/nagios.rb CHANGED
@@ -3,15 +3,17 @@ module Ident
3
3
  module Check
4
4
  class Nagios < Intrigue::Ident::Check::Base
5
5
 
6
- def generate_checks(uri)
6
+ def generate_checks(url)
7
7
  [
8
8
  {
9
- :name => "Nagios",
10
- :description => "Nagios",
9
+ :type => "application",
10
+ :vendor => "Nagios",
11
+ :product =>"Nagios",
12
+ :match_details =>"Nagios",
11
13
  :version => nil,
12
- :type => :content_headers,
13
- :content => /nagios/i,
14
- :paths => ["#{uri}"]
14
+ :match_type => :content_headers,
15
+ :match_content => /nagios/i,
16
+ :paths => ["#{url}"]
15
17
  }
16
18
  ]
17
19
  end
@@ -0,0 +1,25 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class NewRelic < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "service",
10
+ :vendor => "NewRelic",
11
+ :product =>"NewRelic",
12
+ :references => ["https://discuss.newrelic.com/t/relic-solution-what-is-bam-nr-data-net-new-relic-browser-monitoring/42055"],
13
+ :match_details =>"NewRelic tracking code",
14
+ :version => nil,
15
+ :match_type => :content_body,
16
+ :match_content => /bam.nr-data.net/i,
17
+ :paths => ["#{url}"]
18
+ }
19
+ ]
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,40 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Nginx < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "application",
10
+ :vendor => "Nginx",
11
+ :product =>"Nginx",
12
+ :match_details =>"Nginx",
13
+ :version => nil,
14
+ :match_type => :content_headers,
15
+ :match_content => /server: nginx/i,
16
+ :dynamic_version => lambda { |x| _first_header_capture(x,/server:(.*)/,["nginx","/"]) },
17
+ :examples => [
18
+ "https://api.appfire.com:443"
19
+ ],
20
+ :paths => ["#{url}"]
21
+ },
22
+ {
23
+ :type => "application",
24
+ :vendor => "Nginx",
25
+ :product =>"Nginx",
26
+ :match_details =>"nginx default 404 page - TODO needs multiline",
27
+ :version => nil,
28
+ :match_type => :content_body,
29
+ :match_content => /<hr><center>nginx<\/center>/i,
30
+ :examples => [ "http://202.1.239.132:80" ],
31
+ :hide => true,
32
+ :paths => ["#{url}"]
33
+ }
34
+ ]
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Okta < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "service",
10
+ :vendor =>"Okta",
11
+ :product =>"Okta",
12
+ :match_details =>"okta auth",
13
+ :version => nil,
14
+ :match_type => :content_headers,
15
+ :match_content => /x-okta-backend/i,
16
+ :examples => ["http://autodiscover.westrsc.com:80"],
17
+ :paths => ["#{url}"]
18
+ }
19
+ ]
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Ookla < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "application",
10
+ :vendor =>"Ookla",
11
+ :product =>"Speedtest Server",
12
+ :match_details => "page title",
13
+ :match_type => :content_body,
14
+ :references => ["https://support.ookla.com/hc/en-us/articles/234578568-How-To-Install-Submit-Server"],
15
+ :match_content => /<title>OoklaServer/,
16
+ :version => nil,
17
+ :examples => ["http://91.211.56.179:8081"],
18
+ :verify => ["aWJtI0ludHJpZ3VlOjpFbnRpdHk6OlVyaSNodHRwOi8vOTEuMjExLjU2LjE3OTo4MDgx"],
19
+ :paths => ["#{url}"]
20
+ }
21
+ ]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class OpenResty < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "service",
10
+ :vendor =>"OpenResty",
11
+ :product =>"OpenResty",
12
+ :match_details =>"server header for OpenResty",
13
+ :version => nil,
14
+ :match_type => :content_headers,
15
+ :match_content => /server: openresty/i,
16
+ :examples => ["http://54.164.224.102:80"],
17
+ :paths => ["#{url}"]
18
+ }
19
+ ]
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
data/lib/checks/oracle.rb CHANGED
@@ -3,31 +3,222 @@ module Ident
3
3
  module Check
4
4
  class Oracle < Intrigue::Ident::Check::Base
5
5
 
6
- def generate_checks(uri)
6
+ def generate_checks(url)
7
7
  [
8
8
  {
9
- :name => "Oracle Glassfish",
10
- :description => "Oracle / Sun GlassFish Enterprise Server",
11
- :url => "",
9
+ :type => "application",
10
+ :vendor => "Oracle",
11
+ :product =>"Application Server",
12
+ :match_details =>"server header",
13
+ :references => [],
12
14
  :version => nil,
13
- :type => :content_headers,
14
- :content => /Sun GlassFish Enterprise Server/,
15
- :hide => true,
16
- :dynamic_version => lambda { |x| x["details"]["headers"].join("\n").match(/Sun GlassFish Enterprise Server v([\d\.])/).captures[0] },
15
+ :match_type => :content_headers,
16
+ :match_content => /Oracle-Application-Server/,
17
+ :hide => false,
18
+ :dynamic_version => lambda { |x|
19
+ _first_header_capture(x,/Oracle-Application-Server-[0-9]+[a-z]?\/(.*?)\ /) },
20
+ :examples => [
21
+ "https://63.85.74.53:443",
22
+ "https://rss.tomthumb.com:443",
23
+ "https://qas.huntsmanservice.com:443"
24
+ ],
25
+ :verify => ["YWxiZXJ0c29ucyNJbnRyaWd1ZTo6RW50aXR5OjpVcmkjaHR0cHM6Ly9yc3MudG9tdGh1bWIuY29tOjQ0Mw=="],
26
+ :paths => ["#{url}"]
27
+ },
28
+ {
29
+ :type => "application",
30
+ :vendor => "Oracle",
31
+ :product =>"Fusion Middleware",
32
+ :match_details =>"page title & docs link... should give us a version",
33
+ :version => nil,
34
+ :dynamic_version => lambda { |x|
35
+ doc_version = _first_body_capture(x,/download.oracle.com\/docs\/cd\/(.*?)\/index.htm/)
36
+ case doc_version
37
+ when "E15217_01"
38
+ fmw_version = "10.1.4.3"
39
+ when "E15051_01"
40
+ fmw_version = "11.1.1.0"
41
+ when "E12839_01"
42
+ fmw_version = "11.1.1.1"
43
+ when "E15523_01"
44
+ fmw_version = "11.1.1.2"
45
+ when "E14571_01"
46
+ fmw_version = "11.1.1.3"
47
+ when "E17904_01"
48
+ fmw_version = "11.1.1.4"
49
+ when "E21764_01"
50
+ fmw_version = "11.1.1.5"
51
+ else
52
+ fmw_version = nil
53
+ end
54
+ fmw_version
55
+ },
56
+ :match_type => :content_body,
57
+ :references => [
58
+ "https://en.wikipedia.org/wiki/Oracle_Fusion_Middleware",
59
+ "https://docs.oracle.com/cd/E21764_01/index.htm"
60
+ ],
61
+ :match_content => /<title>Welcome to Oracle Fusion Middleware/,
62
+ :hide => false,
63
+ :examples => [
64
+ "http://200.142.198.113:80"
65
+ ],
66
+ :verify => ["aWJtI0ludHJpZ3VlOjpFbnRpdHk6OlVyaSNodHRwOi8vMjAwLjE0Mi4xOTguMTEzOjgw"],
67
+ :paths => ["#{url}"]
68
+ },
69
+ {
70
+ :type => "application",
71
+ :vendor => "Oracle",
72
+ :product =>"Glassfish",
73
+ :match_details =>"Oracle / Sun GlassFish Enterprise Server",
74
+ :references => [],
75
+ :version => nil,
76
+ :match_type => :content_headers,
77
+ :match_content => /Sun GlassFish Enterprise Server/,
78
+ :hide => false,
79
+ :dynamic_version => lambda { |x| _first_header_capture(x,/Sun GlassFish Enterprise Server\sv([\d\.]+)/) },
17
80
  :examples => ["http://52.4.12.185/"],
18
- :paths => ["#{uri}"]
81
+ :paths => ["#{url}"]
19
82
  },
20
83
  {
21
- :name => "Oracle Glassfish",
22
- :description => "Oracle / Sun GlassFish Enterprise Server",
23
- :url => "",
84
+ :type => "application",
85
+ :vendor => "Oracle",
86
+ :product =>"Glassfish",
87
+ :match_details =>"Oracle / Sun GlassFish Enterprise Server",
88
+ :references => [],
24
89
  :version => nil,
25
- :type => :content_headers,
26
- :content => /GlassFish Server Open Source Edition/,
27
- :hide => true,
28
- :dynamic_version => lambda { |x| x["details"]["headers"].join("\n").match(/GlassFish Server Open Source Edition\s+([\d\.]+)$/).captures[0] },
90
+ :match_type => :content_headers,
91
+ :match_content => /GlassFish Server Open Source Edition/,
92
+ :hide => false,
93
+ :dynamic_version => lambda { |x| _first_header_capture(x,/GlassFish Server Open Source Edition\s+([\d\.]+)$/) },
29
94
  :examples => ["http://52.2.97.57:80"],
30
- :paths => ["#{uri}"]
95
+ :paths => ["#{url}"]
96
+ },
97
+ {
98
+ :type => "application",
99
+ :vendor => "Oracle",
100
+ :product =>"HTTP Server",
101
+ :match_details =>"server header",
102
+ :references => [],
103
+ :version => nil,
104
+ :match_type => :content_headers,
105
+ :match_content => /Oracle-HTTP-Server/,
106
+ :hide => false,
107
+ :dynamic_version => lambda { |x|
108
+ _first_header_capture(x,/Oracle-HTTP-Server\/(.*?)\ /)
109
+ },
110
+ :examples => [
111
+ "https://qas.huntsmanservice.com:443"
112
+ ],
113
+ :verify => ["aHVudHNtYW4jSW50cmlndWU6OkVudGl0eTo6VXJpI2h0dHBzOi8vcWFzLmh1bnRzbWFuc2VydmljZS5jb206NDQz"],
114
+ :paths => ["#{url}"]
115
+ },
116
+ {
117
+ :type => "application",
118
+ :vendor => "Oracle",
119
+ :product =>"Java",
120
+ :match_details =>"JSESSIONID cookie",
121
+ :references => ["https://javarevisited.blogspot.com/2012/08/what-is-jsessionid-in-j2ee-web.html"],
122
+ :version => nil,
123
+ :match_type => :content_cookies,
124
+ :match_content => /JSESSIONID=/,
125
+ :hide => false,
126
+ :examples => ["https://birdcam.xcelenergy.com:443"],
127
+ :paths => ["#{url}"]
128
+ },
129
+ { # TODO - this will tell us J2EE versions, see references!!!
130
+ :type => "application",
131
+ :vendor => "Oracle",
132
+ :product =>"Java Application Server",
133
+ :match_details =>"x-header",
134
+ :references => ["http://www.ntu.edu.sg/home/ehchua/programming/java/javaservlets.html"],
135
+ :version => nil,
136
+ :dynamic_version => lambda { |x| _first_header_capture(x,/^x-powered-by: Servlet\/(.*)JSP.*$/) },
137
+ :match_type => :content_headers,
138
+ :match_content => /x-powered-by: Servlet/,
139
+ :hide => false,
140
+ :paths => ["#{url}"],
141
+ :examples => ["http://165.160.15.20/"]
142
+ },
143
+ { # TODO - this will tell us J2EE versions, see references!!!
144
+ :type => "application",
145
+ :vendor => "Oracle",
146
+ :product =>"Java Server Pages",
147
+ :match_details =>"x-header",
148
+ :references => ["http://www.ntu.edu.sg/home/ehchua/programming/java/javaservlets.html"],
149
+ :version => nil,
150
+ :dynamic_version => lambda { |x| _first_header_capture(x,/^x-powered-by: Servlet\/.*JSP\/(.*)$/) },
151
+ :match_type => :content_headers,
152
+ :match_content => /x-powered-by: Servlet\/.*JSP.*/,
153
+ :hide => false,
154
+ :paths => ["#{url}"],
155
+ :examples => ["http://165.160.15.20/"]
156
+ },
157
+ {
158
+ :type => "application",
159
+ :vendor => "Oracle",
160
+ :product =>"JavaServer Faces",
161
+ :match_details =>"viewstate inclusion of javaserver faces",
162
+ :references => [
163
+ "http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html",
164
+ "http://www.oracle.com/technetwork/topics/index-090910.html",
165
+ "https://www.owasp.org/index.php/Java_Server_Faces",
166
+ "https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html"
167
+ ],
168
+ :version => nil,
169
+ :match_type => :content_body,
170
+ :match_content => /javax.faces.ViewState/,
171
+ :hide => false,
172
+ :examples => ["https://reset.oxy.com:443"],
173
+ :paths => ["#{url}"]
174
+ },
175
+ {
176
+ :type => "application",
177
+ :vendor => "Oracle",
178
+ :product =>"Web Cache Server",
179
+ :match_details =>"server header",
180
+ :references => [],
181
+ :version => nil,
182
+ :match_type => :content_headers,
183
+ :match_content => /Oracle-Web-Cache/,
184
+ :hide => false,
185
+ :dynamic_version => lambda { |x|
186
+ _first_header_capture(x,/Oracle-Web-Cache-[0-9]+[a-z]?\/(.*?)\ /) },
187
+ :examples => [
188
+ "https://qas.huntsmanservice.com:443"
189
+ ],
190
+ :verify => ["aHVudHNtYW4jSW50cmlndWU6OkVudGl0eTo6VXJpI2h0dHBzOi8vcWFzLmh1bnRzbWFuc2VydmljZS5jb206NDQz"],
191
+ :paths => ["#{url}"]
192
+ },
193
+ {
194
+ :type => "application",
195
+ :vendor => "Oracle",
196
+ :product =>"Weblogic",
197
+ :match_details =>"weblogic fault / fail",
198
+ :references => ["https://coderanch.com/t/603067/application-servers/Calling-weblogic-webservice-error"],
199
+ :version => nil,
200
+ :match_type => :content_body,
201
+ :match_content => /<faultcode>env:WebServiceFault/,
202
+ :hide => false,
203
+ :examples => ["https://css-ewebsvcs.freddiemac.com:443"],
204
+ :paths => ["#{url}"]
205
+ },
206
+ {
207
+ :type => "application",
208
+ :vendor => "Oracle",
209
+ :product =>"Weblogic",
210
+ :match_details =>"weblogic header",
211
+ :references => [
212
+ "https://support.oracle.com/knowledge/Middleware/2100514_1.html",
213
+ "https://www.qualogy.com/techblog/oracle/how-to-harden-weblogic-and-fusion-middleware-against-worm-attacks"
214
+ ],
215
+ :version => nil,
216
+ :match_type => :content_headers,
217
+ :match_content => /^x-oracle-dms-ecid:/,
218
+ :hide => false,
219
+ :examples => ["https://tmsstg-eem-db.ros.com:443"],
220
+ :verify => ["cm9zc3N0b3JlcyNJbnRyaWd1ZTo6RW50aXR5OjpVcmkjaHR0cHM6Ly90bXNzdGctZWVtLWRiLnJvcy5jb206NDQz"],
221
+ :paths => ["#{url}"]
31
222
  }
32
223
  ]
33
224
  end
@@ -6,12 +6,14 @@ module Check
6
6
  def generate_checks(uri)
7
7
  [
8
8
  {
9
- :name => "Palo Alto Networks GlobalProtect Portal",
9
+ :type => "application",
10
+ :vendor => "Palo Alto Networks",
11
+ :product =>"GlobalProtect Portal",
10
12
  :tags => ["tech:vpn"],
11
- :description => "Pardot",
13
+ :match_details =>"Pardot",
12
14
  :version => nil,
13
- :type => :content_body,
14
- :content => /global-protect\/login.esp/i,
15
+ :match_type => :content_body,
16
+ :match_content => /global-protect\/login.esp/i,
15
17
  :paths => ["#{uri}"]
16
18
  }
17
19
  ]