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.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/lib/mihari/analyzers/base.rb +2 -17
- data/lib/mihari/analyzers/rule.rb +1 -0
- data/lib/mihari/analyzers/virustotal_intelligence.rb +63 -0
- data/lib/mihari/cli/analyzer.rb +2 -0
- data/lib/mihari/commands/passivetotal.rb +1 -0
- data/lib/mihari/commands/virustotal.rb +1 -0
- data/lib/mihari/commands/virustotal_intelligence.rb +22 -0
- data/lib/mihari/database.rb +13 -0
- data/lib/mihari/enrichers/base.rb +18 -0
- data/lib/mihari/enrichers/ipinfo.rb +49 -0
- data/lib/mihari/mixins/autonomous_system.rb +19 -0
- data/lib/mihari/models/artifact.rb +42 -3
- data/lib/mihari/models/autonomous_system.rb +18 -1
- data/lib/mihari/models/dns.rb +2 -0
- data/lib/mihari/models/geolocation.rb +21 -1
- data/lib/mihari/models/reverse_dns.rb +2 -0
- data/lib/mihari/models/whois.rb +1 -1
- data/lib/mihari/status.rb +7 -2
- data/lib/mihari/structs/ipinfo.rb +39 -0
- data/lib/mihari/structs/virustotal_intelligence.rb +75 -0
- data/lib/mihari/types.rb +13 -3
- data/lib/mihari/version.rb +1 -1
- data/lib/mihari/web/controllers/artifacts_controller.rb +27 -1
- data/lib/mihari/web/controllers/ip_address_controller.rb +4 -19
- data/lib/mihari/web/public/index.html +1 -1
- data/lib/mihari/web/public/redoc-static.html +7 -6
- data/lib/mihari/web/public/static/js/app.06d5cf1c.js +36 -0
- data/lib/mihari/web/public/static/js/app.06d5cf1c.js.map +1 -0
- data/lib/mihari.rb +42 -27
- data/mihari.gemspec +8 -6
- data/sig/lib/mihari/analyzers/base.rbs +1 -10
- data/sig/lib/mihari/analyzers/virustotal_intelligence.rbs +32 -0
- data/sig/lib/mihari/enrichers/base.rbs +12 -0
- data/sig/lib/mihari/enrichers/ipinfo.rbs +16 -0
- data/sig/lib/mihari/mixins/autonomous_system.rbs +14 -0
- data/sig/lib/mihari/models/artifact.rbs +11 -0
- data/sig/lib/mihari/models/autonomous_system.rbs +9 -0
- data/sig/lib/mihari/models/geolocation.rbs +9 -0
- data/sig/lib/mihari/structs/ipinfo.rbs +17 -0
- data/sig/lib/mihari/structs/virustotal_intelligence.rbs +33 -0
- data/sig/lib/mihari.rbs +2 -0
- 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["
|
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
|
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.
|
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.
|
40
|
-
spec.add_development_dependency "steep", "~> 0.
|
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 "
|
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.
|
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.
|
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,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
|
@@ -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
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.
|
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-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|