tcell_agent 1.1.12 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6334e154fc67ca343e771118111ed19b4961bcaa
4
- data.tar.gz: a7acb414e6e0cb4506d6abafed4709818fcb720f
2
+ SHA256:
3
+ metadata.gz: b0b98e0366f6de14a287a83e13f08a0b5fdc9f13d12d8c6d1f0a2fa7f1caad9c
4
+ data.tar.gz: 88cfc253d06f635d54ab72d83e4d3a28829526c3df47e2e1e7cad19fd47c9293
5
5
  SHA512:
6
- metadata.gz: 21c687dafdccd3582369ea7aef360201d274f3cc2043479416a35f03af5efac90b649e7621569d83b0d90a6f72d88dab28be3c86c9c1cf27178c7a69ed99eb05
7
- data.tar.gz: 4b176e6bf2625639647e3b82b8b52294e80bebafd73e2d6a6ba8844d4b41ba581a1882077397653e09944db4ebcccb76acbc6b2e74847d4931bd144e01b8358e
6
+ metadata.gz: 04c30f374634daf21590a07f94e3ea27cf09cd6931570b43a215f8d424983a86519c393faad76f7c809580dc9a02a905de00e6e28c4017d789b7baa6b86c5a3f
7
+ data.tar.gz: 39119777a798add18175e51c5935fb08d8ea85f2cde16d237e87f9175f477d9d3333cf91e4cecf089b39b355db31052a5047a444a420ea778e505631952be623
@@ -257,33 +257,45 @@ elsif command == 'test'
257
257
 
258
258
  printf '%-50s', 'Requiring configuration library... '
259
259
  require 'tcell_agent/configuration'
260
- require 'tcell_agent/api'
261
260
  puts 'passed'
262
261
 
263
- printf '%-50s', 'Make test API call for policies... '
264
- api = TCellAgent::TCellApi.new
265
- if api.poll_api
266
- puts 'passed'
267
- else
262
+ printf '%-50s', 'Loading native library... '
263
+ require 'tcell_agent/rust/native_library'
264
+ unless TCellAgent::Rust::NativeLibrary.common_lib_available?
268
265
  puts 'failed'
269
266
  Kernel.exit(1)
270
267
  end
268
+ puts 'passed'
271
269
 
272
- printf '%-50s', 'Sending a Test event... '
273
- send_succeeded = api.send_event_set([])
274
- unless send_succeeded
270
+ printf '%-50s', 'Make test API call for policies... '
271
+ require 'tcell_agent/rust/native_agent'
272
+ errors = TCellAgent::Rust::NativeAgent.test_policies
273
+ if !errors.empty?
275
274
  puts 'failed'
275
+ puts errors
276
276
  Kernel.exit(1)
277
+ else
278
+ puts 'passed'
277
279
  end
278
- puts 'passed'
279
280
 
280
- printf '%-50s', 'Loading native library... '
281
- require 'tcell_agent/rust/whisperer'
282
- unless TCellAgent::Rust::Wrapper.common_lib_available?
281
+ printf '%-50s', 'Sending a Test event... '
282
+ require 'tcell_agent/logger'
283
+ require 'tcell_agent/sensor_events/server_agent'
284
+ errors = TCellAgent::Rust::NativeAgent.test_event_sender(
285
+ [
286
+ TCellAgent::SensorEvents::ServerAgentDetailsLanguageEvent.new(
287
+ 'Ruby',
288
+ RUBY_VERSION
289
+ )
290
+ ]
291
+ )
292
+ if !errors.empty?
283
293
  puts 'failed'
294
+ puts errors
284
295
  Kernel.exit(1)
296
+ else
297
+ puts 'passed'
285
298
  end
286
- puts 'passed'
287
299
 
288
300
  puts
289
301
  puts 'all tests passed, looks good.'
@@ -1,20 +1,26 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
- require 'tcell_agent/utils/passwords'
4
- require 'tcell_agent/utils/strings'
5
- require 'tcell_agent/utils/io'
6
3
  require 'tcell_agent/logger'
4
+ require 'tcell_agent/utils/strings'
7
5
  require 'tcell_agent/configuration'
8
6
 
9
7
  require 'tcell_agent/agent'
10
8
 
11
- require 'tcell_agent/policies/http_tx_policy'
12
- require 'tcell_agent/policies/http_redirect_policy'
13
- require 'tcell_agent/policies/login_fraud_policy'
14
- require 'tcell_agent/policies/dataloss_policy'
15
-
16
- require 'tcell_agent/sensor_events/dlp'
17
9
  require 'tcell_agent/sensor_events/util/sanitizer_utilities'
18
10
 
19
11
  require 'tcell_agent/instrumentation'
20
- require 'tcell_agent/start_background_thread'
12
+
13
+ require 'tcell_agent/instrument_servers'
14
+
15
+ if !TCellAgent.configuration.disable_all && TCellAgent.configuration.should_instrument?
16
+ require 'tcell_agent/instrumentation/cmdi'
17
+ require 'tcell_agent/instrumentation/lfi'
18
+ require 'tcell_agent/instrumentation/monkey_patches/io'
19
+ require 'tcell_agent/instrumentation/monkey_patches/file'
20
+ require 'tcell_agent/instrumentation/monkey_patches/kernel'
21
+
22
+ require 'tcell_agent/hooks/login_fraud'
23
+ require 'tcell_agent/rails/on_start' if defined?(Rails)
24
+ # sinatra used to be supported, but dropped support due to no customers using it
25
+ # require 'tcell_agent/sinatra' if defined?(Sinatra)
26
+ end
@@ -2,120 +2,44 @@
2
2
 
3
3
  require 'tcell_agent/logger'
4
4
  require 'tcell_agent/version'
5
- require 'tcell_agent/api'
6
5
  require 'tcell_agent/configuration'
7
6
 
8
7
  require 'tcell_agent/sensor_events/server_agent'
9
- require 'tcell_agent/utils/queue_with_timeout'
10
8
 
11
- require 'tcell_agent/agent/event_processor'
12
- require 'tcell_agent/agent/policy_manager'
9
+ require 'tcell_agent/policies/policy_types'
10
+ require 'tcell_agent/policies/policies_manager'
11
+ require 'tcell_agent/policies/policy_polling'
13
12
  require 'tcell_agent/agent/static_agent'
14
- require 'tcell_agent/agent/policy_types'
15
13
  require 'tcell_agent/agent/route_manager'
16
- require 'tcell_agent/agent/fork_pipe_manager'
17
14
 
18
15
  require 'tcell_agent/routes/table'
19
16
 
20
- require 'net/http'
21
- require 'thread'
22
- require 'logger'
17
+ require 'tcell_agent/settings_reporter'
18
+ require 'tcell_agent/rust/native_agent'
19
+
23
20
  require 'json'
24
- require 'monitor'
25
21
 
26
22
  module TCellAgent
27
23
  class Agent
28
- attr_accessor :start_pid
29
- attr_accessor :event_queue
30
-
31
- attr_accessor :fork_event_queue
32
- attr_accessor :fork_event_thread
33
- attr_accessor :fork_event_thread_mutex
34
-
35
- attr_accessor :metrics_event_queue
36
- attr_accessor :metrics_event_thread
37
- attr_accessor :metrics_event_thread_mutex
38
-
39
- attr_accessor :policies
40
- attr_accessor :eventProcessorThread
41
- attr_accessor :response_time_table
42
- attr_accessor :route_table
43
-
44
- attr_accessor :event_processor_thread
45
- attr_accessor :event_processor
46
- attr_accessor :worker_mutex
47
-
48
- attr_accessor :policy_polling_thread
49
- attr_accessor :policy_polling_worker_mutex
50
-
51
- attr_accessor :event_queue_monitor
52
- attr_accessor :event_dispatch_monitor
53
-
54
- attr_accessor :stop_agent
55
- attr_accessor :complete_policy_cache
56
-
57
- def initialize(start_pid = Process.pid)
58
- @start_pid = start_pid
59
- @dispatch_events_timeout = TCellAgent.configuration.event_time_limit_seconds || 55
60
- @dispatch_events_limit = TCellAgent.configuration.event_batch_size_limit || 20
61
- @worker_mutex = Mutex.new
62
- @policy_polling_worker_mutex = Mutex.new
63
- @@policy_tapi = TCellApi.new
64
-
65
- # Agent request thread
66
- @policies = {
67
- TCellAgent::PolicyTypes::RUST => TCellAgent::Policies::RustPolicies.new
68
- }
69
- @lock = Monitor.new
70
-
71
- initialize_processor_variables
72
-
73
- if TCellAgent.configuration.preload_policy_filename
74
- TCellAgent.logger.info('Preloading a policy file')
75
- begin
76
- policy_file = File.open(TCellAgent.configuration.preload_policy_filename).read
77
- policy_jsons = JSON.parse(policy_file)
78
- policy_jsons = policy_jsons['result'] if policy_jsons.key?('result')
79
- process_policy_json(policy_jsons, false)
80
- rescue StandardError => e
81
- TCellAgent.logger.error(e.message)
82
- end
83
- end
84
- cached_policies = policies_from_cachefile
85
- process_policy_json(cached_policies, false) if cached_policies
86
- end
24
+ include TCellAgent::ModuleLoggerAccess
87
25
 
88
- def initialize_processor_variables
89
- @complete_policy_cache = {}
26
+ attr_accessor :route_table,
27
+ :stop_agent,
28
+ :safe_to_check_cmdi
90
29
 
30
+ def initialize
91
31
  @stop_agent = false
32
+ @native_agent = nil
92
33
  @route_table = TCellAgent::Routes::RouteTable.new
93
-
94
- @event_queue_monitor = Monitor.new
95
- @event_dispatch_monitor = Monitor.new
96
- @mutex = Monitor.new
97
-
98
- @response_time_table = {}
99
- @sessions_metrics = TCellAgent::SensorEvents::SessionsMetric.new
100
- @sessions_metrics_mutex = Monitor.new
101
-
102
- @dispatch_events = []
103
- @event_queue = BoundedQueue.new(200)
104
-
105
- @fork_event_queue = Queue.new
106
- @fork_event_thread_mutex = Monitor.new
107
-
108
- @metrics_event_queue = Queue.new
109
- @metrics_event_thread_mutex = Monitor.new
34
+ @safe_to_check_cmdi = false
35
+ @policies_manager = PoliciesManager.new(nil)
110
36
  end
111
37
 
112
- def parent_process?
113
- @start_pid == Process.pid
114
- end
115
-
116
- def start
38
+ def validate_config
117
39
  if TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.api_key) ||
118
- TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.app_id)
40
+ TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.app_id) ||
41
+ TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.tcell_input_url) ||
42
+ TCellAgent::Utils::Strings.blank?(TCellAgent.configuration.tcell_api_url)
119
43
  puts ' ********* ********* ********* *********'
120
44
  puts '* tCell.io *'
121
45
  puts '* Configuration info is missing, you may *'
@@ -123,13 +47,70 @@ module TCellAgent
123
47
  puts '* it in the config/ directory *'
124
48
  puts ' ********* ********* ********* *********'
125
49
  TCellAgent.configuration.enabled = false
50
+ end
51
+ end
52
+
53
+ def start(server_name)
54
+ TCellAgent.thread_agent.validate_config
55
+ return unless TCellAgent.configuration.should_instrument?
56
+
57
+ @native_agent = TCellAgent::Rust::NativeAgent.create_agent(
58
+ TCellAgent.configuration
59
+ )
60
+ if @native_agent.nil?
61
+ TCellAgent.configuration.enabled = false
126
62
  return
127
63
  end
128
64
 
129
- TCellAgent.logger.debug('Starting thread agent')
65
+ TCellAgent.native_agent = @native_agent
66
+ @policies_manager = PoliciesManager.new(@native_agent)
67
+ # if preload_policy_filename is used and policy polling is
68
+ # disabled, need to call poll policies to make sure
69
+ # ruby policies are in sync with native agent enablements
70
+ result = @native_agent.poll_new_policies
71
+ policies_and_enablements = result['new_policies_and_enablements'] || {}
72
+ @policies_manager.process_policy_json(
73
+ policies_and_enablements['enablements'],
74
+ policies_and_enablements['policies']
75
+ )
76
+
77
+ @policy_polling = PolicyPolling.new(@policies_manager, @native_agent)
78
+
79
+ module_logger.info("Starting thread agent: #{server_name}")
80
+
81
+ @safe_to_check_cmdi = true
82
+
83
+ TCellAgent.report_settings
84
+ TCellAgent::Instrumentation::Rails.send_framework_info
85
+ TCellAgent::Instrumentation::Rails.send_settings
86
+ rescue StandardError => standard_error
87
+ TCellAgent.configuration.enabled = false
88
+ module_logger.error("Error starting agent: (#{standard_error.class}) #{standard_error.message}")
89
+ module_logger.exception(standard_error)
90
+ end
91
+
92
+ def policies
93
+ @policies_manager.policies
94
+ end
95
+
96
+ def report_metrics(request_time, tcell_context)
97
+ @native_agent.report_metrics(
98
+ request_time, tcell_context
99
+ )
100
+ rescue StandardError => standard_error
101
+ module_logger.error("Error reporting metric: (#{standard_error.class}) #{standard_error.message}")
102
+ module_logger.exception(standard_error)
103
+ end
104
+
105
+ def queue_sensor_event(event)
106
+ return unless @native_agent
130
107
 
131
- ensure_policy_polling_running
132
- ensure_event_processor_running
108
+ @native_agent.send_sanitized_events(
109
+ [event]
110
+ )
111
+ rescue StandardError => standard_error
112
+ module_logger.error("Error sending event: (#{standard_error.class}) #{standard_error.message}")
113
+ module_logger.exception(standard_error)
133
114
  end
134
115
  end
135
116
  end
@@ -1,13 +1,7 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
- require 'tcell_agent/logger'
4
- require 'tcell_agent/version'
5
- require 'tcell_agent/api'
6
- require 'tcell_agent/configuration'
7
-
8
3
  require 'tcell_agent/routes/table'
9
4
  require 'tcell_agent/sensor_events/discovery'
10
- require 'tcell_agent'
11
5
 
12
6
  module TCellAgent
13
7
  class Agent
@@ -23,16 +17,6 @@ module TCellAgent
23
17
  def discover_database_fields(route_id, database, schema, table, fields)
24
18
  return if route_id.nil? || database.nil? || schema.nil? || table.nil? || fields.nil?
25
19
 
26
- if TCellAgent::Agent.parent_process? == false
27
- TCellAgent.queue_metric('_type' => 'discover_database_fields',
28
- 'route_id' => route_id,
29
- 'database' => database,
30
- 'schema' => schema,
31
- 'table' => table,
32
- 'fields' => fields)
33
- return
34
- end
35
-
36
20
  query_hash = TCellAgent::Agent.get_database_discovery_identifier(database, schema, table, fields)
37
21
 
38
22
  return if @route_table.routes[route_id].database_queries_discovered.fetch(query_hash, false)
@@ -1,24 +1,15 @@
1
- # See the file "LICENSE" for the full license governing this code.
2
- require 'tcell_agent/sensor_events/metrics'
3
- require 'monitor'
4
-
5
1
  module TCellAgent
6
2
  @@instance_lock = Mutex.new
7
3
  @@my_thread_agent = nil
8
4
 
9
5
  def self.thread_agent
10
- if thread_agent_defined? == false
6
+ unless @@my_thread_agent
11
7
  @@instance_lock.synchronize do
12
- if thread_agent_defined? == false
13
- @@my_thread_agent = TCellAgent::Agent.new(Process.pid)
14
- end
8
+ @@my_thread_agent ||= TCellAgent::Agent.new
15
9
  end
16
10
  end
17
- @@my_thread_agent
18
- end
19
11
 
20
- def self.thread_agent_defined?
21
- @@my_thread_agent != nil
12
+ @@my_thread_agent
22
13
  end
23
14
 
24
15
  def self.thread_agent=(some_agent)
@@ -31,35 +22,23 @@ module TCellAgent
31
22
  thread_agent.queue_sensor_event(event)
32
23
  end
33
24
 
34
- def self.queue_metric(event)
35
- thread_agent._queue_metric(event)
25
+ def self.report_metrics(response_time, tcell_context)
26
+ thread_agent.report_metrics(response_time, tcell_context)
36
27
  end
37
28
 
38
29
  def self.policy(policy_type)
39
30
  thread_agent.policies.fetch(policy_type, nil)
40
31
  end
41
32
 
42
- def self.increment_session_info(hmac_session_id, user_id, ip_address, user_agent)
43
- thread_agent.increment_session_info(hmac_session_id, user_id, ip_address, user_agent)
44
- end
45
-
46
- def self.increment_route(route_id, response_time)
47
- thread_agent.increment_route(route_id, response_time)
48
- end
49
-
50
33
  def self.discover_database_fields(route_id, database, schema, table, fields)
51
34
  thread_agent.discover_database_fields(route_id, database, schema, table, fields)
52
35
  end
53
36
 
54
- def self.stop_agent
55
- thread_agent.stop_agent = true
37
+ def self.safe_to_check_cmdi?
38
+ thread_agent && thread_agent.safe_to_check_cmdi
56
39
  end
57
40
 
58
- def self.ensure_event_processor_running
59
- thread_agent.ensure_event_processor_running
60
- end
61
-
62
- def self.safe_to_send_cmdi_events?
63
- thread_agent.safe_to_send_cmdi_events?
41
+ def self.stop_agent
42
+ thread_agent.stop_agent = true
64
43
  end
65
44
  end
@@ -1,11 +1,8 @@
1
- # See the file "LICENSE" for the full license governing this code.
1
+ if TCellAgent.configuration.should_instrument_authlogic? && defined?(Authlogic)
2
2
 
3
- require 'tcell_agent/userinfo'
4
- require 'tcell_agent/logger'
5
- require 'tcell_agent/sensor_events/honeytokens'
3
+ require 'tcell_agent/userinfo'
6
4
 
7
- module TCellAgent
8
- if defined?(Authlogic)
5
+ module TCellAgent
9
6
  TCellAgent::UserInformation.class_eval do
10
7
  class << self
11
8
  alias_method :original_get_user_from_request, :get_user_from_request
@@ -20,11 +20,10 @@ module TCellAgent
20
20
  'TCELL_AGENT_HOME',
21
21
  'TCELL_AGENT_LOG_DIR',
22
22
  'TCELL_AGENT_CONFIG',
23
- 'TCELL_AGENT_ALLOW_UNENCRYPTED_APPSENSOR_PAYLOADS',
24
- 'TCELL_AGENT_ALLOW_UNENCRYPTED_APPFIREWALL_PAYLOADS',
25
23
  'TCELL_AGENT_ALLOW_PAYLOADS',
26
- 'TCELL_AGENT_HOME_OWNER',
27
- 'TCELL_AGENT_ENABLED'
24
+ 'TCELL_AGENT_LOG_LEVEL',
25
+ 'TCELL_AGENT_LOG_FILENAME',
26
+ 'TCELL_AGENT_LOG_ENABLED'
28
27
  ]
29
28
  )
30
29
 
@@ -68,8 +67,6 @@ module TCellAgent
68
67
  js_agent_url
69
68
  max_csp_header_bytes
70
69
  event_batch_size_limit
71
- allow_unencrypted_appsensor_payloads
72
- allow_unencrypted_appfirewall_payloads
73
70
  allow_payloads
74
71
  reverse_proxy
75
72
  reverse_proxy_ip_address_header
@@ -79,13 +76,12 @@ module TCellAgent
79
76
  disable_all
80
77
  enabled
81
78
  enable_event_manager
82
- enable_event_consumer
83
79
  enable_policy_polling
84
80
  enable_instrumentation
85
81
  enable_intercept_requests
86
82
  instrument_for_events
87
- agent_home_owner
88
83
  enabled_instrumentations
84
+ stdout_logger
89
85
  ]
90
86
 
91
87
  key_differences += (application.keys - second_level_keys)