ardecy 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd867dd6f7fb9d68567b4e7b78f7317e37fd159929bb3b7c2ca9beb11563146a
4
- data.tar.gz: 6ad77f7b0cb309d9e51257e08b921fc66ea11a7a9264b77bb1465a14ca1f31e2
3
+ metadata.gz: dfee812e31a5a1dc6f31eaa70fb6837459732157ef174fd215eb215ea299f0c7
4
+ data.tar.gz: 5933831912f0b6770be89ba4bf9821aa12503600ca9e4e23d90df35837d453d6
5
5
  SHA512:
6
- metadata.gz: a66daa605946c1efe73c4521763cf29d0e40af2f942eeaa8777cac93db149f1e917147ed1ba3387c1bed71f6565b67a0311edd461499a572960ef7ceec0623c4
7
- data.tar.gz: 28f36c476b37939e238affce67650e665a2ceae73bb3dc1a54c3e1b6dc6bcf44ee633d42bf18fef94d2d92aaee50be8bf5bada8e789ddee9776196002d9dea6e
6
+ metadata.gz: 3d2145fe504aa730c778092360531ec37da9e72c12e7c1edfcf66f8a459dd7b02188defe1fa3572c1931e7422bad12bdba19ca124f7164025c336c4c340c7f2f
7
+ data.tar.gz: 9032e9a78441de631fb46bd03ad47fb3770815f229a8c2b2200e161bb12581f95f49e623e7a6d7ef2e69bdd0b18f7034c116f8f9b92b9a58fcc2b9cf51a27637
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -1,16 +1,32 @@
1
1
  # Ardecy
2
- Awesome ruby gem to build: ardecy !
3
2
 
4
- ## Gem build
3
+ <div align="center">
4
+ <br/>
5
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)
6
+ [![Gem Version](https://badge.fury.io/rb/ardecy.svg)](https://badge.fury.io/rb/ardecy)
7
+ </div>
5
8
 
6
- gem build ardecy.gemspec
7
-
8
- ## Gem push
9
-
10
- gem login
11
- gem push ardecy-0.0.1.gem
9
+ Ardecy is a security, privacy auditing, fixing and hardening tool for Linux.
12
10
 
13
11
  ## Install ardecy locally
14
12
 
13
+ With gem:
14
+
15
+ gem cert --add <(curl -Ls https://raw.githubusercontent.com/szorfein/ardecy/master/certs/szorfein.pem)
15
16
  gem install ardecy-0.0.1.gem -P HighSecurity
17
+ ardecy -h
18
+
19
+ With github:
20
+
21
+ git clone https://github.com/szorfein/ardecy
22
+ cd ardecy
23
+ ruby -I lib bin/ardecy -h
24
+
25
+ ## Usage
26
+ Audit your system
27
+
28
+ ardecy --audit
29
+
30
+ Correct errors found
16
31
 
32
+ ardecy --fix
data/bin/ardecy CHANGED
@@ -1,4 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- require "ardecy"
3
- puts "Ardecy v." + Ardecy::VERSION
2
+
3
+ require 'ardecy'
4
+
5
+ ardecy = Ardecy::Main.new(ARGV)
6
+
7
+ ardecy.scan
8
+
9
+ ardecy.bye
4
10
 
data/lib/ardecy.rb CHANGED
@@ -1,4 +1,50 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'ardecy/version'
4
+ require_relative 'ardecy/options'
5
+ require_relative 'ardecy/harden'
6
+ require_relative 'ardecy/privacy'
7
+ require_relative 'ardecy/guard'
8
+
2
9
  module Ardecy
10
+ class Main
11
+ def initialize(args)
12
+ @cli = Options.new(args).options
13
+ show_intent
14
+ permission
15
+ end
16
+
17
+ def scan
18
+ Harden.sysctl({
19
+ audit: @cli[:audit],
20
+ fix: @cli[:fix]
21
+ })
22
+ end
23
+
24
+ def bye
25
+ puts
26
+ puts " -[ Bye - Ardecy v." + Ardecy::VERSION + " ]- "
27
+ exit
28
+ end
29
+
30
+ def permission
31
+ return unless @cli[:fix]
32
+
33
+ Ardecy::Guard.perm
34
+ end
35
+
36
+ def show_intent
37
+ audit = @cli[:audit] ||= false
38
+ fixing = @cli[:fix] ||= false
39
+ puts
40
+ if audit || fixing
41
+ print ' ====> '
42
+ print 'Audit ' if audit
43
+ print 'Fixing ' if fixing
44
+ print "System\n"
45
+ end
46
+ puts
47
+ end
48
+ end
3
49
  end
4
50
 
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ardecy
4
+ class BadPerm < StandardError
5
+ end
6
+
7
+ module Guard
8
+ def self.perm
9
+ uid = Process.uid
10
+ raise BadPerm, 'Please, run this program as a root.' unless uid === 0
11
+ rescue BadPerm => e
12
+ warn "\n#{e.class} > #{e}"
13
+ exit 1
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'display'
4
+ require_relative 'harden/sysctl'
5
+
6
+ module Ardecy
7
+ module Harden
8
+ extend Display
9
+
10
+ def self.sysctl(args)
11
+ sysctl_kernel(args)
12
+ puts
13
+ sysctl_network(args)
14
+ end
15
+
16
+ def self.sysctl_kernel(args)
17
+ title 'Kernel Hardening'
18
+
19
+ Sysctl::Kernel::KPointer.new(args).x
20
+ Sysctl::Kernel::Dmesg.new(args).x
21
+ Sysctl::Kernel::Printk.new(args).x
22
+ Sysctl::Kernel::BpfDisabled.new(args).x
23
+ Sysctl::Kernel::BpfJitHarden.new(args).x
24
+ Sysctl::Kernel::LdiskAutoload.new(args).x
25
+ Sysctl::Kernel::UserFaultFd.new(args).x
26
+ Sysctl::Kernel::KExecLoadDisabled.new(args).x
27
+ Sysctl::Kernel::SysRQ.new(args).x
28
+ Sysctl::Kernel::UsernsClone.new(args).x
29
+ Sysctl::Kernel::MaxUserNameSpace.new(args).x
30
+ Sysctl::Kernel::PerfEventParanoid.new(args).x
31
+ Sysctl::Kernel::YamaPtrace.new(args).x
32
+ Sysctl::Kernel::VmMmapRndBits.new(args).x
33
+ Sysctl::Kernel::VmMmapRndCompatBits.new(args).x
34
+ Sysctl::Kernel::FsProtectedSymlinks.new(args).x
35
+ Sysctl::Kernel::FsProtectedHardlinks.new(args).x
36
+ Sysctl::Kernel::FsProtectedFifos.new(args).x
37
+ Sysctl::Kernel::FsProtectedRegular.new(args).x
38
+
39
+ return unless args[:fix]
40
+
41
+ conf = '/etc/sysctl.d/ardecy_kernel.conf'
42
+ puts if args[:audit]
43
+ puts " ===> Applying at #{conf}..."
44
+ puts
45
+ kernel_correct_show Sysctl::KERNEL
46
+ Sysctl::KERNEL << "\n"
47
+ if Dir.exist? '/etc/sysctl.d/'
48
+ File.write(conf, Sysctl::KERNEL.join("\n"), mode: 'w', chmod: 0644)
49
+ else
50
+ puts '[-] Directory /etc/sysctl.d/ no found.'
51
+ end
52
+ end
53
+
54
+ def self.sysctl_network(args)
55
+ title 'Network Hardening'
56
+
57
+ Sysctl::Network::TcpSynCookie.new(args).x
58
+ Sysctl::Network::RFC1337.new(args).x
59
+ Sysctl::Network::AllRpFilter.new(args).x
60
+ Sysctl::Network::DefaultRpFilter.new(args).x
61
+ Sysctl::Network::AllAcceptRedirects.new(args).x
62
+ Sysctl::Network::DefaultAcceptRedirects.new(args).x
63
+ Sysctl::Network::AllSecureRedirects.new(args).x
64
+ Sysctl::Network::DefaultSecureRedirects.new(args).x
65
+ Sysctl::Network::Ipv6AllAcceptRedirects.new(args).x
66
+ Sysctl::Network::Ipv6DefaultAcceptRedirects.new(args).x
67
+ Sysctl::Network::AllSendRedirects.new(args).x
68
+ Sysctl::Network::DefaultSendRedirects.new(args).x
69
+ Sysctl::Network::IcmpEchoIgnoreAll.new(args).x
70
+ Sysctl::Network::AllAcceptSourceRoute.new(args).x
71
+ Sysctl::Network::DefaultAcceptSourceRoute.new(args).x
72
+ Sysctl::Network::Ipv6AllAcceptSourceRoute.new(args).x
73
+ Sysctl::Network::Ipv6DefaultAcceptSourceRoute.new(args).x
74
+ Sysctl::Network::Ipv6ConfAllAcceptRa.new(args).x
75
+ Sysctl::Network::Ipv6ConfDefaultAcceptRa.new(args).x
76
+ Sysctl::Network::TcpSack.new(args).x
77
+ Sysctl::Network::TcpDSack.new(args).x
78
+ Sysctl::Network::TcpFack.new(args).x
79
+
80
+ return unless args[:fix]
81
+
82
+ conf = '/etc/sysctl.d/ardecy_network.conf'
83
+ puts if args[:audit]
84
+ puts " ===> Applying at #{conf}..."
85
+ puts
86
+ kernel_correct_show Sysctl::NETWORK
87
+ Sysctl::NETWORK << "\n"
88
+ if Dir.exist? '/etc/sysctl.d/'
89
+ File.write(conf, Sysctl::NETWORK.join("\n"), mode: 'w', chmod: 0644)
90
+ else
91
+ puts '[-] Directory /etc/sysctl.d/ no found.'
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'display'
4
+
5
+ module Ardecy
6
+ module Harden
7
+ module Sysctl
8
+ KERNEL = []
9
+ NETWORK = []
10
+
11
+ class SysKern
12
+ include Display
13
+
14
+ def scan
15
+ kernel_show(@line, @exp) if @args[:audit]
16
+ if File.exist? @file
17
+ if File.readable? @file
18
+ value = File.read(@file).chomp
19
+ @res = value.to_s =~ /#{@exp}/ ? 'OK' : 'FAIL'
20
+ else
21
+ @res = 'PROTECTED'
22
+ end
23
+ else
24
+ @res = 'NO FOUND'
25
+ end
26
+ if @tab
27
+ kernel_res(@res, @tab) if @args[:audit]
28
+ elsif @args[:audit]
29
+ kernel_res(@res)
30
+ end
31
+ end
32
+
33
+ def fix
34
+ return unless File.exist? @file
35
+
36
+ KERNEL << "#{@line} = #{@exp}"
37
+ end
38
+
39
+ def repair
40
+ return unless @args[:fix]
41
+
42
+ Ardecy::Guard.perm
43
+ if @res != 'OK' && @res != 'PROTECTED'
44
+ if File.exist? @file
45
+ File.write(@file, @exp, mode: 'w', preserve: true)
46
+ end
47
+ end
48
+ end
49
+
50
+ def x
51
+ scan
52
+ fix
53
+ repair
54
+ end
55
+ end
56
+
57
+ class SysNet < SysKern
58
+ def fix
59
+ return unless File.exist? @file
60
+
61
+ NETWORK << "#{@line} = #{@exp}"
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ require_relative 'sysctl/kernel'
69
+ require_relative 'sysctl/network'
@@ -0,0 +1,211 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ardecy
4
+ module Harden
5
+ module Sysctl
6
+ module Kernel
7
+ class KPointer < Sysctl::SysKern
8
+ def initialize(args)
9
+ @file = '/proc/sys/kernel/kptr_restrict'
10
+ @exp = '2'
11
+ @res = 'FALSE'
12
+ @line = 'kernel.kptr_restrict'
13
+ @args = args
14
+ end
15
+ end
16
+
17
+ class Dmesg < Sysctl::SysKern
18
+ def initialize(args)
19
+ @file = '/proc/sys/kernel/dmesg_restrict'
20
+ @exp = '1'
21
+ @res = 'FALSE'
22
+ @line = 'kernel.dmesg_restrict'
23
+ @args = args
24
+ end
25
+ end
26
+
27
+ class Printk < Sysctl::SysKern
28
+ def initialize(args)
29
+ @file = '/proc/sys/kernel/printk'
30
+ @exp = '3 3 3 3'
31
+ @res = 'FALSE'
32
+ @line = 'kernel.printk'
33
+ @args = args
34
+ end
35
+
36
+ def scan
37
+ kernel_show(@line, @exp) if @args[:audit]
38
+ value = File.read(@file).chomp
39
+ @res = 'OK' if value =~ /3\s+3\s+3\s+3/
40
+ kernel_res(@res) if @args[:audit]
41
+ end
42
+ end
43
+
44
+ class BpfDisabled < Sysctl::SysKern
45
+ def initialize(args)
46
+ @file = '/proc/sys/kernel/unprivileged_bpf_disabled'
47
+ @exp = '1'
48
+ @res = 'FALSE'
49
+ @line = 'kernel.unprivileged_bpf_disabled'
50
+ @tab = 2
51
+ @args = args
52
+ end
53
+ end
54
+
55
+ class BpfJitHarden < Sysctl::SysKern
56
+ def initialize(args)
57
+ @file = '/proc/sys/net/core/bpf_jit_harden'
58
+ @exp = '2'
59
+ @res = 'FALSE'
60
+ @line = 'net.core.bpf_jit_harden'
61
+ @args = args
62
+ end
63
+ end
64
+
65
+ class LdiskAutoload < Sysctl::SysKern
66
+ def initialize(args)
67
+ @file = '/proc/sys/dev/tty/ldisc_autoload'
68
+ @exp = '0'
69
+ @res = 'FALSE'
70
+ @line = 'dev.tty.ldisc_autoload'
71
+ @args = args
72
+ end
73
+ end
74
+
75
+ class UserFaultFd < Sysctl::SysKern
76
+ def initialize(args)
77
+ @file = '/proc/sys/vm/unprivileged_userfaultfd'
78
+ @exp = '0'
79
+ @res = 'FALSE'
80
+ @line = 'vm.unprivileged_userfaultfd'
81
+ @args = args
82
+ @tab = 2
83
+ end
84
+ end
85
+
86
+ class KExecLoadDisabled < Sysctl::SysKern
87
+ def initialize(args)
88
+ @file = '/proc/sys/kernel/kexec_load_disabled'
89
+ @exp = '1'
90
+ @res = 'FALSE'
91
+ @line = 'kernel.kexec_load_disabled'
92
+ @args = args
93
+ end
94
+ end
95
+
96
+ class SysRQ < Sysctl::SysKern
97
+ def initialize(args)
98
+ @file = '/proc/sys/kernel/sysrq'
99
+ @exp = '0'
100
+ @res = 'FALSE'
101
+ @line = 'kernel.sysrq'
102
+ @args = args
103
+ @tab = 4
104
+ end
105
+ end
106
+
107
+ class UsernsClone < Sysctl::SysKern
108
+ def initialize(args)
109
+ @file = '/proc/sys/kernel/unprivileged_userns_clone'
110
+ @exp = '0'
111
+ @res = 'FALSE'
112
+ @line = 'unprivileged_userns_clone'
113
+ @args = args
114
+ end
115
+ end
116
+
117
+ class MaxUserNameSpace < Sysctl::SysKern
118
+ def initialize(args)
119
+ @file = '/proc/sys/user/max_user_namespaces'
120
+ @exp = '0'
121
+ @res = 'FALSE'
122
+ @line = 'user.max_user_namespaces'
123
+ @args = args
124
+ end
125
+ end
126
+
127
+ class PerfEventParanoid < Sysctl::SysKern
128
+ def initialize(args)
129
+ @file = '/proc/sys/kernel/perf_event_paranoid'
130
+ @exp = '3'
131
+ @res = 'FALSE'
132
+ @line = 'kernel.perf_event_paranoid'
133
+ @args = args
134
+ end
135
+ end
136
+
137
+ class YamaPtrace < Sysctl::SysKern
138
+ def initialize(args)
139
+ @file = '/proc/sys/kernel/yama/ptrace_scope'
140
+ @exp = '2'
141
+ @res = 'FALSE'
142
+ @line = 'kernel.yama.ptrace_scope'
143
+ @args = args
144
+ end
145
+ end
146
+
147
+ class VmMmapRndBits < Sysctl::SysKern
148
+ def initialize(args)
149
+ @file = '/proc/sys/vm/mmap_rnd_bits'
150
+ @exp = '32'
151
+ @res = 'FALSE'
152
+ @line = 'vm.mmap_rnd_bits'
153
+ @args = args
154
+ @tab = 4
155
+ end
156
+ end
157
+
158
+ class VmMmapRndCompatBits < Sysctl::SysKern
159
+ def initialize(args)
160
+ @file = '/proc/sys/vm/mmap_rnd_compat_bits'
161
+ @exp = '16'
162
+ @res = 'FALSE'
163
+ @line = 'vm.mmap_rnd_compat_bits'
164
+ @args = args
165
+ end
166
+ end
167
+
168
+ class FsProtectedSymlinks < Sysctl::SysKern
169
+ def initialize(args)
170
+ @file = '/proc/sys/fs/protected_symlinks'
171
+ @exp = '1'
172
+ @res = 'FALSE'
173
+ @line = 'fs.protected_symlinks'
174
+ @args = args
175
+ end
176
+ end
177
+
178
+ class FsProtectedHardlinks < Sysctl::SysKern
179
+ def initialize(args)
180
+ @file = '/proc/sys/fs/protected_hardlinks'
181
+ @exp = '1'
182
+ @res = 'FALSE'
183
+ @line = 'fs.protected_hardlinks'
184
+ @args = args
185
+ end
186
+ end
187
+
188
+ class FsProtectedFifos < Sysctl::SysKern
189
+ def initialize(args)
190
+ @file = '/proc/sys/fs/protected_fifos'
191
+ @exp = '2'
192
+ @res = 'FALSE'
193
+ @line = 'fs.protected_fifos'
194
+ @args = args
195
+ @tab = 4
196
+ end
197
+ end
198
+
199
+ class FsProtectedRegular < Sysctl::SysKern
200
+ def initialize(args)
201
+ @file = '/proc/sys/fs/protected_regular'
202
+ @exp = '2'
203
+ @res = 'FALSE'
204
+ @line = 'fs.protected_regular'
205
+ @args = args
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,249 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ardecy
4
+ module Harden
5
+ module Sysctl
6
+ module Network
7
+ class TcpSynCookie < Sysctl::SysNet
8
+ def initialize(args)
9
+ @file = '/proc/sys/net/ipv4/tcp_syncookies'
10
+ @exp = '1'
11
+ @res = 'FALSE'
12
+ @line = 'net.ipv4.tcp_syncookies'
13
+ @args = args
14
+ end
15
+ end
16
+
17
+ class RFC1337 < Sysctl::SysNet
18
+ def initialize(args)
19
+ @file = '/proc/sys/net/ipv4/tcp_rfc1337'
20
+ @exp = '1'
21
+ @res = 'FALSE'
22
+ @line = 'net.ipv4.tcp_rfc1337'
23
+ @args = args
24
+ end
25
+ end
26
+
27
+ class AllRpFilter < Sysctl::SysNet
28
+ def initialize(args)
29
+ @file = '/proc/sys/net/ipv4/conf/all/rp_filter'
30
+ @exp = '1'
31
+ @res = 'FALSE'
32
+ @line = 'net.ipv4.conf.all.rp_filter'
33
+ @args = args
34
+ @tab = 2
35
+ end
36
+ end
37
+
38
+ class DefaultRpFilter < Sysctl::SysNet
39
+ def initialize(args)
40
+ @file = '/proc/sys/net/ipv4/conf/default/rp_filter'
41
+ @exp = '1'
42
+ @res = 'FALSE'
43
+ @line = 'net.ipv4.conf.default.rp_filter'
44
+ @args = args
45
+ @tab = 2
46
+ end
47
+ end
48
+
49
+ class AllAcceptRedirects < Sysctl::SysNet
50
+ def initialize(args)
51
+ @file = '/proc/sys/net/ipv4/conf/all/accept_redirects'
52
+ @exp = '0'
53
+ @res = 'FALSE'
54
+ @line = 'net.ipv4.conf.all.accept_redirects'
55
+ @args = args
56
+ @tab = 2
57
+ end
58
+ end
59
+
60
+ class DefaultAcceptRedirects < Sysctl::SysNet
61
+ def initialize(args)
62
+ @file = '/proc/sys/net/ipv4/conf/default/accept_redirects'
63
+ @exp = '0'
64
+ @res = 'FALSE'
65
+ @line = 'net.ipv4.conf.default.accept_redirects'
66
+ @args = args
67
+ @tab = 1
68
+ end
69
+ end
70
+
71
+ class AllSecureRedirects < Sysctl::SysNet
72
+ def initialize(args)
73
+ @file = '/proc/sys/net/ipv4/conf/all/secure_redirects'
74
+ @exp = '0'
75
+ @res = 'FALSE'
76
+ @line = 'net.ipv4.conf.all.secure_redirects'
77
+ @args = args
78
+ @tab = 2
79
+ end
80
+ end
81
+
82
+ class DefaultSecureRedirects < Sysctl::SysNet
83
+ def initialize(args)
84
+ @file = '/proc/sys/net/ipv4/conf/default/secure_redirects'
85
+ @exp = '0'
86
+ @res = 'FALSE'
87
+ @line = 'net.ipv4.conf.default.secure_redirects'
88
+ @args = args
89
+ @tab = 1
90
+ end
91
+ end
92
+
93
+ class Ipv6AllAcceptRedirects < Sysctl::SysNet
94
+ def initialize(args)
95
+ @file = '/proc/sys/net/ipv6/conf/all/accept_redirects'
96
+ @exp = '0'
97
+ @res = 'FALSE'
98
+ @line = 'net.ipv6.conf.all.accept_redirects'
99
+ @args = args
100
+ @tab = 2
101
+ end
102
+ end
103
+
104
+ class Ipv6DefaultAcceptRedirects < Sysctl::SysNet
105
+ def initialize(args)
106
+ @file = '/proc/sys/net/ipv6/conf/default/accept_redirects'
107
+ @exp = '0'
108
+ @res = 'FALSE'
109
+ @line = 'net.ipv6.conf.default.accept_redirects'
110
+ @args = args
111
+ @tab = 1
112
+ end
113
+ end
114
+
115
+ class AllSendRedirects < Sysctl::SysNet
116
+ def initialize(args)
117
+ @file = '/proc/sys/net/ipv4/conf/all/send_redirects'
118
+ @exp = '0'
119
+ @res = 'FALSE'
120
+ @line = 'net.ipv4.conf.all.send_redirects'
121
+ @args = args
122
+ @tab = 2
123
+ end
124
+ end
125
+
126
+ class DefaultSendRedirects < Sysctl::SysNet
127
+ def initialize(args)
128
+ @file = '/proc/sys/net/ipv4/conf/default/send_redirects'
129
+ @exp = '0'
130
+ @res = 'FALSE'
131
+ @line = 'net.ipv4.conf.default.send_redirects'
132
+ @args = args
133
+ @tab = 1
134
+ end
135
+ end
136
+
137
+ class IcmpEchoIgnoreAll < Sysctl::SysNet
138
+ def initialize(args)
139
+ @file = '/proc/sys/net/ipv4/icmp_echo_ignore_all'
140
+ @exp = '1'
141
+ @res = 'FALSE'
142
+ @line = 'net.ipv4.icmp_echo_ignore_all'
143
+ @args = args
144
+ @tab = 2
145
+ end
146
+ end
147
+
148
+ class AllAcceptSourceRoute < Sysctl::SysNet
149
+ def initialize(args)
150
+ @file = '/proc/sys/net/ipv4/conf/all/accept_source_route'
151
+ @exp = '0'
152
+ @res = 'FALSE'
153
+ @line = 'net.ipv4.conf.all.accept_source_route'
154
+ @args = args
155
+ @tab = 1
156
+ end
157
+ end
158
+
159
+ class DefaultAcceptSourceRoute < Sysctl::SysNet
160
+ def initialize(args)
161
+ @file = '/proc/sys/net/ipv4/conf/default/accept_source_route'
162
+ @exp = '0'
163
+ @res = 'FALSE'
164
+ @line = 'net.ipv4.conf.default.accept_source_route'
165
+ @args = args
166
+ @tab = 1
167
+ end
168
+ end
169
+
170
+ class Ipv6AllAcceptSourceRoute < Sysctl::SysNet
171
+ def initialize(args)
172
+ @file = '/proc/sys/net/ipv6/conf/all/accept_source_route'
173
+ @exp = '0'
174
+ @res = 'FALSE'
175
+ @line = 'net.ipv6.conf.all.accept_source_route'
176
+ @args = args
177
+ @tab = 1
178
+ end
179
+ end
180
+
181
+ class Ipv6DefaultAcceptSourceRoute < Sysctl::SysNet
182
+ def initialize(args)
183
+ @file = '/proc/sys/net/ipv6/conf/default/accept_source_route'
184
+ @exp = '0'
185
+ @res = 'FALSE'
186
+ @line = 'net.ipv6.conf.default.accept_source_route'
187
+ @args = args
188
+ @tab = 1
189
+ end
190
+ end
191
+
192
+ class Ipv6ConfAllAcceptRa < Sysctl::SysNet
193
+ def initialize(args)
194
+ @file = '/proc/sys/net/ipv6/conf/all/accept_ra'
195
+ @exp = '0'
196
+ @res = 'FALSE'
197
+ @line = 'net.ipv6.conf.all.accept_ra'
198
+ @args = args
199
+ @tab = 2
200
+ end
201
+ end
202
+
203
+ class Ipv6ConfDefaultAcceptRa < Sysctl::SysNet
204
+ def initialize(args)
205
+ @file = '/proc/sys/net/ipv6/conf/default/accept_ra'
206
+ @exp = '0'
207
+ @res = 'FALSE'
208
+ @line = 'net.ipv6.conf.default.accept_ra'
209
+ @args = args
210
+ @tab = 2
211
+ end
212
+ end
213
+
214
+ class TcpSack < Sysctl::SysNet
215
+ def initialize(args)
216
+ @file = '/proc/sys/net/ipv4/tcp_sack'
217
+ @exp = '0'
218
+ @res = 'FALSE'
219
+ @line = 'net.ipv4.tcp_sack'
220
+ @args = args
221
+ @tab = 4
222
+ end
223
+ end
224
+
225
+ class TcpDSack < Sysctl::SysNet
226
+ def initialize(args)
227
+ @file = '/proc/sys/net/ipv4/tcp_dsack'
228
+ @exp = '0'
229
+ @res = 'FALSE'
230
+ @line = 'net.ipv4.tcp_dsack'
231
+ @args = args
232
+ @tab = 4
233
+ end
234
+ end
235
+
236
+ class TcpFack < Sysctl::SysNet
237
+ def initialize(args)
238
+ @file = '/proc/sys/net/ipv4/tcp_fack'
239
+ @exp = '0'
240
+ @res = 'FALSE'
241
+ @line = 'net.ipv4.tcp_fack'
242
+ @args = args
243
+ @tab = 4
244
+ end
245
+ end
246
+ end
247
+ end
248
+ end
249
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+
5
+ module Ardecy
6
+ class Options
7
+ attr_reader :options
8
+
9
+ def initialize(args)
10
+ @options = {}
11
+ parse(args)
12
+ end
13
+
14
+ def parse(args)
15
+ OptionParser.new do |opts|
16
+ opts.on('--audit', 'Perform local security scan.') do
17
+ @options[:audit] = true
18
+ end
19
+
20
+ opts.on('--fix', 'Fix problems.') do
21
+ @options[:fix] = true
22
+ end
23
+
24
+ opts.on('-h', '--help', 'Show this message.') do
25
+ puts opts
26
+ exit
27
+ end
28
+
29
+ begin
30
+ args.push('-h') if args.empty?
31
+ opts.parse!(args)
32
+ rescue OptionParser::ParseError => e
33
+ warn e.message, "\n", opts
34
+ exit 1
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ module Ardecy
2
+ module Privacy
3
+ end
4
+ end
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ardecy
2
- VERSION = '0.0.1'.freeze
4
+ VERSION = '0.0.2'.freeze
3
5
  end
4
6
 
data/lib/display.rb ADDED
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Display
4
+ def title(name)
5
+ l = name.length
6
+ puts " [+] #{name} "
7
+ puts '-' * l * 2.9
8
+ puts
9
+ end
10
+
11
+ def kernel_show(line, exp)
12
+ print " - #{line} (exp: #{exp})"
13
+ end
14
+
15
+ def kernel_res(res, ntab = 3)
16
+ puts "\t" * ntab + "[ #{res} ]"
17
+ end
18
+
19
+ def kernel_correct_show(list)
20
+ list.each { |l| puts " - #{l}" }
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ardecy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - szorfein
@@ -35,9 +35,10 @@ cert_chain:
35
35
  F9Dl4EPzjBJOgQWf+NxzxNuNKI46Lp5Q8AI+xtDUHAPbSswHa40BA6ChFehP+j0L
36
36
  fg==
37
37
  -----END CERTIFICATE-----
38
- date: 2021-07-04 00:00:00.000000000 Z
38
+ date: 2021-07-06 00:00:00.000000000 Z
39
39
  dependencies: []
40
- description: " ardecy is just an awesome gem !\n"
40
+ description: " Ardecy is a security, privacy auditing, fixing and hardening tool
41
+ for GNU/Linux.\n"
41
42
  email: szorfein@protonmail.com
42
43
  executables:
43
44
  - ardecy
@@ -48,7 +49,15 @@ files:
48
49
  - README.md
49
50
  - bin/ardecy
50
51
  - lib/ardecy.rb
52
+ - lib/ardecy/guard.rb
53
+ - lib/ardecy/harden.rb
54
+ - lib/ardecy/harden/sysctl.rb
55
+ - lib/ardecy/harden/sysctl/kernel.rb
56
+ - lib/ardecy/harden/sysctl/network.rb
57
+ - lib/ardecy/options.rb
58
+ - lib/ardecy/privacy.rb
51
59
  - lib/ardecy/version.rb
60
+ - lib/display.rb
52
61
  homepage: https://github.com/szorfein/ardecy
53
62
  licenses:
54
63
  - MIT
@@ -72,11 +81,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
81
  - - ">="
73
82
  - !ruby/object:Gem::Version
74
83
  version: '0'
75
- requirements:
76
- - 'TODO change: libmagick, v6.0'
77
- - 'TODO change: A good graphics card'
84
+ requirements: []
78
85
  rubygems_version: 3.0.9
79
86
  signing_key:
80
87
  specification_version: 4
81
- summary: Awesome Ruby Project !
88
+ summary: Ardecy is a security | privacy auditing tools.
82
89
  test_files: []
metadata.gz.sig CHANGED
Binary file