mihari 2.3.1 → 2.4.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/lib/mihari.rb +1 -0
- data/lib/mihari/config.rb +3 -1
- data/lib/mihari/emitters/slack.rb +0 -3
- data/lib/mihari/emitters/webhook.rb +60 -0
- data/lib/mihari/notifiers/slack.rb +0 -1
- data/lib/mihari/version.rb +1 -1
- data/mihari.gemspec +4 -4
- metadata +11 -11
- data/lib/mihari/slack_monkeypatch.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 388f48a9001d38fd83f4a6d527d7c5826a490be1d339596d174a9f619a78cb0c
|
4
|
+
data.tar.gz: 7e0a6e2fcbe9ad1792c21472b8be7706a86b09fbbce951edb1829a76493aaedc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfcde6c4fa80ae12c56606157c6800c7e321cef71ed3e4aa9250805ea51126c74a19b3f73040630d169966fb17d834d8c45b37cc6f7baa808d7eea3e7c585fb9
|
7
|
+
data.tar.gz: d477cdcc4b4075e7671263f32ed5e81daad42e499eded5dffcecfba2d7568b779e99010a64a271a652db3f928800506cb6a4c7cf4060816742d4bb8d5bbec86a
|
data/lib/mihari.rb
CHANGED
data/lib/mihari/config.rb
CHANGED
@@ -4,7 +4,7 @@ require "yaml"
|
|
4
4
|
|
5
5
|
module Mihari
|
6
6
|
class Config
|
7
|
-
attr_accessor :binaryedge_api_key, :censys_id, :censys_secret, :circl_passive_password, :circl_passive_username, :misp_api_endpoint, :misp_api_key, :onyphe_api_key, :otx_api_key, :passivetotal_api_key, :passivetotal_username, :pulsedive_api_key, :securitytrails_api_key, :shodan_api_key, :slack_channel, :slack_webhook_url, :spyse_api_key, :thehive_api_endpoint, :thehive_api_key, :urlscan_api_key, :virustotal_api_key, :zoomeye_api_key, :database
|
7
|
+
attr_accessor :binaryedge_api_key, :censys_id, :censys_secret, :circl_passive_password, :circl_passive_username, :misp_api_endpoint, :misp_api_key, :onyphe_api_key, :otx_api_key, :passivetotal_api_key, :passivetotal_username, :pulsedive_api_key, :securitytrails_api_key, :shodan_api_key, :slack_channel, :slack_webhook_url, :spyse_api_key, :thehive_api_endpoint, :thehive_api_key, :urlscan_api_key, :virustotal_api_key, :zoomeye_api_key, :webhook_url, :webhook_use_json_body, :database
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
load_from_env
|
@@ -33,6 +33,8 @@ module Mihari
|
|
33
33
|
@urlscan_api_key = ENV["URLSCAN_API_KEY"]
|
34
34
|
@virustotal_api_key = ENV["VIRUSTOTAL_API_KEY"]
|
35
35
|
@zoomeye_api_key = ENV["ZOOMEYE_API_KEY"]
|
36
|
+
@webhook_url = ENV["WEBHOOK_URL"]
|
37
|
+
@webhook_use_json_body = ENV["WEBHOOK_USE_JSON_BODY"]
|
36
38
|
|
37
39
|
@database = ENV["DATABASE"] || "mihari.db"
|
38
40
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "net/http"
|
5
|
+
require "uri"
|
6
|
+
|
7
|
+
module Mihari
|
8
|
+
module Emitters
|
9
|
+
class Webhook < Base
|
10
|
+
# @return [true, false]
|
11
|
+
def valid?
|
12
|
+
webhook_url?
|
13
|
+
end
|
14
|
+
|
15
|
+
def emit(title:, description:, artifacts:, source:, tags:)
|
16
|
+
return if artifacts.empty?
|
17
|
+
|
18
|
+
uri = URI(Mihari.config.webhook_url)
|
19
|
+
data = {
|
20
|
+
title: title,
|
21
|
+
description: description,
|
22
|
+
artifacts: artifacts.map(&:data),
|
23
|
+
source: source,
|
24
|
+
tags: tags
|
25
|
+
}
|
26
|
+
|
27
|
+
if use_json_body
|
28
|
+
Net::HTTP.post(uri, data.to_json, "Content-Type" => "application/json")
|
29
|
+
else
|
30
|
+
Net::HTTP.post_form(uri, data)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def config_keys
|
37
|
+
%w[webhook_url]
|
38
|
+
end
|
39
|
+
|
40
|
+
def webhook_url
|
41
|
+
@webhook_url ||= Mihari.config.webhook_url
|
42
|
+
end
|
43
|
+
|
44
|
+
def webhook_url?
|
45
|
+
!webhook_url.nil?
|
46
|
+
end
|
47
|
+
|
48
|
+
def use_json_body
|
49
|
+
@use_json_body ||= truthy?(Mihari.config.webhook_use_json_body || 'false')
|
50
|
+
end
|
51
|
+
|
52
|
+
def truthy?(value)
|
53
|
+
return true if value == "true"
|
54
|
+
return true if value == true
|
55
|
+
|
56
|
+
false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/mihari/version.rb
CHANGED
data/mihari.gemspec
CHANGED
@@ -25,14 +25,14 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 2.2"
|
27
27
|
spec.add_development_dependency "coveralls", "~> 0.8"
|
28
|
-
spec.add_development_dependency "execjs", "~> 2.
|
28
|
+
spec.add_development_dependency "execjs", "~> 2.8"
|
29
29
|
spec.add_development_dependency "fakefs", "~> 1.3"
|
30
30
|
spec.add_development_dependency "mysql2", "~> 0.5"
|
31
31
|
spec.add_development_dependency "pg", "~> 1.2"
|
32
32
|
spec.add_development_dependency "rack-test", "~> 1.1"
|
33
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
34
34
|
spec.add_development_dependency "rspec", "~> 3.10"
|
35
|
-
spec.add_development_dependency "standard", "~> 1.
|
35
|
+
spec.add_development_dependency "standard", "~> 1.1"
|
36
36
|
spec.add_development_dependency "timecop", "~> 0.9"
|
37
37
|
spec.add_development_dependency "vcr", "~> 6.0"
|
38
38
|
spec.add_development_dependency "webmock", "~> 3.12"
|
@@ -62,7 +62,7 @@ Gem::Specification.new do |spec|
|
|
62
62
|
spec.add_dependency "passivetotalx", "~> 0.1"
|
63
63
|
spec.add_dependency "public_suffix", "~> 4.0"
|
64
64
|
spec.add_dependency "pulsedive", "~> 0.1"
|
65
|
-
spec.add_dependency "puma", "~> 5.
|
65
|
+
spec.add_dependency "puma", "~> 5.3"
|
66
66
|
spec.add_dependency "rack", "~> 2.2"
|
67
67
|
spec.add_dependency "rack-contrib", "~> 2.3"
|
68
68
|
spec.add_dependency "safe_shell", "~> 1.1"
|
@@ -71,7 +71,7 @@ Gem::Specification.new do |spec|
|
|
71
71
|
spec.add_dependency "sinatra", "~> 2.1"
|
72
72
|
spec.add_dependency "sinatra-contrib", "~> 2.1"
|
73
73
|
spec.add_dependency "sinatra-param", "~> 1.6"
|
74
|
-
spec.add_dependency "slack-notifier", "~> 2.
|
74
|
+
spec.add_dependency "slack-notifier", "~> 2.4"
|
75
75
|
spec.add_dependency "spysex", "~> 0.1"
|
76
76
|
spec.add_dependency "sqlite3", "~> 1.4"
|
77
77
|
spec.add_dependency "thor", "~> 1.1"
|
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: 2.
|
4
|
+
version: 2.4.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-05-
|
11
|
+
date: 2021-05-11 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.
|
47
|
+
version: '2.8'
|
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.
|
54
|
+
version: '2.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: fakefs
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '1.
|
145
|
+
version: '1.1'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '1.
|
152
|
+
version: '1.1'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: timecop
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -548,14 +548,14 @@ dependencies:
|
|
548
548
|
requirements:
|
549
549
|
- - "~>"
|
550
550
|
- !ruby/object:Gem::Version
|
551
|
-
version: '5.
|
551
|
+
version: '5.3'
|
552
552
|
type: :runtime
|
553
553
|
prerelease: false
|
554
554
|
version_requirements: !ruby/object:Gem::Requirement
|
555
555
|
requirements:
|
556
556
|
- - "~>"
|
557
557
|
- !ruby/object:Gem::Version
|
558
|
-
version: '5.
|
558
|
+
version: '5.3'
|
559
559
|
- !ruby/object:Gem::Dependency
|
560
560
|
name: rack
|
561
561
|
requirement: !ruby/object:Gem::Requirement
|
@@ -674,14 +674,14 @@ dependencies:
|
|
674
674
|
requirements:
|
675
675
|
- - "~>"
|
676
676
|
- !ruby/object:Gem::Version
|
677
|
-
version: '2.
|
677
|
+
version: '2.4'
|
678
678
|
type: :runtime
|
679
679
|
prerelease: false
|
680
680
|
version_requirements: !ruby/object:Gem::Requirement
|
681
681
|
requirements:
|
682
682
|
- - "~>"
|
683
683
|
- !ruby/object:Gem::Version
|
684
|
-
version: '2.
|
684
|
+
version: '2.4'
|
685
685
|
- !ruby/object:Gem::Dependency
|
686
686
|
name: spysex
|
687
687
|
requirement: !ruby/object:Gem::Requirement
|
@@ -876,6 +876,7 @@ files:
|
|
876
876
|
- lib/mihari/emitters/slack.rb
|
877
877
|
- lib/mihari/emitters/stdout.rb
|
878
878
|
- lib/mihari/emitters/the_hive.rb
|
879
|
+
- lib/mihari/emitters/webhook.rb
|
879
880
|
- lib/mihari/errors.rb
|
880
881
|
- lib/mihari/html.rb
|
881
882
|
- lib/mihari/models/alert.rb
|
@@ -889,7 +890,6 @@ files:
|
|
889
890
|
- lib/mihari/serializers/alert.rb
|
890
891
|
- lib/mihari/serializers/artifact.rb
|
891
892
|
- lib/mihari/serializers/tag.rb
|
892
|
-
- lib/mihari/slack_monkeypatch.rb
|
893
893
|
- lib/mihari/status.rb
|
894
894
|
- lib/mihari/type_checker.rb
|
895
895
|
- lib/mihari/version.rb
|
@@ -1,16 +0,0 @@
|
|
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
|