tcell_agent 0.2.29 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/Readme.txt +7 -0
  3. data/bin/tcell_agent +9 -0
  4. data/lib/tcell_agent/agent/policy_manager.rb +3 -0
  5. data/lib/tcell_agent/agent/policy_types.rb +4 -1
  6. data/lib/tcell_agent/appsensor/injections_matcher.rb +20 -0
  7. data/lib/tcell_agent/appsensor/injections_reporter.rb +15 -56
  8. data/lib/tcell_agent/appsensor/meta_data.rb +56 -2
  9. data/lib/tcell_agent/appsensor/rules/baserules.json +371 -138
  10. data/lib/tcell_agent/cmdi.rb +113 -0
  11. data/lib/tcell_agent/config/unknown_options.rb +2 -0
  12. data/lib/tcell_agent/configuration.rb +30 -16
  13. data/lib/tcell_agent/hooks/login_fraud.rb +79 -0
  14. data/lib/tcell_agent/instrumentation.rb +6 -11
  15. data/lib/tcell_agent/patches/meta_data.rb +14 -11
  16. data/lib/tcell_agent/policies/appsensor/injection_sensor.rb +5 -9
  17. data/lib/tcell_agent/policies/appsensor_policy.rb +22 -206
  18. data/lib/tcell_agent/policies/clickjacking_policy.rb +4 -2
  19. data/lib/tcell_agent/policies/command_injection_policy.rb +196 -0
  20. data/lib/tcell_agent/policies/content_security_policy.rb +3 -2
  21. data/lib/tcell_agent/policies/dataloss_policy.rb +3 -1
  22. data/lib/tcell_agent/policies/honeytokens_policy.rb +3 -1
  23. data/lib/tcell_agent/policies/http_redirect_policy.rb +51 -37
  24. data/lib/tcell_agent/policies/http_tx_policy.rb +5 -1
  25. data/lib/tcell_agent/policies/login_fraud_policy.rb +6 -1
  26. data/lib/tcell_agent/policies/patches_policy.rb +3 -1
  27. data/lib/tcell_agent/policies/policy.rb +10 -0
  28. data/lib/tcell_agent/policies/secure_headers_policy.rb +5 -2
  29. data/lib/tcell_agent/rails/auth/devise.rb +12 -23
  30. data/lib/tcell_agent/rails/csrf_exception.rb +1 -1
  31. data/lib/tcell_agent/rails/dlp.rb +50 -54
  32. data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +0 -1
  33. data/lib/tcell_agent/rails/middleware/context_middleware.rb +0 -1
  34. data/lib/tcell_agent/rails/middleware/global_middleware.rb +0 -1
  35. data/lib/tcell_agent/rails/middleware/headers_middleware.rb +7 -10
  36. data/lib/tcell_agent/rails/on_start.rb +0 -1
  37. data/lib/tcell_agent/rails/tcell_body_proxy.rb +4 -4
  38. data/lib/tcell_agent/rails.rb +0 -2
  39. data/lib/tcell_agent/rust/libtcellagent-0.6.1.dylib +0 -0
  40. data/lib/tcell_agent/rust/libtcellagent-0.6.1.so +0 -0
  41. data/lib/tcell_agent/rust/models.rb +61 -0
  42. data/lib/tcell_agent/rust/tcellagent-0.6.1.dll +0 -0
  43. data/lib/tcell_agent/rust/whisperer.rb +112 -0
  44. data/lib/tcell_agent/sensor_events/appsensor_event.rb +25 -21
  45. data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +31 -24
  46. data/lib/tcell_agent/sensor_events/command_injection.rb +58 -0
  47. data/lib/tcell_agent/sensor_events/discovery.rb +1 -1
  48. data/lib/tcell_agent/sensor_events/login_fraud.rb +3 -13
  49. data/lib/tcell_agent/sensor_events/sensor.rb +81 -77
  50. data/lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb +8 -0
  51. data/lib/tcell_agent/start_background_thread.rb +12 -3
  52. data/lib/tcell_agent/utils/io.rb +4 -1
  53. data/lib/tcell_agent/utils/params.rb +1 -0
  54. data/lib/tcell_agent/version.rb +1 -1
  55. data/lib/tcell_agent.rb +0 -1
  56. data/spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb +27 -9
  57. data/spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb +143 -193
  58. data/spec/lib/tcell_agent/appsensor/meta_data_spec.rb +67 -0
  59. data/spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb +0 -10
  60. data/spec/lib/tcell_agent/cmdi_spec.rb +748 -0
  61. data/spec/lib/tcell_agent/config/unknown_options_spec.rb +8 -0
  62. data/spec/lib/tcell_agent/configuration_spec.rb +138 -6
  63. data/spec/lib/tcell_agent/hooks/login_fraud_spec.rb +357 -0
  64. data/spec/lib/tcell_agent/patches/block_rule_spec.rb +70 -87
  65. data/spec/lib/tcell_agent/patches_spec.rb +9 -4
  66. data/spec/lib/tcell_agent/policies/appsensor/xss_sensor_spec.rb +186 -9
  67. data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +309 -484
  68. data/spec/lib/tcell_agent/policies/command_injection_policy_spec.rb +736 -0
  69. data/spec/lib/tcell_agent/policies/http_redirect_policy_spec.rb +222 -41
  70. data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +56 -32
  71. data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +161 -85
  72. data/spec/lib/tcell_agent/rails/middleware/tcell_body_proxy_spec.rb +40 -72
  73. data/spec/lib/tcell_agent/rust/whisperer_spec.rb +267 -0
  74. data/spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb +20 -15
  75. data/spec/spec_helper.rb +0 -9
  76. data/tcell_agent.gemspec +8 -3
  77. metadata +40 -39
  78. data/lib/tcell_agent/appsensor/sensor.rb +0 -52
  79. data/lib/tcell_agent/policies/appsensor/database_sensor.rb +0 -56
  80. data/lib/tcell_agent/policies/appsensor/misc_sensor.rb +0 -59
  81. data/lib/tcell_agent/policies/appsensor/payloads_policy.rb +0 -150
  82. data/lib/tcell_agent/policies/appsensor/request_size_sensor.rb +0 -25
  83. data/lib/tcell_agent/policies/appsensor/response_codes_sensor.rb +0 -73
  84. data/lib/tcell_agent/policies/appsensor/response_size_sensor.rb +0 -25
  85. data/lib/tcell_agent/policies/appsensor/size_sensor.rb +0 -71
  86. data/lib/tcell_agent/policies/appsensor/user_agent_sensor.rb +0 -47
  87. data/lib/tcell_agent/rails/auth/hooks.rb +0 -79
  88. data/lib/tcell_agent/sensor_events/util/redirect_utils.rb +0 -22
  89. data/spec/lib/tcell_agent/policies/appsensor/database_sensor_spec.rb +0 -165
  90. data/spec/lib/tcell_agent/policies/appsensor/misc_sensor_spec.rb +0 -429
  91. data/spec/lib/tcell_agent/policies/appsensor/payloads_policy_apply_spec.rb +0 -466
  92. data/spec/lib/tcell_agent/policies/appsensor/payloads_policy_from_json_spec.rb +0 -890
  93. data/spec/lib/tcell_agent/policies/appsensor/payloads_policy_log_spec.rb +0 -417
  94. data/spec/lib/tcell_agent/policies/appsensor/request_size_sensor_spec.rb +0 -236
  95. data/spec/lib/tcell_agent/policies/appsensor/response_codes_sensor_spec.rb +0 -297
  96. data/spec/lib/tcell_agent/policies/appsensor/response_size_sensor_spec.rb +0 -241
  97. data/spec/lib/tcell_agent/policies/appsensor/user_agent_sensor_spec.rb +0 -172
  98. data/spec/lib/tcell_agent/rails/auth/hooks_spec.rb +0 -246
  99. data/spec/lib/tcell_agent/sensor_events/util/redirect_utils_spec.rb +0 -25
  100. data/spec/support/resources/baserules.json +0 -155
@@ -21,30 +21,37 @@ module TCellAgent
21
21
 
22
22
  class << self
23
23
  def build(request, response_content_length, response_code, response_headers)
24
- meta_event = AppSensorMetaEvent.new
24
+ tcell_context = request.env[TCellAgent::Instrumentation::TCELL_ID]
25
+ meta_event = AppSensorMetaEvent.new(
26
+ request.request_method,
27
+ TCellAgent::Utils::Rails.better_ip(request),
28
+ tcell_context.route_id,
29
+ tcell_context.hmac_session_id,
30
+ tcell_context.user_id,
31
+ tcell_context.transaction_id
32
+ )
25
33
 
26
- meta_event.remote_address = TCellAgent::Utils::Rails.better_ip(request)
27
- meta_event.method = request.request_method
28
- meta_event.location = "#{request.base_url}#{request.fullpath}"
29
- meta_event.request_headers = request.env
34
+ meta_event.csrf_exception_name = tcell_context.csrf_exception_name
30
35
  meta_event.user_agent = request.env['HTTP_USER_AGENT']
31
36
  meta_event.request_content_bytes_len = (request.content_length || 0).to_i
32
37
  meta_event.response_content_bytes_len = response_content_length
33
38
 
39
+ meta_event.location = "#{request.base_url}#{request.fullpath}"
40
+ meta_event.path = request.path
41
+
34
42
  meta_event.get_dict = request.GET
35
43
  meta_event.cookie_dict = request.cookies
44
+ meta_event.set_headers_dict(request.env)
36
45
 
37
46
  # don't enqueue parameter values of unknown type to avoid any serialization issues
38
47
  meta_event.post_dict = TCellAgent::Utils::Params.flatten(request.POST)
39
48
 
49
+ meta_event.path_parameters = request.env[TCellAgent::Instrumentation::TCELL_ID].path_parameters
40
50
  meta_event.response_code = response_code
41
51
  meta_event.response_headers = response_headers
42
52
 
43
- meta_event.path_parameters = request.env[TCellAgent::Instrumentation::TCELL_ID].path_parameters
44
- meta_event.route_id = request.env[TCellAgent::Instrumentation::TCELL_ID].route_id
45
- meta_event.transaction_id = request.env[TCellAgent::Instrumentation::TCELL_ID].transaction_id
46
- meta_event.session_id = request.env[TCellAgent::Instrumentation::TCELL_ID].hmac_session_id
47
- meta_event.user_id = request.env[TCellAgent::Instrumentation::TCELL_ID].user_id
53
+ meta_event.sql_exceptions = tcell_context.sql_exceptions
54
+ meta_event.database_result_sizes = tcell_context.database_result_sizes
48
55
 
49
56
  # Positions strio to the beginning of input, resetting lineno to zero.
50
57
  # rails 4.1 seems to read the stringIO directly and so body.gets is empty
@@ -61,28 +68,28 @@ module TCellAgent
61
68
  end
62
69
 
63
70
  def build_basic(appsensor_meta)
64
- meta_event = AppSensorMetaEvent.new
71
+ meta_event = AppSensorMetaEvent.new(
72
+ appsensor_meta.method,
73
+ appsensor_meta.remote_address,
74
+ appsensor_meta.route_id,
75
+ appsensor_meta.session_id,
76
+ appsensor_meta.user_id,
77
+ appsensor_meta.transaction_id
78
+ )
79
+
65
80
  meta_event.location = appsensor_meta.location
66
- meta_event.method =appsensor_meta.method
67
- meta_event.remote_address = appsensor_meta.remote_address
68
- meta_event.route_id = appsensor_meta.route_id
69
- meta_event.session_id = appsensor_meta.session_id
70
- meta_event.user_id = appsensor_meta.user_id
71
- meta_event.route_id = appsensor_meta.route_id
72
81
 
73
82
  meta_event
74
83
  end
75
84
  end
76
85
 
77
86
 
78
- attr_accessor :remote_address, :method, :location, :route_id, :session_id, :user_id, :transaction_id,
79
- :request_content_bytes_len, :get_dict, :post_dict, :body_dict, :cookie_dict, :response_content_bytes_len, :response_code,
80
- :user_agent, :path_parameters
81
-
82
- attr_accessor :request_headers, :response_headers
87
+ attr_accessor :location, :request_content_bytes_len, :response_content_bytes_len,
88
+ :response_code, :user_agent, :response_headers, :csrf_exception_name, :path,
89
+ :sql_exceptions, :database_result_sizes
83
90
 
84
- def initialize
85
- super
91
+ def initialize(method, remote_address, route_id, session_id, user_id, transaction_id)
92
+ super(method, remote_address, route_id, session_id, user_id, transaction_id)
86
93
 
87
94
  @request_content_bytes_len = 0
88
95
  @response_content_bytes_len = 0
@@ -0,0 +1,58 @@
1
+ require 'tcell_agent/sensor_events/sensor'
2
+
3
+ module TCellAgent
4
+ module SensorEvents
5
+
6
+ class CommandInjectionMatchEvent < Hash
7
+ def initialize(rule_id, command)
8
+ self["rule_id"] = rule_id
9
+ if command
10
+ self["command"] = command
11
+ end
12
+ end
13
+ end
14
+
15
+ class CommandInjectionEvent < TCellSensorEvent
16
+ def initialize(commands,
17
+ blocked,
18
+ matches,
19
+ method=nil,
20
+ remote_address=nil,
21
+ route_id=nil,
22
+ session_id=nil,
23
+ user_id=nil,
24
+ full_commandline=nil)
25
+ super("cmdi")
26
+
27
+ self["commands"] = commands
28
+ self["blocked"] = blocked
29
+ self["matches"] = matches
30
+
31
+ if method
32
+ self["method"] = method
33
+ end
34
+
35
+ if remote_address
36
+ self["remote_address"] = remote_address
37
+ end
38
+
39
+ if route_id
40
+ self["route_id"] = route_id
41
+ end
42
+
43
+ if session_id
44
+ self["session_id"] = session_id
45
+ end
46
+
47
+ if user_id
48
+ self["user_id"] = user_id
49
+ end
50
+
51
+ if full_commandline
52
+ self["full_commandline"] = full_commandline
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -1,4 +1,4 @@
1
- require 'tcell_agent/sensor_events/sensor'
1
+ require 'tcell_agent/sensor_events/sensor'
2
2
 
3
3
  module TCellAgent
4
4
  module SensorEvents
@@ -2,7 +2,6 @@
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'
6
5
 
7
6
  module TCellAgent
8
7
  module SensorEvents
@@ -14,26 +13,17 @@ module TCellAgent
14
13
  self["header_keys"] = header_keys
15
14
 
16
15
  self["user_agent"] = tcell_data.user_agent.to_s if tcell_data.user_agent
17
- self["referrer"] = tcell_data.referrer.to_s if tcell_data.referrer
16
+ self["referrer"] = TCellAgent::SensorEvents::Util.strip_uri_values(tcell_data.referrer) if tcell_data.referrer
18
17
  self["remote_addr"] = tcell_data.ip_address.to_s if tcell_data.ip_address
19
18
  self["user_id"] = user_id.to_s if user_id
20
19
  self["document_uri"] = TCellAgent::SensorEvents::Util.strip_uri_values(tcell_data.path) if tcell_data.path
21
20
  self["session"] = tcell_data.hmac_session_id if tcell_data.hmac_session_id
22
21
  end
23
-
24
- protected
25
- def clean_header_keys(request_env_or_header_keys)
26
- if request_env_or_header_keys.is_a?(Hash)
27
- request_env_or_header_keys.select {|k,v| k.start_with? 'HTTP_'}.collect {|k,v| k.sub(/^HTTP_/, '') }
28
- else
29
- request_env_or_header_keys.map { |k| k.sub(/^HTTP_/, '') }
30
- end
31
- end
32
22
  end
33
23
 
34
24
  class LoginFailure < LoginEvent
35
25
  def initialize(request_env_or_header_keys, tcell_data, user_id, user_valid=nil)
36
- header_keys = clean_header_keys(request_env_or_header_keys)
26
+ header_keys = Util.clean_header_keys(request_env_or_header_keys)
37
27
 
38
28
  super(header_keys, tcell_data, user_id, user_valid)
39
29
 
@@ -43,7 +33,7 @@ module TCellAgent
43
33
 
44
34
  class LoginSuccess < LoginEvent
45
35
  def initialize(request_env_or_header_keys, tcell_data, user_id, user_valid=nil)
46
- header_keys = clean_header_keys(request_env_or_header_keys)
36
+ header_keys = Util.clean_header_keys(request_env_or_header_keys)
47
37
 
48
38
  super(header_keys, tcell_data, user_id, user_valid)
49
39
 
@@ -5,86 +5,90 @@ require 'tcell_agent/logger'
5
5
  require 'uri'
6
6
 
7
7
  module TCellAgent
8
- module SensorEvents
9
- class TCellSensorEvent < Hash
10
- attr_accessor :send
11
- attr_accessor :flush
12
- attr_accessor :ensure
13
- def initialize(event_type)
14
- @send = true
15
- @flush = false
16
- @ensure = false
17
- @timestamp = DateTime.now.to_time.to_i
18
- self["event_type"] = event_type
19
- end
20
- def calculateOffset(from_timestamp)
21
- self["offset"] = from_timestamp - @timestamp
22
- end
23
- def post_process
24
- # This is called in the background thread, so any
25
- # santization, analysis, etc doesn't get in the way
26
- end
27
- def bucket_key
28
- return nil
29
- end
30
- end
31
- class TCellHttpTxSensorEvent < TCellSensorEvent
32
- def initialize(request, response)
33
- super("http_tx")
34
- @raw_request = request
35
- @raw_response = response
36
- end
37
- def post_process
38
- if defined?@raw_request
39
- self["request"] = Util.request_sanitized_json(@raw_request)
40
- end
41
- if defined?@raw_response
42
- self["response"] = Util.response_sanitized_json(@raw_response)
43
- end
44
- end
8
+ module SensorEvents
9
+
10
+ class TCellSensorEvent < Hash
11
+ attr_accessor :send, :flush, :ensure
12
+
13
+ def initialize(event_type)
14
+ @send = true
15
+ @flush = false
16
+ @ensure = false
17
+ @timestamp = DateTime.now.to_time.to_i
18
+ self["event_type"] = event_type
19
+ end
20
+
21
+ def calculateOffset(from_timestamp)
22
+ self["offset"] = from_timestamp - @timestamp
23
+ end
24
+
25
+ def post_process
26
+ # This is called in the background thread, so any
27
+ # santization, analysis, etc doesn't get in the way
28
+ end
29
+
30
+ def bucket_key
31
+ return nil
32
+ end
33
+ end
34
+
35
+ class TCellHttpTxSensorEvent < TCellSensorEvent
36
+ def initialize(request, response)
37
+ super("http_tx")
38
+ @raw_request = request
39
+ @raw_response = response
40
+ end
41
+ def post_process
42
+ if defined?@raw_request
43
+ self["request"] = Util.request_sanitized_json(@raw_request)
45
44
  end
46
- class TCellRedirectSensorEvent < TCellSensorEvent
47
- def initialize(redirect_domain, original_domain, original_url, method, route_id, status_code, remote_addr, hmac_session_id=nil, user_id=nil)
48
- super("redirect")
49
- @raw_original_url = original_url
50
- self["method"] = method
51
- self["from_domain"] = original_domain
52
- self["status_code"] = status_code
53
- self["remote_addr"] = remote_addr
54
- if route_id
55
- self["rid"] = route_id
56
- end
57
- @raw_redirect_domain = redirect_domain
58
- @user_id = user_id
59
- @hmac_session_id = hmac_session_id
60
- end
61
- def post_process
62
- self["from"] = Util.strip_uri_values(@raw_original_url)
63
- self["to"] = @raw_redirect_domain
64
- if @hmac_session_id
65
- self["sid"] = @hmac_session_id
66
- end
67
- end
45
+ if defined?@raw_response
46
+ self["response"] = Util.response_sanitized_json(@raw_response)
68
47
  end
48
+ end
49
+ end
69
50
 
70
- class TCellFingerprintSensorEvent < TCellSensorEvent
71
- def initialize(request, hmac_session_id, user_id=nil)
72
- super("fingerprint")
73
- @raw_request = request
74
- @hmac_session_id = hmac_session_id
75
- @user_id = user_id
76
- end
77
- def post_process
78
- if !(@raw_request.headers.key?("HTTP_USER_AGENT"))
79
- raise "User Agent not Found!"
80
- end
81
- self["ua"] = @raw_request.headers["HTTP_USER_AGENT"]
82
- self["ip"] = @raw_request.remote_ip
83
- self["sid"] = @hmac_session_id
84
- if @user_id
85
- self["uid"] = @user_id
86
- end
87
- end
51
+ class TCellRedirectSensorEvent < TCellSensorEvent
52
+ def initialize(redirect_domain,
53
+ original_domain,
54
+ original_url,
55
+ method,
56
+ route_id,
57
+ status_code,
58
+ remote_addr,
59
+ hmac_session_id=nil,
60
+ user_id=nil)
61
+ super("redirect")
62
+ self["method"] = method
63
+ self["from_domain"] = original_domain
64
+ self["status_code"] = status_code
65
+ self["remote_addr"] = remote_addr
66
+ self["to"] = redirect_domain
67
+ self["uid"] = user_id.to_s if user_id
68
+ self["from"] = Util.strip_uri_values(original_url)
69
+ self["rid"] = route_id if route_id
70
+ self["sid"] = hmac_session_id if hmac_session_id
71
+ end
72
+ end
73
+
74
+ class TCellFingerprintSensorEvent < TCellSensorEvent
75
+ def initialize(request, hmac_session_id, user_id=nil)
76
+ super("fingerprint")
77
+ @raw_request = request
78
+ @hmac_session_id = hmac_session_id
79
+ @user_id = user_id
80
+ end
81
+ def post_process
82
+ if !(@raw_request.headers.key?("HTTP_USER_AGENT"))
83
+ raise "User Agent not Found!"
84
+ end
85
+ self["ua"] = @raw_request.headers["HTTP_USER_AGENT"]
86
+ self["ip"] = @raw_request.remote_ip
87
+ self["sid"] = @hmac_session_id
88
+ if @user_id
89
+ self["uid"] = @user_id
88
90
  end
91
+ end
89
92
  end
93
+ end
90
94
  end
@@ -157,6 +157,14 @@ module TCellAgent
157
157
  end
158
158
  return "tcell_hmac_key"
159
159
  end
160
+
161
+ def self.clean_header_keys(request_env_or_header_keys)
162
+ if request_env_or_header_keys.is_a?(Hash)
163
+ request_env_or_header_keys.select {|k,v| k.start_with? 'HTTP_'}.collect {|k,v| k.sub(/^HTTP_/, '') }
164
+ else
165
+ request_env_or_header_keys.map { |k| k.sub(/^HTTP_/, '') }
166
+ end
167
+ end
160
168
  end
161
169
  end
162
170
  end
@@ -8,9 +8,11 @@ if (TCellAgent.configuration.disable_all == false)
8
8
  module TCellAgent
9
9
  #require 'tcell_agent/sinatra' if defined?(Sinatra)
10
10
  require 'tcell_agent/rails' if defined?(Rails)
11
+ require 'tcell_agent/cmdi'
11
12
 
12
13
  def self.run_instrumentation(server_name, send_startup_events=true)
13
14
 
15
+ require 'tcell_agent/hooks/login_fraud'
14
16
  require 'tcell_agent/rails/on_start' if defined?(Rails)
15
17
 
16
18
  TCellAgent::Instrumentation.safe_block("Starting thread agent") do
@@ -19,7 +21,6 @@ if (TCellAgent.configuration.disable_all == false)
19
21
  end
20
22
 
21
23
  if send_startup_events && TCellAgent.configuration.should_instrument?
22
- Thread.abort_on_exception = TCellAgent.configuration.raise_exceptions
23
24
  Thread.new do
24
25
 
25
26
  TCellAgent::Instrumentation.safe_block("Instrumenting Agent Details") do
@@ -33,10 +34,18 @@ if (TCellAgent.configuration.disable_all == false)
33
34
  end
34
35
 
35
36
  TCellAgent::Instrumentation.safe_block("Instrumenting Initial Config") do
37
+ require 'tcell_agent/rust/whisperer'
38
+
39
+ TCellAgent.send_event(
40
+ TCellAgent::SensorEvents::TCellAgentSettingEvent.new(
41
+ "native_lib_loaded",
42
+ TCellAgent::Rust::Wrapper.common_lib_available?.to_s)
43
+ )
44
+
36
45
  TCellAgent.send_event(
37
46
  TCellAgent::SensorEvents::TCellAgentSettingEvent.new(
38
- "allow_unencrypted_appfirewall_payloads",
39
- (!!TCellAgent.configuration.allow_unencrypted_appfirewall_payloads).to_s)
47
+ "allow_payloads",
48
+ (!!TCellAgent.configuration.allow_payloads).to_s)
40
49
  )
41
50
 
42
51
  TCellAgent.send_event(
@@ -1,4 +1,7 @@
1
- require 'pathname'
1
+ require "pathname"
2
+ require "tcell_agent/instrumentation"
3
+ require "tcell_agent/utils/strings"
4
+
2
5
 
3
6
  module TCellAgent
4
7
  module Utils
@@ -6,6 +6,7 @@ module TCellAgent
6
6
  JSON_PARAM = "json"
7
7
  URI_PARAM = "uri"
8
8
  COOKIE_PARAM = "cookies"
9
+ HEADER_PARAM = "header"
9
10
 
10
11
  def self.flatten(param_dict, namespace=nil)
11
12
  flattened = {}
@@ -1,5 +1,5 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
3
  module TCellAgent
4
- VERSION = "0.2.29"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/tcell_agent.rb CHANGED
@@ -22,7 +22,6 @@ require 'tcell_agent/policies/dataloss_policy'
22
22
 
23
23
  require 'tcell_agent/sensor_events/dlp'
24
24
  require 'tcell_agent/sensor_events/util/sanitizer_utilities'
25
- require 'tcell_agent/sensor_events/util/redirect_utils'
26
25
 
27
26
  require 'tcell_agent/instrumentation'
28
27
  require 'tcell_agent/start_background_thread'
@@ -363,14 +363,22 @@ module TCellAgent
363
363
  end
364
364
 
365
365
  describe "#check_param_for_injections" do
366
+ before(:each) do
367
+ @meta_data = TCellAgent::AppSensor::MetaData.new(
368
+ "get",
369
+ "remote_address",
370
+ "route_id",
371
+ "session_id",
372
+ "user_id",
373
+ "transaction_id")
374
+ end
375
+
366
376
  context "with no sensors" do
367
377
  it "should not find any injections" do
368
378
  injection_matcher = InjectionsMatcher.new([])
369
379
 
370
- meta_data = TCellAgent::AppSensor::MetaData.new
371
-
372
380
  result = injection_matcher.check_param_for_injections(
373
- InjectionsMatcher::URI_PARAM, meta_data, "dirty", "<script></script>"
381
+ InjectionsMatcher::URI_PARAM, @meta_data, "dirty", "<script></script>"
374
382
  )
375
383
 
376
384
  expect(result).to eq(nil)
@@ -383,17 +391,15 @@ module TCellAgent
383
391
 
384
392
  injection_matcher = InjectionsMatcher.new([fake_sensor])
385
393
 
386
- meta_data = TCellAgent::AppSensor::MetaData.new
387
-
388
394
  expect(fake_sensor).to receive(:applicable_for_param_type?).with(
389
395
  InjectionsMatcher::URI_PARAM
390
396
  ).and_return(true)
391
397
  expect(fake_sensor).to receive(:get_injection_attempt).with(
392
- InjectionsMatcher::URI_PARAM, meta_data, "dirty", "<script></script>"
398
+ InjectionsMatcher::URI_PARAM, @meta_data, "dirty", "<script></script>"
393
399
  ).and_return({"injection" => true})
394
400
 
395
401
  result = injection_matcher.check_param_for_injections(
396
- InjectionsMatcher::URI_PARAM, meta_data, "dirty", "<script></script>"
402
+ InjectionsMatcher::URI_PARAM, @meta_data, "dirty", "<script></script>"
397
403
  )
398
404
 
399
405
  expect(result).to eq({"injection" => true})
@@ -405,7 +411,13 @@ module TCellAgent
405
411
  context "with appsensor meta data" do
406
412
  context "with one param of each type" do
407
413
  it "should call check_param_for_injections once for each param" do
408
- meta_data = TCellAgent::SensorEvents::AppSensorMetaEvent.new
414
+ meta_data = TCellAgent::SensorEvents::AppSensorMetaEvent.new(
415
+ "get",
416
+ "remote_address",
417
+ "route_id",
418
+ "session_id",
419
+ "user_id",
420
+ "transaction_id")
409
421
  meta_data.get_dict = {"get_param" => "get_value"}
410
422
  # post dict for appsensor meta data gets flatten before being enqueued
411
423
  meta_data.post_dict = TCellAgent::Utils::Params.flatten({"post_param" => "post_value"})
@@ -453,7 +465,13 @@ module TCellAgent
453
465
  context "with patches meta data" do
454
466
  context "with one param of each type" do
455
467
  it "should call check_param_for_injections once for each param" do
456
- meta_data = TCellAgent::Patches::MetaData.new
468
+ meta_data = TCellAgent::Patches::MetaData.new(
469
+ "get",
470
+ "remote_address",
471
+ "route_id",
472
+ "session_id",
473
+ "user_id",
474
+ "transaction_id")
457
475
  meta_data.get_dict = {"get_param" => "get_value"}
458
476
  meta_data.post_dict = {"post_param" => "post_value"}
459
477
  meta_data.body_dict = TCellAgent::Utils::Params.flatten({"body_param" => "body_value"})