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.
- 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
|