ukemi 0.2.0 → 0.3.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 +3 -1
- data/lib/ukemi.rb +1 -0
- data/lib/ukemi/moderator.rb +1 -1
- data/lib/ukemi/services/dnsdb.rb +53 -0
- data/lib/ukemi/version.rb +1 -1
- data/ukemi.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 772366e3c49f7e5795e5725ca5535662c1626c9fa9522499aae4393b16c4d989
|
4
|
+
data.tar.gz: 13e976f1cc0e16c1e0e0b4cf96baeaefe848a963c827079616898564ad370732
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e15595740c568adc0b5c6feed7b881492afc1a3166f43b0f9a5aaff4e4a00dba9161e7d6a1decba2d71b900edd32fb969c341972ff82aa4a9dc21d9c6a771b57
|
7
|
+
data.tar.gz: a1ebc0af8b442e49f46204c40ee121317da97c4e4598adeb2724a4083c09c9e2b2647f80e152913ae6025ed8ae9fa4ba769e6defbeb2576c7493f712f6e7d3d2
|
data/README.md
CHANGED
@@ -10,6 +10,7 @@ Ukemi is a CIL tool for querying passive DNS services.
|
|
10
10
|
It supports the following services.
|
11
11
|
|
12
12
|
- [CIRCL passive DNS](https://www.circl.lu/services/passive-dns/)
|
13
|
+
- [DNSDB](https://api.dnsdb.info/)
|
13
14
|
- [PassiveTotal](https://community.riskiq.com/)
|
14
15
|
- [SecurityTrails](https://securitytrails.com/)
|
15
16
|
- [VirusTotal](http://virustotal.com)
|
@@ -30,6 +31,7 @@ Configuration is done via environment variables.
|
|
30
31
|
|------------------------|----------------------------|
|
31
32
|
| CIRCL_PASSIVE_PASSWORD | CIRCL passive DNS password |
|
32
33
|
| CIRCL_PASSIVE_USERNAME | CIRCL passive DNS username |
|
34
|
+
| DNSDB_API_KEY | DNSDB API key |
|
33
35
|
| PASSIVETOTAL_API_KEY | PassiveTotal API key |
|
34
36
|
| PASSIVETOTAL_USERNAME | PassiveTotal username |
|
35
37
|
| SECURITYTRAILS_API_KEY | SecurityTrails API key |
|
@@ -43,7 +45,7 @@ Commands:
|
|
43
45
|
ukemi help [COMMAND] # Describe available commands or one specific command
|
44
46
|
ukemi lookup [IP|DOMAIN] # Lookup passive DNS services
|
45
47
|
|
46
|
-
$ ukemi help
|
48
|
+
$ ukemi help lookup
|
47
49
|
Usage:
|
48
50
|
ukemi lookup [IP|DOMAIN]
|
49
51
|
|
data/lib/ukemi.rb
CHANGED
data/lib/ukemi/moderator.rb
CHANGED
@@ -13,7 +13,7 @@ module Ukemi
|
|
13
13
|
|
14
14
|
begin
|
15
15
|
service.lookup data
|
16
|
-
rescue ::PassiveTotal::Error, ::VirusTotal::Error, ::SecurityTrails::Error, PassiveCIRCL::Error
|
16
|
+
rescue ::PassiveTotal::Error, ::VirusTotal::Error, ::SecurityTrails::Error, PassiveCIRCL::Error, DNSDB::Error
|
17
17
|
nil
|
18
18
|
end
|
19
19
|
end.flatten.compact
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "date"
|
4
|
+
require "dnsdb"
|
5
|
+
|
6
|
+
module Ukemi
|
7
|
+
module Services
|
8
|
+
class DNSDB < Service
|
9
|
+
private
|
10
|
+
|
11
|
+
def config_keys
|
12
|
+
%w(DNSDB_API_KEY)
|
13
|
+
end
|
14
|
+
|
15
|
+
def api
|
16
|
+
@api ||= ::DNSDB::API.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def lookup_by_ip(data)
|
20
|
+
results = api.lookup.rdata(type: "ip", value: data, rrtype: "A")
|
21
|
+
results.map do |result|
|
22
|
+
rrname = result.dig("rrname")
|
23
|
+
# Remove the last dot (e.g. "example.com.")
|
24
|
+
data = rrname[0..-2]
|
25
|
+
Record.new(
|
26
|
+
data: data,
|
27
|
+
first_seen: Time.at(result.dig("time_first")).to_date.to_s,
|
28
|
+
last_seen: Time.at(result.dig("time_last")).to_date.to_s,
|
29
|
+
source: name
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def lookup_by_domain(data)
|
35
|
+
results = api.lookup.rrset(owner_name: data, rrtype: "A")
|
36
|
+
results.map do |result|
|
37
|
+
first_seen = Time.at(result.dig("time_first")).to_date.to_s
|
38
|
+
last_seen = Time.at(result.dig("time_last")).to_date.to_s
|
39
|
+
|
40
|
+
values = result.dig("rdata") || []
|
41
|
+
values.map do |value|
|
42
|
+
Record.new(
|
43
|
+
data: value,
|
44
|
+
first_seen: first_seen,
|
45
|
+
last_seen: last_seen,
|
46
|
+
source: name
|
47
|
+
)
|
48
|
+
end
|
49
|
+
end.flatten
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/ukemi/version.rb
CHANGED
data/ukemi.gemspec
CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_development_dependency "webmock", "~> 3.8"
|
34
34
|
|
35
35
|
spec.add_dependency "addressable", "~> 2.7"
|
36
|
+
spec.add_dependency "dnsdb", "~> 0.1"
|
36
37
|
spec.add_dependency "mem", "~> 0.1"
|
37
38
|
spec.add_dependency "parallel", "~> 1.19"
|
38
39
|
spec.add_dependency "passive_circl", "~> 0.1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ukemi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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: 2020-03-
|
11
|
+
date: 2020-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '2.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: dnsdb
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.1'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: mem
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -245,6 +259,7 @@ files:
|
|
245
259
|
- lib/ukemi/moderator.rb
|
246
260
|
- lib/ukemi/record.rb
|
247
261
|
- lib/ukemi/services/circl.rb
|
262
|
+
- lib/ukemi/services/dnsdb.rb
|
248
263
|
- lib/ukemi/services/passivetotal.rb
|
249
264
|
- lib/ukemi/services/securitytrails.rb
|
250
265
|
- lib/ukemi/services/service.rb
|