mihari 1.1.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46761bb6c390e76763b5b76c711cd222a08735bb3e539862bb2cac211d44bfc3
4
- data.tar.gz: 19cdc765f98da35dd299038ce8f310ce30cd4a7903a2c56344e97631fdf32f87
3
+ metadata.gz: 6ece49c7c528579aec4fec009765915a2afe72df87eca5c39ccb59a416a200c4
4
+ data.tar.gz: d4c595a7c38fb8e8b8350e38f90f572d8a74eef836817fea4ba21bb6893c3af3
5
5
  SHA512:
6
- metadata.gz: eda0f8f7537c6a9a456c225545bc615d3573f4789ce9b411faf3fc83cf155417adac87bd043e605303874199d24395f2a71e06275cae5909b9e2fb95221e4651
7
- data.tar.gz: 38a9250b72efb654b1e8c10904077f205838a7d61742f3e545cef26d3703a161c60b77c1459ee10fd0d2fa814e1b234663fd13132cc2d406833aaf6d51519de8
6
+ metadata.gz: 6ea5989d78febe490473a21c2c1958e96ea2f920eee5eee90c4521ca774c5fbd35b10efb41270adb1f5344189461afc010a2b38aec2aeae86d901e5dd7aea9d1
7
+ data.tar.gz: 3c18daec3b396ac0ec96cdb22cf444c8a12f1031189b68c90961bd24ccc8143e0682294b067ca21dd59115712f7d811aaf0352c6d27bf319dcce6e988b3362a9
data/README.md CHANGED
@@ -33,6 +33,17 @@ Mihari is a helper to run queries & manage results continuously. Mihari can be u
33
33
 
34
34
  ![img](https://github.com/ninoseki/mihari/raw/master/screenshots/misp.png)
35
35
 
36
+ ## Requirements
37
+
38
+ - Ruby 2.6+
39
+ - SQLite3
40
+ - libpq
41
+
42
+ ```bash
43
+ # For Debian / Ubuntu
44
+ apt-get install sqlite3 libsqlite3-dev libpq-dev
45
+ ```
46
+
36
47
  ## Installation
37
48
 
38
49
  ```bash
@@ -56,9 +67,11 @@ Mihari supports the following services by default.
56
67
  - [DN Pedia](https://dnpedia.com/)
57
68
  - [dnstwister](https://dnstwister.report/)
58
69
  - [Onyphe](https://onyphe.io)
70
+ - [OTX](https://otx.alienvault.com/)
59
71
  - [PassiveTotal](https://community.riskiq.com/)
60
72
  - [SecurityTrails](https://securitytrails.com/)
61
73
  - [Shodan](https://shodan.io)
74
+ - [Spyse](https://spyse.com)
62
75
  - [urlscan.io](https://urlscan.io)
63
76
  - [VirusTotal](http://virustotal.com)
64
77
  - [ZoomEye](https://zoomeye.org)
@@ -78,6 +91,7 @@ Commands:
78
91
  mihari http_hash # Cross search with search engines by a hash of an HTTP response (SHA256, MD5 and MurmurHash3)
79
92
  mihari import_from_json # Give a JSON input via STDIN
80
93
  mihari onyphe [QUERY] # Onyphe datascan search by a query
94
+ mihari otx [IP|DOMAIN] # OTX lookup by an IP or domain
81
95
  mihari passive_dns [IP|DOMAIN] # Cross search with passive DNS services by an ip or domain
82
96
  mihari passive_ssl [SHA1] # Cross search with passive SSL services by an SHA1 certificate fingerprint
83
97
  mihari passivetotal [IP|DOMAIN|EMAIL|SHA1] # PassiveTotal lookup by an ip, domain, email or SHA1 certificate fingerprint
@@ -86,6 +100,7 @@ Commands:
86
100
  mihari securitytrails [IP|DOMAIN|EMAIL] # SecurityTrails lookup by an ip, domain or email
87
101
  mihari securitytrails_domain_feed [REGEXP] # SecurityTrails new domain feed search by a regexp
88
102
  mihari shodan [QUERY] # Shodan host search by a query
103
+ mihari spyse [QUERY] # Spyse search by a query
89
104
  mihari ssh_fingerprint [FINGERPRINT] # Cross search with search engines by an SSH fingerprint (e.g. dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0)
90
105
  mihari status # Show the current configuration status
91
106
  mihari urlscan [QUERY] # urlscan search by a given query
@@ -105,7 +120,7 @@ You can get aggregated results by using the following commands.
105
120
 
106
121
  | Command | Desc. |
107
122
  |-----------------|---------------------------------------------------------------------------------------------------------|
108
- | passive_dns | Passive DNS lookup with CIRCL passive DNS, PassiveTotal, Pulsedive, SecurityTrails and VirusTotal |
123
+ | passive_dns | Passive DNS lookup with CIRCL passive DNS, OTX, PassiveTotal, Pulsedive, SecurityTrails and VirusTotal |
109
124
  | passive_ssl | Passive SSL lookup with CIRCL passive SSL and PassiveTotal |
110
125
  | reverse_whois | Revese Whois lookup with PassiveTotal and SecurityTrails |
111
126
  | http_hash | HTTP response hash lookup with BinaryEdge(SHA256), Censys(SHA256), Onyphpe(MD5) and Shodan(MurmurHash3) |
@@ -200,6 +215,7 @@ Configuration can be done via environment variables or a YAML file.
200
215
  | MISP_API_ENDPOINT | MISP URL | |
201
216
  | MISP_API_KEY | MISP API key | |
202
217
  | ONYPHE_API_KEY | Onyphe API key | |
218
+ | OTX_API_KEY | OTX API key | |
203
219
  | PASSIVETOTAL_API_KEY | PassiveTotal API key | |
204
220
  | PASSIVETOTAL_USERNAME | PassiveTotal username | |
205
221
  | PULSEDIVE_API_KEY | Pulsedive API key | |
@@ -207,8 +223,10 @@ Configuration can be done via environment variables or a YAML file.
207
223
  | SHODAN_API_KEY | Shodan API key | |
208
224
  | SLACK_CHANNEL | Slack channel name | `#general` |
209
225
  | SLACK_WEBHOOK_URL | Slack Webhook URL | |
226
+ | SPYSE_API_KEY | Spyse API key | |
210
227
  | THEHIVE_API_ENDPOINT | TheHive URL | |
211
228
  | THEHIVE_API_KEY | TheHive API key | |
229
+ | URLSCAN_API_KEY | urlscan.io API key | |
212
230
  | VIRUSTOTAL_API_KEY | VirusTotal API key | |
213
231
  | ZOOMEYE_PASSWORD | ZoomEye password | |
214
232
  | ZOOMEYE_USERNAMME | ZoomEye username | |
@@ -1,4 +1,4 @@
1
- FROM ruby:2.6-alpine3.10
1
+ FROM ruby:2.7-alpine3.10
2
2
  RUN apk --no-cache add git build-base ruby-dev sqlite-dev postgresql-dev \
3
3
  && cd /tmp/ \
4
4
  && git clone https://github.com/ninoseki/mihari.git \
@@ -6,7 +6,7 @@ RUN apk --no-cache add git build-base ruby-dev sqlite-dev postgresql-dev \
6
6
  && gem build mihari.gemspec -o mihari.gem \
7
7
  && gem install mihari.gem \
8
8
  && rm -rf /tmp/mihari \
9
- && apk del --purge git build-base ruby-dev sqlite-dev postgresql-dev
9
+ && apk del --purge git build-base ruby-dev
10
10
 
11
11
  ENTRYPOINT ["mihari"]
12
12
 
@@ -50,11 +50,13 @@ require "mihari/analyzers/crtsh"
50
50
  require "mihari/analyzers/dnpedia"
51
51
  require "mihari/analyzers/dnstwister"
52
52
  require "mihari/analyzers/onyphe"
53
+ require "mihari/analyzers/otx"
53
54
  require "mihari/analyzers/passivetotal"
54
55
  require "mihari/analyzers/pulsedive"
55
56
  require "mihari/analyzers/securitytrails_domain_feed"
56
57
  require "mihari/analyzers/securitytrails"
57
58
  require "mihari/analyzers/shodan"
59
+ require "mihari/analyzers/spyse"
58
60
  require "mihari/analyzers/urlscan"
59
61
  require "mihari/analyzers/virustotal"
60
62
  require "mihari/analyzers/zoomeye"
@@ -37,6 +37,10 @@ module Mihari
37
37
 
38
38
  def search_with_page(query, page: 1)
39
39
  api.host.search(query, page: page)
40
+ rescue ::BinaryEdge::Error => e
41
+ raise RetryableError, e if e.message.include?("Request time limit exceeded")
42
+
43
+ raise e
40
44
  end
41
45
 
42
46
  def search
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "otx_ruby"
4
+
5
+ module Mihari
6
+ module Analyzers
7
+ class OTX < Base
8
+ attr_reader :query
9
+ attr_reader :type
10
+
11
+ attr_reader :title
12
+ attr_reader :description
13
+ attr_reader :tags
14
+
15
+ def initialize(query, title: nil, description: nil, tags: [])
16
+ super()
17
+
18
+ @query = query
19
+ @type = TypeChecker.type(query)
20
+
21
+ @title = title || "OTX lookup"
22
+ @description = description || "query = #{query}"
23
+ @tags = tags
24
+ end
25
+
26
+ def artifacts
27
+ lookup || []
28
+ end
29
+
30
+ private
31
+
32
+ def config_keys
33
+ %w(otx_api_key)
34
+ end
35
+
36
+ def domain_client
37
+ @domain_client ||= ::OTX::Domain.new(Mihari.config.otx_api_key)
38
+ end
39
+
40
+ def ip_client
41
+ @ip_client ||= ::OTX::IP.new(Mihari.config.otx_api_key)
42
+ end
43
+
44
+ def valid_type?
45
+ %w(ip domain).include? type
46
+ end
47
+
48
+ def lookup
49
+ case type
50
+ when "domain"
51
+ domain_lookup
52
+ when "ip"
53
+ ip_lookup
54
+ else
55
+ raise InvalidInputError, "#{query}(type: #{type || 'unknown'}) is not supported." unless valid_type?
56
+ end
57
+ end
58
+
59
+ def domain_lookup
60
+ records = domain_client.get_passive_dns(query)
61
+ records.map do |record|
62
+ record.address if record.record_type == "A"
63
+ end.compact.uniq
64
+ end
65
+
66
+ def ip_lookup
67
+ records = ip_client.get_passive_dns(query)
68
+ records.map do |record|
69
+ record.hostname if record.record_type == "A"
70
+ end.compact.uniq
71
+ end
72
+ end
73
+ end
74
+ end
@@ -14,6 +14,7 @@ module Mihari
14
14
 
15
15
  ANALYZERS = [
16
16
  Mihari::Analyzers::CIRCL,
17
+ Mihari::Analyzers::OTX,
17
18
  Mihari::Analyzers::PassiveTotal,
18
19
  Mihari::Analyzers::Pulsedive,
19
20
  Mihari::Analyzers::SecurityTrails,
@@ -55,7 +56,7 @@ module Mihari
55
56
  analyzer.artifacts
56
57
  rescue ArgumentError, InvalidInputError => _e
57
58
  nil
58
- rescue ::PassiveCIRCL::Error, ::PassiveTotal::Error, ::Pulsedive::ResponseError, ::SecurityTrails::Error, ::VirusTotal::Error => _e
59
+ rescue Faraday::Error, ::PassiveCIRCL::Error, ::PassiveTotal::Error, ::Pulsedive::ResponseError, ::SecurityTrails::Error, ::VirusTotal::Error => _e
59
60
  nil
60
61
  end
61
62
  end
@@ -45,6 +45,10 @@ module Mihari
45
45
 
46
46
  def search_with_page(query, page: 1)
47
47
  api.host.search(query, page: page)
48
+ rescue ::Shodan::Error => e
49
+ raise RetryableError, e if e.message.include?("request timed out")
50
+
51
+ raise e
48
52
  end
49
53
 
50
54
  def search
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spyse"
4
+ require "json"
5
+
6
+ module Mihari
7
+ module Analyzers
8
+ class Spyse < Base
9
+ attr_reader :query
10
+ attr_reader :type
11
+
12
+ attr_reader :title
13
+ attr_reader :description
14
+ attr_reader :tags
15
+
16
+ def initialize(query, title: nil, description: nil, tags: [], type: "domain")
17
+ super()
18
+
19
+ @query = query
20
+
21
+ @title = title || "Spyse lookup"
22
+ @description = description || "query = #{query}"
23
+ @tags = tags
24
+ @type = type
25
+ end
26
+
27
+ def artifacts
28
+ lookup || []
29
+ end
30
+
31
+ private
32
+
33
+ def search_params
34
+ @search_params ||= JSON.parse(query)
35
+ end
36
+
37
+ def config_keys
38
+ %w(spyse_api_key)
39
+ end
40
+
41
+ def api
42
+ @api ||= ::Spyse::API.new(Mihari.config.spyse_api_key)
43
+ end
44
+
45
+ def valid_type?
46
+ %w(ip domain cert).include? type
47
+ end
48
+
49
+ def domain_lookup
50
+ res = api.domain.search(search_params, limit: 100)
51
+ items = res.dig("data", "items") || []
52
+ items.map do |item|
53
+ item.dig("name")
54
+ end.uniq.compact
55
+ end
56
+
57
+ def ip_lookup
58
+ res = api.ip.search(search_params, limit: 100)
59
+ items = res.dig("data", "items") || []
60
+ items.map do |item|
61
+ item.dig("ip")
62
+ end.uniq.compact
63
+ end
64
+
65
+ def lookup
66
+ case type
67
+ when "domain"
68
+ domain_lookup
69
+ when "ip"
70
+ ip_lookup
71
+ else
72
+ raise InvalidInputError, "#{query}(type: #{type || 'unknown'}) is not supported." unless valid_type?
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -35,8 +35,12 @@ module Mihari
35
35
 
36
36
  private
37
37
 
38
+ def config_keys
39
+ %w(urlscan_api_key)
40
+ end
41
+
38
42
  def api
39
- @api ||= ::UrlScan::API.new
43
+ @api ||= ::UrlScan::API.new(Mihari.config.urlscan_api_key)
40
44
  end
41
45
 
42
46
  def search
@@ -164,6 +164,27 @@ module Mihari
164
164
  end
165
165
  end
166
166
 
167
+ desc "otx [IP|DOMAIN]", "OTX lookup by an IP or domain"
168
+ method_option :title, type: :string, desc: "title"
169
+ method_option :description, type: :string, desc: "description"
170
+ method_option :tags, type: :array, desc: "tags"
171
+ def otx(domain)
172
+ with_error_handling do
173
+ run_analyzer Analyzers::OTX, query: refang(domain), options: options
174
+ end
175
+ end
176
+
177
+ desc "spyse [QUERY]", "Spyse search by a query"
178
+ method_option :title, type: :string, desc: "title"
179
+ method_option :description, type: :string, desc: "description"
180
+ method_option :tags, type: :array, desc: "tags"
181
+ method_option :type, type: :string, desc: "type to search (ip or domain)", default: "doamin"
182
+ def spyse(query)
183
+ with_error_handling do
184
+ run_analyzer Analyzers::Spyse, query: query, options: options
185
+ end
186
+ end
187
+
167
188
  desc "passive_dns [IP|DOMAIN]", "Cross search with passive DNS services by an ip or domain"
168
189
  method_option :title, type: :string, desc: "title"
169
190
  method_option :description, type: :string, desc: "description"
@@ -12,6 +12,7 @@ module Mihari
12
12
  attr_accessor :misp_api_endpoint
13
13
  attr_accessor :misp_api_key
14
14
  attr_accessor :onyphe_api_key
15
+ attr_accessor :otx_api_key
15
16
  attr_accessor :passivetotal_api_key
16
17
  attr_accessor :passivetotal_username
17
18
  attr_accessor :pulsedive_api_key
@@ -19,8 +20,10 @@ module Mihari
19
20
  attr_accessor :shodan_api_key
20
21
  attr_accessor :slack_channel
21
22
  attr_accessor :slack_webhook_url
23
+ attr_accessor :spyse_api_key
22
24
  attr_accessor :thehive_api_endpoint
23
25
  attr_accessor :thehive_api_key
26
+ attr_accessor :urlscan_api_key
24
27
  attr_accessor :virustotal_api_key
25
28
  attr_accessor :zoomeye_password
26
29
  attr_accessor :zoomeye_username
@@ -40,6 +43,7 @@ module Mihari
40
43
  @misp_api_endpoint = ENV["MISP_API_ENDPOINT"]
41
44
  @misp_api_key = ENV["MISP_API_KEY"]
42
45
  @onyphe_api_key = ENV["ONYPHE_API_KEY"]
46
+ @otx_api_key = ENV["OTX_API_KEY"]
43
47
  @passivetotal_api_key = ENV["PASSIVETOTAL_API_KEY"]
44
48
  @passivetotal_username = ENV["PASSIVETOTAL_USERNAME"]
45
49
  @pulsedive_api_key = ENV["PULSEDIVE_API_KEY"]
@@ -47,8 +51,10 @@ module Mihari
47
51
  @shodan_api_key = ENV["SHODAN_API_KEY"]
48
52
  @slack_channel = ENV["SLACK_CHANNEL"]
49
53
  @slack_webhook_url = ENV["SLACK_WEBHOOK_URL"]
54
+ @spyse_api_key = ENV["SPYSE_API_KEY"]
50
55
  @thehive_api_endpoint = ENV["THEHIVE_API_ENDPOINT"]
51
56
  @thehive_api_key = ENV["THEHIVE_API_KEY"]
57
+ @urlscan_api_key = ENV["URLSCAN_API_KEY"]
52
58
  @virustotal_api_key = ENV["VIRUSTOTAL_API_KEY"]
53
59
  @zoomeye_password = ENV["ZOOMEYE_PASSWORD"]
54
60
  @zoomeye_username = ENV["ZOOMEYE_USERNAME"]
@@ -4,6 +4,8 @@ require "slack-notifier"
4
4
  require "digest/sha2"
5
5
  require "mem"
6
6
 
7
+ require "mihari/slack_monkeypatch"
8
+
7
9
  module Mihari
8
10
  module Emitters
9
11
  class Attachment
@@ -3,4 +3,5 @@
3
3
  module Mihari
4
4
  class Error < StandardError; end
5
5
  class InvalidInputError < Error; end
6
+ class RetryableError < Error; end
6
7
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "slack-notifier"
4
+ require "mihari/slack_monkeypatch"
5
+
3
6
  module Mihari
4
7
  module Notifiers
5
8
  class Slack < Base
@@ -7,10 +7,10 @@ module Mihari
7
7
  begin
8
8
  try += 1
9
9
  yield
10
- rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, OpenSSL::SSL::SSLError, Timeout::Error => _e
10
+ rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, OpenSSL::SSL::SSLError, Timeout::Error, RetryableError => e
11
11
  sleep interval
12
12
  retry if try < times
13
- raise
13
+ raise e
14
14
  end
15
15
  end
16
16
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Slack
4
+ class Notifier
5
+ module Util
6
+ class LinkFormatter
7
+ class << self
8
+ def format(string, opts = {})
9
+ # Resolve warning in Ruby 2.7
10
+ LinkFormatter.new(string, **opts).formatted
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mihari
4
- VERSION = "1.1.0"
4
+ VERSION = "1.3.1"
5
5
  end
@@ -26,14 +26,15 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 2.1"
28
28
  spec.add_development_dependency "coveralls", "~> 0.8"
29
- spec.add_development_dependency "execjs", "~> 2.0"
29
+ spec.add_development_dependency "execjs", "~> 2.7"
30
30
  spec.add_development_dependency "fakefs", "~> 1.2"
31
31
  spec.add_development_dependency "pre-commit", "~> 0.39"
32
32
  spec.add_development_dependency "rake", "~> 13.0"
33
33
  spec.add_development_dependency "rspec", "~> 3.9"
34
- spec.add_development_dependency "rubocop-performance", "~> 1.5"
34
+ spec.add_development_dependency "rubocop", "~> 0.88"
35
+ spec.add_development_dependency "rubocop-performance", "~> 1.7"
35
36
  spec.add_development_dependency "timecop", "~> 0.9"
36
- spec.add_development_dependency "vcr", "~> 5.1"
37
+ spec.add_development_dependency "vcr", "~> 6.0"
37
38
  spec.add_development_dependency "webmock", "~> 3.8"
38
39
 
39
40
  spec.add_dependency "active_model_serializers", "~> 0.10"
@@ -51,6 +52,7 @@ Gem::Specification.new do |spec|
51
52
  spec.add_dependency "murmurhash3", "~> 0.1"
52
53
  spec.add_dependency "net-ping", "~> 2.0"
53
54
  spec.add_dependency "onyphe", "~> 2.0"
55
+ spec.add_dependency "otx_ruby", "~> 0.9"
54
56
  spec.add_dependency "parallel", "~> 1.19"
55
57
  spec.add_dependency "passive_circl", "~> 0.1"
56
58
  spec.add_dependency "passivetotalx", "~> 0.1"
@@ -60,6 +62,7 @@ Gem::Specification.new do |spec|
60
62
  spec.add_dependency "securitytrails", "~> 1.0"
61
63
  spec.add_dependency "shodanx", "~> 0.2"
62
64
  spec.add_dependency "slack-notifier", "~> 2.3"
65
+ spec.add_dependency "spysex", "~> 0.1"
63
66
  spec.add_dependency "sqlite3", "~> 1.4"
64
67
  spec.add_dependency "thor", "~> 1.0"
65
68
  spec.add_dependency "urlscan", "~> 0.5"
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
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: 1.1.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-09 00:00:00.000000000 Z
11
+ date: 2020-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: '2.7'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.0'
54
+ version: '2.7'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: fakefs
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +108,34 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.9'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.88'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.88'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rubocop-performance
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '1.5'
131
+ version: '1.7'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '1.5'
138
+ version: '1.7'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: timecop
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: '5.1'
159
+ version: '6.0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: '5.1'
166
+ version: '6.0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: webmock
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -374,6 +388,20 @@ dependencies:
374
388
  - - "~>"
375
389
  - !ruby/object:Gem::Version
376
390
  version: '2.0'
391
+ - !ruby/object:Gem::Dependency
392
+ name: otx_ruby
393
+ requirement: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - "~>"
396
+ - !ruby/object:Gem::Version
397
+ version: '0.9'
398
+ type: :runtime
399
+ prerelease: false
400
+ version_requirements: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - "~>"
403
+ - !ruby/object:Gem::Version
404
+ version: '0.9'
377
405
  - !ruby/object:Gem::Dependency
378
406
  name: parallel
379
407
  requirement: !ruby/object:Gem::Requirement
@@ -500,6 +528,20 @@ dependencies:
500
528
  - - "~>"
501
529
  - !ruby/object:Gem::Version
502
530
  version: '2.3'
531
+ - !ruby/object:Gem::Dependency
532
+ name: spysex
533
+ requirement: !ruby/object:Gem::Requirement
534
+ requirements:
535
+ - - "~>"
536
+ - !ruby/object:Gem::Version
537
+ version: '0.1'
538
+ type: :runtime
539
+ prerelease: false
540
+ version_requirements: !ruby/object:Gem::Requirement
541
+ requirements:
542
+ - - "~>"
543
+ - !ruby/object:Gem::Version
544
+ version: '0.1'
503
545
  - !ruby/object:Gem::Dependency
504
546
  name: sqlite3
505
547
  requirement: !ruby/object:Gem::Requirement
@@ -605,6 +647,7 @@ files:
605
647
  - lib/mihari/analyzers/free_text.rb
606
648
  - lib/mihari/analyzers/http_hash.rb
607
649
  - lib/mihari/analyzers/onyphe.rb
650
+ - lib/mihari/analyzers/otx.rb
608
651
  - lib/mihari/analyzers/passive_dns.rb
609
652
  - lib/mihari/analyzers/passive_ssl.rb
610
653
  - lib/mihari/analyzers/passivetotal.rb
@@ -613,6 +656,7 @@ files:
613
656
  - lib/mihari/analyzers/securitytrails.rb
614
657
  - lib/mihari/analyzers/securitytrails_domain_feed.rb
615
658
  - lib/mihari/analyzers/shodan.rb
659
+ - lib/mihari/analyzers/spyse.rb
616
660
  - lib/mihari/analyzers/ssh_fingerprint.rb
617
661
  - lib/mihari/analyzers/urlscan.rb
618
662
  - lib/mihari/analyzers/virustotal.rb
@@ -640,10 +684,12 @@ files:
640
684
  - lib/mihari/serializers/alert.rb
641
685
  - lib/mihari/serializers/artifact.rb
642
686
  - lib/mihari/serializers/tag.rb
687
+ - lib/mihari/slack_monkeypatch.rb
643
688
  - lib/mihari/status.rb
644
689
  - lib/mihari/type_checker.rb
645
690
  - lib/mihari/version.rb
646
691
  - mihari.gemspec
692
+ - renovate.json
647
693
  - screenshots/alert.png
648
694
  - screenshots/eyecatch.png
649
695
  - screenshots/misp.png
@@ -652,7 +698,7 @@ homepage: https://github.com/ninoseki/mihari
652
698
  licenses:
653
699
  - MIT
654
700
  metadata: {}
655
- post_install_message:
701
+ post_install_message:
656
702
  rdoc_options: []
657
703
  require_paths:
658
704
  - lib
@@ -668,7 +714,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
668
714
  version: '0'
669
715
  requirements: []
670
716
  rubygems_version: 3.1.2
671
- signing_key:
717
+ signing_key:
672
718
  specification_version: 4
673
719
  summary: A framework for continuous malicious hosts monitoring.
674
720
  test_files: []