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