nexpose_cyberark 0.0.1-java
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 +15 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +37 -0
- data/LICENSE.txt +22 -0
- data/README.md +33 -0
- data/Rakefile +2 -0
- data/bin/nx_cyberark.rb +45 -0
- data/lib/nexpose_cyberark.rb +48 -0
- data/lib/nexpose_cyberark/lib/java/JavaPasswordSDK.jar +0 -0
- data/lib/nexpose_cyberark/nexpose_ops.rb +37 -0
- data/lib/nexpose_cyberark/password_ops.rb +29 -0
- data/lib/nexpose_cyberark/version.rb +3 -0
- data/nexpose_cyberark.gemspec +27 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZjU1OTg2OGJiYTQxMzk1ZjIyOTE2ZTZkMWQwMmNkMzkyZThkMzQ5ZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NmY1YTRlYzEwYTgxMmRjNjgxOTZkZTYxYjkxNWEyZjc2MzY0NTgzMA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MGQxMTRkMDI4OGMwN2U2MDVkNGRhZTEwMTljNTU3N2Y4NjYzMTQwNTRiNmUz
|
10
|
+
OWE5NjhlMzg1MzJkMTMxMDE3MzFhZjA0ZTE2NzZjNjg5YWJjNGQ5MWFlYjQ3
|
11
|
+
MTJiMTRjODRlOTcxN2RlOWFlMTBkZDBjNTI4NmYxMWE0NTEzMjU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
M2RmNDAwMTk5YWRlYjQwZDY0MGFkNmRmOTQ4NWVmOGMxNzc1MzBiOWJiNzg5
|
14
|
+
YjA1YjAzYzIwMDgzNDhlOTE4YTJlNzYwNTJmYmM3YmEzOWFhODhlOGU5Nzg0
|
15
|
+
OTFiMjFmMjQ0ZGM4ZWY0ZjYyMTQzMzIxMzA4NmZlZDVjNjM3ZTk=
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
nexpose_cyberark (0.0.1-java)
|
5
|
+
nexpose (>= 0.6.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.2.5)
|
11
|
+
librex (0.0.68)
|
12
|
+
nexpose (0.7.6)
|
13
|
+
librex (~> 0.0, >= 0.0.68)
|
14
|
+
rex (~> 1.0, >= 1.0.2)
|
15
|
+
rake (10.3.2)
|
16
|
+
rex (1.0.2)
|
17
|
+
rspec (3.0.0)
|
18
|
+
rspec-core (~> 3.0.0)
|
19
|
+
rspec-expectations (~> 3.0.0)
|
20
|
+
rspec-mocks (~> 3.0.0)
|
21
|
+
rspec-core (3.0.2)
|
22
|
+
rspec-support (~> 3.0.0)
|
23
|
+
rspec-expectations (3.0.2)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.0.0)
|
26
|
+
rspec-mocks (3.0.2)
|
27
|
+
rspec-support (~> 3.0.0)
|
28
|
+
rspec-support (3.0.2)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
java
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
bundler (~> 1.6)
|
35
|
+
nexpose_cyberark!
|
36
|
+
rake
|
37
|
+
rspec
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Damian Finol
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# NexposeCyberark
|
2
|
+
|
3
|
+
The nexpose CyberArk integration allows the use of credentials stored in CyberArk Vault to be used in scanning jobs,
|
4
|
+
allowing Nexpose to perform authenticated scans, increasing the confidence in fingerprinting and vulnerabilities found.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
This is a JRuby Gem, it uses CyberArk's Java libraries to perform queries on CyberArk's vaults and Ruby libraries to
|
9
|
+
communicate with Nexpose. As such, JRuby needs to be installed on the target system.
|
10
|
+
|
11
|
+
BEFORE INSTALLATION:
|
12
|
+
* Install CyberArk's provided Password SDK Client on the system
|
13
|
+
* Configure CyberArk vault Objects to match Nexpose scan targets:
|
14
|
+
For example if a Nexpose hostname is in the form of 'systemv6.mydomain.com' your Object must be 'systemv6.mydomain.com'
|
15
|
+
If the scan target is an IP address, the object name must be the IP address.
|
16
|
+
* Make sure the Policy ID of your objects include the description of the OS: 'unix' or 'windows'
|
17
|
+
|
18
|
+
## Usage
|
19
|
+
|
20
|
+
Configure Vault settings:
|
21
|
+
o APP ID, Safe, Folder properties from CyberArk. Please refer to CyberArk documentation.
|
22
|
+
Configure Nexpose settings:
|
23
|
+
o A valid nexpose user, password, ip address and sites to manage.
|
24
|
+
o The start scan variable. If set to true, once updated the gem will trigger a scan of the site, wait until it’s finished and deletes the credentials stored. If set to false, it’ll not kick a scan and will run on scheduled.
|
25
|
+
Run the script for the first time.
|
26
|
+
o The script can be run using the command from the command line:
|
27
|
+
jruby nx_cyberark.rb
|
28
|
+
o The script will run and perform the queries, if the start scan variable is set to false, the script will exit silently; otherwise the script will output the status of each scan
|
29
|
+
|
30
|
+
|
31
|
+
## Help
|
32
|
+
|
33
|
+
* Email us to integrations_support@rapid7.com
|
data/Rakefile
ADDED
data/bin/nx_cyberark.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Nexpose Cyberark Integration
|
3
|
+
# Please refer to the configuration documentation for instructions on how to run this gem
|
4
|
+
# Do NOT run this gem without proper pre-configuration.
|
5
|
+
require 'nexpose_cyberark'
|
6
|
+
|
7
|
+
# ---- CyberArk Configuration ---- #
|
8
|
+
# Vault Options
|
9
|
+
# App ID
|
10
|
+
app_id = 'Rapid7'
|
11
|
+
# Safe
|
12
|
+
safe = 'Rapid 7 Accounts'
|
13
|
+
# Folder
|
14
|
+
folder = 'Root'
|
15
|
+
# Objects should have the same name as their counterparts in Nexpose
|
16
|
+
# IE: 'serverx01.mydomain.com' in both Cyberark and Nexpose.
|
17
|
+
# Individual IP's will be queried and should also correspond to Object names.
|
18
|
+
# For ranges, this integration will use the first IP as the credential for all the range.
|
19
|
+
# Finally, PolicyIDs in Cyberark should have 'unix' or 'windows' as part of their name for proper credential
|
20
|
+
# type assignment in Nexpose (ssh / cifs)
|
21
|
+
# ---- End CyberArk Configuration ---- #
|
22
|
+
|
23
|
+
# ---- Nexpose Configuration ---- #
|
24
|
+
# Nexpose username
|
25
|
+
nxuser = 'nxadmin'
|
26
|
+
# Nexpose password
|
27
|
+
nxpasswd = 'nxadmin'
|
28
|
+
# Nexpose IP Address
|
29
|
+
nxip = 'localhost'
|
30
|
+
# Sites to process credentials, separated by commas, ie: [3, 4, 6]
|
31
|
+
sites = [ 1 ]
|
32
|
+
# Start scans?
|
33
|
+
# This setting will start scans on those sites, wait for the site to complete and then remove the credentials
|
34
|
+
# If you prefer to let the scans run on schedule, set this to false, otherwise set to true.
|
35
|
+
start_scans = false
|
36
|
+
# ---- End Nexpose Configuration ---- #
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
# --- DO NOT EDIT BELOW THIS LINE --- #
|
41
|
+
|
42
|
+
vault_options = { :app_id => app_id, :safe => safe, :folder => folder }
|
43
|
+
nexpose_options = { :nxip => nxip, :nxuser => nxuser, :nxpassword => nxpasswd, :sites => sites }
|
44
|
+
NexposeCyberark::Vault.update_credentials(vault_options, nexpose_options)
|
45
|
+
NexposeCyberark::Vault.start_scans(nexpose_options) if start_scans
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "nexpose_cyberark/version"
|
2
|
+
Dir[File.dirname(__FILE__)+'/nexpose_cyberark/lib/java/*.jar'].each { |jar| require jar }
|
3
|
+
require "nexpose_cyberark/password_ops"
|
4
|
+
require "nexpose_cyberark/nexpose_ops"
|
5
|
+
module NexposeCyberark
|
6
|
+
module Vault
|
7
|
+
def self.update_credentials(vault_options, nexpose_options = nil)
|
8
|
+
@nx = Ops::Nexpose.new(nexpose_options[:nxip], nexpose_options[:nxuser], nexpose_options[:nxpassword])
|
9
|
+
# Parse sites from config
|
10
|
+
nexpose_options[:sites].each do |site_id|
|
11
|
+
# Get ips for each site
|
12
|
+
site_ips = @nx.get_ips_from_site(site_id)
|
13
|
+
site_credentials = []
|
14
|
+
# Get password for each IP
|
15
|
+
site_ips.each do |asset|
|
16
|
+
host = ''
|
17
|
+
host = asset.host if asset.is_a?(HostName)
|
18
|
+
host = asset.from if asset.is_a?(IPRange)
|
19
|
+
range_scenario = false
|
20
|
+
if asset.is_a?(IPRange) then range_scenario = true unless asset.from.nil? end
|
21
|
+
vault_options[:object] = host
|
22
|
+
asset_data = PasswordOps::get_password(vault_options)
|
23
|
+
host = nil if range_scenario
|
24
|
+
unless asset_data[:password].nil?
|
25
|
+
credential_cifs = Credential.for_service(asset_data[:os], 'Administrator', asset_data, nil, host)
|
26
|
+
site_credentials.push(credential_cifs)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
# Save site
|
30
|
+
@nx.save_site(site_id, site_credentials)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def self.start_scans(nexpose_options = nil)
|
34
|
+
@nx = Ops::Nexpose.new(nexpose_options[:nxip], nexpose_options[:nxuser], nexpose_options[:nxpassword])
|
35
|
+
nexpose_options[:sites].each do |site_id|
|
36
|
+
puts "Starting scan #{site_id}"
|
37
|
+
scan = @nx.start_scan(site_id)
|
38
|
+
begin
|
39
|
+
sleep(30)
|
40
|
+
status = @nx.scan_status(scan.id)
|
41
|
+
puts "Waiting for scan #{scan.id} to finish"
|
42
|
+
end while status == Scan::Status::RUNNING
|
43
|
+
puts "Deleting creds for #{site_id}"
|
44
|
+
@nx.delete_site_credentials(site_id)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
Binary file
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'nexpose'
|
2
|
+
include Nexpose
|
3
|
+
module Ops
|
4
|
+
class Nexpose
|
5
|
+
attr_accessor :nsc
|
6
|
+
def initialize(nxip, nxuser, nxpasword)
|
7
|
+
@nsc = Connection.new(nxip, nxuser, nxpasword)
|
8
|
+
@nsc.login
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_ips_from_site(site_id)
|
12
|
+
site = Site.load(@nsc, site_id)
|
13
|
+
site.assets
|
14
|
+
end
|
15
|
+
|
16
|
+
def save_site(site_id, credentials)
|
17
|
+
site = Site.load(@nsc, site_id)
|
18
|
+
site.credentials = credentials
|
19
|
+
site.save(@nsc)
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete_site_credentials(site_id)
|
23
|
+
site = Site.load(@nsc, site_id)
|
24
|
+
site.credentials = []
|
25
|
+
site.save(@nsc)
|
26
|
+
end
|
27
|
+
|
28
|
+
def start_scan(site_id)
|
29
|
+
site = Site.load(@nsc, site_id)
|
30
|
+
site.scan(@nsc)
|
31
|
+
end
|
32
|
+
|
33
|
+
def scan_status(scan_id)
|
34
|
+
@nsc.scan_status(scan_id)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module PasswordOps
|
2
|
+
|
3
|
+
def self.cyberark
|
4
|
+
Java::javapasswordsdk
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.get_password(vault_options = {}, password_req_sdk = nil, password_sdk = nil )
|
8
|
+
password_req_sdk = cyberark.PSDKPasswordRequest.new if password_req_sdk.nil?
|
9
|
+
asset_data = {}
|
10
|
+
begin
|
11
|
+
password_req_sdk.set_app_id(vault_options[:app_id])
|
12
|
+
password_req_sdk.set_safe(vault_options[:safe])
|
13
|
+
password_req_sdk.set_folder(vault_options[:folder])
|
14
|
+
password_req_sdk.set_object(vault_options[:object])
|
15
|
+
password_sdk = cyberark.PasswordSDK if password_sdk.nil?
|
16
|
+
password_result = password_sdk.getPassword(password_req_sdk)
|
17
|
+
if password_result.get_policy_id.downcase.include? 'unix'
|
18
|
+
#puts password_result.get_policy_id.downcase.include? 'unix'
|
19
|
+
asset_data[:os] = 'ssh'
|
20
|
+
else
|
21
|
+
asset_data[:os] = 'cifs'
|
22
|
+
end
|
23
|
+
asset_data[:password] = password_result.get_content
|
24
|
+
rescue Exception => e
|
25
|
+
|
26
|
+
end
|
27
|
+
asset_data
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'nexpose_cyberark/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'nexpose_cyberark'
|
8
|
+
spec.version = NexposeCyberark::VERSION
|
9
|
+
spec.authors = ['Damian Finol']
|
10
|
+
spec.email = ['damian_finol@rapid7.com']
|
11
|
+
spec.summary = %q{Nexpose Cyberark integration.}
|
12
|
+
spec.description = %q{Nexpose Cyberark integration provides credentials for authenticated scans in Nexpose.}
|
13
|
+
spec.homepage = 'http://www.rapid7.com/'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = Dir['[A-Z]*'] + Dir['lib/**/*'] + Dir['bin/**']
|
17
|
+
spec.files.reject! { |fn| fn.include? "CVS" }
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
spec.platform = 'java'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
|
+
spec.add_dependency('nexpose', '>= 0.6.0')
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nexpose_cyberark
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: java
|
6
|
+
authors:
|
7
|
+
- Damian Finol
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nexpose
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.6.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.6.0
|
69
|
+
description: Nexpose Cyberark integration provides credentials for authenticated scans
|
70
|
+
in Nexpose.
|
71
|
+
email:
|
72
|
+
- damian_finol@rapid7.com
|
73
|
+
executables:
|
74
|
+
- nx_cyberark.rb
|
75
|
+
extensions: []
|
76
|
+
extra_rdoc_files: []
|
77
|
+
files:
|
78
|
+
- Gemfile
|
79
|
+
- Gemfile.lock
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- bin/nx_cyberark.rb
|
84
|
+
- lib/nexpose_cyberark.rb
|
85
|
+
- lib/nexpose_cyberark/lib/java/JavaPasswordSDK.jar
|
86
|
+
- lib/nexpose_cyberark/nexpose_ops.rb
|
87
|
+
- lib/nexpose_cyberark/password_ops.rb
|
88
|
+
- lib/nexpose_cyberark/version.rb
|
89
|
+
- nexpose_cyberark.gemspec
|
90
|
+
homepage: http://www.rapid7.com/
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 2.2.2
|
111
|
+
signing_key:
|
112
|
+
specification_version: 4
|
113
|
+
summary: Nexpose Cyberark integration.
|
114
|
+
test_files: []
|