gauntlt 0.1.5 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGRkZWZiMTQ4ZDIyMzFjZmFhODk5ZjQyOTJhZmYwY2Y5NjY0NDdmMA==
5
+ data.tar.gz: !binary |-
6
+ MzI0YjBjNTRkMTI4ODAzMWExOWI4MWUyYmFhNjY1ZDg0NzQ2OGY0Mg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MWU3MWJkZjI0ZWI1N2Q3M2I0NGI5MjlhM2U2MDFjMzE5ZjRlY2Y1YjFkNjc3
10
+ NGUwNjk3NzFiYmIyMTdhOTgzNGJiYTI5NGFhY2E0NWYxY2NjNGE2MjQyM2Rj
11
+ MDY0YmFmM2NiNDExYzZiYTYxMDUzMzhhODQ4NTA4OGQwNTNiZjI=
12
+ data.tar.gz: !binary |-
13
+ ODM4MzVjYTM1NGIyYTBlNGZmMjk2MGM3OGRlYWViMTg5MDUwYzhiMGY3ZGQw
14
+ NGFiY2EyYmI1MmU4YmU2MzAzNWI1NmEzYWFlZTZkMTA4OGI3ZGRkMTBhZGU0
15
+ MGM1NGUwNWJiMDFlZjM3NmI5NTE3MzBmNjM1YTAzOTUwY2RhYzU=
data/.gitignore CHANGED
@@ -32,3 +32,6 @@ Gemfile.lock
32
32
  #sqlite DB (from scapegoat)
33
33
  *.db
34
34
  *.$DB
35
+
36
+ # possible dependency installs
37
+ dirb
@@ -6,10 +6,11 @@ before_install:
6
6
  - git submodule update --init --recursive
7
7
  before_script:
8
8
  - sudo apt-get install nmap
9
+ - sudo apt-get install wget
9
10
  - export SSLYZE_PATH="/home/travis/build/gauntlt/gauntlt/vendor/sslyze/sslyze.py"
10
11
  - export SQLMAP_PATH="/home/travis/build/gauntlt/gauntlt/vendor/sqlmap/sqlmap.py"
11
12
  - 'cd vendor/Garmr && sudo python setup.py install && cd ../..'
12
- - 'cd vendor && tar xvfz dirb203.tar.gz && cd dirb && ./configure && make && sudo cp dirb /usr/local/bin/ && cd ..'
13
+ - 'cd vendor && wget http://downloads.sourceforge.net/project/dirb/dirb/2.03/dirb203.tar.gz && tar xvfz dirb203.tar.gz && cd dirb && ./configure && make && sudo cp dirb /usr/local/bin/ && cd ..'
13
14
  - export DIRB_WORDLISTS="/home/travis/build/gauntlt/gauntlt/vendor/dirb/wordlists"
14
15
 
15
16
  matrix:
data/README.md CHANGED
@@ -146,22 +146,22 @@ NOTE: We currently use `ruby 1.9.3` and `JRuby 1.7.0` for development and testin
146
146
  # on ubuntu:
147
147
  # $ sudo apt-get install libcurl4-openssl-dev
148
148
  ```
149
+ 4. Run the ready_to_rumble.sh script to make sure you have all the dependencies installed like sqlmap and sslyze. This is meant to replicate the travis setup for devs. This should be a rake task instead.
149
150
 
150
- 4. Run the cucumber features and rspec examples
151
+ 5. Run the cucumber features and rspec examples
151
152
 
152
153
  ```shell
153
154
  $ bundle exec rake
154
155
  ```
155
156
 
156
- 5. Launch attacks with bin/gauntlt
157
+ 6. Launch attacks with bin/gauntlt
157
158
 
158
159
  ```shell
159
160
  $ bin/gauntlt attack
160
161
  ```
161
162
 
162
- 5. Refer to the features directory for usage examples and please write cucumber features for any new functionality you wish to submit.
163
+ 7. Refer to the features directory for usage examples and please write cucumber features for any new functionality you wish to submit.
163
164
 
164
- 6. Run the ready_to_rumble.sh script to make sure you have all the dependencies installed like sqlmap and sslyze. This is meant to replicate the travis setup for devs. This should be a rake task instead.
165
165
 
166
166
  ## ROADMAP
167
167
 
@@ -11,7 +11,7 @@ opts = Trollop::options do
11
11
  gauntlt is a ruggedization framework that helps you be mean to your code
12
12
 
13
13
  Usage:
14
- gauntlt <path>+ [--tags TAG_EXPRESSION]
14
+ gauntlt <path>+ [--tags TAG_EXPRESSION] [--format FORMAT]
15
15
 
16
16
  Options:
17
17
  EOS
@@ -21,8 +21,13 @@ EOS
21
21
  :multi => true
22
22
 
23
23
  opt :list, "List defined attacks"
24
+
24
25
  opt :steps, "List the gauntlt step definitions that can be used inside of attack files"
26
+
25
27
  opt :allsteps, "List all available step definitions including aruba step definitions which help with file and parsing operations"
28
+
29
+ opt :format, "Available formats: html, json, junit, progress",
30
+ :type => String
26
31
  end
27
32
 
28
33
  opts[:path] = if ARGV.empty?
@@ -45,6 +50,6 @@ elsif opts[:allsteps]
45
50
  puts "\nGauntlt Attack Steps"
46
51
  puts all_step_defs[:gauntlt].sort
47
52
  else
48
- Gauntlt.attack( opts[:path], opts[:tags].join(',') )
53
+ Gauntlt.attack( opts[:path], opts[:tags].join(','), opts[:format] )
49
54
  end
50
55
 
@@ -6,17 +6,23 @@ Feature: nmap attacks for scanme.nmap.org and to use this for your tests, change
6
6
  And the following profile:
7
7
  | name | value |
8
8
  | hostname | scanme.nmap.org |
9
+ | host | scanme.nmap.org |
9
10
  | tcp_ping_ports | 22,25,80,443 |
10
11
 
12
+ Scenario: Verify server is open on expected set of ports using the nmap-fast attack step
13
+ When I launch a "nmap-fast" attack
14
+ Then the output should match /80.tcp\s+open/
15
+
11
16
  Scenario: Verify server is open on expected set of ports using the nmap fast flag
12
17
  When I launch an "nmap" attack with:
13
18
  """
14
19
  nmap -F <hostname>
15
20
  """
16
- Then the output should contain:
21
+ Then the output should match:
17
22
  """
18
- 80/tcp open http
23
+ 80/tcp\s+open
19
24
  """
25
+
20
26
  Scenario: Verify that there are no unexpected ports open
21
27
  When I launch an "nmap" attack with:
22
28
  """
@@ -12,5 +12,9 @@ Feature: simple nmap attack (sanity check)
12
12
  """
13
13
  nmap -p 80,443 <hostname>
14
14
  """
15
- Then the output should contain "80/tcp open"
16
- And the output should not contain "443/tcp open"
15
+ Then the output should match /80.tcp\s+open/
16
+ And the output should not match:
17
+ """
18
+ 443/tcp\s+open
19
+ """
20
+
@@ -8,6 +8,7 @@ Feature: nmap attack
8
8
  | simple.attack |
9
9
  | os_detection.attack |
10
10
  | tcp_ping_ports.attack |
11
+ | nmap.attack |
11
12
  | xml_output.attack |
12
13
 
13
14
  Scenario: Simple nmap attack
@@ -37,3 +38,9 @@ Feature: nmap attack
37
38
  """
38
39
  5 steps (5 passed)
39
40
  """
41
+ Scenario: The full nmap attack
42
+ When I run `gauntlt nmap.attack`
43
+ Then it should pass with:
44
+ """
45
+ 17 steps (17 passed)
46
+ """
@@ -1,5 +1,5 @@
1
1
  require 'aruba/cucumber'
2
2
 
3
3
  Before do
4
- @aruba_timeout_seconds = 5 # Add more time for sloooooowww networks
4
+ @aruba_timeout_seconds = 10 # Add more time for sloooooowww networks
5
5
  end
@@ -1,9 +1,9 @@
1
1
  Before('@slow') do
2
- @aruba_timeout_seconds = 30
2
+ @aruba_timeout_seconds = 45
3
3
  end
4
4
 
5
5
  if RUBY_PLATFORM == 'java'
6
6
  Before do
7
7
  @aruba_timeout_seconds = 30
8
8
  end
9
- end
9
+ end
@@ -17,6 +17,9 @@ module Gauntlt
17
17
  ATTACK_ADAPTERS_DIR = File.join(GAUNTLT_DIR, 'attack_adapters')
18
18
 
19
19
  ATTACK_ADAPTERS_GLOB_PATTERN = ATTACK_ADAPTERS_DIR + '/*.rb'
20
+
21
+ ATTACK_ALIASES_DIR = File.join(GAUNTLT_DIR, 'attack_aliases')
22
+ ATTACK_ALIASES_GLOB_PATTERN = ATTACK_ALIASES_DIR + '/*.json'
20
23
 
21
24
  class << self
22
25
  def attack_adapters
@@ -29,8 +32,8 @@ module Gauntlt
29
32
  end.sort
30
33
  end
31
34
 
32
- def attack(path, tags=[])
33
- Attack.new(path, tags).run
35
+ def attack(path, tags=[], format="")
36
+ Attack.new(path, tags, format).run
34
37
  end
35
38
 
36
39
  def stepdefs(path, tags=[])
@@ -4,12 +4,12 @@ module Gauntlt
4
4
  class Attack
5
5
  attr_accessor :runtime
6
6
 
7
- def initialize(path, tags=[])
8
- self.runtime = Runtime.new(path, tags)
7
+ def initialize(path, tags=[], format="")
8
+ self.runtime = Runtime.new(path, tags, format)
9
9
  end
10
10
 
11
11
  def run
12
12
  runtime.execute!
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -1,9 +1,19 @@
1
1
  # TODO: figure out if there's a way to namespace these step definitions
2
-
2
+ #
3
+ #read in JSON
3
4
  When /^"nmap" is installed$/ do
4
5
  ensure_cli_installed("nmap")
5
6
  end
6
7
 
7
8
  When /^I launch an "nmap" attack with:$/ do |command|
8
9
  run_with_profile command
9
- end
10
+ end
11
+
12
+ When /^I launch a "nmap-(.*?)" attack$/ do |type|
13
+ attack_alias = 'nmap-' + type
14
+ nmap_attack = load_attack_alias(attack_alias)
15
+
16
+ Kernel.puts "Running a #{attack_alias} attack. This attack has this description:\n #{nmap_attack['description']}"
17
+
18
+ run_with_profile nmap_attack['command']
19
+ end
@@ -0,0 +1,30 @@
1
+ require "json"
2
+
3
+ module Gauntlt
4
+ module Support
5
+ module AttackAliasHelper
6
+
7
+ def gauntlt_attack_aliases
8
+ @gauntlt_attack_aliases ||= {}
9
+ end
10
+
11
+ def load_attack_alias(alias_name)
12
+ @attack_steps = import_attack_aliases
13
+ @attack_steps[alias_name] || raise("Unknown attack alias #{alias_name}, try gauntlt --list_attack_aliases")
14
+ end
15
+
16
+ def import_attack_aliases
17
+ @imported_attack_aliases = Hash.new
18
+ attack_aliases_json = Dir.glob(ATTACK_ALIASES_GLOB_PATTERN)
19
+ attack_aliases_json.each do |file|
20
+ @imported_attack_aliases.merge!(JSON.load(File.open(file)))
21
+ end
22
+ @imported_attack_aliases
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+
29
+ World(Gauntlt::Support::AttackAliasHelper)
30
+
@@ -0,0 +1,5 @@
1
+ { "dirb-apache-vulns" : { "command" : "dirb --list apache.txt <host>",
2
+ "description" : "This looks for apache defaults which would suggest the server isnt hardened correctly.",
3
+ "requires" : [ "<host>" ]
4
+ }
5
+ }
@@ -0,0 +1,9 @@
1
+ { "nmap-fast" : { "command" : "nmap -F <host>",
2
+ "description" : "This is a fast nmap scan that should run in 10 seconds or less on most networks. It looks for the most common ports and services.",
3
+ "requires" : [ "<host>" ]
4
+ },
5
+ "nmap-single_port" : { "command" : "nmap -p<port> <host>",
6
+ "description" : "This checks a single port only",
7
+ "requires" : [ "<host>", "<port>" ]
8
+ }
9
+ }
@@ -7,19 +7,20 @@ module Gauntlt
7
7
  class NoFilesFound < StandardError; end
8
8
  class ExecutionFailed < StandardError; end
9
9
 
10
- attr_accessor :path, :attack_files, :tags
10
+ attr_accessor :path, :attack_files, :tags, :format
11
11
 
12
- def initialize(path, tags=[])
12
+ def initialize(path, tags=[], format="")
13
13
  self.path = path
14
14
  self.attack_files = self.class.attack_files_for(path)
15
15
  self.tags = tags
16
-
16
+ self.format = format
17
17
  raise NoFilesFound.new("No files found in path: #{path}") if attack_files.empty?
18
18
  end
19
19
 
20
20
  def cuke_cli
21
21
  args = attack_files + ['--strict', '--require', self.class.adapters_dir]
22
22
  args += ['--tags', tags] unless tags.empty?
23
+ args += ['--format', format] unless format.nil?
23
24
 
24
25
  Cucumber::Cli::Main.new(args)
25
26
  end
@@ -1,3 +1,3 @@
1
1
  module Gauntlt
2
- VERSION = "0.1.5"
2
+ VERSION = "1.0.5"
3
3
  end
@@ -5,41 +5,51 @@
5
5
  NMAP=`which nmap`
6
6
  GARMR=`which garmr`
7
7
  DIRB=`which dirb`
8
-
9
- if [ -z $NMAP ]
10
- then
11
- echo "nmap is not installed in your path, try installing it and adding it to your path"
12
- exit
13
- fi
8
+ ERRORS=0
14
9
 
15
10
  if [ -z $SSLYZE_PATH ]
16
11
  then
17
- echo "SSLYZE_PATH environment variable unset, try setting it to ./vendor/sslyze/sslyze.py if you havent updated the submodules we use in gauntlt, run this first: git submodule update --init --recursive"
18
- exit
12
+ MESSAGE="SSLYZE_PATH environment variable unset, try setting it to ./vendor/sslyze/sslyze.py if you havent updated the submodules we use in gauntlt, run this first: git submodule update --init --recursive"
13
+ ERRORS=$ERRORS+1
19
14
  fi
20
15
 
21
16
  if [ -z $SQLMAP_PATH ]
22
17
  then
23
- echo "SQLMAP_PATH environment variable unset, try setting it to ./vendor/sslyze/sqlmap.py if you havent updated the submodules we use in gauntlt, run this first: git submodule update --init --recursive"
24
- exit
18
+ MESSAGE="SQLMAP_PATH environment variable unset, try setting it to ./vendor/sslyze/sqlmap.py if you havent updated the submodules we use in gauntlt, run this first: git submodule update --init --recursive"
19
+ ERRORS=$ERRORS+1
25
20
  fi
26
21
 
27
22
  if [ -z $GARMR ]
28
23
  then
29
- echo "garmr is not installed in your path, try installing it 'cd vendor/Garmr && sudo python setup.py install && cd ../..'"
30
- exit
24
+ MESSAGE="garmr is not installed in your path, try installing it 'cd vendor/Garmr && sudo python setup.py install && cd ../..'"
25
+ ERRORS=$ERRORS+1
31
26
  fi
32
27
 
33
- if [ -z $DIRB ]
28
+ if [ -z $DIRB_WORDLISTS ]
34
29
  then
35
- echo "dirb is not installed in your path, try installing it 'wget http://downloads.sourceforge.net/project/dirb/dirb/2.03/dirb203.tar.gz && tar xvfz dirb203.tar.gz && cd dirb && ./configure && make && cd ..'"
36
- exit
30
+ MESSAGE="DIRB_WORDLISTS environment variable not set, please set it. Usually this is where you extracted dirb in a directory called 'wordlists'"
31
+ ERRORS=$ERRORS+1
37
32
  fi
38
33
 
39
- if [ -z $DIRB_WORDLISTS ]
34
+ if [ -z $DIRB ]
40
35
  then
41
- echo "DIRB_WORDLISTS environment variable not set, please set it. Usually this is where you extracted dirb in a directory called 'wordlists'"
42
- exit
36
+ MESSAGE="dirb is not installed in your path, try installing it 'wget http://downloads.sourceforge.net/project/dirb/dirb/2.03/dirb203.tar.gz && tar xvfz dirb203.tar.gz && cd dirb && ./configure && make && cd ..'"
37
+ ERRORS=$ERRORS+1
43
38
  fi
44
39
 
45
- echo "You are ready to rumble!"
40
+ if [ -z $NMAP ]
41
+ then
42
+ MESSAGE="nmap is not installed in your path, try installing it (brew install nmap OR apt-get install nmap) and adding it to your path"
43
+ ERRORS=$ERRORS+1
44
+ fi
45
+
46
+
47
+
48
+ if [ $ERRORS -gt 0 ]
49
+ then
50
+ echo $MESSAGE
51
+ ERRORS=$ERRORS-1
52
+ echo "$ERRORS more things to fix... keep running ./ready_to_rumble.sh until you ARE."
53
+ else
54
+ echo "You ARE ready to rumble!"
55
+ fi
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gauntlt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
5
- prerelease:
4
+ version: 1.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - James Wickett
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-07-25 00:00:00.000000000 Z
12
+ date: 2013-08-07 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: cucumber
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: aruba
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ! '>='
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ! '>='
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rake
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ! '>='
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ! '>='
61
54
  - !ruby/object:Gem::Version
@@ -63,7 +56,6 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: sinatra
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
60
  - - ! '>='
69
61
  - !ruby/object:Gem::Version
@@ -71,7 +63,6 @@ dependencies:
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
67
  - - ! '>='
77
68
  - !ruby/object:Gem::Version
@@ -79,7 +70,6 @@ dependencies:
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: cucumber
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
74
  - - ! '>='
85
75
  - !ruby/object:Gem::Version
@@ -87,7 +77,6 @@ dependencies:
87
77
  type: :runtime
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
81
  - - ! '>='
93
82
  - !ruby/object:Gem::Version
@@ -95,7 +84,6 @@ dependencies:
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: aruba
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
88
  - - ! '>='
101
89
  - !ruby/object:Gem::Version
@@ -103,7 +91,6 @@ dependencies:
103
91
  type: :runtime
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
95
  - - ! '>='
109
96
  - !ruby/object:Gem::Version
@@ -111,7 +98,6 @@ dependencies:
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: nokogiri
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
102
  - - ~>
117
103
  - !ruby/object:Gem::Version
@@ -119,7 +105,6 @@ dependencies:
119
105
  type: :runtime
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
109
  - - ~>
125
110
  - !ruby/object:Gem::Version
@@ -127,7 +112,6 @@ dependencies:
127
112
  - !ruby/object:Gem::Dependency
128
113
  name: trollop
129
114
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
115
  requirements:
132
116
  - - ! '>='
133
117
  - !ruby/object:Gem::Version
@@ -135,7 +119,6 @@ dependencies:
135
119
  type: :runtime
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
122
  requirements:
140
123
  - - ! '>='
141
124
  - !ruby/object:Gem::Version
@@ -205,12 +188,15 @@ files:
205
188
  - lib/gauntlt/attack_adapters/nmap.rb
206
189
  - lib/gauntlt/attack_adapters/sqlmap.rb
207
190
  - lib/gauntlt/attack_adapters/sslyze.rb
191
+ - lib/gauntlt/attack_adapters/support/attack_step_helper.rb
208
192
  - lib/gauntlt/attack_adapters/support/cli_helper.rb
209
193
  - lib/gauntlt/attack_adapters/support/cookie_helper.rb
210
194
  - lib/gauntlt/attack_adapters/support/nmap_helper.rb
211
195
  - lib/gauntlt/attack_adapters/support/profile_helper.rb
212
196
  - lib/gauntlt/attack_adapters/support/python_script_helper.rb
213
197
  - lib/gauntlt/attack_adapters/support/xml_helper.rb
198
+ - lib/gauntlt/attack_aliases/dirb.json
199
+ - lib/gauntlt/attack_aliases/nmap.json
214
200
  - lib/gauntlt/runtime.rb
215
201
  - lib/gauntlt/stepdef.rb
216
202
  - lib/gauntlt/version.rb
@@ -221,31 +207,29 @@ files:
221
207
  - test/gauntlt_test.rb
222
208
  - test/test_helper.rb
223
209
  - test/tmf.rb
224
- - vendor/dirb203.tar.gz
225
210
  - vendor/sslyze_output.README
226
211
  homepage: https://github.com/gauntlt/gauntlt
227
212
  licenses: []
213
+ metadata: {}
228
214
  post_install_message:
229
215
  rdoc_options: []
230
216
  require_paths:
231
217
  - lib
232
218
  required_ruby_version: !ruby/object:Gem::Requirement
233
- none: false
234
219
  requirements:
235
220
  - - ! '>='
236
221
  - !ruby/object:Gem::Version
237
222
  version: '0'
238
223
  required_rubygems_version: !ruby/object:Gem::Requirement
239
- none: false
240
224
  requirements:
241
225
  - - ! '>='
242
226
  - !ruby/object:Gem::Version
243
227
  version: '0'
244
228
  requirements: []
245
229
  rubyforge_project:
246
- rubygems_version: 1.8.25
230
+ rubygems_version: 2.0.5
247
231
  signing_key:
248
- specification_version: 3
232
+ specification_version: 4
249
233
  summary: behaviour-driven security using cucumber
250
234
  test_files:
251
235
  - features/attack.feature
Binary file