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
@@ -0,0 +1,267 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ module TCellAgent
5
+ module Rust
6
+
7
+ describe ".parse_cmd" do
8
+ require "tcell_agent/rust/whisperer"
9
+
10
+ context "empty command" do
11
+ it "should return empty json object" do
12
+ result = Whisperer.parse_cmd(nil)
13
+ expect(result).to eq({})
14
+ result = Whisperer.parse_cmd("")
15
+ expect(result).to eq({})
16
+ result = Whisperer.parse_cmd(" ")
17
+ expect(result).to eq({})
18
+ end
19
+ end
20
+
21
+ context "single command" do
22
+ it "should return single command parsed" do
23
+ result = Whisperer.parse_cmd("ifconfig -a")
24
+ expect(result).to eq({"error"=>nil, "commands"=>[{"command"=>"ifconfig", "arg_count"=>1}]})
25
+ result = Whisperer.parse_cmd("ifconfig")
26
+ expect(result).to eq({"error"=>nil, "commands"=>[{"command"=>"ifconfig", "arg_count"=>0}]})
27
+ end
28
+ end
29
+
30
+ context "with a compound command" do
31
+ it "should return parsed commands" do
32
+ commands = Whisperer.parse_cmd("cd /tcellagent_src && bundle --quiet && bundle exec rake compile && bundle exec rspec")
33
+ expect(commands).to eq({
34
+ "error"=>nil,
35
+ "commands"=>[
36
+ {"command"=>"cd", "arg_count"=>1},
37
+ {"command"=>"bundle", "arg_count"=>1},
38
+ {"command"=>"bundle", "arg_count"=>3},
39
+ {"command"=>"bundle", "arg_count"=>2}
40
+ ]
41
+ })
42
+
43
+ commands = Whisperer.parse_cmd("cd /tcellagent_src; bundle --quiet; bundle exec rake compile; bundle exec rspec")
44
+ expect(commands).to eq({
45
+ "error"=>nil,
46
+ "commands"=>[
47
+ {"command"=>"cd", "arg_count"=>1},
48
+ {"command"=>"bundle", "arg_count"=>1},
49
+ {"command"=>"bundle", "arg_count"=>3},
50
+ {"command"=>"bundle", "arg_count"=>2}
51
+ ]
52
+ })
53
+
54
+ commands = Whisperer.parse_cmd("cat /etc/passwd | grep root")
55
+ expect(commands).to eq({
56
+ "commands" => [
57
+ {"arg_count" => 1, "command" => "cat"},
58
+ {"arg_count" => 1, "command" => "grep"}
59
+ ], "error" => nil
60
+ })
61
+ end
62
+
63
+ context "spawning multiple lines" do
64
+ it "should parse the commands" do
65
+ commands = Whisperer.parse_cmd(<<-eos
66
+ echo 'first-line'; \
67
+ cat /etc/passwd | grep root
68
+ eos
69
+ )
70
+ expect(commands).to eq({
71
+ "error"=>nil,
72
+ "commands"=>[
73
+ {"command"=>"echo", "arg_count"=>1},
74
+ {"command"=>"cat", "arg_count"=>1},
75
+ {"command"=>"grep", "arg_count"=>1}
76
+ ]
77
+ })
78
+
79
+ commands = Whisperer.parse_cmd(<<-eos
80
+ echo 'first-line' && \
81
+ cat /etc/passwd | grep root
82
+ eos
83
+ )
84
+ expect(commands).to eq({
85
+ "error"=>nil,
86
+ "commands"=>[
87
+ {"command"=>"echo", "arg_count"=>1},
88
+ {"command"=>"cat", "arg_count"=>1},
89
+ {"command"=>"grep", "arg_count"=>1}
90
+ ]
91
+ })
92
+
93
+ commands = Whisperer.parse_cmd(<<-eos
94
+ cd /tcellagent_src; bundle --quiet; \
95
+ bundle exec rake compile; \
96
+ bundle exec rspec
97
+ eos
98
+ )
99
+ expect(commands).to eq({
100
+ "error"=>nil,
101
+ "commands"=>[
102
+ {"command"=>"cd", "arg_count"=>1},
103
+ {"command"=>"bundle", "arg_count"=>1},
104
+ {"command"=>"bundle", "arg_count"=>3},
105
+ {"command"=>"bundle", "arg_count"=>2}
106
+ ]
107
+ })
108
+ end
109
+ end
110
+ end
111
+
112
+ context "with a complex command" do
113
+ it "should parse the commands" do
114
+ commands = Whisperer.parse_cmd(<<-eos
115
+ magick -size 320x85 canvas:none -font Bookman-DemiItalic -pointsize 72 \\
116
+ -draw "text 25,60 \'Magick\'" -channel RGBA -blur 0x6 -fill darkred -stroke magenta \\
117
+ -draw "text 20,55 \'Magick\'" fuzzy-magick.png
118
+ eos
119
+ )
120
+ expect(commands).to eq({
121
+ "error"=>nil,
122
+ "commands"=>[
123
+ {"command"=>"magick", "arg_count"=>24}
124
+ ]
125
+ })
126
+
127
+ commands = Whisperer.parse_cmd("/usr/local/bin/ruby -eputs 'Hello World!' > /dev/null 2>&1")
128
+ expect(commands).to eq({
129
+ "commands" => [
130
+ {"command" => "ruby", "arg_count" => 6 }
131
+ ], "error" => nil
132
+ })
133
+ end
134
+ end
135
+
136
+ context "with special characters in the command" do
137
+ it "should parse the commands" do
138
+ commands = Whisperer.parse_cmd("echo 'bréak' && cat /etc/passwd && grep root")
139
+ expect(commands).to eq({
140
+ "error"=>nil,
141
+ "commands"=>[
142
+ {"command"=>"echo", "arg_count"=>1},
143
+ {"command"=>"cat", "arg_count"=>1},
144
+ {"command"=>"grep", "arg_count"=>1}
145
+ ]
146
+ })
147
+ end
148
+ end
149
+
150
+ context "with null terminator character in the command" do
151
+ it "should parse the commands" do
152
+ commands = Whisperer.parse_cmd("echo 'br\0ak' && cat /etc/passwd && grep root")
153
+ expect(commands).to eq({
154
+ "error"=>nil,
155
+ "commands"=>[
156
+ {"command"=>"echo", "arg_count"=>1},
157
+ {"command"=>"cat", "arg_count"=>1},
158
+ {"command"=>"grep", "arg_count"=>1}
159
+ ]
160
+ })
161
+ end
162
+ end
163
+
164
+ context "with an sh command" do
165
+ it "should parse the commands" do
166
+ commands = Whisperer.parse_cmd("sh -c \"bundle install && rake db:setup db:migrate\"")
167
+ expect(commands).to eq({
168
+ "error"=>nil,
169
+ "commands"=>[
170
+ {"command"=>"sh", "arg_count"=>2},
171
+ {"command"=>"bundle", "arg_count"=>1},
172
+ {"command"=>"rake", "arg_count"=>2}
173
+ ]
174
+ })
175
+ end
176
+ end
177
+
178
+ context "with an /bin/sh command" do
179
+ it "should parse the commands" do
180
+ commands = Whisperer.parse_cmd("/bin/sh -c \"bundle install && rake db:setup db:migrate\"")
181
+ expect(commands).to eq({
182
+ "error"=>nil,
183
+ "commands"=>[
184
+ {"command"=>"sh", "arg_count"=>2},
185
+ {"command"=>"bundle", "arg_count"=>1},
186
+ {"command"=>"rake", "arg_count"=>2}
187
+ ]
188
+ })
189
+ end
190
+ end
191
+ end
192
+
193
+ describe ".convert_result" do
194
+ it "should catch and log json parse errors" do
195
+ logger = double("logger")
196
+ expect(TCellAgent).to receive(:logger).and_return(logger)
197
+ expect(logger).to receive(:error).with("JSON::ParserError ocurred when trying to parse native lib response")
198
+
199
+ result = FFI::MemoryPointer.from_string("{malformed_json}")
200
+ whisper = Whisperer.convert_result(result.size, result)
201
+ expect(whisper).to eq({})
202
+ end
203
+
204
+ it "should parse json properly" do
205
+ result = FFI::MemoryPointer.from_string({'valid' => 'json'}.to_json)
206
+ whisper = Whisperer.convert_result(result.size, result)
207
+ expect(whisper).to eq({"valid" => "json"})
208
+ end
209
+ end
210
+
211
+ describe ".appfirewall" do
212
+ it "returns an xss injection with an enabled xss sensor" do
213
+ policy = {
214
+ "policy_id" => "policy_id",
215
+ "version" => 1,
216
+ "data" => {
217
+ "sensors" => {
218
+ "xss" => {
219
+ "patterns" => ["1", "2", "4", "5", "6", "7", "8"]
220
+ }
221
+ }
222
+ }
223
+ }
224
+
225
+ whisper = Whisperer.init_appfirewall(policy, true)
226
+
227
+ expect(whisper["error"]).to be_nil
228
+ expect(whisper["enabled"]).to eq(true)
229
+ expect(whisper["policy_ptr"]).to_not be_nil
230
+
231
+ appfirewall_ptr = whisper["policy_ptr"]
232
+
233
+ whisper = Whisperer.apply_appfirewall(
234
+ appfirewall_ptr,
235
+ {
236
+ "method" => "GET",
237
+ "route_id" => "12345",
238
+ "path" => "/some/path",
239
+ "query_params" => [{"name" => "xss_param", "value" => "<script>"}],
240
+ "post_params" => [],
241
+ "headers" => [],
242
+ "cookies" => [],
243
+ "remote_address" => "192.1681.1.1",
244
+ "full_uri" => "http://192.168.1.1:8080/some/path?xss_param=<script>",
245
+ "session_id" => "session_id",
246
+ "status_code" => 200
247
+ })
248
+
249
+ expect(whisper).to eq({
250
+ "apply_response" => [{
251
+ "detection_point"=>"xss",
252
+ "method"=>"GET",
253
+ "parameter"=>"xss_param",
254
+ "uri"=>"http://192.168.1.1:8080/some/path?xss_param=",
255
+ "remote_address"=>"192.1681.1.1",
256
+ "route_id"=>"12345",
257
+ "session_id"=>"session_id",
258
+ "pattern"=>"1",
259
+ "meta"=>{"l"=>"query"}
260
+ }]
261
+ })
262
+
263
+ Whisperer.free_appfirewall(appfirewall_ptr)
264
+ end
265
+ end
266
+ end
267
+ end
@@ -6,16 +6,25 @@ module TCellAgent
6
6
  describe AppSensorMetaEvent do
7
7
 
8
8
  describe "#body_params" do
9
+ before(:each) do
10
+ @appsensor_meta = AppSensorMetaEvent.new(
11
+ "get",
12
+ "remote_address",
13
+ "route_id",
14
+ "session_id",
15
+ "user_id",
16
+ "transaction_id")
17
+ end
18
+
9
19
  context "with text/html content type" do
10
20
  it "should set the body params to empty" do
11
- app_sensor_event_process = AppSensorMetaEvent.new
12
- app_sensor_event_process.set_body_dict(
21
+ @appsensor_meta.set_body_dict(
13
22
  67,
14
23
  "text/html",
15
24
  {username:"tester",password:"pass"}.to_json
16
25
  )
17
26
 
18
- expect(app_sensor_event_process.body_dict).to eq({})
27
+ expect(@appsensor_meta.body_dict).to eq({})
19
28
  end
20
29
  end
21
30
 
@@ -23,52 +32,48 @@ module TCellAgent
23
32
 
24
33
  context "with empty request body" do
25
34
  it "should set the body params to empty" do
26
- @app_sensor_event_process = AppSensorMetaEvent.new
27
- @app_sensor_event_process.set_body_dict(
35
+ @appsensor_meta.set_body_dict(
28
36
  67,
29
37
  "application/json",
30
38
  nil
31
39
  )
32
40
 
33
- expect(@app_sensor_event_process.body_dict).to eq({})
41
+ expect(@appsensor_meta.body_dict).to eq({})
34
42
  end
35
43
  end
36
44
 
37
45
  context "with bad json in the body" do
38
46
  it "should set the body params to empty" do
39
- @app_sensor_event_process = AppSensorMetaEvent.new
40
- @app_sensor_event_process.set_body_dict(
47
+ @appsensor_meta.set_body_dict(
41
48
  67,
42
49
  "application/json",
43
50
  '{"username":"tester""password":"pass"}'
44
51
  )
45
52
 
46
- expect(@app_sensor_event_process.body_dict).to eq({})
53
+ expect(@appsensor_meta.body_dict).to eq({})
47
54
  end
48
55
  end
49
56
 
50
57
  context "with valid json in the body" do
51
58
  it "should set the body params" do
52
- @app_sensor_event_process = AppSensorMetaEvent.new
53
- @app_sensor_event_process.set_body_dict(
59
+ @appsensor_meta.set_body_dict(
54
60
  67,
55
61
  "application/json",
56
62
  {username:"tester",password:"pass"}.to_json
57
63
  )
58
64
 
59
- expect(@app_sensor_event_process.body_dict).to eq({["username"]=>"tester",["password"]=>"pass"})
65
+ expect(@appsensor_meta.body_dict).to eq({["username"]=>"tester",["password"]=>"pass"})
60
66
  end
61
67
  end
62
68
 
63
69
  context "with a json body that's too big" do
64
70
  it "should set the body params to empty" do
65
- @app_sensor_event_process = AppSensorMetaEvent.new
66
- @app_sensor_event_process.set_body_dict(
71
+ @appsensor_meta.set_body_dict(
67
72
  20000000,
68
73
  "application/json",
69
74
  {username:"tester",password:"pass"}.to_json
70
75
  )
71
- expect(@app_sensor_event_process.body_dict).to eq({})
76
+ expect(@appsensor_meta.body_dict).to eq({})
72
77
  end
73
78
  end
74
79
  end
data/spec/spec_helper.rb CHANGED
@@ -15,12 +15,3 @@ end
15
15
 
16
16
  require 'tcell_agent/agent'
17
17
  require 'tcell_agent/rails/routes'
18
-
19
- if TCellAgent.configuration.raise_exceptions
20
- puts "[tCell.io] ******WARNING*************WARNING**************WARNING****************"
21
- puts "[tCell.io] Travis CI has TCELL_RAISE_EXCEPTIONS set to false."
22
- puts "[tCell.io] Your environment TCELL_RAISE_EXCEPTIONS has it set to true"
23
- puts "[tCell.io] because of this discrepancy you may observe different spec failures"
24
- puts "[tCell.io] in your dev env than those observed on Travis CI"
25
- puts "[tCell.io] **********************************************************************"
26
- end
data/tcell_agent.gemspec CHANGED
@@ -1,23 +1,27 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
- #bin = File.expand_path('../bin', __FILE__)
4
4
 
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
6
  require 'tcell_agent/version'
7
+
7
8
  Gem::Specification.new do |spec|
8
9
  spec.name = "tcell_agent"
9
10
  spec.version = TCellAgent::VERSION
10
- spec.authors = ["Garrett"]
11
+ spec.authors = ['Rafael','Garrett']
11
12
  spec.email = ["rafael@tcell.io"]
12
13
  spec.summary = "tCell.io Agent for Rails & Sinatra"
13
14
  spec.description = "This agent allows users to use the tCell.io service with their Rails or Sinatra app."
14
15
  spec.homepage = "https://www.tcell.io"
15
- spec.license = "Copyright (c) 2015 tCell.io (see LICENSE file)"
16
+ spec.license = "Copyright (c) 2017 tCell.io (see LICENSE file)"
16
17
 
17
18
  spec.files = Dir[
18
19
  'Rakefile',
19
20
  'lib/tcell_agent.rb',
20
21
  '{lib/tcell_agent,spec}/**/*',
22
+ 'lib/tcell_agent/rust/libtcellagent-*.so',
23
+ 'lib/tcell_agent/rust/libtcellagent-*.dylib',
24
+ 'lib/tcell_agent/rust/tcellagent-*.dll',
21
25
  'README*',
22
26
  'LICENSE*',
23
27
  'LICENSE_libinjection',
@@ -38,6 +42,7 @@ Gem::Specification.new do |spec|
38
42
 
39
43
  spec.add_runtime_dependency "json",">=1.8"
40
44
  spec.add_runtime_dependency "pbkdf2",">=0.1"
45
+ spec.add_runtime_dependency "ffi",">=1.3.0"
41
46
  spec.add_development_dependency "rspec-core"
42
47
  spec.add_development_dependency "bundler", ">= 1.7"
43
48
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcell_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.29
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Rafael
7
8
  - Garrett
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2017-06-06 00:00:00.000000000 Z
12
+ date: 2017-12-19 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: json
@@ -38,6 +39,20 @@ dependencies:
38
39
  - - ">="
39
40
  - !ruby/object:Gem::Version
40
41
  version: '0.1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: ffi
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 1.3.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 1.3.0
41
56
  - !ruby/object:Gem::Dependency
42
57
  name: rspec-core
43
58
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +137,7 @@ files:
122
137
  - LICENSE_libinjection
123
138
  - README.md
124
139
  - Rakefile
140
+ - Readme.txt
125
141
  - bin/tcell_agent
126
142
  - ext/libinjection/extconf.rb
127
143
  - ext/libinjection/libinjection.h
@@ -148,11 +164,12 @@ files:
148
164
  - lib/tcell_agent/appsensor/rules/appsensor_rule_manager.rb
149
165
  - lib/tcell_agent/appsensor/rules/appsensor_rule_set.rb
150
166
  - lib/tcell_agent/appsensor/rules/baserules.json
151
- - lib/tcell_agent/appsensor/sensor.rb
152
167
  - lib/tcell_agent/authlogic.rb
168
+ - lib/tcell_agent/cmdi.rb
153
169
  - lib/tcell_agent/config/unknown_options.rb
154
170
  - lib/tcell_agent/configuration.rb
155
171
  - lib/tcell_agent/devise.rb
172
+ - lib/tcell_agent/hooks/login_fraud.rb
156
173
  - lib/tcell_agent/instrumentation.rb
157
174
  - lib/tcell_agent/logger.rb
158
175
  - lib/tcell_agent/patches.rb
@@ -160,22 +177,15 @@ files:
160
177
  - lib/tcell_agent/patches/meta_data.rb
161
178
  - lib/tcell_agent/patches/sensors_matcher.rb
162
179
  - lib/tcell_agent/policies/appsensor/cmdi_sensor.rb
163
- - lib/tcell_agent/policies/appsensor/database_sensor.rb
164
180
  - lib/tcell_agent/policies/appsensor/fpt_sensor.rb
165
181
  - lib/tcell_agent/policies/appsensor/injection_sensor.rb
166
- - lib/tcell_agent/policies/appsensor/misc_sensor.rb
167
182
  - lib/tcell_agent/policies/appsensor/nullbyte_sensor.rb
168
- - lib/tcell_agent/policies/appsensor/payloads_policy.rb
169
- - lib/tcell_agent/policies/appsensor/request_size_sensor.rb
170
- - lib/tcell_agent/policies/appsensor/response_codes_sensor.rb
171
- - lib/tcell_agent/policies/appsensor/response_size_sensor.rb
172
183
  - lib/tcell_agent/policies/appsensor/retr_sensor.rb
173
- - lib/tcell_agent/policies/appsensor/size_sensor.rb
174
184
  - lib/tcell_agent/policies/appsensor/sqli_sensor.rb
175
- - lib/tcell_agent/policies/appsensor/user_agent_sensor.rb
176
185
  - lib/tcell_agent/policies/appsensor/xss_sensor.rb
177
186
  - lib/tcell_agent/policies/appsensor_policy.rb
178
187
  - lib/tcell_agent/policies/clickjacking_policy.rb
188
+ - lib/tcell_agent/policies/command_injection_policy.rb
179
189
  - lib/tcell_agent/policies/content_security_policy.rb
180
190
  - lib/tcell_agent/policies/dataloss_policy.rb
181
191
  - lib/tcell_agent/policies/honeytokens_policy.rb
@@ -183,12 +193,12 @@ files:
183
193
  - lib/tcell_agent/policies/http_tx_policy.rb
184
194
  - lib/tcell_agent/policies/login_fraud_policy.rb
185
195
  - lib/tcell_agent/policies/patches_policy.rb
196
+ - lib/tcell_agent/policies/policy.rb
186
197
  - lib/tcell_agent/policies/secure_headers_policy.rb
187
198
  - lib/tcell_agent/rails.rb
188
199
  - lib/tcell_agent/rails/auth/authlogic.rb
189
200
  - lib/tcell_agent/rails/auth/devise.rb
190
201
  - lib/tcell_agent/rails/auth/doorkeeper.rb
191
- - lib/tcell_agent/rails/auth/hooks.rb
192
202
  - lib/tcell_agent/rails/better_ip.rb
193
203
  - lib/tcell_agent/rails/csrf_exception.rb
194
204
  - lib/tcell_agent/rails/dlp.rb
@@ -207,9 +217,15 @@ files:
207
217
  - lib/tcell_agent/rails/settings_reporter.rb
208
218
  - lib/tcell_agent/rails/tcell_body_proxy.rb
209
219
  - lib/tcell_agent/routes/table.rb
220
+ - lib/tcell_agent/rust/libtcellagent-0.6.1.dylib
221
+ - lib/tcell_agent/rust/libtcellagent-0.6.1.so
222
+ - lib/tcell_agent/rust/models.rb
223
+ - lib/tcell_agent/rust/tcellagent-0.6.1.dll
224
+ - lib/tcell_agent/rust/whisperer.rb
210
225
  - lib/tcell_agent/sensor_events/app_config.rb
211
226
  - lib/tcell_agent/sensor_events/appsensor_event.rb
212
227
  - lib/tcell_agent/sensor_events/appsensor_meta_event.rb
228
+ - lib/tcell_agent/sensor_events/command_injection.rb
213
229
  - lib/tcell_agent/sensor_events/discovery.rb
214
230
  - lib/tcell_agent/sensor_events/dlp.rb
215
231
  - lib/tcell_agent/sensor_events/honeytokens.rb
@@ -217,7 +233,6 @@ files:
217
233
  - lib/tcell_agent/sensor_events/metrics.rb
218
234
  - lib/tcell_agent/sensor_events/sensor.rb
219
235
  - lib/tcell_agent/sensor_events/server_agent.rb
220
- - lib/tcell_agent/sensor_events/util/redirect_utils.rb
221
236
  - lib/tcell_agent/sensor_events/util/sanitizer_utilities.rb
222
237
  - lib/tcell_agent/sensor_events/util/utils.rb
223
238
  - lib/tcell_agent/servers/passenger.rb
@@ -285,31 +300,26 @@ files:
285
300
  - spec/lib/tcell_agent/api/api_spec.rb
286
301
  - spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb
287
302
  - spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb
303
+ - spec/lib/tcell_agent/appsensor/meta_data_spec.rb
288
304
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb
289
305
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_set_spec.rb
306
+ - spec/lib/tcell_agent/cmdi_spec.rb
290
307
  - spec/lib/tcell_agent/config/unknown_options_spec.rb
291
308
  - spec/lib/tcell_agent/configuration_spec.rb
309
+ - spec/lib/tcell_agent/hooks/login_fraud_spec.rb
292
310
  - spec/lib/tcell_agent/instrumentation_spec.rb
293
311
  - spec/lib/tcell_agent/patches/block_rule_spec.rb
294
312
  - spec/lib/tcell_agent/patches/sensors_matcher_spec.rb
295
313
  - spec/lib/tcell_agent/patches_spec.rb
296
314
  - spec/lib/tcell_agent/policies/appsensor/cmdi_sensor_spec.rb
297
- - spec/lib/tcell_agent/policies/appsensor/database_sensor_spec.rb
298
315
  - spec/lib/tcell_agent/policies/appsensor/fpt_sensor_spec.rb
299
- - spec/lib/tcell_agent/policies/appsensor/misc_sensor_spec.rb
300
316
  - spec/lib/tcell_agent/policies/appsensor/nullbyte_sensor_spec.rb
301
- - spec/lib/tcell_agent/policies/appsensor/payloads_policy_apply_spec.rb
302
- - spec/lib/tcell_agent/policies/appsensor/payloads_policy_from_json_spec.rb
303
- - spec/lib/tcell_agent/policies/appsensor/payloads_policy_log_spec.rb
304
- - spec/lib/tcell_agent/policies/appsensor/request_size_sensor_spec.rb
305
- - spec/lib/tcell_agent/policies/appsensor/response_codes_sensor_spec.rb
306
- - spec/lib/tcell_agent/policies/appsensor/response_size_sensor_spec.rb
307
317
  - spec/lib/tcell_agent/policies/appsensor/retr_sensor_spec.rb
308
318
  - spec/lib/tcell_agent/policies/appsensor/sqli_sensor_spec.rb
309
- - spec/lib/tcell_agent/policies/appsensor/user_agent_sensor_spec.rb
310
319
  - spec/lib/tcell_agent/policies/appsensor/xss_sensor_spec.rb
311
320
  - spec/lib/tcell_agent/policies/appsensor_policy_spec.rb
312
321
  - spec/lib/tcell_agent/policies/clickjacking_policy_spec.rb
322
+ - spec/lib/tcell_agent/policies/command_injection_policy_spec.rb
313
323
  - spec/lib/tcell_agent/policies/content_security_policy_spec.rb
314
324
  - spec/lib/tcell_agent/policies/dataloss_policy_spec.rb
315
325
  - spec/lib/tcell_agent/policies/honeytokens_policy_spec.rb
@@ -318,7 +328,6 @@ files:
318
328
  - spec/lib/tcell_agent/policies/login_policy_spec.rb
319
329
  - spec/lib/tcell_agent/policies/patches_policy_spec.rb
320
330
  - spec/lib/tcell_agent/policies/secure_headers_policy_spec.rb
321
- - spec/lib/tcell_agent/rails/auth/hooks_spec.rb
322
331
  - spec/lib/tcell_agent/rails/better_ip_spec.rb
323
332
  - spec/lib/tcell_agent/rails/logger_spec.rb
324
333
  - spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb
@@ -331,10 +340,10 @@ files:
331
340
  - spec/lib/tcell_agent/rails/routes/route_id_spec.rb
332
341
  - spec/lib/tcell_agent/rails/routes/routes_spec.rb
333
342
  - spec/lib/tcell_agent/rails_spec.rb
343
+ - spec/lib/tcell_agent/rust/whisperer_spec.rb
334
344
  - spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb
335
345
  - spec/lib/tcell_agent/sensor_events/dlp_spec.rb
336
346
  - spec/lib/tcell_agent/sensor_events/sessions_metric_spec.rb
337
- - spec/lib/tcell_agent/sensor_events/util/redirect_utils_spec.rb
338
347
  - spec/lib/tcell_agent/sensor_events/util/sanitizer_utilities_spec.rb
339
348
  - spec/lib/tcell_agent/utils/bounded_queue_spec.rb
340
349
  - spec/lib/tcell_agent/utils/params_spec.rb
@@ -342,13 +351,12 @@ files:
342
351
  - spec/lib/tcell_agent_spec.rb
343
352
  - spec/spec_helper.rb
344
353
  - spec/support/middleware_helper.rb
345
- - spec/support/resources/baserules.json
346
354
  - spec/support/resources/normal_config.json
347
355
  - spec/support/static_agent_overrides.rb
348
356
  - tcell_agent.gemspec
349
357
  homepage: https://www.tcell.io
350
358
  licenses:
351
- - Copyright (c) 2015 tCell.io (see LICENSE file)
359
+ - Copyright (c) 2017 tCell.io (see LICENSE file)
352
360
  metadata: {}
353
361
  post_install_message:
354
362
  rdoc_options: []
@@ -368,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
368
376
  version: '0'
369
377
  requirements: []
370
378
  rubyforge_project:
371
- rubygems_version: 2.6.8
379
+ rubygems_version: 2.4.8
372
380
  signing_key:
373
381
  specification_version: 4
374
382
  summary: tCell.io Agent for Rails & Sinatra
@@ -423,31 +431,26 @@ test_files:
423
431
  - spec/lib/tcell_agent/api/api_spec.rb
424
432
  - spec/lib/tcell_agent/appsensor/injections_matcher_spec.rb
425
433
  - spec/lib/tcell_agent/appsensor/injections_reporter_spec.rb
434
+ - spec/lib/tcell_agent/appsensor/meta_data_spec.rb
426
435
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_manager_spec.rb
427
436
  - spec/lib/tcell_agent/appsensor/rules/appsensor_rule_set_spec.rb
437
+ - spec/lib/tcell_agent/cmdi_spec.rb
428
438
  - spec/lib/tcell_agent/config/unknown_options_spec.rb
429
439
  - spec/lib/tcell_agent/configuration_spec.rb
440
+ - spec/lib/tcell_agent/hooks/login_fraud_spec.rb
430
441
  - spec/lib/tcell_agent/instrumentation_spec.rb
431
442
  - spec/lib/tcell_agent/patches/block_rule_spec.rb
432
443
  - spec/lib/tcell_agent/patches/sensors_matcher_spec.rb
433
444
  - spec/lib/tcell_agent/patches_spec.rb
434
445
  - spec/lib/tcell_agent/policies/appsensor/cmdi_sensor_spec.rb
435
- - spec/lib/tcell_agent/policies/appsensor/database_sensor_spec.rb
436
446
  - spec/lib/tcell_agent/policies/appsensor/fpt_sensor_spec.rb
437
- - spec/lib/tcell_agent/policies/appsensor/misc_sensor_spec.rb
438
447
  - spec/lib/tcell_agent/policies/appsensor/nullbyte_sensor_spec.rb
439
- - spec/lib/tcell_agent/policies/appsensor/payloads_policy_apply_spec.rb
440
- - spec/lib/tcell_agent/policies/appsensor/payloads_policy_from_json_spec.rb
441
- - spec/lib/tcell_agent/policies/appsensor/payloads_policy_log_spec.rb
442
- - spec/lib/tcell_agent/policies/appsensor/request_size_sensor_spec.rb
443
- - spec/lib/tcell_agent/policies/appsensor/response_codes_sensor_spec.rb
444
- - spec/lib/tcell_agent/policies/appsensor/response_size_sensor_spec.rb
445
448
  - spec/lib/tcell_agent/policies/appsensor/retr_sensor_spec.rb
446
449
  - spec/lib/tcell_agent/policies/appsensor/sqli_sensor_spec.rb
447
- - spec/lib/tcell_agent/policies/appsensor/user_agent_sensor_spec.rb
448
450
  - spec/lib/tcell_agent/policies/appsensor/xss_sensor_spec.rb
449
451
  - spec/lib/tcell_agent/policies/appsensor_policy_spec.rb
450
452
  - spec/lib/tcell_agent/policies/clickjacking_policy_spec.rb
453
+ - spec/lib/tcell_agent/policies/command_injection_policy_spec.rb
451
454
  - spec/lib/tcell_agent/policies/content_security_policy_spec.rb
452
455
  - spec/lib/tcell_agent/policies/dataloss_policy_spec.rb
453
456
  - spec/lib/tcell_agent/policies/honeytokens_policy_spec.rb
@@ -456,7 +459,6 @@ test_files:
456
459
  - spec/lib/tcell_agent/policies/login_policy_spec.rb
457
460
  - spec/lib/tcell_agent/policies/patches_policy_spec.rb
458
461
  - spec/lib/tcell_agent/policies/secure_headers_policy_spec.rb
459
- - spec/lib/tcell_agent/rails/auth/hooks_spec.rb
460
462
  - spec/lib/tcell_agent/rails/better_ip_spec.rb
461
463
  - spec/lib/tcell_agent/rails/logger_spec.rb
462
464
  - spec/lib/tcell_agent/rails/middleware/appsensor_middleware_spec.rb
@@ -469,10 +471,10 @@ test_files:
469
471
  - spec/lib/tcell_agent/rails/routes/route_id_spec.rb
470
472
  - spec/lib/tcell_agent/rails/routes/routes_spec.rb
471
473
  - spec/lib/tcell_agent/rails_spec.rb
474
+ - spec/lib/tcell_agent/rust/whisperer_spec.rb
472
475
  - spec/lib/tcell_agent/sensor_events/appsensor_meta_event_spec.rb
473
476
  - spec/lib/tcell_agent/sensor_events/dlp_spec.rb
474
477
  - spec/lib/tcell_agent/sensor_events/sessions_metric_spec.rb
475
- - spec/lib/tcell_agent/sensor_events/util/redirect_utils_spec.rb
476
478
  - spec/lib/tcell_agent/sensor_events/util/sanitizer_utilities_spec.rb
477
479
  - spec/lib/tcell_agent/utils/bounded_queue_spec.rb
478
480
  - spec/lib/tcell_agent/utils/params_spec.rb
@@ -480,6 +482,5 @@ test_files:
480
482
  - spec/lib/tcell_agent_spec.rb
481
483
  - spec/spec_helper.rb
482
484
  - spec/support/middleware_helper.rb
483
- - spec/support/resources/baserules.json
484
485
  - spec/support/resources/normal_config.json
485
486
  - spec/support/static_agent_overrides.rb