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.
- checksums.yaml +5 -5
- data/bin/tcell_agent +26 -14
- data/lib/tcell_agent.rb +16 -10
- data/lib/tcell_agent/agent.rb +78 -97
- data/lib/tcell_agent/agent/route_manager.rb +0 -16
- data/lib/tcell_agent/agent/static_agent.rb +9 -30
- data/lib/tcell_agent/authlogic.rb +3 -6
- data/lib/tcell_agent/config/unknown_options.rb +4 -8
- data/lib/tcell_agent/configuration.rb +38 -119
- data/lib/tcell_agent/devise.rb +25 -27
- data/lib/tcell_agent/hooks/login_fraud.rb +30 -33
- data/lib/tcell_agent/instrument_servers.rb +25 -0
- data/lib/tcell_agent/instrumentation.rb +12 -10
- data/lib/tcell_agent/instrumentation/cmdi.rb +19 -15
- data/lib/tcell_agent/instrumentation/lfi.rb +73 -0
- data/lib/tcell_agent/instrumentation/monkey_patches/file.rb +25 -0
- data/lib/tcell_agent/instrumentation/monkey_patches/io.rb +123 -0
- data/lib/tcell_agent/instrumentation/monkey_patches/kernel.rb +159 -0
- data/lib/tcell_agent/logger.rb +50 -114
- data/lib/tcell_agent/patches.rb +6 -7
- data/lib/tcell_agent/policies/appfirewall_policy.rb +26 -0
- data/lib/tcell_agent/policies/command_injection_policy.rb +28 -0
- data/lib/tcell_agent/policies/dataloss_policy.rb +44 -44
- data/lib/tcell_agent/policies/headers_policy.rb +25 -0
- data/lib/tcell_agent/policies/http_redirect_policy.rb +13 -79
- data/lib/tcell_agent/policies/js_agent_policy.rb +27 -0
- data/lib/tcell_agent/policies/local_file_access.rb +28 -0
- data/lib/tcell_agent/policies/login_policy.rb +43 -0
- data/lib/tcell_agent/policies/patches_policy.rb +27 -0
- data/lib/tcell_agent/policies/policies_manager.rb +68 -0
- data/lib/tcell_agent/policies/policy_polling.rb +58 -0
- data/lib/tcell_agent/policies/policy_types.rb +14 -0
- data/lib/tcell_agent/policies/system_enablements.rb +27 -0
- data/lib/tcell_agent/rails/auth/authlogic.rb +43 -68
- data/lib/tcell_agent/rails/auth/devise.rb +20 -23
- data/lib/tcell_agent/rails/auth/doorkeeper.rb +63 -74
- data/lib/tcell_agent/rails/csrf_exception.rb +2 -2
- data/lib/tcell_agent/rails/dlp.rb +25 -15
- data/lib/tcell_agent/rails/dlp_handler.rb +1 -2
- data/lib/tcell_agent/rails/js_agent_insert.rb +12 -13
- data/lib/tcell_agent/rails/middleware/body_filter_middleware.rb +4 -25
- data/lib/tcell_agent/rails/middleware/context_middleware.rb +2 -12
- data/lib/tcell_agent/rails/middleware/global_middleware.rb +0 -1
- data/lib/tcell_agent/rails/middleware/headers_middleware.rb +14 -34
- data/lib/tcell_agent/rails/on_start.rb +32 -31
- data/lib/tcell_agent/rails/routes.rb +7 -6
- data/lib/tcell_agent/rails/routes/grape.rb +1 -3
- data/lib/tcell_agent/rails/routes/route_id.rb +3 -1
- data/lib/tcell_agent/rails/settings_reporter.rb +23 -36
- data/lib/tcell_agent/rails/start_agent_after_initializers.rb +12 -0
- data/lib/tcell_agent/rails/tcell_body_proxy.rb +6 -4
- data/lib/tcell_agent/rust/agent_config.rb +49 -0
- data/lib/tcell_agent/rust/{libtcellagent-alpine-1.3.2.so → libtcellagent-4.14.0.dylib} +0 -0
- data/lib/tcell_agent/rust/libtcellagent-4.14.0.so +0 -0
- data/lib/tcell_agent/rust/{libtcellagent-1.3.2.so → libtcellagent-alpine-4.14.0.so} +0 -0
- data/lib/tcell_agent/rust/models.rb +0 -55
- data/lib/tcell_agent/rust/native_agent.rb +531 -0
- data/lib/tcell_agent/rust/native_agent_response.rb +42 -0
- data/lib/tcell_agent/rust/native_library.rb +68 -0
- data/lib/tcell_agent/rust/tcellagent-4.14.0.dll +0 -0
- data/lib/tcell_agent/sensor_events/agent_setting_event.rb +12 -0
- data/lib/tcell_agent/sensor_events/{app_config.rb → app_config_setting_event.rb} +0 -6
- data/lib/tcell_agent/sensor_events/dlp.rb +2 -6
- data/lib/tcell_agent/sensor_events/sensor.rb +0 -62
- data/lib/tcell_agent/sensor_events/server_agent.rb +13 -18
- data/lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb +0 -108
- data/lib/tcell_agent/sensor_events/util/utils.rb +0 -2
- data/lib/tcell_agent/servers/passenger.rb +1 -28
- data/lib/tcell_agent/servers/puma.rb +3 -21
- data/lib/tcell_agent/servers/rails_server.rb +1 -1
- data/lib/tcell_agent/servers/thin.rb +2 -2
- data/lib/tcell_agent/servers/unicorn.rb +19 -80
- data/lib/tcell_agent/servers/webrick.rb +1 -1
- data/lib/tcell_agent/settings_reporter.rb +24 -24
- data/lib/tcell_agent/sinatra.rb +14 -16
- data/lib/tcell_agent/tcell_context.rb +40 -14
- data/lib/tcell_agent/utils/headers.rb +14 -0
- data/lib/tcell_agent/version.rb +1 -1
- data/spec/lib/tcell_agent/cmdi_spec.rb +0 -585
- data/spec/lib/tcell_agent/config/unknown_options_spec.rb +0 -18
- data/spec/lib/tcell_agent/configuration_spec.rb +4 -140
- data/spec/lib/tcell_agent/hooks/login_fraud_spec.rb +46 -173
- data/spec/lib/tcell_agent/instrumentation/cmdi/io_cmdi_spec.rb +504 -0
- data/spec/lib/tcell_agent/instrumentation/cmdi/kernel_cmdi_spec.rb +435 -0
- data/spec/lib/tcell_agent/instrumentation/lfi/file_lfi_spec.rb +326 -0
- data/spec/lib/tcell_agent/instrumentation/lfi/io_lfi_spec.rb +556 -0
- data/spec/lib/tcell_agent/instrumentation/lfi/kernel_lfi_spec.rb +249 -0
- data/spec/lib/tcell_agent/instrumentation/lfi_spec.rb +105 -0
- data/spec/lib/tcell_agent/patches_spec.rb +25 -43
- data/spec/lib/tcell_agent/policies/appfirewall_policy_spec.rb +183 -0
- data/spec/lib/tcell_agent/policies/clickjacking_policy_spec.rb +57 -0
- data/spec/lib/tcell_agent/policies/command_injection_policy_spec.rb +84 -773
- data/spec/lib/tcell_agent/policies/content_security_policy_spec.rb +161 -0
- data/spec/lib/tcell_agent/policies/dataloss_policy_spec.rb +9 -9
- data/spec/lib/tcell_agent/policies/http_redirect_policy_spec.rb +243 -198
- data/spec/lib/tcell_agent/policies/js_agent_policy_spec.rb +75 -0
- data/spec/lib/tcell_agent/policies/login_policy_spec.rb +165 -33
- data/spec/lib/tcell_agent/policies/patches_policy_spec.rb +84 -277
- data/spec/lib/tcell_agent/policies/policies_manager_spec.rb +104 -0
- data/spec/lib/tcell_agent/policies/policy_polling_spec.rb +6 -0
- data/spec/lib/tcell_agent/policies/secure_headers_policy_spec.rb +56 -0
- data/spec/lib/tcell_agent/rails/csrf_exception_spec.rb +9 -18
- data/spec/lib/tcell_agent/rails/js_agent_insert_spec.rb +13 -30
- data/spec/lib/tcell_agent/rails/logger_spec.rb +27 -7
- data/spec/lib/tcell_agent/rails/middleware/tcell_body_proxy_spec.rb +17 -12
- data/spec/lib/tcell_agent/rails/routes/routes_spec.rb +14 -14
- data/spec/lib/tcell_agent/sensor_events/util/sanitizer_utilities_spec.rb +0 -35
- data/spec/lib/tcell_agent/settings_reporter_spec.rb +127 -153
- data/spec/spec_helper.rb +1 -1
- data/spec/support/builders.rb +104 -0
- data/spec/support/force_logger_mocking.rb +38 -0
- data/spec/support/resources/lfi_sample_file.txt +2 -0
- data/spec/support/static_agent_overrides.rb +0 -15
- metadata +63 -74
- data/lib/tcell_agent/agent/event_processor.rb +0 -326
- data/lib/tcell_agent/agent/fork_pipe_manager.rb +0 -113
- data/lib/tcell_agent/agent/policy_manager.rb +0 -219
- data/lib/tcell_agent/agent/policy_types.rb +0 -30
- data/lib/tcell_agent/api.rb +0 -91
- data/lib/tcell_agent/appsensor/injections_reporter.rb +0 -24
- data/lib/tcell_agent/config/child_process_events.rb +0 -8
- data/lib/tcell_agent/instrumentation/cmdi/backtick.rb +0 -10
- data/lib/tcell_agent/instrumentation/cmdi/exec.rb +0 -14
- data/lib/tcell_agent/instrumentation/cmdi/popen.rb +0 -28
- data/lib/tcell_agent/instrumentation/cmdi/spawn.rb +0 -11
- data/lib/tcell_agent/instrumentation/cmdi/system.rb +0 -11
- data/lib/tcell_agent/policies/http_tx_policy.rb +0 -60
- data/lib/tcell_agent/policies/login_fraud_policy.rb +0 -45
- data/lib/tcell_agent/policies/rust_policies.rb +0 -110
- data/lib/tcell_agent/rails.rb +0 -40
- data/lib/tcell_agent/rust/libtcellagent-1.3.2.dylib +0 -0
- data/lib/tcell_agent/rust/tcellagent-1.3.2.dll +0 -0
- data/lib/tcell_agent/rust/whisperer.rb +0 -308
- data/lib/tcell_agent/sensor_events/appsensor_event.rb +0 -52
- data/lib/tcell_agent/sensor_events/appsensor_meta_event.rb +0 -45
- data/lib/tcell_agent/sensor_events/command_injection.rb +0 -75
- data/lib/tcell_agent/sensor_events/honeytokens.rb +0 -16
- data/lib/tcell_agent/sensor_events/login_fraud.rb +0 -60
- data/lib/tcell_agent/sensor_events/metrics.rb +0 -123
- data/lib/tcell_agent/sensor_events/patches.rb +0 -21
- data/lib/tcell_agent/start_background_thread.rb +0 -55
- data/lib/tcell_agent/system_info.rb +0 -11
- data/lib/tcell_agent/utils/io.rb +0 -38
- data/lib/tcell_agent/utils/passwords.rb +0 -28
- data/lib/tcell_agent/utils/queue_with_timeout.rb +0 -142
- data/spec/lib/tcell_agent/agent/fork_pipe_manager_spec.rb +0 -100
- data/spec/lib/tcell_agent/agent/policy_manager_spec.rb +0 -535
- data/spec/lib/tcell_agent/agent/static_agent_spec.rb +0 -133
- data/spec/lib/tcell_agent/api/api_spec.rb +0 -39
- data/spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb +0 -187
- data/spec/lib/tcell_agent/instrumentation_spec.rb +0 -225
- data/spec/lib/tcell_agent/policies/appsensor_policy_spec.rb +0 -517
- data/spec/lib/tcell_agent/policies/http_tx_policy_spec.rb +0 -22
- data/spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb +0 -293
- data/spec/lib/tcell_agent/rails/middleware/dlp_middleware_spec.rb +0 -198
- data/spec/lib/tcell_agent/rails/middleware/global_middleware_spec.rb +0 -180
- data/spec/lib/tcell_agent/rails/middleware/redirect_middleware_spec.rb +0 -116
- data/spec/lib/tcell_agent/rust/models_spec.rb +0 -120
- data/spec/lib/tcell_agent/rust/whisperer_spec.rb +0 -704
- data/spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb +0 -45
- data/spec/lib/tcell_agent/sensor_events/sessions_metric_spec.rb +0 -272
- data/spec/lib/tcell_agent/utils/bounded_queue_spec.rb +0 -52
- data/spec/lib/tcell_agent/utils/passwords_spec.rb +0 -143
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TCellAgent
|
4
|
+
describe PoliciesManager do
|
5
|
+
before(:all) do
|
6
|
+
assert_policy_state = proc do |policies, state|
|
7
|
+
expect(policies.keys.size).to eq(10)
|
8
|
+
|
9
|
+
policies.values.each do |policy|
|
10
|
+
next if policy.instance_of?(TCellAgent::Policies::LoginPolicy)
|
11
|
+
next if policy.instance_of?(TCellAgent::Policies::SystemEnablements)
|
12
|
+
|
13
|
+
expect(policy.enabled).to eq(state)
|
14
|
+
end
|
15
|
+
|
16
|
+
expect(
|
17
|
+
policies[
|
18
|
+
TCellAgent::Policies::LoginPolicy.api_identifier
|
19
|
+
].login_success_enabled
|
20
|
+
).to eq(state)
|
21
|
+
expect(
|
22
|
+
policies[
|
23
|
+
TCellAgent::Policies::LoginPolicy.api_identifier
|
24
|
+
].login_failed_enabled
|
25
|
+
).to eq(state)
|
26
|
+
end
|
27
|
+
|
28
|
+
@assert_all_policies_enabled = proc do |policies|
|
29
|
+
assert_policy_state.call(policies, true)
|
30
|
+
end
|
31
|
+
@assert_all_policies_disabled = proc do |policies|
|
32
|
+
assert_policy_state.call(policies, false)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#initialize' do
|
37
|
+
context 'default PoliciesManager' do
|
38
|
+
it 'should have all policies disabled' do
|
39
|
+
native_agent = double('native_agent')
|
40
|
+
policies_manager = PoliciesManager.new(native_agent)
|
41
|
+
|
42
|
+
@assert_all_policies_disabled.call(policies_manager.policies)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#process_policy_json' do
|
47
|
+
before(:each) do
|
48
|
+
@native_agent = double('native_agent')
|
49
|
+
@policies_manager = PoliciesManager.new(@native_agent)
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'nil enablements' do
|
53
|
+
it 'all policies should remain disabled' do
|
54
|
+
@policies_manager.process_policy_json(nil, {})
|
55
|
+
@assert_all_policies_disabled.call(@policies_manager.policies)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'empty enablements' do
|
60
|
+
it 'all policies should remain disabled' do
|
61
|
+
@policies_manager.process_policy_json({}, {})
|
62
|
+
@assert_all_policies_disabled.call(@policies_manager.policies)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'empty enablements' do
|
67
|
+
it 'all policies should remain disabled' do
|
68
|
+
@policies_manager.process_policy_json({}, {})
|
69
|
+
@assert_all_policies_disabled.call(@policies_manager.policies)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with enablements and policies_json' do
|
74
|
+
it 'all policies should be enabled' do
|
75
|
+
enablements = {
|
76
|
+
'appfirewall' => true,
|
77
|
+
'cmdi' => true,
|
78
|
+
'headers' => true,
|
79
|
+
'http_redirect' => true,
|
80
|
+
'jsagentinjection' => true,
|
81
|
+
'patches' => true,
|
82
|
+
'local_file_access' => true,
|
83
|
+
'login_success_enabled' => true,
|
84
|
+
'login_failed_enabled' => true
|
85
|
+
}
|
86
|
+
policies_json = {
|
87
|
+
'dlp' => {
|
88
|
+
'policy_id' => 'policy-id',
|
89
|
+
'version' => 1,
|
90
|
+
'data' => {
|
91
|
+
'data_discovery' => {
|
92
|
+
'database_enabled' => true
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
@policies_manager.process_policy_json(enablements, policies_json)
|
98
|
+
@assert_all_policies_enabled.call(@policies_manager.policies)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
module TCellAgent
|
5
|
+
module Policies
|
6
|
+
describe HeadersPolicy do
|
7
|
+
describe '#get_headers' do
|
8
|
+
context 'with enabled policy' do
|
9
|
+
before(:each) do
|
10
|
+
configuration = TCellAgent::Tests::ConfigurationBuilder.new.build
|
11
|
+
@native_agent = TCellAgent::Rust::NativeAgent.create_agent(
|
12
|
+
configuration
|
13
|
+
)
|
14
|
+
@tcell_context = TCellAgent::Tests::TCellContextBuilder.new.update_attribute(
|
15
|
+
'session_id', 'session-id'
|
16
|
+
).update_attribute(
|
17
|
+
'route_id', 'route-id'
|
18
|
+
).build
|
19
|
+
end
|
20
|
+
|
21
|
+
after(:each) do
|
22
|
+
TCellAgent::Rust::NativeAgent.free_agent(@native_agent.agent_ptr)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return csp header' do
|
26
|
+
enablements = @native_agent.update_policies(
|
27
|
+
{
|
28
|
+
'secure-headers' => {
|
29
|
+
'version' => 1,
|
30
|
+
'policy_id' => 'xyzd',
|
31
|
+
'headers' => [
|
32
|
+
{
|
33
|
+
'name' => 'X-Content-Type-Options',
|
34
|
+
'value' => 'nosniff'
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
}
|
39
|
+
)['enablements']
|
40
|
+
expect(enablements['headers']).to eq(true)
|
41
|
+
|
42
|
+
@policy = HeadersPolicy.new(@native_agent, enablements)
|
43
|
+
expect(@policy.enabled).to eq(true)
|
44
|
+
|
45
|
+
expect(
|
46
|
+
@policy.get_headers(@tcell_context)
|
47
|
+
).to eq(
|
48
|
+
[{ 'name' => 'X-Content-Type-Options',
|
49
|
+
'value' => 'nosniff' }]
|
50
|
+
)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -12,21 +12,12 @@ module TCellAgent
|
|
12
12
|
@csrf_class = WrapperClass.new
|
13
13
|
end
|
14
14
|
|
15
|
-
context 'nil rust policies' do
|
16
|
-
it 'should not set csrf_exception_name' do
|
17
|
-
expect(TCellAgent).to receive(:policy).and_return(nil)
|
18
|
-
expect(@csrf_class).to_not receive(:request)
|
19
|
-
|
20
|
-
@csrf_class.handle_unverified_request
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
15
|
context 'appfirewall_enabled=false' do
|
25
16
|
it 'should not set csrf_exception_name' do
|
26
|
-
|
27
|
-
|
17
|
+
appfirewall_policy = double('appfirewall_policy',
|
18
|
+
:enabled => false)
|
28
19
|
|
29
|
-
expect(TCellAgent).to receive(:policy).and_return(
|
20
|
+
expect(TCellAgent).to receive(:policy).and_return(appfirewall_policy)
|
30
21
|
expect(@csrf_class).to_not receive(:request)
|
31
22
|
|
32
23
|
@csrf_class.handle_unverified_request
|
@@ -35,12 +26,12 @@ module TCellAgent
|
|
35
26
|
|
36
27
|
context 'appfirewall_enabled=true and nil tcell_data' do
|
37
28
|
it 'should not set csrf_exception_name' do
|
38
|
-
|
39
|
-
|
29
|
+
appfirewall_policy = double('appfirewall_policy',
|
30
|
+
:enabled => true)
|
40
31
|
request = double('request',
|
41
32
|
:env => {})
|
42
33
|
|
43
|
-
expect(TCellAgent).to receive(:policy).and_return(
|
34
|
+
expect(TCellAgent).to receive(:policy).and_return(appfirewall_policy)
|
44
35
|
expect(@csrf_class).to receive(:request).and_return(request)
|
45
36
|
|
46
37
|
@csrf_class.handle_unverified_request
|
@@ -52,12 +43,12 @@ module TCellAgent
|
|
52
43
|
tcell_data = TCellAgent::Instrumentation::TCellData.new
|
53
44
|
expect(tcell_data.csrf_exception_name).to be(nil)
|
54
45
|
|
55
|
-
|
56
|
-
|
46
|
+
appfirewall_policy = double('appfirewall_policy',
|
47
|
+
:enabled => true)
|
57
48
|
request = double('request',
|
58
49
|
:env => { TCellAgent::Instrumentation::TCELL_ID => tcell_data })
|
59
50
|
|
60
|
-
expect(TCellAgent).to receive(:policy).and_return(
|
51
|
+
expect(TCellAgent).to receive(:policy).and_return(appfirewall_policy)
|
61
52
|
expect(@csrf_class).to receive(:request).and_return(request)
|
62
53
|
|
63
54
|
@csrf_class.handle_unverified_request
|
@@ -146,12 +146,11 @@ module TCellAgent
|
|
146
146
|
context 'with nil response' do
|
147
147
|
it 'should return the unmodified response' do
|
148
148
|
logger = double('logger')
|
149
|
-
expect(TCellAgent).to receive(:
|
150
|
-
expect(
|
151
|
-
|
152
|
-
/Exception in safe_block Handling JSAgent insert: NoMethodError happened, message is undefined method `sub'/
|
149
|
+
expect(TCellAgent::Instrumentation).to receive(:get_safe_block_logger).and_return(logger)
|
150
|
+
expect(logger).to receive(:error).with(
|
151
|
+
/Error Handling JSAgent insert \(NoMethodError\): undefined method `sub'/
|
153
152
|
)
|
154
|
-
expect(logger).to receive(:
|
153
|
+
expect(logger).to receive(:exception) # exception stack trace
|
155
154
|
|
156
155
|
response = JSAgent.handle_js_agent_insert('SCRIPT', nil)
|
157
156
|
|
@@ -197,23 +196,7 @@ module TCellAgent
|
|
197
196
|
end
|
198
197
|
end
|
199
198
|
|
200
|
-
context 'with html response
|
201
|
-
it 'should not set js_agent_handler or script_insert' do
|
202
|
-
request = double('request')
|
203
|
-
|
204
|
-
expect(TCellAgent).to receive(:policy).with(
|
205
|
-
TCellAgent::PolicyTypes::RUST
|
206
|
-
).and_return(nil)
|
207
|
-
result = JSAgent.get_handler_and_script_insert(
|
208
|
-
request,
|
209
|
-
{ 'Content-Type' => 'text/html' }
|
210
|
-
)
|
211
|
-
|
212
|
-
expect(result).to eq([nil, nil])
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
context 'with html response and rust_policies' do
|
199
|
+
context 'with html response and js agent policy' do
|
217
200
|
context 'with nil script_insert' do
|
218
201
|
it 'should not set js_agent_handler or script_insert' do
|
219
202
|
tcell_data = TCellAgent::Instrumentation::TCellData.new
|
@@ -221,12 +204,12 @@ module TCellAgent
|
|
221
204
|
:env => {
|
222
205
|
TCellAgent::Instrumentation::TCELL_ID => tcell_data
|
223
206
|
})
|
224
|
-
|
207
|
+
js_agent_policy = double('js_agent_policy')
|
225
208
|
|
226
209
|
expect(TCellAgent).to receive(:policy).with(
|
227
|
-
TCellAgent::PolicyTypes::
|
228
|
-
).and_return(
|
229
|
-
expect(
|
210
|
+
TCellAgent::PolicyTypes::JSAGENTINJECTION
|
211
|
+
).and_return(js_agent_policy)
|
212
|
+
expect(js_agent_policy).to receive(:get_js_agent_script_tag).with(
|
230
213
|
tcell_data
|
231
214
|
).and_return(nil)
|
232
215
|
|
@@ -246,12 +229,12 @@ module TCellAgent
|
|
246
229
|
:env => {
|
247
230
|
TCellAgent::Instrumentation::TCELL_ID => tcell_data
|
248
231
|
})
|
249
|
-
|
232
|
+
js_agent_policy = double('js_agent_policy')
|
250
233
|
|
251
234
|
expect(TCellAgent).to receive(:policy).with(
|
252
|
-
TCellAgent::PolicyTypes::
|
253
|
-
).and_return(
|
254
|
-
expect(
|
235
|
+
TCellAgent::PolicyTypes::JSAGENTINJECTION
|
236
|
+
).and_return(js_agent_policy)
|
237
|
+
expect(js_agent_policy).to receive(:get_js_agent_script_tag).with(
|
255
238
|
tcell_data
|
256
239
|
).and_return('SCRIPT')
|
257
240
|
|
@@ -3,6 +3,22 @@ require 'spec_helper'
|
|
3
3
|
describe Logger do
|
4
4
|
describe '#add' do
|
5
5
|
context 'with a warn logger' do
|
6
|
+
before(:each) do
|
7
|
+
req_env = double('request_env')
|
8
|
+
lfi_policy = double('lfi_policy')
|
9
|
+
native_agent = double('native_agent')
|
10
|
+
@local_files_policy = TCellAgent::Policies::LocalFileInclusion.new(
|
11
|
+
native_agent, {}
|
12
|
+
)
|
13
|
+
allow(req_env).to receive(:[])
|
14
|
+
allow(TCellAgent).to receive(:policy).with(TCellAgent::PolicyTypes::LFI).and_return(
|
15
|
+
lfi_policy
|
16
|
+
)
|
17
|
+
allow(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).to receive(
|
18
|
+
:fetch
|
19
|
+
).with(anything, {}).and_return(req_env)
|
20
|
+
allow(lfi_policy).to receive(:block_file_access?).and_return(false)
|
21
|
+
end
|
6
22
|
context 'writing a debug message' do
|
7
23
|
it 'should skip the tcell logic' do
|
8
24
|
expect(TCellAgent::Instrumentation).to_not receive(:safe_block_no_log)
|
@@ -41,11 +57,12 @@ describe Logger do
|
|
41
57
|
|
42
58
|
context 'with an empty message' do
|
43
59
|
it 'should not run the context filter' do
|
60
|
+
dlp_policy = double('dlp_policy', :enabled => true)
|
44
61
|
expect(TCellAgent::Instrumentation).to receive(:safe_block_no_log).with(
|
45
62
|
'Handling DLP log message filtering'
|
46
63
|
).and_call_original
|
47
64
|
expect(TCellAgent).to receive(:policy).with(TCellAgent::PolicyTypes::DATALOSS).and_return(
|
48
|
-
|
65
|
+
dlp_policy
|
49
66
|
)
|
50
67
|
expect(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).to receive(
|
51
68
|
:fetch
|
@@ -66,9 +83,9 @@ describe Logger do
|
|
66
83
|
expect(TCellAgent).to receive(:policy).with(TCellAgent::PolicyTypes::DATALOSS).and_return(
|
67
84
|
nil
|
68
85
|
)
|
69
|
-
expect(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).
|
86
|
+
expect(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).to_not receive(
|
70
87
|
:fetch
|
71
|
-
).with(anything, nil)
|
88
|
+
).with(anything, nil)
|
72
89
|
|
73
90
|
logger = Logger.new('/dev/null')
|
74
91
|
|
@@ -79,11 +96,12 @@ describe Logger do
|
|
79
96
|
|
80
97
|
context 'with no request env' do
|
81
98
|
it 'should not run the context filter' do
|
99
|
+
dlp_policy = double('dlp_policy', :enabled => true)
|
82
100
|
expect(TCellAgent::Instrumentation).to receive(:safe_block_no_log).with(
|
83
101
|
'Handling DLP log message filtering'
|
84
102
|
).and_call_original
|
85
103
|
expect(TCellAgent).to receive(:policy).with(TCellAgent::PolicyTypes::DATALOSS).and_return(
|
86
|
-
|
104
|
+
dlp_policy
|
87
105
|
)
|
88
106
|
expect(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).to receive(
|
89
107
|
:fetch
|
@@ -100,12 +118,13 @@ describe Logger do
|
|
100
118
|
context 'with no tcell_context' do
|
101
119
|
it 'should not run the context filter' do
|
102
120
|
request_env = double('request_env')
|
121
|
+
dlp_policy = double('dlp_policy', :enabled => true)
|
103
122
|
|
104
123
|
expect(TCellAgent::Instrumentation).to receive(:safe_block_no_log).with(
|
105
124
|
'Handling DLP log message filtering'
|
106
125
|
).and_call_original
|
107
126
|
expect(TCellAgent).to receive(:policy).with(TCellAgent::PolicyTypes::DATALOSS).and_return(
|
108
|
-
|
127
|
+
dlp_policy
|
109
128
|
)
|
110
129
|
expect(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).to receive(
|
111
130
|
:fetch
|
@@ -120,15 +139,16 @@ describe Logger do
|
|
120
139
|
end
|
121
140
|
|
122
141
|
context 'with tcell_context' do
|
123
|
-
it 'should
|
142
|
+
it 'should run the context filter' do
|
124
143
|
request_env = double('request_env')
|
125
144
|
tcell_context = double('tcell_context')
|
145
|
+
dlp_policy = double('dlp_policy', :enabled => true)
|
126
146
|
|
127
147
|
expect(TCellAgent::Instrumentation).to receive(:safe_block_no_log).with(
|
128
148
|
'Handling DLP log message filtering'
|
129
149
|
).and_call_original
|
130
150
|
expect(TCellAgent).to receive(:policy).with(TCellAgent::PolicyTypes::DATALOSS).and_return(
|
131
|
-
|
151
|
+
dlp_policy
|
132
152
|
)
|
133
153
|
expect(TCellAgent::Instrumentation::Rails::Middleware::ContextMiddleware::THREADS).to receive(
|
134
154
|
:fetch
|
@@ -15,27 +15,28 @@ module TCellAgent
|
|
15
15
|
'transaction_id',
|
16
16
|
'http://test.com/'
|
17
17
|
)
|
18
|
-
@appsensor_meta_event = TCellAgent::SensorEvents::AppSensorMetaEvent.new(
|
19
|
-
@meta_data
|
20
|
-
)
|
21
18
|
end
|
22
19
|
|
23
20
|
context 'zero content length' do
|
24
|
-
it '
|
21
|
+
it 'appfirewall injections should be checked' do
|
25
22
|
tcell_body_proxy = TCellBodyProxy.new(
|
26
23
|
Rack::BodyProxy.new(['body']) {},
|
27
24
|
true,
|
28
25
|
nil, nil, nil, nil
|
29
26
|
)
|
30
|
-
tcell_body_proxy.
|
27
|
+
tcell_body_proxy.meta_data = @meta_data
|
31
28
|
|
32
29
|
tcell_body_proxy.content_length = 0
|
33
30
|
|
31
|
+
appfirewall_policy = double('appfirewall_policy')
|
34
32
|
expect(TCellAgent::Instrumentation).to receive(:safe_block).with(
|
35
33
|
'Running AppSensor deferred due to streaming'
|
36
34
|
).and_call_original
|
37
|
-
expect(TCellAgent).to receive(:
|
38
|
-
|
35
|
+
expect(TCellAgent).to receive(:policy).with(
|
36
|
+
TCellAgent::PolicyTypes::APPSENSOR
|
37
|
+
).and_return(appfirewall_policy)
|
38
|
+
expect(appfirewall_policy).to receive(:check_appfirewall_injections).with(
|
39
|
+
@meta_data
|
39
40
|
)
|
40
41
|
|
41
42
|
tcell_body_proxy.close
|
@@ -43,26 +44,30 @@ module TCellAgent
|
|
43
44
|
end
|
44
45
|
|
45
46
|
context 'non zero content length' do
|
46
|
-
it '
|
47
|
+
it 'should check for appfirewall injections' do
|
47
48
|
tcell_body_proxy = TCellBodyProxy.new(
|
48
49
|
Rack::BodyProxy.new(['body']) {},
|
49
50
|
true,
|
50
51
|
nil, nil, nil, nil
|
51
52
|
)
|
52
|
-
tcell_body_proxy.
|
53
|
+
tcell_body_proxy.meta_data = @meta_data
|
53
54
|
|
54
55
|
tcell_body_proxy.content_length = 512
|
55
56
|
|
57
|
+
appfirewall_policy = double('appfirewall_policy')
|
56
58
|
expect(TCellAgent::Instrumentation).to receive(:safe_block).with(
|
57
59
|
'Running AppSensor deferred due to streaming'
|
58
60
|
).and_call_original
|
59
|
-
expect(TCellAgent).to receive(:
|
60
|
-
|
61
|
+
expect(TCellAgent).to receive(:policy).with(
|
62
|
+
TCellAgent::PolicyTypes::APPSENSOR
|
63
|
+
).and_return(appfirewall_policy)
|
64
|
+
expect(appfirewall_policy).to receive(:check_appfirewall_injections).with(
|
65
|
+
@meta_data
|
61
66
|
)
|
62
67
|
|
63
68
|
tcell_body_proxy.close
|
64
69
|
|
65
|
-
expect(@
|
70
|
+
expect(@meta_data.response_content_bytes_len).to eq(512)
|
66
71
|
end
|
67
72
|
end
|
68
73
|
end
|