mihari 3.6.1 → 3.8.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/lib/mihari/analyzers/base.rb +2 -17
  4. data/lib/mihari/analyzers/rule.rb +1 -0
  5. data/lib/mihari/analyzers/virustotal_intelligence.rb +63 -0
  6. data/lib/mihari/cli/analyzer.rb +2 -0
  7. data/lib/mihari/commands/passivetotal.rb +1 -0
  8. data/lib/mihari/commands/virustotal.rb +1 -0
  9. data/lib/mihari/commands/virustotal_intelligence.rb +22 -0
  10. data/lib/mihari/database.rb +13 -0
  11. data/lib/mihari/enrichers/base.rb +18 -0
  12. data/lib/mihari/enrichers/ipinfo.rb +49 -0
  13. data/lib/mihari/mixins/autonomous_system.rb +19 -0
  14. data/lib/mihari/models/artifact.rb +42 -3
  15. data/lib/mihari/models/autonomous_system.rb +18 -1
  16. data/lib/mihari/models/dns.rb +2 -0
  17. data/lib/mihari/models/geolocation.rb +21 -1
  18. data/lib/mihari/models/reverse_dns.rb +2 -0
  19. data/lib/mihari/models/whois.rb +1 -1
  20. data/lib/mihari/status.rb +7 -2
  21. data/lib/mihari/structs/ipinfo.rb +39 -0
  22. data/lib/mihari/structs/virustotal_intelligence.rb +75 -0
  23. data/lib/mihari/types.rb +13 -3
  24. data/lib/mihari/version.rb +1 -1
  25. data/lib/mihari/web/controllers/artifacts_controller.rb +27 -1
  26. data/lib/mihari/web/controllers/ip_address_controller.rb +4 -19
  27. data/lib/mihari/web/public/index.html +1 -1
  28. data/lib/mihari/web/public/redoc-static.html +7 -6
  29. data/lib/mihari/web/public/static/js/app.06d5cf1c.js +36 -0
  30. data/lib/mihari/web/public/static/js/app.06d5cf1c.js.map +1 -0
  31. data/lib/mihari.rb +42 -27
  32. data/mihari.gemspec +8 -6
  33. data/sig/lib/mihari/analyzers/base.rbs +1 -10
  34. data/sig/lib/mihari/analyzers/virustotal_intelligence.rbs +32 -0
  35. data/sig/lib/mihari/enrichers/base.rbs +12 -0
  36. data/sig/lib/mihari/enrichers/ipinfo.rbs +16 -0
  37. data/sig/lib/mihari/mixins/autonomous_system.rbs +14 -0
  38. data/sig/lib/mihari/models/artifact.rbs +11 -0
  39. data/sig/lib/mihari/models/autonomous_system.rbs +9 -0
  40. data/sig/lib/mihari/models/geolocation.rbs +9 -0
  41. data/sig/lib/mihari/structs/ipinfo.rbs +17 -0
  42. data/sig/lib/mihari/structs/virustotal_intelligence.rbs +33 -0
  43. data/sig/lib/mihari.rbs +2 -0
  44. metadata +57 -14
data/lib/mihari.rb CHANGED
@@ -6,7 +6,11 @@ require "dry/files"
6
6
  require "mem"
7
7
  require "yaml"
8
8
 
9
+ # Load .env
10
+ require "dotenv/load"
11
+
9
12
  # Mixins
13
+ require "mihari/mixins/autonomous_system"
10
14
  require "mihari/mixins/configurable"
11
15
  require "mihari/mixins/configuration"
12
16
  require "mihari/mixins/disallowed_data_value"
@@ -26,32 +30,32 @@ module Mihari
26
30
  extend Dry::Configurable
27
31
  extend Mixins::Configuration
28
32
 
29
- setting :binaryedge_api_key, ENV["BINARYEDGE_API_KEY"]
30
- setting :censys_id, ENV["CENSYS_ID"]
31
- setting :censys_secret, ENV["CENSYS_SECRET"]
32
- setting :circl_passive_password, ENV["CIRCL_PASSIVE_PASSWORD"]
33
- setting :circl_passive_username, ENV["CIRCL_PASSIVE_USERNAME"]
34
- setting :ipinfo_api_key, ENV["ipinfo_api_key"]
35
- setting :misp_api_endpoint, ENV["MISP_API_ENDPOINT"]
36
- setting :misp_api_key, ENV["MISP_API_KEY"]
37
- setting :onyphe_api_key, ENV["ONYPHE_API_KEY"]
38
- setting :otx_api_key, ENV["OTX_API_KEY"]
39
- setting :passivetotal_api_key, ENV["PASSIVETOTAL_API_KEY"]
40
- setting :passivetotal_username, ENV["PASSIVETOTAL_USERNAME"]
41
- setting :pulsedive_api_key, ENV["PULSEDIVE_API_KEY"]
42
- setting :securitytrails_api_key, ENV["SECURITYTRAILS_API_KEY"]
43
- setting :shodan_api_key, ENV["SHODAN_API_KEY"]
44
- setting :slack_channel, ENV["SLACK_CHANNEL"]
45
- setting :slack_webhook_url, ENV["SLACK_WEBHOOK_URL"]
46
- setting :spyse_api_key, ENV["SPYSE_API_KEY"]
47
- setting :thehive_api_endpoint, ENV["THEHIVE_API_ENDPOINT"]
48
- setting :thehive_api_key, ENV["THEHIVE_API_KEY"]
49
- setting :urlscan_api_key, ENV["URLSCAN_API_KEY"]
50
- setting :virustotal_api_key, ENV["VIRUSTOTAL_API_KEY"]
51
- setting :zoomeye_api_key, ENV["ZOOMEYE_API_KEY"]
52
- setting :webhook_url, ENV["WEBHOOK_URL"]
53
- setting(:webhook_use_json_body, ENV["WEBHOOK_USE_JSON_BODY"]) { |value| truthy?(value) }
54
- setting :database, ENV["DATABASE"] || "mihari.db"
33
+ setting :binaryedge_api_key, default: ENV["BINARYEDGE_API_KEY"]
34
+ setting :censys_id, default: ENV["CENSYS_ID"]
35
+ setting :censys_secret, default: ENV["CENSYS_SECRET"]
36
+ setting :circl_passive_password, default: ENV["CIRCL_PASSIVE_PASSWORD"]
37
+ setting :circl_passive_username, default: ENV["CIRCL_PASSIVE_USERNAME"]
38
+ setting :ipinfo_api_key, default: ENV["IPINFO_API_KEY"]
39
+ setting :misp_api_endpoint, default: ENV["MISP_API_ENDPOINT"]
40
+ setting :misp_api_key, default: ENV["MISP_API_KEY"]
41
+ setting :onyphe_api_key, default: ENV["ONYPHE_API_KEY"]
42
+ setting :otx_api_key, default: ENV["OTX_API_KEY"]
43
+ setting :passivetotal_api_key, default: ENV["PASSIVETOTAL_API_KEY"]
44
+ setting :passivetotal_username, default: ENV["PASSIVETOTAL_USERNAME"]
45
+ setting :pulsedive_api_key, default: ENV["PULSEDIVE_API_KEY"]
46
+ setting :securitytrails_api_key, default: ENV["SECURITYTRAILS_API_KEY"]
47
+ setting :shodan_api_key, default: ENV["SHODAN_API_KEY"]
48
+ setting :slack_channel, default: ENV["SLACK_CHANNEL"]
49
+ setting :slack_webhook_url, default: ENV["SLACK_WEBHOOK_URL"]
50
+ setting :spyse_api_key, default: ENV["SPYSE_API_KEY"]
51
+ setting :thehive_api_endpoint, default: ENV["THEHIVE_API_ENDPOINT"]
52
+ setting :thehive_api_key, default: ENV["THEHIVE_API_KEY"]
53
+ setting :urlscan_api_key, default: ENV["URLSCAN_API_KEY"]
54
+ setting :virustotal_api_key, default: ENV["VIRUSTOTAL_API_KEY"]
55
+ setting :zoomeye_api_key, default: ENV["ZOOMEYE_API_KEY"]
56
+ setting :webhook_url, default: ENV["WEBHOOK_URL"]
57
+ setting :webhook_use_json_body, constructor: ->(value = ENV["WEBHOOK_USE_JSON_BODY"]) { truthy?(value) }
58
+ setting :database, default: ENV["DATABASE"] || "mihari.db"
55
59
 
56
60
  class << self
57
61
  include Mem
@@ -66,6 +70,11 @@ module Mihari
66
70
  end
67
71
  memoize :analyzers
68
72
 
73
+ def enrichers
74
+ []
75
+ end
76
+ memoize :enrichers
77
+
69
78
  #
70
79
  # Load configuration from YAML file
71
80
  #
@@ -100,14 +109,20 @@ require "mihari/types"
100
109
 
101
110
  # Structs
102
111
  require "mihari/structs/censys"
112
+ require "mihari/structs/ipinfo"
103
113
  require "mihari/structs/onyphe"
104
114
  require "mihari/structs/shodan"
115
+ require "mihari/structs/virustotal_intelligence"
105
116
 
106
117
  # Schemas
107
118
  require "mihari/schemas/analyzer"
108
119
  require "mihari/schemas/configuration"
109
120
  require "mihari/schemas/rule"
110
121
 
122
+ # Enrichers
123
+ require "mihari/enrichers/base"
124
+ require "mihari/enrichers/ipinfo"
125
+
111
126
  # Models
112
127
  require "mihari/models/alert"
113
128
  require "mihari/models/artifact"
@@ -149,9 +164,9 @@ require "mihari/analyzers/securitytrails"
149
164
  require "mihari/analyzers/shodan"
150
165
  require "mihari/analyzers/spyse"
151
166
  require "mihari/analyzers/urlscan"
167
+ require "mihari/analyzers/virustotal_intelligence"
152
168
  require "mihari/analyzers/virustotal"
153
169
  require "mihari/analyzers/zoomeye"
154
-
155
170
  require "mihari/analyzers/rule"
156
171
 
157
172
  # Notifiers
data/mihari.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
 
28
28
  spec.add_development_dependency "bundler", "~> 2.2"
29
- spec.add_development_dependency "coveralls_reborn", "~> 0.22"
29
+ spec.add_development_dependency "coveralls_reborn", "~> 0.23"
30
30
  spec.add_development_dependency "fakefs", "~> 1.3"
31
31
  spec.add_development_dependency "mysql2", "~> 0.5"
32
32
  spec.add_development_dependency "overcommit", "~> 0.58"
@@ -36,8 +36,8 @@ Gem::Specification.new do |spec|
36
36
  spec.add_development_dependency "rb-fsevent", "~> 0.11"
37
37
  spec.add_development_dependency "rerun", "~> 0.13"
38
38
  spec.add_development_dependency "rspec", "~> 3.10"
39
- spec.add_development_dependency "standard", "~> 1.2"
40
- spec.add_development_dependency "steep", "~> 0.45"
39
+ spec.add_development_dependency "standard", "~> 1.3"
40
+ spec.add_development_dependency "steep", "~> 0.46"
41
41
  spec.add_development_dependency "timecop", "~> 0.9"
42
42
  spec.add_development_dependency "vcr", "~> 6.0"
43
43
  spec.add_development_dependency "webmock", "~> 3.14"
@@ -54,16 +54,18 @@ Gem::Specification.new do |spec|
54
54
  spec.add_dependency "cymbal", "~> 2.0"
55
55
  spec.add_dependency "dnpedia", "~> 0.1"
56
56
  spec.add_dependency "dnstwister", "~> 0.1"
57
- spec.add_dependency "dry-configurable", "~> 0.12"
57
+ spec.add_dependency "dotenv", "~> 2.7"
58
+ spec.add_dependency "dry-configurable", "~> 0.13"
58
59
  spec.add_dependency "dry-files", "~> 0.1"
59
60
  spec.add_dependency "dry-initializer", "~> 3.0"
60
61
  spec.add_dependency "dry-struct", "~> 1.4"
61
- spec.add_dependency "dry-validation", "~> 1.6"
62
+ spec.add_dependency "dry-validation", "~> 1.7"
62
63
  spec.add_dependency "email_address", "~> 0.2"
63
64
  spec.add_dependency "hachi", "~> 1.0"
64
65
  spec.add_dependency "http", "~> 5.0"
65
66
  spec.add_dependency "launchy", "~> 2.5"
66
67
  spec.add_dependency "mem", "~> 0.1"
68
+ spec.add_dependency "memist", "~> 2.0"
67
69
  spec.add_dependency "misp", "~> 0.1"
68
70
  spec.add_dependency "net-ping", "~> 2.0"
69
71
  spec.add_dependency "normalize_country", "0.3"
@@ -90,7 +92,7 @@ Gem::Specification.new do |spec|
90
92
  spec.add_dependency "thread_safe", "~> 0.3"
91
93
  spec.add_dependency "urlscan", "~> 0.7"
92
94
  spec.add_dependency "uuidtools", "~> 2.2"
93
- spec.add_dependency "virustotalx", "~> 1.1"
95
+ spec.add_dependency "virustotalx", "~> 1.2"
94
96
  spec.add_dependency "whois", "~> 5.0"
95
97
  spec.add_dependency "whois-parser", "~> 1.2"
96
98
  spec.add_dependency "zoomeye-rb", "~> 0.2"
@@ -3,8 +3,8 @@ module Mihari
3
3
  class Base
4
4
  # extend Dry::Initializer
5
5
 
6
+ include Mixins::AutonomousSystem
6
7
  include Mixins::Configurable
7
-
8
8
  include Mixins::Retriable
9
9
 
10
10
  attr_accessor ignore_old_artifacts: bool
@@ -85,15 +85,6 @@ module Mihari
85
85
  # @return [Array<Mihari::Emitters::Base>]
86
86
  #
87
87
  def valid_emitters: () -> Array[Mihari::Emitters::Base]
88
-
89
- #
90
- # Normalize ASN value
91
- #
92
- # @param [String, Integer] asn
93
- #
94
- # @return [Integer]
95
- #
96
- def normalize_asn: (String asn) -> Integer
97
88
  end
98
89
  end
99
90
  end
@@ -0,0 +1,32 @@
1
+ module Mihari
2
+ module Analyzers
3
+ class VirusTotalIntelligence < Base
4
+ attr_reader query: String
5
+ attr_reader title: String
6
+ attr_reader description: String
7
+ attr_reader tags: Array[String]
8
+
9
+ def initialize: (*untyped args, **untyped kwargs) -> void
10
+
11
+ def artifacts: () -> (Array[String] | Array[Mihari::Artifact])
12
+
13
+ private
14
+
15
+ def configuration_keys: () -> ::Array["virustotal_api_key"]
16
+
17
+ #
18
+ # VT API
19
+ #
20
+ # @return [::VirusTotal::API]
21
+ #
22
+ def api: () -> untyped
23
+
24
+ #
25
+ # Search with cursor
26
+ #
27
+ # @return [Array<Mihari::Structs::VirusTotalIntelligence::Response>]
28
+ #
29
+ def search_witgh_cursor: () -> Array[Mihari::Structs::VirusTotalIntelligence::Response]
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ module Mihari
2
+ module Enrichers
3
+ class Base
4
+ include Mixins::Configurable
5
+
6
+ def self.inherited: (untyped child) -> untyped
7
+
8
+ # @return [Boolean]
9
+ def valid?: () -> bool
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Mihari
2
+ module Enrichers
3
+ class IPInfo
4
+ def valid?: () -> bool
5
+
6
+ #
7
+ # Query IPInfo
8
+ #
9
+ # @param [String] ip
10
+ #
11
+ # @return [Mihari::Structs::IPInfo::Response, nil]
12
+ #
13
+ def self.query: (String ip) -> Mihari::Structs::IPInfo::Response?
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Mihari
2
+ module Mixins
3
+ module AutonomousSystem
4
+ #
5
+ # Normalize ASN value
6
+ #
7
+ # @param [String, Integer] asn
8
+ #
9
+ # @return [Integer]
10
+ #
11
+ def normalize_asn: (String | Integer asn) -> Integer
12
+ end
13
+ end
14
+ end
@@ -7,6 +7,7 @@ module Mihari
7
7
  attr_accessor data (): String
8
8
  attr_accessor data_type (): String
9
9
 
10
+ attr_accessor autonomous_system(): Mihari::AutonomousSystem
10
11
  attr_accessor geolocation (): Mihari::Geolocation
11
12
  attr_accessor whois_record(): Mihari::WhoisRecord
12
13
  attr_accessor dns_records(): Array[Mihari::DnsRecord]
@@ -41,6 +42,12 @@ module Mihari
41
42
  #
42
43
  def enrich_reverse_dns: () -> void
43
44
 
45
+ def enrich_geolocation: () -> void
46
+
47
+ def enrich_autonomous_system: () -> void
48
+
49
+ def enrich_all: () -> void
50
+
44
51
  private
45
52
 
46
53
  def normalize_as_domain: (String url_or_domain) -> String
@@ -50,5 +57,9 @@ module Mihari
50
57
  def can_enrich_dns?: () -> bool
51
58
 
52
59
  def can_enrich_revese_dns?: () -> bool
60
+
61
+ def can_enrich_geolocation?: () -> bool
62
+
63
+ def can_enrich_autonomous_system?: () -> bool
53
64
  end
54
65
  end
@@ -1,5 +1,14 @@
1
1
  module Mihari
2
2
  class AutonomousSystem < ActiveRecord::Base
3
3
  attr_accessor asn (): Integer
4
+
5
+ #
6
+ # Build AS by IP
7
+ #
8
+ # @param [String] ip
9
+ #
10
+ # @return [Mihari::AutonomousSystem]
11
+ #
12
+ def self.build_by_ip: (String ip) -> Mihari::AutonomousSystem?
4
13
  end
5
14
  end
@@ -2,5 +2,14 @@ module Mihari
2
2
  class Geolocation < ActiveRecord::Base
3
3
  attr_accessor country (): String
4
4
  attr_accessor country_code (): String
5
+
6
+ #
7
+ # Build geolocation by IP
8
+ #
9
+ # @param [String] ip
10
+ #
11
+ # @return [Mihari::Geolocation]
12
+ #
13
+ def self.build_by_ip: (String ip) -> Mihari::Geolocation?
5
14
  end
6
15
  end
@@ -0,0 +1,17 @@
1
+ module Mihari
2
+ module Structs
3
+ module IPInfo
4
+ class Response
5
+ attr_reader ip: String
6
+ attr_reader hostname: String?
7
+ attr_reader loc: String
8
+ attr_reader country_code: String
9
+ attr_reader asn: Integer?
10
+
11
+ def self.from_dynamic!: (Hash[(String | Symbol), untyped] d) -> Mihari::Structs::IPInfo::Response
12
+
13
+ def to_hash: () -> Hash[(String | Symbol), untyped]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ module Mihari
2
+ module Structs
3
+ module VirusTotalIntelligence
4
+ class ContextAttributes
5
+ attr_reader url: Array[String]?
6
+
7
+ def self.from_dynamic!: (Hash[(String | Symbol), untyped] d) -> Mihari::Structs::VirusTotalIntelligence::ContextAttributes
8
+ end
9
+
10
+ class Datum
11
+ attr_reader type: String
12
+ attr_reader context_attributes: Mihari::Structs::VirusTotalIntelligence::ContextAttributes?
13
+
14
+ def value: () -> String?
15
+
16
+ def self.from_dynamic!: (Hash[(String | Symbol), untyped] d) -> Mihari::Structs::VirusTotalIntelligence::Datum
17
+ end
18
+
19
+ class Meta
20
+ attr_reader cursor: String?
21
+
22
+ def self.from_dynamic!: (Hash[(String | Symbol), untyped] d) -> Mihari::Structs::VirusTotalIntelligence::Meta
23
+ end
24
+
25
+ class Response
26
+ attr_reader meta: Mihari::Structs::VirusTotalIntelligence::Meta
27
+ attr_reader data: Array[Mihari::Structs::VirusTotalIntelligence::Datum]
28
+
29
+ def self.from_dynamic!: (Hash[(String | Symbol), untyped] d) -> Mihari::Structs::VirusTotalIntelligence::Response
30
+ end
31
+ end
32
+ end
33
+ end
data/sig/lib/mihari.rbs CHANGED
@@ -42,6 +42,8 @@ module Mihari
42
42
 
43
43
  def self.analyzers: () -> ::Array[singleton(Mihari::Analyzers::Base)]
44
44
 
45
+ def self.enrichers: () -> ::Array[singleton(Mihari::Enrichers::Base)]
46
+
45
47
  #
46
48
  # Load configuration from YAML file
47
49
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mihari
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.1
4
+ version: 3.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-29 00:00:00.000000000 Z
11
+ date: 2021-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.22'
33
+ version: '0.23'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.22'
40
+ version: '0.23'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: fakefs
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -170,28 +170,28 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '1.2'
173
+ version: '1.3'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '1.2'
180
+ version: '1.3'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: steep
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '0.45'
187
+ version: '0.46'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0.45'
194
+ version: '0.46'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: timecop
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -402,20 +402,34 @@ dependencies:
402
402
  - - "~>"
403
403
  - !ruby/object:Gem::Version
404
404
  version: '0.1'
405
+ - !ruby/object:Gem::Dependency
406
+ name: dotenv
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - "~>"
410
+ - !ruby/object:Gem::Version
411
+ version: '2.7'
412
+ type: :runtime
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - "~>"
417
+ - !ruby/object:Gem::Version
418
+ version: '2.7'
405
419
  - !ruby/object:Gem::Dependency
406
420
  name: dry-configurable
407
421
  requirement: !ruby/object:Gem::Requirement
408
422
  requirements:
409
423
  - - "~>"
410
424
  - !ruby/object:Gem::Version
411
- version: '0.12'
425
+ version: '0.13'
412
426
  type: :runtime
413
427
  prerelease: false
414
428
  version_requirements: !ruby/object:Gem::Requirement
415
429
  requirements:
416
430
  - - "~>"
417
431
  - !ruby/object:Gem::Version
418
- version: '0.12'
432
+ version: '0.13'
419
433
  - !ruby/object:Gem::Dependency
420
434
  name: dry-files
421
435
  requirement: !ruby/object:Gem::Requirement
@@ -464,14 +478,14 @@ dependencies:
464
478
  requirements:
465
479
  - - "~>"
466
480
  - !ruby/object:Gem::Version
467
- version: '1.6'
481
+ version: '1.7'
468
482
  type: :runtime
469
483
  prerelease: false
470
484
  version_requirements: !ruby/object:Gem::Requirement
471
485
  requirements:
472
486
  - - "~>"
473
487
  - !ruby/object:Gem::Version
474
- version: '1.6'
488
+ version: '1.7'
475
489
  - !ruby/object:Gem::Dependency
476
490
  name: email_address
477
491
  requirement: !ruby/object:Gem::Requirement
@@ -542,6 +556,20 @@ dependencies:
542
556
  - - "~>"
543
557
  - !ruby/object:Gem::Version
544
558
  version: '0.1'
559
+ - !ruby/object:Gem::Dependency
560
+ name: memist
561
+ requirement: !ruby/object:Gem::Requirement
562
+ requirements:
563
+ - - "~>"
564
+ - !ruby/object:Gem::Version
565
+ version: '2.0'
566
+ type: :runtime
567
+ prerelease: false
568
+ version_requirements: !ruby/object:Gem::Requirement
569
+ requirements:
570
+ - - "~>"
571
+ - !ruby/object:Gem::Version
572
+ version: '2.0'
545
573
  - !ruby/object:Gem::Dependency
546
574
  name: misp
547
575
  requirement: !ruby/object:Gem::Requirement
@@ -912,14 +940,14 @@ dependencies:
912
940
  requirements:
913
941
  - - "~>"
914
942
  - !ruby/object:Gem::Version
915
- version: '1.1'
943
+ version: '1.2'
916
944
  type: :runtime
917
945
  prerelease: false
918
946
  version_requirements: !ruby/object:Gem::Requirement
919
947
  requirements:
920
948
  - - "~>"
921
949
  - !ruby/object:Gem::Version
922
- version: '1.1'
950
+ version: '1.2'
923
951
  - !ruby/object:Gem::Dependency
924
952
  name: whois
925
953
  requirement: !ruby/object:Gem::Requirement
@@ -1018,6 +1046,7 @@ files:
1018
1046
  - lib/mihari/analyzers/spyse.rb
1019
1047
  - lib/mihari/analyzers/urlscan.rb
1020
1048
  - lib/mihari/analyzers/virustotal.rb
1049
+ - lib/mihari/analyzers/virustotal_intelligence.rb
1021
1050
  - lib/mihari/analyzers/zoomeye.rb
1022
1051
  - lib/mihari/cli/analyzer.rb
1023
1052
  - lib/mihari/cli/base.rb
@@ -1044,6 +1073,7 @@ files:
1044
1073
  - lib/mihari/commands/urlscan.rb
1045
1074
  - lib/mihari/commands/validator.rb
1046
1075
  - lib/mihari/commands/virustotal.rb
1076
+ - lib/mihari/commands/virustotal_intelligence.rb
1047
1077
  - lib/mihari/commands/web.rb
1048
1078
  - lib/mihari/commands/zoomeye.rb
1049
1079
  - lib/mihari/constants.rb
@@ -1055,7 +1085,10 @@ files:
1055
1085
  - lib/mihari/emitters/stdout.rb
1056
1086
  - lib/mihari/emitters/the_hive.rb
1057
1087
  - lib/mihari/emitters/webhook.rb
1088
+ - lib/mihari/enrichers/base.rb
1089
+ - lib/mihari/enrichers/ipinfo.rb
1058
1090
  - lib/mihari/errors.rb
1091
+ - lib/mihari/mixins/autonomous_system.rb
1059
1092
  - lib/mihari/mixins/configurable.rb
1060
1093
  - lib/mihari/mixins/configuration.rb
1061
1094
  - lib/mihari/mixins/disallowed_data_value.rb
@@ -1089,8 +1122,10 @@ files:
1089
1122
  - lib/mihari/serializers/whois.rb
1090
1123
  - lib/mihari/status.rb
1091
1124
  - lib/mihari/structs/censys.rb
1125
+ - lib/mihari/structs/ipinfo.rb
1092
1126
  - lib/mihari/structs/onyphe.rb
1093
1127
  - lib/mihari/structs/shodan.rb
1128
+ - lib/mihari/structs/virustotal_intelligence.rb
1094
1129
  - lib/mihari/templates/rule.yml.erb
1095
1130
  - lib/mihari/type_checker.rb
1096
1131
  - lib/mihari/types.rb
@@ -1139,6 +1174,8 @@ files:
1139
1174
  - lib/mihari/web/public/static/img/fa-regular-400.c5d109be.svg
1140
1175
  - lib/mihari/web/public/static/img/fa-solid-900.376c1f97.svg
1141
1176
  - lib/mihari/web/public/static/img/fa-solid-900.37bc7099.svg
1177
+ - lib/mihari/web/public/static/js/app.06d5cf1c.js
1178
+ - lib/mihari/web/public/static/js/app.06d5cf1c.js.map
1142
1179
  - lib/mihari/web/public/static/js/app.365f1907.js
1143
1180
  - lib/mihari/web/public/static/js/app.365f1907.js.map
1144
1181
  - lib/mihari/web/public/static/js/app.8e3e5150.js
@@ -1170,6 +1207,7 @@ files:
1170
1207
  - sig/lib/mihari/analyzers/spyse.rbs
1171
1208
  - sig/lib/mihari/analyzers/urlscan.rbs
1172
1209
  - sig/lib/mihari/analyzers/virustotal.rbs
1210
+ - sig/lib/mihari/analyzers/virustotal_intelligence.rbs
1173
1211
  - sig/lib/mihari/analyzers/zoomeye.rbs
1174
1212
  - sig/lib/mihari/cli/analyzer.rbs
1175
1213
  - sig/lib/mihari/cli/base.rbs
@@ -1207,7 +1245,10 @@ files:
1207
1245
  - sig/lib/mihari/emitters/stdout.rbs
1208
1246
  - sig/lib/mihari/emitters/the_hive.rbs
1209
1247
  - sig/lib/mihari/emitters/webhook.rbs
1248
+ - sig/lib/mihari/enrichers/base.rbs
1249
+ - sig/lib/mihari/enrichers/ipinfo.rbs
1210
1250
  - sig/lib/mihari/errors.rbs
1251
+ - sig/lib/mihari/mixins/autonomous_system.rbs
1211
1252
  - sig/lib/mihari/mixins/configurable.rbs
1212
1253
  - sig/lib/mihari/mixins/configuration.rbs
1213
1254
  - sig/lib/mihari/mixins/disallowed_data_value.rbs
@@ -1229,8 +1270,10 @@ files:
1229
1270
  - sig/lib/mihari/notifiers/slack.rbs
1230
1271
  - sig/lib/mihari/status.rbs
1231
1272
  - sig/lib/mihari/structs/censys.rbs
1273
+ - sig/lib/mihari/structs/ipinfo.rbs
1232
1274
  - sig/lib/mihari/structs/onyphe.rbs
1233
1275
  - sig/lib/mihari/structs/shodan.rbs
1276
+ - sig/lib/mihari/structs/virustotal_intelligence.rbs
1234
1277
  - sig/lib/mihari/type_checker.rbs
1235
1278
  - sig/lib/mihari/types.rbs
1236
1279
  - sig/lib/mihari/version.rbs