ssh_scan 0.0.18 → 0.0.19
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/bin/ssh_scan +6 -1
- data/lib/ssh_scan/fingerprint_database.rb +21 -22
- data/lib/ssh_scan/scan_engine.rb +8 -4
- data/lib/ssh_scan/version.rb +1 -1
- data/ssh_scan.gemspec +0 -1
- metadata +2 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1f38d061727ec16f24abe9fa799d74d928764ca
|
4
|
+
data.tar.gz: 1c6e40fa5041aaa45dbaa3fc7a1586ffb19a63f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6504a3a993c90eafdad3be8bd6d63cc11d1dae76260e38e9608939d2525ea6602d7ef24eda0ee43f762bfcf48a08a2b2bdead68f083d946a71f6f234283d93fc
|
7
|
+
data.tar.gz: b21c3e244f176cee08ea1d817e842dbb7cb5effeda59136777b81f0364478d30e2b8e8b209e9b68cd66a334ac1043b062808cd183e3c765997d7819692dd9efc
|
data/bin/ssh_scan
CHANGED
@@ -18,7 +18,7 @@ options = {
|
|
18
18
|
"threads" => 5,
|
19
19
|
"verbosity" => nil,
|
20
20
|
"logger" => Logger.new(STDERR),
|
21
|
-
"fingerprint_database" => File.join(File.dirname(__FILE__),"../data/fingerprints.
|
21
|
+
"fingerprint_database" => File.join(File.dirname(__FILE__),"../data/fingerprints.yml")
|
22
22
|
}
|
23
23
|
|
24
24
|
# Reorder arguments before parsing
|
@@ -246,6 +246,11 @@ ssh_scan' to get the latest"
|
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
249
|
+
# Limit scope of fingerprints DB to (per scan)
|
250
|
+
if options["fingerprint_database"] && File.exists?(options["fingerprint_database"])
|
251
|
+
File.unlink(options["fingerprint_database"])
|
252
|
+
end
|
253
|
+
|
249
254
|
options["policy_file"] = SSHScan::Policy.from_file(options["policy"])
|
250
255
|
|
251
256
|
# Perform scan and get results
|
@@ -1,39 +1,38 @@
|
|
1
|
-
require '
|
1
|
+
require 'yaml/store'
|
2
2
|
|
3
3
|
module SSHScan
|
4
4
|
class FingerprintDatabase
|
5
5
|
def initialize(database_name)
|
6
|
-
|
7
|
-
@db = ::SQLite3::Database.open(database_name)
|
8
|
-
else
|
9
|
-
@db = ::SQLite3::Database.new(database_name)
|
10
|
-
self.create_schema
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def create_schema
|
15
|
-
@db.execute <<-SQL
|
16
|
-
create table fingerprints (
|
17
|
-
fingerprint varchar(100),
|
18
|
-
ip varchar(100)
|
19
|
-
);
|
20
|
-
SQL
|
6
|
+
@store = YAML::Store.new(database_name)
|
21
7
|
end
|
22
8
|
|
23
9
|
def clear_fingerprints(ip)
|
24
|
-
@
|
10
|
+
@store.transaction do
|
11
|
+
@store[ip] = []
|
12
|
+
end
|
25
13
|
end
|
26
14
|
|
27
15
|
def add_fingerprint(fingerprint, ip)
|
28
|
-
@
|
16
|
+
@store.transaction do
|
17
|
+
@store[ip] = [] if @store[ip].nil?
|
18
|
+
@store[ip] << fingerprint
|
19
|
+
end
|
29
20
|
end
|
30
21
|
|
31
22
|
def find_fingerprints(fingerprint)
|
32
|
-
|
33
|
-
|
34
|
-
|
23
|
+
ip_matches = []
|
24
|
+
|
25
|
+
@store.transaction(true) do
|
26
|
+
@store.roots.each do |ip|
|
27
|
+
@store[ip].each do |other_fingerprint|
|
28
|
+
if fingerprint == other_fingerprint
|
29
|
+
ip_matches << ip
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
35
33
|
end
|
36
|
-
|
34
|
+
|
35
|
+
return ip_matches.uniq
|
37
36
|
end
|
38
37
|
end
|
39
38
|
end
|
data/lib/ssh_scan/scan_engine.rb
CHANGED
@@ -150,8 +150,10 @@ module SSHScan
|
|
150
150
|
fingerprint_db.clear_fingerprints(result[:ip])
|
151
151
|
if result['fingerprints']
|
152
152
|
result['fingerprints'].values.each do |host_key_algo|
|
153
|
-
host_key_algo.
|
154
|
-
|
153
|
+
host_key_algo.each do |fingerprint|
|
154
|
+
key, value = fingerprint
|
155
|
+
next if key == "known_bad"
|
156
|
+
fingerprint_db.add_fingerprint(value, result[:ip])
|
155
157
|
end
|
156
158
|
end
|
157
159
|
end
|
@@ -163,8 +165,10 @@ module SSHScan
|
|
163
165
|
ip = result[:ip]
|
164
166
|
result['duplicate_host_key_ips'] = []
|
165
167
|
result['fingerprints'].values.each do |host_key_algo|
|
166
|
-
host_key_algo.
|
167
|
-
|
168
|
+
host_key_algo.each do |fingerprint|
|
169
|
+
key, value = fingerprint
|
170
|
+
next if key == "known_bad"
|
171
|
+
fingerprint_db.find_fingerprints(value).each do |other_ip|
|
168
172
|
next if ip == other_ip
|
169
173
|
result['duplicate_host_key_ips'] << other_ip
|
170
174
|
end
|
data/lib/ssh_scan/version.rb
CHANGED
data/ssh_scan.gemspec
CHANGED
@@ -32,7 +32,6 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_dependency('bindata', '~> 2.0')
|
33
33
|
s.add_dependency('netaddr')
|
34
34
|
s.add_dependency('net-ssh')
|
35
|
-
s.add_dependency('sqlite3')
|
36
35
|
s.add_dependency('sshkey')
|
37
36
|
s.add_development_dependency('pry')
|
38
37
|
s.add_development_dependency('rspec', '~> 3.0')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssh_scan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Claudius
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2017-
|
15
|
+
date: 2017-04-18 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: bindata
|
@@ -56,20 +56,6 @@ dependencies:
|
|
56
56
|
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: '0'
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: sqlite3
|
61
|
-
requirement: !ruby/object:Gem::Requirement
|
62
|
-
requirements:
|
63
|
-
- - ">="
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version: '0'
|
66
|
-
type: :runtime
|
67
|
-
prerelease: false
|
68
|
-
version_requirements: !ruby/object:Gem::Requirement
|
69
|
-
requirements:
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: '0'
|
73
59
|
- !ruby/object:Gem::Dependency
|
74
60
|
name: sshkey
|
75
61
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,7 +163,6 @@ files:
|
|
177
163
|
- config/policies/mozilla_modern.yml
|
178
164
|
- config/worker/config.yml
|
179
165
|
- data/README
|
180
|
-
- data/fingerprints.db
|
181
166
|
- data/ssh-badkeys/LICENSE
|
182
167
|
- data/ssh-badkeys/README.md
|
183
168
|
- data/ssh-badkeys/authorized/array-networks-vapv-vxag.key
|