lib/mihari/analyzers/base.rb in mihari-4.12.0 vs lib/mihari/analyzers/base.rb in mihari-5.0.0

- old
+ new

@@ -3,49 +3,36 @@ module Mihari module Analyzers class Base extend Dry::Initializer + option :rule, default: proc {} + include Mixins::AutonomousSystem include Mixins::Configurable include Mixins::Database include Mixins::Retriable - attr_accessor :ignore_old_artifacts, :ignore_threshold + # @return [Mihari::Structs::Rule, nil] + attr_reader :rule def initialize(*args, **kwargs) - super + super(*args, **kwargs) - @ignore_old_artifacts = false - @ignore_threshold = 0 + @base_time = Time.now.utc end # @return [Array<String>, Array<Mihari::Artifact>] def artifacts raise NotImplementedError, "You must implement #{self.class}##{__method__}" end # @return [String] - def title - self.class.to_s.split("::").last.to_s - end - - # @return [String] - def description - raise NotImplementedError, "You must implement #{self.class}##{__method__}" - end - - # @return [String] def source self.class.to_s.split("::").last.to_s end - # @return [Array<String>] - def tags - [] - end - # # Set artifacts & run emitters in parallel # # @return [Mihari::Alert, nil] # @@ -75,17 +62,11 @@ # @return [Mihari::Alert, nil] # def run_emitter(emitter) return if enriched_artifacts.empty? - alert_or_something = emitter.run( - title: title, - description: description, - artifacts: enriched_artifacts, - source: source, - tags: tags - ) + alert_or_something = emitter.run(artifacts: enriched_artifacts, rule: rule) Mihari.logger.info "Emission by #{emitter.class} is succedded" alert_or_something rescue StandardError => e @@ -110,11 +91,14 @@ def normalized_artifacts @normalized_artifacts ||= artifacts.compact.sort.map do |artifact| # No need to set data_type manually # It is set automatically in #initialize artifact.is_a?(Artifact) ? artifact : Artifact.new(data: artifact, source: source) - end.select(&:valid?).uniq(&:data) + end.select(&:valid?).uniq(&:data).map do |artifact| + artifact.rule_id = rule&.id + artifact + end end private # @@ -122,10 +106,10 @@ # # @return [Array<Mihari::Artifact>] # def unique_artifacts @unique_artifacts ||= normalized_artifacts.select do |artifact| - artifact.unique?(ignore_old_artifacts: ignore_old_artifacts, ignore_threshold: ignore_threshold) + artifact.unique?(base_time: @base_time, artifact_lifetime: rule&.artifact_lifetime) end end # # Enriched artifacts