tcell_agent 0.2.21 → 0.2.22

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tcell_agent.rb +1 -0
  3. data/lib/tcell_agent/api.rb +3 -2
  4. data/lib/tcell_agent/appsensor/injections_matcher.rb +137 -0
  5. data/lib/tcell_agent/appsensor/injections_reporter.rb +67 -0
  6. data/lib/tcell_agent/appsensor/meta_data.rb +71 -0
  7. data/lib/tcell_agent/appsensor/rules/appsensor_rule_manager.rb +5 -2
  8. data/lib/tcell_agent/appsensor/rules/appsensor_rule_set.rb +1 -1
  9. data/lib/tcell_agent/appsensor/sensor.rb +48 -0
  10. data/lib/tcell_agent/configuration.rb +15 -2
  11. data/lib/tcell_agent/instrumentation.rb +3 -2
  12. data/lib/tcell_agent/logger.rb +19 -3
  13. data/lib/tcell_agent/patches.rb +26 -0
  14. data/lib/tcell_agent/patches/block_rule.rb +58 -0
  15. data/lib/tcell_agent/patches/meta_data.rb +54 -0
  16. data/lib/tcell_agent/patches/sensors_matcher.rb +30 -0
  17. data/lib/tcell_agent/policies/appsensor/cmdi_sensor.rb +4 -0
  18. data/lib/tcell_agent/policies/appsensor/database_sensor.rb +7 -3
  19. data/lib/tcell_agent/policies/appsensor/fpt_sensor.rb +4 -0
  20. data/lib/tcell_agent/policies/appsensor/injection_sensor.rb +32 -38
  21. data/lib/tcell_agent/policies/appsensor/misc_sensor.rb +4 -4
  22. data/lib/tcell_agent/policies/appsensor/nullbyte_sensor.rb +4 -0
  23. data/lib/tcell_agent/policies/appsensor/payloads_policy.rb +3 -1
  24. data/lib/tcell_agent/policies/appsensor/response_codes_sensor.rb +3 -3
  25. data/lib/tcell_agent/policies/appsensor/retr_sensor.rb +4 -0
  26. data/lib/tcell_agent/policies/appsensor/size_sensor.rb +9 -3
  27. data/lib/tcell_agent/policies/appsensor/user_agent_sensor.rb +3 -3
  28. data/lib/tcell_agent/policies/appsensor_policy.rb +55 -131
  29. data/lib/tcell_agent/policies/content_security_policy.rb +148 -137
  30. data/lib/tcell_agent/policies/patches_policy.rb +41 -13
  31. data/lib/tcell_agent/rails.rb +11 -109
  32. data/lib/tcell_agent/rails/auth/devise.rb +5 -1
  33. data/lib/tcell_agent/rails/dlp.rb +5 -2
  34. data/lib/tcell_agent/rails/dlp/process_request.rb +88 -0
  35. data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +1 -1
  36. data/lib/tcell_agent/rails/middleware/headers_middleware.rb +3 -13
  37. data/lib/tcell_agent/rails/on_start.rb +5 -101
  38. data/lib/tcell_agent/rails/routes.rb +240 -81
  39. data/lib/tcell_agent/rails/routes/grape.rb +113 -0
  40. data/lib/tcell_agent/rails/routes/route_id.rb +29 -0
  41. data/lib/tcell_agent/sensor_events/app_config.rb +21 -13
  42. data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +7 -26
  43. data/lib/tcell_agent/servers/passenger.rb +10 -0
  44. data/lib/tcell_agent/start_background_thread.rb +82 -0
  45. data/lib/tcell_agent/utils/params.rb +1 -1
  46. data/lib/tcell_agent/version.rb +1 -1
  47. data/spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb +504 -0
  48. data/spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb +222 -0
  49. data/spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb +7 -13
  50. data/spec/lib/tcell_agent/appsensor/rules/appsensor_rule_set_spec.rb +18 -18
  51. data/spec/lib/tcell_agent/patches/block_rule_spec.rb +381 -0
  52. data/spec/lib/tcell_agent/patches/sensors_matcher_spec.rb +35 -0
  53. data/spec/lib/tcell_agent/patches_spec.rb +156 -0
  54. data/spec/lib/tcell_agent/policies/appsensor/cmdi_sensor_spec.rb +21 -10
  55. data/spec/lib/tcell_agent/policies/appsensor/fpt_sensor_spec.rb +20 -9
  56. data/spec/lib/tcell_agent/policies/appsensor/nullbyte_sensor_spec.rb +44 -9
  57. data/spec/lib/tcell_agent/policies/appsensor/request_size_sensor_spec.rb +4 -4
  58. data/spec/lib/tcell_agent/policies/appsensor/response_codes_sensor_spec.rb +13 -13
  59. data/spec/lib/tcell_agent/policies/appsensor/response_size_sensor_spec.rb +5 -5
  60. data/spec/lib/tcell_agent/policies/appsensor/retr_sensor_spec.rb +20 -9
  61. data/spec/lib/tcell_agent/policies/appsensor/sqli_sensor_spec.rb +24 -14
  62. data/spec/lib/tcell_agent/policies/appsensor/xss_sensor_spec.rb +243 -241
  63. data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +128 -200
  64. data/spec/lib/tcell_agent/policies/content_security_policy_spec.rb +126 -55
  65. data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +485 -24
  66. data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +5 -0
  67. data/spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb +4 -2
  68. data/spec/lib/tcell_agent/rails/routes/grape_spec.rb +294 -0
  69. data/spec/lib/tcell_agent/rails/routes/route_id_spec.rb +80 -0
  70. data/spec/lib/tcell_agent/rails/routes/routes_spec.rb +182 -0
  71. metadata +30 -7
  72. data/lib/tcell_agent/policies/appsensor/login_sensor.rb +0 -39
  73. data/lib/tcell_agent/policies/appsensor/sensor.rb +0 -46
  74. data/lib/tcell_agent/rails/path_parameters_setter.rb +0 -43
  75. data/spec/lib/tcell_agent/policies/appsensor/login_sensor_spec.rb +0 -104
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcell_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 0.2.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garrett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-03 00:00:00.000000000 Z
11
+ date: 2016-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -142,19 +142,26 @@ files:
142
142
  - lib/tcell_agent/agent/static_agent.rb
143
143
  - lib/tcell_agent/agent.rb
144
144
  - lib/tcell_agent/api.rb
145
+ - lib/tcell_agent/appsensor/injections_matcher.rb
146
+ - lib/tcell_agent/appsensor/injections_reporter.rb
147
+ - lib/tcell_agent/appsensor/meta_data.rb
145
148
  - lib/tcell_agent/appsensor/rules/appsensor_rule_manager.rb
146
149
  - lib/tcell_agent/appsensor/rules/appsensor_rule_set.rb
147
150
  - lib/tcell_agent/appsensor/rules/baserules.json
151
+ - lib/tcell_agent/appsensor/sensor.rb
148
152
  - lib/tcell_agent/authlogic.rb
149
153
  - lib/tcell_agent/configuration.rb
150
154
  - lib/tcell_agent/devise.rb
151
155
  - lib/tcell_agent/instrumentation.rb
152
156
  - lib/tcell_agent/logger.rb
157
+ - lib/tcell_agent/patches/block_rule.rb
158
+ - lib/tcell_agent/patches/meta_data.rb
159
+ - lib/tcell_agent/patches/sensors_matcher.rb
160
+ - lib/tcell_agent/patches.rb
153
161
  - lib/tcell_agent/policies/appsensor/cmdi_sensor.rb
154
162
  - lib/tcell_agent/policies/appsensor/database_sensor.rb
155
163
  - lib/tcell_agent/policies/appsensor/fpt_sensor.rb
156
164
  - lib/tcell_agent/policies/appsensor/injection_sensor.rb
157
- - lib/tcell_agent/policies/appsensor/login_sensor.rb
158
165
  - lib/tcell_agent/policies/appsensor/misc_sensor.rb
159
166
  - lib/tcell_agent/policies/appsensor/nullbyte_sensor.rb
160
167
  - lib/tcell_agent/policies/appsensor/payloads_policy.rb
@@ -162,7 +169,6 @@ files:
162
169
  - lib/tcell_agent/policies/appsensor/response_codes_sensor.rb
163
170
  - lib/tcell_agent/policies/appsensor/response_size_sensor.rb
164
171
  - lib/tcell_agent/policies/appsensor/retr_sensor.rb
165
- - lib/tcell_agent/policies/appsensor/sensor.rb
166
172
  - lib/tcell_agent/policies/appsensor/size_sensor.rb
167
173
  - lib/tcell_agent/policies/appsensor/sqli_sensor.rb
168
174
  - lib/tcell_agent/policies/appsensor/user_agent_sensor.rb
@@ -181,13 +187,15 @@ files:
181
187
  - lib/tcell_agent/rails/auth/devise.rb
182
188
  - lib/tcell_agent/rails/better_ip.rb
183
189
  - lib/tcell_agent/rails/csrf_exception.rb
190
+ - lib/tcell_agent/rails/dlp/process_request.rb
184
191
  - lib/tcell_agent/rails/dlp.rb
185
192
  - lib/tcell_agent/rails/middleware/body_filter_middleware.rb
186
193
  - lib/tcell_agent/rails/middleware/context_middleware.rb
187
194
  - lib/tcell_agent/rails/middleware/global_middleware.rb
188
195
  - lib/tcell_agent/rails/middleware/headers_middleware.rb
189
196
  - lib/tcell_agent/rails/on_start.rb
190
- - lib/tcell_agent/rails/path_parameters_setter.rb
197
+ - lib/tcell_agent/rails/routes/grape.rb
198
+ - lib/tcell_agent/rails/routes/route_id.rb
191
199
  - lib/tcell_agent/rails/routes.rb
192
200
  - lib/tcell_agent/rails/settings_reporter.rb
193
201
  - lib/tcell_agent/rails.rb
@@ -205,6 +213,7 @@ files:
205
213
  - lib/tcell_agent/sensor_events/util/redirect_utils.rb
206
214
  - lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb
207
215
  - lib/tcell_agent/sensor_events/util/utils.rb
216
+ - lib/tcell_agent/servers/passenger.rb
208
217
  - lib/tcell_agent/servers/puma.rb
209
218
  - lib/tcell_agent/servers/rails_server.rb
210
219
  - lib/tcell_agent/servers/thin.rb
@@ -268,14 +277,18 @@ files:
268
277
  - spec/lib/tcell_agent/agent/policy_manager_spec.rb
269
278
  - spec/lib/tcell_agent/agent/static_agent_spec.rb
270
279
  - spec/lib/tcell_agent/api/api_spec.rb
280
+ - spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb
281
+ - spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb
271
282
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb
272
283
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_set_spec.rb
273
284
  - spec/lib/tcell_agent/configuration_spec.rb
274
285
  - spec/lib/tcell_agent/instrumentation_spec.rb
286
+ - spec/lib/tcell_agent/patches/block_rule_spec.rb
287
+ - spec/lib/tcell_agent/patches/sensors_matcher_spec.rb
288
+ - spec/lib/tcell_agent/patches_spec.rb
275
289
  - spec/lib/tcell_agent/policies/appsensor/cmdi_sensor_spec.rb
276
290
  - spec/lib/tcell_agent/policies/appsensor/database_sensor_spec.rb
277
291
  - spec/lib/tcell_agent/policies/appsensor/fpt_sensor_spec.rb
278
- - spec/lib/tcell_agent/policies/appsensor/login_sensor_spec.rb
279
292
  - spec/lib/tcell_agent/policies/appsensor/misc_sensor_spec.rb
280
293
  - spec/lib/tcell_agent/policies/appsensor/nullbyte_sensor_spec.rb
281
294
  - spec/lib/tcell_agent/policies/appsensor/payloads_policy_apply_spec.rb
@@ -304,6 +317,9 @@ files:
304
317
  - spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb
305
318
  - spec/lib/tcell_agent/rails/middleware/global_middleware_spec.rb
306
319
  - spec/lib/tcell_agent/rails/middleware/redirect_middleware_spec.rb
320
+ - spec/lib/tcell_agent/rails/routes/grape_spec.rb
321
+ - spec/lib/tcell_agent/rails/routes/route_id_spec.rb
322
+ - spec/lib/tcell_agent/rails/routes/routes_spec.rb
307
323
  - spec/lib/tcell_agent/rails_spec.rb
308
324
  - spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb
309
325
  - spec/lib/tcell_agent/sensor_events/dlp_spec.rb
@@ -410,14 +426,18 @@ test_files:
410
426
  - spec/lib/tcell_agent/agent/policy_manager_spec.rb
411
427
  - spec/lib/tcell_agent/agent/static_agent_spec.rb
412
428
  - spec/lib/tcell_agent/api/api_spec.rb
429
+ - spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb
430
+ - spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb
413
431
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb
414
432
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_set_spec.rb
415
433
  - spec/lib/tcell_agent/configuration_spec.rb
416
434
  - spec/lib/tcell_agent/instrumentation_spec.rb
435
+ - spec/lib/tcell_agent/patches/block_rule_spec.rb
436
+ - spec/lib/tcell_agent/patches/sensors_matcher_spec.rb
437
+ - spec/lib/tcell_agent/patches_spec.rb
417
438
  - spec/lib/tcell_agent/policies/appsensor/cmdi_sensor_spec.rb
418
439
  - spec/lib/tcell_agent/policies/appsensor/database_sensor_spec.rb
419
440
  - spec/lib/tcell_agent/policies/appsensor/fpt_sensor_spec.rb
420
- - spec/lib/tcell_agent/policies/appsensor/login_sensor_spec.rb
421
441
  - spec/lib/tcell_agent/policies/appsensor/misc_sensor_spec.rb
422
442
  - spec/lib/tcell_agent/policies/appsensor/nullbyte_sensor_spec.rb
423
443
  - spec/lib/tcell_agent/policies/appsensor/payloads_policy_apply_spec.rb
@@ -446,6 +466,9 @@ test_files:
446
466
  - spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb
447
467
  - spec/lib/tcell_agent/rails/middleware/global_middleware_spec.rb
448
468
  - spec/lib/tcell_agent/rails/middleware/redirect_middleware_spec.rb
469
+ - spec/lib/tcell_agent/rails/routes/grape_spec.rb
470
+ - spec/lib/tcell_agent/rails/routes/route_id_spec.rb
471
+ - spec/lib/tcell_agent/rails/routes/routes_spec.rb
449
472
  - spec/lib/tcell_agent/rails_spec.rb
450
473
  - spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb
451
474
  - spec/lib/tcell_agent/sensor_events/dlp_spec.rb
@@ -1,39 +0,0 @@
1
- require 'tcell_agent/policies/appsensor/size_sensor'
2
- require 'tcell_agent/sensor_events/util/utils'
3
-
4
-
5
- module TCellAgent
6
- module Policies
7
-
8
- class LoginSensor < Sensor
9
- LOGIN_FAILURE_DP = "lgnFlr"
10
-
11
- attr_accessor :enabled
12
-
13
- def initialize(policy_json=nil)
14
- @enabled = false
15
-
16
- if policy_json
17
- @enabled = policy_json.fetch("enabled", false)
18
- end
19
- end
20
-
21
-
22
- def check(appsensor_meta, username)
23
- return unless self.enabled
24
-
25
- if username
26
- username = TCellAgent::SensorEvents::Util.hmac(username)
27
- end
28
-
29
- send_event(appsensor_meta, LOGIN_FAILURE_DP, username, nil)
30
- end
31
-
32
- def to_s
33
- "<#{self.class.name} enabled: #{@enabled}>"
34
- end
35
-
36
- end
37
-
38
- end
39
- end
@@ -1,46 +0,0 @@
1
- require 'tcell_agent/sensor_events/appsensor_event'
2
-
3
- module TCellAgent
4
- module Policies
5
-
6
- class Sensor
7
- def send_event(appsensor_meta, detection_point, parameter, meta, payload, pattern)
8
- event = TCellAgent::SensorEvents::TCellAppSensorEvent.new(
9
- appsensor_meta.location,
10
- detection_point,
11
- appsensor_meta.method,
12
- appsensor_meta.remote_address,
13
- parameter,
14
- appsensor_meta.route_id,
15
- meta,
16
- appsensor_meta.session_id,
17
- appsensor_meta.user_id,
18
- payload,
19
- pattern
20
- )
21
-
22
- TCellAgent.send_event(event)
23
- end
24
-
25
- def send_event_from_tcell_data(tcell_data, detection_point, parameter, meta)
26
- payload = pattern = nil
27
- event = TCellAgent::SensorEvents::TCellAppSensorEvent.new(
28
- tcell_data.uri,
29
- detection_point,
30
- tcell_data.request_method,
31
- tcell_data.ip_address,
32
- parameter,
33
- tcell_data.route_id,
34
- meta,
35
- tcell_data.hmac_session_id,
36
- tcell_data.user_id,
37
- payload,
38
- pattern
39
- )
40
-
41
- TCellAgent.send_event(event)
42
- end
43
- end
44
-
45
- end
46
- end
@@ -1,43 +0,0 @@
1
- module TCellAgent
2
-
3
- ActionDispatch::Routing::RouteSet::Dispatcher.class_eval do
4
- if (::Rails::VERSION::MAJOR == 3)
5
- alias_method :tcell_dispatch, :dispatch
6
- def dispatch(controller, action, env)
7
- result = tcell_dispatch(controller, action, env)
8
-
9
- TCellAgent::Instrumentation.safe_block("Set path_parameters in TCellData") do
10
- if TCellAgent.configuration.should_intercept_requests?
11
- request_env = TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS.fetch(Thread.current.object_id, {})
12
- tcell_data = request_env[TCellAgent::Instrumentation::TCELL_ID]
13
- if tcell_data
14
- tcell_data.path_parameters = env[ActionDispatch::Routing::RouteSet::PARAMETERS_KEY]
15
- end
16
- end
17
- end
18
-
19
- result
20
- end
21
- end
22
-
23
- if (::Rails::VERSION::MAJOR == 4)
24
- alias_method :tcell_serve, :serve
25
- def serve(req)
26
- result = tcell_serve(req)
27
-
28
- TCellAgent::Instrumentation.safe_block("Set path_parameters in TCellData") do
29
- if TCellAgent.configuration.should_intercept_requests?
30
- request_env = TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS.fetch(Thread.current.object_id, {})
31
- tcell_data = request_env[TCellAgent::Instrumentation::TCELL_ID]
32
- if tcell_data
33
- tcell_data.path_parameters = req.path_parameters
34
- end
35
- end
36
- end
37
-
38
- result
39
- end
40
- end
41
- end
42
-
43
- end
@@ -1,104 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module TCellAgent
4
- module Policies
5
-
6
- describe LoginSensor do
7
- describe "#initialize" do
8
- context "default sensor" do
9
- it "should have properties set to defaults" do
10
- sensor = LoginSensor.new
11
- expect(sensor.enabled).to eq(false)
12
- end
13
- end
14
-
15
- context "setting enabled on sensor" do
16
- it "should have properties set to defaults" do
17
- sensor = LoginSensor.new({"enabled" => true})
18
- expect(sensor.enabled).to eq(true)
19
- end
20
- end
21
-
22
- end
23
-
24
- describe "#check" do
25
- context "with disabled sensor" do
26
- context "with empty username" do
27
- it "should not send an event" do
28
- sensor = LoginSensor.new({"enabled" => false})
29
- meta = TCellAgent::SensorEvents::AppSensorMetaEvent.new
30
- meta.remote_address = "remote_address"
31
- meta.method = "get"
32
- meta.location = "location"
33
- meta.route_id = "route_id"
34
- meta.session_id = "session_id"
35
- meta.user_id = "user_id"
36
- meta.transaction_id = "transaction_id"
37
-
38
- expect(sensor).to_not receive(:send_event)
39
- sensor.check(meta, nil)
40
- end
41
- end
42
-
43
- context "with username present" do
44
- it "should not send an event" do
45
- sensor = LoginSensor.new({"enabled" => false})
46
- meta = TCellAgent::SensorEvents::AppSensorMetaEvent.new
47
- meta.remote_address = "remote_address"
48
- meta.method = "get"
49
- meta.location = "location"
50
- meta.route_id = "route_id"
51
- meta.session_id = "session_id"
52
- meta.user_id = "user_id"
53
- meta.transaction_id = "transaction_id"
54
-
55
- expect(sensor).to_not receive(:send_event)
56
- sensor.check(meta, "username")
57
- end
58
- end
59
- end
60
-
61
- context "with enabled sensor" do
62
- context "with empty username" do
63
- it "should send an event" do
64
- sensor = LoginSensor.new({"enabled" => true})
65
- meta = TCellAgent::SensorEvents::AppSensorMetaEvent.new
66
- meta.remote_address = "remote_address"
67
- meta.method = "get"
68
- meta.location = "location"
69
- meta.route_id = "route_id"
70
- meta.session_id = "session_id"
71
- meta.user_id = "user_id"
72
- meta.transaction_id = "transaction_id"
73
-
74
- expect(sensor).to receive(:send_event).with(
75
- meta, LoginSensor::LOGIN_FAILURE_DP, nil, nil
76
- )
77
- sensor.check(meta, nil)
78
- end
79
- end
80
-
81
- context "with username present" do
82
- it "should send an event" do
83
- sensor = LoginSensor.new({"enabled" => true})
84
- meta = TCellAgent::SensorEvents::AppSensorMetaEvent.new
85
- meta.remote_address = "remote_address"
86
- meta.method = "get"
87
- meta.location = "location"
88
- meta.route_id = "route_id"
89
- meta.session_id = "session_id"
90
- meta.user_id = "user_id"
91
- meta.transaction_id = "transaction_id"
92
-
93
- expect(sensor).to receive(:send_event).with(
94
- meta, LoginSensor::LOGIN_FAILURE_DP, anything(), nil
95
- )
96
- sensor.check(meta, "username")
97
- end
98
- end
99
- end
100
- end
101
- end
102
-
103
- end
104
- end