mihari 3.6.1 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
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