tcell_agent 1.1.12 → 2.0.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.
Files changed (163) hide show
  1. checksums.yaml +5 -5
  2. data/bin/tcell_agent +26 -14
  3. data/lib/tcell_agent.rb +16 -10
  4. data/lib/tcell_agent/agent.rb +78 -97
  5. data/lib/tcell_agent/agent/route_manager.rb +0 -16
  6. data/lib/tcell_agent/agent/static_agent.rb +9 -30
  7. data/lib/tcell_agent/authlogic.rb +3 -6
  8. data/lib/tcell_agent/config/unknown_options.rb +4 -8
  9. data/lib/tcell_agent/configuration.rb +38 -119
  10. data/lib/tcell_agent/devise.rb +25 -27
  11. data/lib/tcell_agent/hooks/login_fraud.rb +30 -33
  12. data/lib/tcell_agent/instrument_servers.rb +25 -0
  13. data/lib/tcell_agent/instrumentation.rb +12 -10
  14. data/lib/tcell_agent/instrumentation/cmdi.rb +19 -15
  15. data/lib/tcell_agent/instrumentation/lfi.rb +73 -0
  16. data/lib/tcell_agent/instrumentation/monkey_patches/file.rb +25 -0
  17. data/lib/tcell_agent/instrumentation/monkey_patches/io.rb +123 -0
  18. data/lib/tcell_agent/instrumentation/monkey_patches/kernel.rb +159 -0
  19. data/lib/tcell_agent/logger.rb +50 -114
  20. data/lib/tcell_agent/patches.rb +6 -7
  21. data/lib/tcell_agent/policies/appfirewall_policy.rb +26 -0
  22. data/lib/tcell_agent/policies/command_injection_policy.rb +28 -0
  23. data/lib/tcell_agent/policies/dataloss_policy.rb +44 -44
  24. data/lib/tcell_agent/policies/headers_policy.rb +25 -0
  25. data/lib/tcell_agent/policies/http_redirect_policy.rb +13 -79
  26. data/lib/tcell_agent/policies/js_agent_policy.rb +27 -0
  27. data/lib/tcell_agent/policies/local_file_access.rb +28 -0
  28. data/lib/tcell_agent/policies/login_policy.rb +43 -0
  29. data/lib/tcell_agent/policies/patches_policy.rb +27 -0
  30. data/lib/tcell_agent/policies/policies_manager.rb +68 -0
  31. data/lib/tcell_agent/policies/policy_polling.rb +58 -0
  32. data/lib/tcell_agent/policies/policy_types.rb +14 -0
  33. data/lib/tcell_agent/policies/system_enablements.rb +27 -0
  34. data/lib/tcell_agent/rails/auth/authlogic.rb +43 -68
  35. data/lib/tcell_agent/rails/auth/devise.rb +20 -23
  36. data/lib/tcell_agent/rails/auth/doorkeeper.rb +63 -74
  37. data/lib/tcell_agent/rails/csrf_exception.rb +2 -2
  38. data/lib/tcell_agent/rails/dlp.rb +25 -15
  39. data/lib/tcell_agent/rails/dlp_handler.rb +1 -2
  40. data/lib/tcell_agent/rails/js_agent_insert.rb +12 -13
  41. data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +4 -25
  42. data/lib/tcell_agent/rails/middleware/context_middleware.rb +2 -12
  43. data/lib/tcell_agent/rails/middleware/global_middleware.rb +0 -1
  44. data/lib/tcell_agent/rails/middleware/headers_middleware.rb +14 -34
  45. data/lib/tcell_agent/rails/on_start.rb +32 -31
  46. data/lib/tcell_agent/rails/routes.rb +7 -6
  47. data/lib/tcell_agent/rails/routes/grape.rb +1 -3
  48. data/lib/tcell_agent/rails/routes/route_id.rb +3 -1
  49. data/lib/tcell_agent/rails/settings_reporter.rb +23 -36
  50. data/lib/tcell_agent/rails/start_agent_after_initializers.rb +12 -0
  51. data/lib/tcell_agent/rails/tcell_body_proxy.rb +6 -4
  52. data/lib/tcell_agent/rust/agent_config.rb +49 -0
  53. data/lib/tcell_agent/rust/{libtcellagent-alpine-1.3.2.so → libtcellagent-4.14.0.dylib} +0 -0
  54. data/lib/tcell_agent/rust/libtcellagent-4.14.0.so +0 -0
  55. data/lib/tcell_agent/rust/{libtcellagent-1.3.2.so → libtcellagent-alpine-4.14.0.so} +0 -0
  56. data/lib/tcell_agent/rust/models.rb +0 -55
  57. data/lib/tcell_agent/rust/native_agent.rb +531 -0
  58. data/lib/tcell_agent/rust/native_agent_response.rb +42 -0
  59. data/lib/tcell_agent/rust/native_library.rb +68 -0
  60. data/lib/tcell_agent/rust/tcellagent-4.14.0.dll +0 -0
  61. data/lib/tcell_agent/sensor_events/agent_setting_event.rb +12 -0
  62. data/lib/tcell_agent/sensor_events/{app_config.rb → app_config_setting_event.rb} +0 -6
  63. data/lib/tcell_agent/sensor_events/dlp.rb +2 -6
  64. data/lib/tcell_agent/sensor_events/sensor.rb +0 -62
  65. data/lib/tcell_agent/sensor_events/server_agent.rb +13 -18
  66. data/lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb +0 -108
  67. data/lib/tcell_agent/sensor_events/util/utils.rb +0 -2
  68. data/lib/tcell_agent/servers/passenger.rb +1 -28
  69. data/lib/tcell_agent/servers/puma.rb +3 -21
  70. data/lib/tcell_agent/servers/rails_server.rb +1 -1
  71. data/lib/tcell_agent/servers/thin.rb +2 -2
  72. data/lib/tcell_agent/servers/unicorn.rb +19 -80
  73. data/lib/tcell_agent/servers/webrick.rb +1 -1
  74. data/lib/tcell_agent/settings_reporter.rb +24 -24
  75. data/lib/tcell_agent/sinatra.rb +14 -16
  76. data/lib/tcell_agent/tcell_context.rb +40 -14
  77. data/lib/tcell_agent/utils/headers.rb +14 -0
  78. data/lib/tcell_agent/version.rb +1 -1
  79. data/spec/lib/tcell_agent/cmdi_spec.rb +0 -585
  80. data/spec/lib/tcell_agent/config/unknown_options_spec.rb +0 -18
  81. data/spec/lib/tcell_agent/configuration_spec.rb +4 -140
  82. data/spec/lib/tcell_agent/hooks/login_fraud_spec.rb +46 -173
  83. data/spec/lib/tcell_agent/instrumentation/cmdi/io_cmdi_spec.rb +504 -0
  84. data/spec/lib/tcell_agent/instrumentation/cmdi/kernel_cmdi_spec.rb +435 -0
  85. data/spec/lib/tcell_agent/instrumentation/lfi/file_lfi_spec.rb +326 -0
  86. data/spec/lib/tcell_agent/instrumentation/lfi/io_lfi_spec.rb +556 -0
  87. data/spec/lib/tcell_agent/instrumentation/lfi/kernel_lfi_spec.rb +249 -0
  88. data/spec/lib/tcell_agent/instrumentation/lfi_spec.rb +105 -0
  89. data/spec/lib/tcell_agent/patches_spec.rb +25 -43
  90. data/spec/lib/tcell_agent/policies/appfirewall_policy_spec.rb +183 -0
  91. data/spec/lib/tcell_agent/policies/clickjacking_policy_spec.rb +57 -0
  92. data/spec/lib/tcell_agent/policies/command_injection_policy_spec.rb +84 -773
  93. data/spec/lib/tcell_agent/policies/content_security_policy_spec.rb +161 -0
  94. data/spec/lib/tcell_agent/policies/dataloss_policy_spec.rb +9 -9
  95. data/spec/lib/tcell_agent/policies/http_redirect_policy_spec.rb +243 -198
  96. data/spec/lib/tcell_agent/policies/js_agent_policy_spec.rb +75 -0
  97. data/spec/lib/tcell_agent/policies/login_policy_spec.rb +165 -33
  98. data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +84 -277
  99. data/spec/lib/tcell_agent/policies/policies_manager_spec.rb +104 -0
  100. data/spec/lib/tcell_agent/policies/policy_polling_spec.rb +6 -0
  101. data/spec/lib/tcell_agent/policies/secure_headers_policy_spec.rb +56 -0
  102. data/spec/lib/tcell_agent/rails/csrf_exception_spec.rb +9 -18
  103. data/spec/lib/tcell_agent/rails/js_agent_insert_spec.rb +13 -30
  104. data/spec/lib/tcell_agent/rails/logger_spec.rb +27 -7
  105. data/spec/lib/tcell_agent/rails/middleware/tcell_body_proxy_spec.rb +17 -12
  106. data/spec/lib/tcell_agent/rails/routes/routes_spec.rb +14 -14
  107. data/spec/lib/tcell_agent/sensor_events/util/sanitizer_utilities_spec.rb +0 -35
  108. data/spec/lib/tcell_agent/settings_reporter_spec.rb +127 -153
  109. data/spec/spec_helper.rb +1 -1
  110. data/spec/support/builders.rb +104 -0
  111. data/spec/support/force_logger_mocking.rb +38 -0
  112. data/spec/support/resources/lfi_sample_file.txt +2 -0
  113. data/spec/support/static_agent_overrides.rb +0 -15
  114. metadata +63 -74
  115. data/lib/tcell_agent/agent/event_processor.rb +0 -326
  116. data/lib/tcell_agent/agent/fork_pipe_manager.rb +0 -113
  117. data/lib/tcell_agent/agent/policy_manager.rb +0 -219
  118. data/lib/tcell_agent/agent/policy_types.rb +0 -30
  119. data/lib/tcell_agent/api.rb +0 -91
  120. data/lib/tcell_agent/appsensor/injections_reporter.rb +0 -24
  121. data/lib/tcell_agent/config/child_process_events.rb +0 -8
  122. data/lib/tcell_agent/instrumentation/cmdi/backtick.rb +0 -10
  123. data/lib/tcell_agent/instrumentation/cmdi/exec.rb +0 -14
  124. data/lib/tcell_agent/instrumentation/cmdi/popen.rb +0 -28
  125. data/lib/tcell_agent/instrumentation/cmdi/spawn.rb +0 -11
  126. data/lib/tcell_agent/instrumentation/cmdi/system.rb +0 -11
  127. data/lib/tcell_agent/policies/http_tx_policy.rb +0 -60
  128. data/lib/tcell_agent/policies/login_fraud_policy.rb +0 -45
  129. data/lib/tcell_agent/policies/rust_policies.rb +0 -110
  130. data/lib/tcell_agent/rails.rb +0 -40
  131. data/lib/tcell_agent/rust/libtcellagent-1.3.2.dylib +0 -0
  132. data/lib/tcell_agent/rust/tcellagent-1.3.2.dll +0 -0
  133. data/lib/tcell_agent/rust/whisperer.rb +0 -308
  134. data/lib/tcell_agent/sensor_events/appsensor_event.rb +0 -52
  135. data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +0 -45
  136. data/lib/tcell_agent/sensor_events/command_injection.rb +0 -75
  137. data/lib/tcell_agent/sensor_events/honeytokens.rb +0 -16
  138. data/lib/tcell_agent/sensor_events/login_fraud.rb +0 -60
  139. data/lib/tcell_agent/sensor_events/metrics.rb +0 -123
  140. data/lib/tcell_agent/sensor_events/patches.rb +0 -21
  141. data/lib/tcell_agent/start_background_thread.rb +0 -55
  142. data/lib/tcell_agent/system_info.rb +0 -11
  143. data/lib/tcell_agent/utils/io.rb +0 -38
  144. data/lib/tcell_agent/utils/passwords.rb +0 -28
  145. data/lib/tcell_agent/utils/queue_with_timeout.rb +0 -142
  146. data/spec/lib/tcell_agent/agent/fork_pipe_manager_spec.rb +0 -100
  147. data/spec/lib/tcell_agent/agent/policy_manager_spec.rb +0 -535
  148. data/spec/lib/tcell_agent/agent/static_agent_spec.rb +0 -133
  149. data/spec/lib/tcell_agent/api/api_spec.rb +0 -39
  150. data/spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb +0 -187
  151. data/spec/lib/tcell_agent/instrumentation_spec.rb +0 -225
  152. data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +0 -517
  153. data/spec/lib/tcell_agent/policies/http_tx_policy_spec.rb +0 -22
  154. data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +0 -293
  155. data/spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb +0 -198
  156. data/spec/lib/tcell_agent/rails/middleware/global_middleware_spec.rb +0 -180
  157. data/spec/lib/tcell_agent/rails/middleware/redirect_middleware_spec.rb +0 -116
  158. data/spec/lib/tcell_agent/rust/models_spec.rb +0 -120
  159. data/spec/lib/tcell_agent/rust/whisperer_spec.rb +0 -704
  160. data/spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb +0 -45
  161. data/spec/lib/tcell_agent/sensor_events/sessions_metric_spec.rb +0 -272
  162. data/spec/lib/tcell_agent/utils/bounded_queue_spec.rb +0 -52
  163. data/spec/lib/tcell_agent/utils/passwords_spec.rb +0 -143
@@ -0,0 +1,42 @@
1
+ module TCellAgent
2
+ module Rust
3
+ class NativeAgentResponse
4
+ attr_reader :errors, :response
5
+
6
+ def initialize(native_method_name, response, response_len)
7
+ @response = {}
8
+ @errors = []
9
+
10
+ if response_len < 0
11
+ @errors.push(
12
+ "Error response from `#{native_method_name}` in native library method: #{response_len}"
13
+ )
14
+ return
15
+ end
16
+
17
+ begin
18
+ @response = JSON.parse(response.get_string(0, response_len))
19
+ if @response['error']
20
+ @errors.push(
21
+ "#{native_method_name} returned an error: #{@response['error']}"
22
+ )
23
+ @response = {}
24
+ end
25
+ if @response['errors']
26
+ @response['errors'].each do |error|
27
+ @errors.push(
28
+ "#{native_method_name} returned an error: #{error}"
29
+ )
30
+ @response = {}
31
+ end
32
+ end
33
+ rescue JSON::ParserError
34
+ @errors.push(
35
+ "Could not parse json response from `#{native_method_name}` in native library."
36
+ )
37
+ @response = {}
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,68 @@
1
+ require 'tcell_agent/rust/models'
2
+
3
+ module TCellAgent
4
+ module Rust
5
+ module NativeLibrary
6
+ require 'ffi'
7
+ extend FFI::Library
8
+
9
+ VERSION = '4.14.0'.freeze
10
+ prefix = 'lib'
11
+ extension = '.so'
12
+ variant = ''
13
+ if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
14
+ extension = '.dll'
15
+ prefix = ''
16
+ elsif /darwin/ =~ RUBY_PLATFORM
17
+ extension = '.dylib'
18
+ elsif /musl/ =~ RUBY_PLATFORM
19
+ variant = 'alpine-'
20
+ end
21
+
22
+ begin
23
+ ffi_lib File.join(File.dirname(__FILE__),
24
+ "#{prefix}tcellagent-#{variant}#{VERSION}#{extension}")
25
+
26
+ # All the rust library calls have the following response api:
27
+ #
28
+ # result [int]: 0+ length of buffer_out answer
29
+ # -1 general error
30
+ # -2 buffer_out is not big enough for response
31
+ # -3 buffer_out is null
32
+
33
+ attach_function :create_agent, %i[pointer size_t pointer size_t], :int
34
+ attach_function :free_agent, [:pointer], :int
35
+ attach_function :request_policies, %i[pointer pointer size_t], :int
36
+ attach_function :poll_new_policies, %i[pointer pointer size_t], :int
37
+ attach_function :appfirewall_apply, %i[pointer pointer size_t pointer size_t], :int
38
+ attach_function :patches_apply, %i[pointer pointer size_t pointer size_t], :int
39
+ attach_function :cmdi_apply, %i[pointer pointer size_t pointer size_t], :int
40
+ attach_function :get_headers, %i[pointer pointer size_t pointer size_t], :int
41
+ attach_function :get_js_agent_script_tag, %i[pointer pointer size_t pointer size_t], :int
42
+ attach_function :check_http_redirect, %i[pointer pointer size_t pointer size_t], :int
43
+ attach_function :report_metrics, %i[pointer pointer size_t pointer size_t], :int
44
+ attach_function :login_fraud_apply, %i[pointer pointer size_t pointer size_t], :int
45
+ attach_function :file_access_apply, %i[pointer pointer size_t pointer size_t], :int
46
+
47
+ attach_function :send_sanitized_events, %i[pointer pointer size_t pointer size_t], :int
48
+ attach_function :log_message, %i[pointer pointer size_t pointer size_t], :int
49
+
50
+ attach_function :update_policies, %i[pointer pointer size_t pointer size_t], :int
51
+ attach_function :test_event_sender, %i[pointer size_t pointer size_t], :int
52
+ attach_function :test_policies, %i[pointer size_t pointer size_t], :int
53
+
54
+ def self.common_lib_available?
55
+ true
56
+ end
57
+ rescue LoadError => load_error
58
+ logger = TCellAgent::ModuleLogger.new(TCellAgent::RubyLogger.new, name)
59
+ logger.error("Failed loading agent library. #{load_error.message}")
60
+ logger.exception(load_error)
61
+
62
+ def self.common_lib_available? # rubocop:disable Lint/DuplicateMethods
63
+ false
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,12 @@
1
+ require 'tcell_agent/sensor_events/app_config_setting_event'
2
+ require 'tcell_agent/sensor_events/sensor'
3
+
4
+ module TCellAgent
5
+ module SensorEvents
6
+ class AgentSettingEvent < AppConfigSettingEvent
7
+ def initialize(name, value)
8
+ super('tcell', 'config', nil, name, value)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -14,11 +14,5 @@ module TCellAgent
14
14
  self['prefix'] = prefix if prefix
15
15
  end
16
16
  end
17
-
18
- class TCellAgentSettingEvent < AppConfigSettingEvent
19
- def initialize(name, value)
20
- super('tcell', 'config', nil, name, value)
21
- end
22
- end
23
17
  end
24
18
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'tcell_agent/sensor_events/util/sanitizer_utilities'
4
4
  require 'tcell_agent/sensor_events/sensor'
5
- require 'tcell_agent/sensor_events/util/sanitizer_utilities'
5
+
6
6
  module TCellAgent
7
7
  module SensorEvents
8
8
  class DlpEvent < TCellSensorEvent
@@ -20,7 +20,7 @@ module TCellAgent
20
20
  super('dlp')
21
21
  self['rid'] = route_id if route_id
22
22
  self['found_in'] = found_in
23
- @raw_uri = raw_uri
23
+ self['uri'] = Util.strip_uri_values(raw_uri) if raw_uri
24
24
  self['sid'] = hmac_session_id if hmac_session_id
25
25
  self['uid'] = user_id if user_id
26
26
  self['rule'] = id if id
@@ -48,10 +48,6 @@ module TCellAgent
48
48
  self['variable'] = variable
49
49
  self
50
50
  end
51
-
52
- def post_process
53
- self['uri'] = Util.strip_uri_values(@raw_uri) if @raw_uri
54
- end
55
51
  end
56
52
  end
57
53
  end
@@ -1,7 +1,6 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
3
  require 'tcell_agent/sensor_events/util/sanitizer_utilities'
4
- require 'tcell_agent/logger'
5
4
  require 'uri'
6
5
 
7
6
  module TCellAgent
@@ -21,70 +20,9 @@ module TCellAgent
21
20
  self['offset'] = from_timestamp - @timestamp
22
21
  end
23
22
 
24
- def post_process
25
- # This is called in the background thread, so any
26
- # santization, analysis, etc doesn't get in the way
27
- end
28
-
29
23
  def bucket_key
30
24
  nil
31
25
  end
32
26
  end
33
-
34
- class TCellHttpTxSensorEvent < TCellSensorEvent
35
- def initialize(request, response)
36
- super('http_tx')
37
- @raw_request = request
38
- @raw_response = response
39
- end
40
-
41
- def post_process
42
- self['request'] = Util.request_sanitized_json(@raw_request) if defined? @raw_request
43
-
44
- self['response'] = Util.response_sanitized_json(@raw_response) if defined? @raw_response
45
- end
46
- end
47
-
48
- class TCellRedirectSensorEvent < TCellSensorEvent
49
- def initialize(redirect_domain,
50
- original_domain,
51
- original_url,
52
- method,
53
- route_id,
54
- status_code,
55
- remote_addr,
56
- hmac_session_id = nil,
57
- user_id = nil)
58
- super('redirect')
59
- self['method'] = method
60
- self['from_domain'] = original_domain
61
- self['status_code'] = status_code
62
- self['remote_addr'] = remote_addr
63
- self['to'] = redirect_domain
64
- self['uid'] = user_id.to_s if user_id
65
- self['from'] = Util.strip_uri_values(original_url)
66
- self['rid'] = route_id if route_id
67
- self['sid'] = hmac_session_id if hmac_session_id
68
- end
69
- end
70
-
71
- class TCellFingerprintSensorEvent < TCellSensorEvent
72
- def initialize(request, hmac_session_id, user_id = nil)
73
- super('fingerprint')
74
- @raw_request = request
75
- @hmac_session_id = hmac_session_id
76
- @user_id = user_id
77
- end
78
-
79
- def post_process
80
- unless @raw_request.headers.key?('HTTP_USER_AGENT')
81
- raise 'User Agent not Found!'
82
- end
83
- self['ua'] = @raw_request.headers['HTTP_USER_AGENT']
84
- self['ip'] = @raw_request.remote_ip
85
- self['sid'] = @hmac_session_id
86
- self['uid'] = @user_id if @user_id
87
- end
88
- end
89
27
  end
90
28
  end
@@ -1,6 +1,5 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
- require 'tcell_agent/logger'
4
3
  require 'tcell_agent/sensor_events/util/sanitizer_utilities'
5
4
  require 'tcell_agent/sensor_events/sensor'
6
5
  require 'tcell_agent/sensor_events/util/utils'
@@ -8,15 +7,9 @@ require 'etc'
8
7
 
9
8
  module TCellAgent
10
9
  module SensorEvents
11
- class FlushDummyEvent < TCellSensorEvent
12
- def initialize
13
- super('dummy')
14
- @send = false
15
- @flush = true
16
- end
17
- end
18
-
19
10
  class ServerAgentDetailsSensorEvent < TCellSensorEvent
11
+ include TCellAgent::ModuleLoggerAccess
12
+
20
13
  def initialize
21
14
  super('server_agent_details')
22
15
  @flush = true
@@ -33,17 +26,17 @@ module TCellAgent
33
26
  info = Etc.getpwnam(login)
34
27
  self['group'] = info.gid.to_s
35
28
  rescue StandardError => te
36
- TCellAgent.logger.warn("Exception finding group id: #{te.message}")
37
- TCellAgent.logger.debug(te.backtrace)
29
+ module_logger.debug("Could not get group id: #{te.message}")
30
+ module_logger.exception(te)
38
31
  end
39
32
  end
40
33
  rescue StandardError => to
41
- TCellAgent.logger.warn("Exception finding user & group: #{to.message}")
42
- TCellAgent.logger.debug(te.backtrace)
34
+ module_logger.debug("Could not get user & group: #{to.message}")
35
+ module_logger.exception(te)
43
36
  end
44
37
 
45
- TCellAgent.logger.debug("User #{self['user']}")
46
- TCellAgent.logger.debug("Group #{self['group']}")
38
+ module_logger.debug("User #{self['user']}")
39
+ module_logger.debug("Group #{self['group']}")
47
40
  end
48
41
  end
49
42
 
@@ -68,6 +61,8 @@ module TCellAgent
68
61
  end
69
62
 
70
63
  class ServerAgentPackagesSensorEvent < TCellSensorEvent
64
+ include TCellAgent::ModuleLoggerAccess
65
+
71
66
  def initialize
72
67
  super('server_agent_packages')
73
68
  @flush = true
@@ -78,11 +73,11 @@ module TCellAgent
78
73
  if x.name
79
74
  package = { 'n' => x.name, 'v' => x.version.version }
80
75
  packages.push(package)
81
- TCellAgent.logger.debug("Adding packages #{x.name}")
76
+ module_logger.debug("Adding packages #{x.name}")
82
77
  end
83
78
  rescue StandardError => te
84
- TCellAgent.logger.error("Exception adding package: #{te.message}")
85
- TCellAgent.logger.debug(te.backtrace)
79
+ module_logger.error("Exception adding package: #{te.message}")
80
+ module_logger.exception(te)
86
81
  end
87
82
  end
88
83
  self['packages'] = packages
@@ -1,6 +1,5 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
- require 'logger'
4
3
  require 'cgi'
5
4
  require 'uri'
6
5
  require 'openssl'
@@ -16,98 +15,6 @@ module TCellAgent
16
15
  h[0...h.length / 2]
17
16
  end
18
17
 
19
- def self.request_sanitized_json(request)
20
- sanitized_headers = {}
21
- headers = request.headers.select { |k, _v| k.start_with? 'HTTP_' }
22
- .collect { |pair| [pair[0].sub(/^HTTP_/, ''), pair[1]] }
23
- .sort
24
- headers.each do |header_name, header_value|
25
- lower_header_name = header_name.downcase
26
- sanitized_headers[header_name] = if lower_header_name == 'cookie'
27
- [santize_request_cookie_string(header_value)]
28
- elsif %w[content_type content_length user_agent csp].include?(lower_header_name)
29
- [header_value]
30
- else
31
- []
32
- end
33
- end
34
- new_request = { 'method' => request.request_method,
35
- 'uri' => sanitize_uri(request.fullpath),
36
- 'headers' => sanitized_headers }
37
- request_body = request.body.read
38
- if request_body
39
- new_request['post_data'] = sanitize_query_string(request_body)
40
- end
41
- new_request
42
- end
43
-
44
- def self.response_sanitized_json(response)
45
- status, headers, _body = *response
46
- sanitized_headers = {}
47
- content_type = 'unknown'
48
- headers.each do |header_name, header_value|
49
- lower_header_name = header_name.downcase
50
- if lower_header_name == 'set-cookie'
51
- sanitized_headers[header_name] = [santize_response_cookie_string(header_value)]
52
- else
53
- content_type = header_value if lower_header_name == 'content-type'
54
- sanitized_headers[header_name] = if ['content-type', 'content-length'].include?(lower_header_name)
55
- [header_value]
56
- else
57
- []
58
- end
59
- end
60
- end
61
-
62
- { 'status' => status,
63
- 'headers' => sanitized_headers }
64
- end
65
-
66
- def self.santize_request_cookie_string(request_cookie_string)
67
- sanitized_cookies = {}
68
- cookies = CGI::Cookie.parse(request_cookie_string)
69
- cookies.each do |cookie_name, cookie_value|
70
- next if cookie_value.length != 1
71
- sanitized_cookies[cookie_name] = Util.hmac(cookie_value[0])
72
- end
73
- sanitized_cookies.map { |k, v| "#{k}=#{v}" }.join(';')
74
- end
75
-
76
- def self.santize_response_cookie_string(response_cookie_string_value)
77
- cookie_parts = response_cookie_string_value.split('; ')
78
- cookie_string = cookie_parts[0]
79
- cookies = CGI::Cookie.parse(cookie_string)
80
- return '[COOKIEMALFORMED]' if cookies.length != 1
81
- cookie_name = cookies.keys.first
82
- cookie_values = cookies.values.first
83
- return '[COOKIEHADTOOMANYVALUES]' if cookie_values.length != 1
84
- h = Util.hmac(cookie_values[0])
85
- new_cookie_string = "#{cookie_name}=#{h}"
86
- cookie_parts[0] = new_cookie_string
87
- cookie_parts.map { |k, v| "#{k}=#{v}" }.join('; ')
88
- end
89
-
90
- def self.sanitize_query_string(query)
91
- params = CGI.parse(query)
92
- params.each do |param_name, param_values|
93
- next if param_values.nil? || param_values.empty?
94
- if param_name.match(/password/i) ||
95
- param_name.match(/passwd/i) ||
96
- param_name.match(/token/i) ||
97
- param_name.match(/sessionid/i)
98
- params[param_name] = ['?']
99
- next
100
- end
101
- new_param_values = []
102
- param_values.each do |param_value|
103
- h = Util.hmac(param_value)
104
- new_param_values.push << h
105
- end
106
- params[param_name] = new_param_values
107
- end
108
- params.map { |k, v| "#{k}=#{v.join(',')}" }.join('&')
109
- end
110
-
111
18
  def self.strip_values_query_string(query)
112
19
  params = CGI.parse(query)
113
20
  params.each do |param_name, param_values|
@@ -117,13 +24,6 @@ module TCellAgent
117
24
  params.map { |k, v| "#{k}=#{v.join(',')}" }.join('&')
118
25
  end
119
26
 
120
- def self.sanitize_uri(uri_string)
121
- uri = URI(uri_string)
122
- query = uri.query
123
- uri.query = sanitize_query_string(query) if query
124
- uri.to_s
125
- end
126
-
127
27
  def self.strip_uri_values(uri_string)
128
28
  uri = URI(uri_string)
129
29
  query = uri.query
@@ -137,14 +37,6 @@ module TCellAgent
137
37
 
138
38
  'tcell_hmac_key'
139
39
  end
140
-
141
- def self.clean_header_keys(request_env_or_header_keys)
142
- if request_env_or_header_keys.is_a?(Hash)
143
- request_env_or_header_keys.select { |k, _v| k.start_with? 'HTTP_' }.collect { |k, _v| k.sub(/^HTTP_/, '') }
144
- else
145
- request_env_or_header_keys.map { |k| k.sub(/^HTTP_/, '') }
146
- end
147
- end
148
40
  end
149
41
  end
150
42
  end