aikido-zen 1.0.2.beta.9-x86_64-linux-musl → 1.0.2-x86_64-linux-musl
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 +4 -4
- data/README.md +1 -0
- data/docs/config.md +9 -1
- data/docs/troubleshooting.md +62 -0
- data/lib/aikido/zen/agent.rb +2 -2
- data/lib/aikido/zen/attack.rb +8 -6
- data/lib/aikido/zen/attack_wave/helpers.rb +457 -0
- data/lib/aikido/zen/attack_wave.rb +88 -0
- data/lib/aikido/zen/cache.rb +91 -0
- data/lib/aikido/zen/capped_collections.rb +22 -4
- data/lib/aikido/zen/collector/event.rb +29 -0
- data/lib/aikido/zen/collector/hosts.rb +16 -1
- data/lib/aikido/zen/collector/stats.rb +17 -3
- data/lib/aikido/zen/collector/users.rb +2 -2
- data/lib/aikido/zen/collector.rb +14 -0
- data/lib/aikido/zen/config.rb +35 -6
- data/lib/aikido/zen/context/rack_request.rb +3 -0
- data/lib/aikido/zen/context/rails_request.rb +3 -0
- data/lib/aikido/zen/context.rb +35 -3
- data/lib/aikido/zen/event.rb +47 -2
- data/lib/aikido/zen/helpers.rb +24 -0
- data/lib/aikido/zen/middleware/{check_allowed_addresses.rb → allowed_address_checker.rb} +1 -1
- data/lib/aikido/zen/middleware/attack_wave_protector.rb +46 -0
- data/lib/aikido/zen/middleware/{set_context.rb → context_setter.rb} +1 -1
- data/lib/aikido/zen/middleware/rack_throttler.rb +3 -1
- data/lib/aikido/zen/middleware/request_tracker.rb +8 -3
- data/lib/aikido/zen/outbound_connection.rb +11 -1
- data/lib/aikido/zen/rails_engine.rb +3 -2
- data/lib/aikido/zen/request/rails_router.rb +17 -2
- data/lib/aikido/zen/request.rb +2 -36
- data/lib/aikido/zen/route.rb +50 -0
- data/lib/aikido/zen/runtime_settings/endpoints.rb +37 -8
- data/lib/aikido/zen/runtime_settings.rb +5 -4
- data/lib/aikido/zen/scanners/path_traversal_scanner.rb +3 -2
- data/lib/aikido/zen/scanners/shell_injection_scanner.rb +3 -2
- data/lib/aikido/zen/scanners/sql_injection_scanner.rb +3 -2
- data/lib/aikido/zen/scanners/ssrf_scanner.rb +2 -1
- data/lib/aikido/zen/scanners/stored_ssrf_scanner.rb +5 -1
- data/lib/aikido/zen/sinks/action_controller.rb +3 -1
- data/lib/aikido/zen/sinks/file.rb +34 -32
- data/lib/aikido/zen/sinks/socket.rb +7 -0
- data/lib/aikido/zen/system_info.rb +1 -5
- data/lib/aikido/zen/version.rb +1 -1
- data/lib/aikido/zen.rb +55 -6
- data/tasklib/bench.rake +1 -1
- metadata +10 -4
data/lib/aikido/zen.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "zen/helpers"
|
|
3
4
|
require_relative "zen/version"
|
|
4
5
|
require_relative "zen/errors"
|
|
5
6
|
require_relative "zen/actor"
|
|
@@ -13,13 +14,15 @@ require_relative "zen/context"
|
|
|
13
14
|
require_relative "zen/detached_agent"
|
|
14
15
|
require_relative "zen/middleware/middleware"
|
|
15
16
|
require_relative "zen/middleware/fork_detector"
|
|
16
|
-
require_relative "zen/middleware/
|
|
17
|
-
require_relative "zen/middleware/
|
|
17
|
+
require_relative "zen/middleware/context_setter"
|
|
18
|
+
require_relative "zen/middleware/allowed_address_checker"
|
|
19
|
+
require_relative "zen/middleware/attack_wave_protector"
|
|
18
20
|
require_relative "zen/middleware/request_tracker"
|
|
19
21
|
require_relative "zen/outbound_connection"
|
|
20
22
|
require_relative "zen/outbound_connection_monitor"
|
|
21
23
|
require_relative "zen/runtime_settings"
|
|
22
24
|
require_relative "zen/rate_limiter"
|
|
25
|
+
require_relative "zen/attack_wave"
|
|
23
26
|
require_relative "zen/scanners"
|
|
24
27
|
|
|
25
28
|
module Aikido
|
|
@@ -77,6 +80,16 @@ module Aikido
|
|
|
77
80
|
@runtime_settings = settings
|
|
78
81
|
end
|
|
79
82
|
|
|
83
|
+
# @return [Boolean] whether the Aikido agent is currently blocking requests.
|
|
84
|
+
# Blocking mode is configured at startup and can be controlled through the
|
|
85
|
+
# Aikido dashboard at runtime.
|
|
86
|
+
def self.blocking_mode?
|
|
87
|
+
blocking_mode = runtime_settings.blocking_mode
|
|
88
|
+
return blocking_mode unless blocking_mode.nil?
|
|
89
|
+
|
|
90
|
+
config.blocking_mode
|
|
91
|
+
end
|
|
92
|
+
|
|
80
93
|
# Gets information about the current system configuration, which is sent to
|
|
81
94
|
# the server along with any events.
|
|
82
95
|
def self.system_info
|
|
@@ -89,10 +102,6 @@ module Aikido
|
|
|
89
102
|
@collector ||= Collector.new
|
|
90
103
|
end
|
|
91
104
|
|
|
92
|
-
def self.detached_agent
|
|
93
|
-
@detached_agent ||= DetachedAgent::Agent.new
|
|
94
|
-
end
|
|
95
|
-
|
|
96
105
|
# Gets the current context object that holds all information about the
|
|
97
106
|
# current request.
|
|
98
107
|
#
|
|
@@ -118,6 +127,18 @@ module Aikido
|
|
|
118
127
|
collector.track_request
|
|
119
128
|
end
|
|
120
129
|
|
|
130
|
+
# Track statistics about an attack wave the app is handling.
|
|
131
|
+
#
|
|
132
|
+
# @param attack_wave [Aikido::Zen::Events::AttackWave]
|
|
133
|
+
# @return [void]
|
|
134
|
+
def self.track_attack_wave(attack_wave)
|
|
135
|
+
collector.track_attack_wave(being_blocked: false)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Track statistics about a route that the app has discovered.
|
|
139
|
+
#
|
|
140
|
+
# @param request [Aikido::Zen::Request]
|
|
141
|
+
# @return [void]
|
|
121
142
|
def self.track_discovered_route(request)
|
|
122
143
|
collector.track_route(request)
|
|
123
144
|
end
|
|
@@ -173,6 +194,11 @@ module Aikido
|
|
|
173
194
|
collector.middleware_installed!
|
|
174
195
|
end
|
|
175
196
|
|
|
197
|
+
# @return [Aikido::Zen::AttackWave::Detector] the attack wave detector.
|
|
198
|
+
def self.attack_wave_detector
|
|
199
|
+
@attack_wave_detector ||= AttackWave::Detector.new
|
|
200
|
+
end
|
|
201
|
+
|
|
176
202
|
# @!visibility private
|
|
177
203
|
# Load all sources.
|
|
178
204
|
#
|
|
@@ -210,6 +236,10 @@ module Aikido
|
|
|
210
236
|
@agent ||= Agent.start
|
|
211
237
|
end
|
|
212
238
|
|
|
239
|
+
def self.detached_agent
|
|
240
|
+
@detached_agent ||= DetachedAgent::Agent.new
|
|
241
|
+
end
|
|
242
|
+
|
|
213
243
|
def self.detached_agent_server
|
|
214
244
|
@detached_agent_server ||= DetachedAgent::Server.start
|
|
215
245
|
end
|
|
@@ -250,5 +280,24 @@ module Aikido
|
|
|
250
280
|
@detached_agent&.handle_fork
|
|
251
281
|
end
|
|
252
282
|
end
|
|
283
|
+
|
|
284
|
+
# @!visibility private
|
|
285
|
+
# Returns the stack trace trimmed to where execution last entered Zen.
|
|
286
|
+
#
|
|
287
|
+
# @return [String]
|
|
288
|
+
def self.clean_stack_trace
|
|
289
|
+
stack_trace = caller_locations
|
|
290
|
+
|
|
291
|
+
spec = Gem.loaded_specs["aikido-zen"]
|
|
292
|
+
|
|
293
|
+
# Only trim stack frames from .../lib/aikido/zen/ in the aikido-zen gem,
|
|
294
|
+
# so calls in sample apps are preserved.
|
|
295
|
+
lib_path_start = File.expand_path(File.join(spec.full_gem_path, "lib", "aikido", "zen")) + File::SEPARATOR
|
|
296
|
+
|
|
297
|
+
index = stack_trace.index { |frame| !File.expand_path(frame.path).start_with?(lib_path_start) }
|
|
298
|
+
stack_trace = stack_trace[index..] if index
|
|
299
|
+
|
|
300
|
+
stack_trace.map(&:to_s).join("\n")
|
|
301
|
+
end
|
|
253
302
|
end
|
|
254
303
|
end
|
data/tasklib/bench.rake
CHANGED
|
@@ -87,7 +87,7 @@ Pathname.glob("sample_apps/*").select(&:directory?).each do |dir|
|
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
task :boot_unprotected_app do
|
|
90
|
-
boot_server(dir, port: PORT_UNPROTECTED, env: {"
|
|
90
|
+
boot_server(dir, port: PORT_UNPROTECTED, env: {"AIKIDO_DISABLE" => "true"})
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: aikido-zen
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.2
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: x86_64-linux-musl
|
|
6
6
|
authors:
|
|
7
7
|
- Aikido Security
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-12-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -77,6 +77,7 @@ files:
|
|
|
77
77
|
- docs/config.md
|
|
78
78
|
- docs/proxy.md
|
|
79
79
|
- docs/rails.md
|
|
80
|
+
- docs/troubleshooting.md
|
|
80
81
|
- lib/aikido-zen.rb
|
|
81
82
|
- lib/aikido/zen.rb
|
|
82
83
|
- lib/aikido/zen/actor.rb
|
|
@@ -84,7 +85,10 @@ files:
|
|
|
84
85
|
- lib/aikido/zen/agent/heartbeats_manager.rb
|
|
85
86
|
- lib/aikido/zen/api_client.rb
|
|
86
87
|
- lib/aikido/zen/attack.rb
|
|
88
|
+
- lib/aikido/zen/attack_wave.rb
|
|
89
|
+
- lib/aikido/zen/attack_wave/helpers.rb
|
|
87
90
|
- lib/aikido/zen/background_worker.rb
|
|
91
|
+
- lib/aikido/zen/cache.rb
|
|
88
92
|
- lib/aikido/zen/capped_collections.rb
|
|
89
93
|
- lib/aikido/zen/collector.rb
|
|
90
94
|
- lib/aikido/zen/collector/event.rb
|
|
@@ -103,14 +107,16 @@ files:
|
|
|
103
107
|
- lib/aikido/zen/detached_agent/server.rb
|
|
104
108
|
- lib/aikido/zen/errors.rb
|
|
105
109
|
- lib/aikido/zen/event.rb
|
|
110
|
+
- lib/aikido/zen/helpers.rb
|
|
106
111
|
- lib/aikido/zen/internals.rb
|
|
107
112
|
- lib/aikido/zen/libzen-v0.1.48-x86_64-linux-musl.so
|
|
108
|
-
- lib/aikido/zen/middleware/
|
|
113
|
+
- lib/aikido/zen/middleware/allowed_address_checker.rb
|
|
114
|
+
- lib/aikido/zen/middleware/attack_wave_protector.rb
|
|
115
|
+
- lib/aikido/zen/middleware/context_setter.rb
|
|
109
116
|
- lib/aikido/zen/middleware/fork_detector.rb
|
|
110
117
|
- lib/aikido/zen/middleware/middleware.rb
|
|
111
118
|
- lib/aikido/zen/middleware/rack_throttler.rb
|
|
112
119
|
- lib/aikido/zen/middleware/request_tracker.rb
|
|
113
|
-
- lib/aikido/zen/middleware/set_context.rb
|
|
114
120
|
- lib/aikido/zen/outbound_connection.rb
|
|
115
121
|
- lib/aikido/zen/outbound_connection_monitor.rb
|
|
116
122
|
- lib/aikido/zen/package.rb
|