@@ -42,8 +42,11 @@ def run
4242 print_status 'Finding system protections...'
4343 check_hardening
4444
45- print_status 'Finding installed applications...'
46- find_apps
45+ print_status 'Finding installed applications via their executables...'
46+ find_exes
47+
48+ print_status 'Finding installed applications via their configuration files...'
49+ find_config
4750
4851 if framework . db . active
4952 print_status 'System protections saved to notes.'
@@ -60,93 +63,242 @@ def report(data)
6063 end
6164
6265 def check_hardening
63- if aslr_enabled?
64- r = 'ASLR is enabled'
65- print_good r
66- report r
66+ begin
67+ if aslr_enabled?
68+ r = 'ASLR is enabled'
69+ print_good r
70+ report r
71+ end
72+ rescue RuntimeError => e
73+ vprint_status ( "#{ e } " )
6774 end
6875
69- if exec_shield_enabled?
70- r = 'Exec-Shield is enabled'
71- print_good r
72- report r
76+ begin
77+ if exec_shield_enabled?
78+ r = 'Exec-Shield is enabled'
79+ print_good r
80+ report r
81+ end
82+ rescue RuntimeError => e
83+ vprint_status ( "#{ e } " )
7384 end
7485
75- if kaiser_enabled?
76- r = 'KAISER is enabled'
77- print_good r
78- report r
86+ begin
87+ if kaiser_enabled?
88+ r = 'KAISER is enabled'
89+ print_good r
90+ report r
91+ end
92+ rescue RuntimeError => e
93+ vprint_status ( "#{ e } " )
7994 end
8095
81- if smep_enabled?
82- r = 'SMEP is enabled'
83- print_good r
84- report r
96+ begin
97+ if smep_enabled?
98+ r = 'SMEP is enabled'
99+ print_good r
100+ report r
101+ end
102+ rescue RuntimeError => e
103+ vprint_status ( "#{ e } " )
85104 end
86105
87- if smap_enabled?
88- r = 'SMAP is enabled'
89- print_good r
90- report r
106+ begin
107+ if smap_enabled?
108+ r = 'SMAP is enabled'
109+ print_good r
110+ report r
111+ end
112+ rescue RuntimeError => e
113+ vprint_status ( "#{ e } " )
91114 end
92115
93- if lkrg_installed?
94- r = 'LKRG is installed'
95- print_good r
96- report r
116+ begin
117+ if lkrg_installed?
118+ r = 'LKRG is installed'
119+ print_good r
120+ report r
121+ end
122+ rescue RuntimeError => e
123+ vprint_status ( "#{ e } " )
97124 end
98125
99- if grsec_installed?
100- r = 'grsecurity is installed'
101- print_good r
102- report r
126+ begin
127+ if grsec_installed?
128+ r = 'grsecurity is installed'
129+ print_good r
130+ report r
131+ end
132+ rescue RuntimeError => e
133+ vprint_status ( "#{ e } " )
103134 end
104135
105- if pax_installed?
106- r = 'PaX is installed'
107- print_good r
108- report r
136+ begin
137+ if pax_installed?
138+ r = 'PaX is installed'
139+ print_good r
140+ report r
141+ end
142+ rescue RuntimeError => e
143+ vprint_status ( "#{ e } " )
109144 end
110145
111- if selinux_installed?
112- if selinux_enforcing?
113- r = 'SELinux is installed and enforcing'
114- else
115- r = 'SELinux is installed, but in permissive mode'
146+ begin
147+ if selinux_installed?
148+ if selinux_enforcing?
149+ r = 'SELinux is installed and enforcing'
150+ else
151+ r = 'SELinux is installed, but in permissive mode'
152+ end
153+ print_good r
154+ report r
116155 end
117- print_good r
118- report r
156+ rescue RuntimeError => e
157+ vprint_status ( " #{ e } " )
119158 end
120159
121- if yama_installed?
122- if yama_enabled?
123- r = 'Yama is installed and enabled'
124- else
125- r = 'Yama is installed, but not enabled'
160+ begin
161+ if yama_installed?
162+ if yama_enabled?
163+ r = 'Yama is installed and enabled'
164+ else
165+ r = 'Yama is installed, but not enabled'
166+ end
167+ print_good r
168+ report r
126169 end
127- print_good r
128- report r
170+ rescue RuntimeError => e
171+ vprint_status ( " #{ e } " )
129172 end
130173 end
131174
132- def find_apps
133- apps = %w[
134- truecrypt bulldog ufw iptables fw-settings logrotate logwatch
135- chkrootkit clamav snort tiger firestarter avast lynis
136- rkhunter tcpdump webmin jailkit pwgen proxychains bastille
137- psad wireshark nagios apparmor oz-seccomp honeyd thpot
138- aa-status gradm gradm2 getenforce aide tripwire paxctl
139- paxctld paxtest firejail auditd
140- ]
141-
142- apps . each do |app |
175+ def find_exes
176+ apps = {
177+ 'aa-status' => 'AppArmor' ,
178+ 'aide' => 'Advanced Intrusion Detection Environment (AIDE)' ,
179+ 'apparmor' => 'AppArmor' ,
180+ 'auditd' => 'auditd' ,
181+ 'avast' => 'Avast' ,
182+ 'bastille' => 'Bastille' ,
183+ 'bulldog' => 'Bulldog' ,
184+ 'chkrootkit' => 'chkrootkit' ,
185+ 'clamav' => 'ClamAV' ,
186+ 'elastic-agent' => 'Elastic Security' ,
187+ 'firejail' => 'Firejail' ,
188+ 'firestarter' => 'Firestarted' ,
189+ 'fw-settings' => 'Uncomplicated FireWall (UFW)' ,
190+ 'getenforce' => 'SELinux' ,
191+ 'gradm' => 'grsecurity' ,
192+ 'gradm2' => 'grsecurity' ,
193+ 'honeyd' => 'Honeyd' ,
194+ 'iptables' => 'iptables' ,
195+ 'jailkit' => 'jailkit' ,
196+ 'logrotate' => 'logrotate' ,
197+ 'logwatch' => 'logwatch' ,
198+ 'lynis' => 'lynis' ,
199+ 'nagios' => 'nagios' ,
200+ 'oz-seccomp' => 'OZ' ,
201+ 'paxctl' => 'PaX' ,
202+ 'paxctld' => 'PaX' ,
203+ 'paxtest' => 'PaX' ,
204+ 'proxychains' => 'ProxyChains' ,
205+ 'psad' => 'psad' ,
206+ 'rkhunter' => 'rkhunter' ,
207+ 'snort' => 'snort' ,
208+ 'tcpdump' => 'tcpdump' ,
209+ 'thpot' => 'thpot' ,
210+ 'tiger' => 'tiger' ,
211+ 'tripwire' => 'tripwire' ,
212+ 'ufw' => 'Uncomplicated FireWall (UFW)' ,
213+ 'wireshark' => 'Wireshark'
214+ }
215+
216+ apps . each do |app , appname |
143217 next unless command_exists? app
144218
145219 path = cmd_exec "command -v #{ app } "
146220 next unless path . start_with? '/'
147221
148222 print_good "#{ app } found: #{ path } "
149- report path
223+ report "#{ appname } : #{ path } "
224+ end
225+ end
226+
227+ def find_config
228+ apps = {
229+ '/bin/logrhythm' => 'LogRhythm Axon' ,
230+ '/etc/aide/aide.conf' => 'Advanced Intrusion Detection Environment (AIDE)' ,
231+ '/etc/chkrootkit' => 'chkrootkit [chkrootkit -q]' ,
232+ '/etc/clamd.d/scan.conf' => 'ClamAV' ,
233+ '/etc/fluent-bit' => 'Fluent Bit Log Collector' ,
234+ '/etc/freshclam.conf' => 'ClamAV' ,
235+ '/etc/init.d/avast' => 'Avast' ,
236+ '/etc/init.d/avgd' => 'AVG' ,
237+ '/etc/init.d/ds_agent' => 'Trend Micro Deep Instinct' ,
238+ '/etc/init.d/fortisiem-linux-agent' => 'Fortinet FortiSIEM' ,
239+ '/etc/init.d/kics' => 'Kaspersky Industrial CyberSecurity' ,
240+ '/etc/init.d/limacharlie' => 'LimaCharlie Agent' ,
241+ '/etc/init.d/qualys-cloud-agent' => 'Qualys EDR Cloud Agent' ,
242+ '/etc/init.d/scsm' => 'LogRhythm System Monitor' ,
243+ '/etc/init.d/sisamdagent' => 'Symantec EDR' ,
244+ '/etc/init.d/splx' => 'Trend Micro Server Protect' ,
245+ '/etc/init.d/threatconnect-envsvr' => 'ThreatConnect' ,
246+ '/etc/logrhythm' => 'LogRhythm Axon' ,
247+ '/etc/opt/f-secure' => 'WithSecure (F-Secure)' ,
248+ '/etc/otelcol-sumo/sumologic.yaml' => 'Sumo Logic OTEL Collector' ,
249+ '/etc/rkhunter.conf' => 'rkhunter' ,
250+ '/etc/safedog/sdsvrd.conf' => 'Safedog' ,
251+ '/etc/safedog/server/conf/sdsvrd.conf' => 'Safedog' ,
252+ '/etc/tripwire' => 'TripWire' ,
253+ '/opt/COMODO' => 'Comodo AV' ,
254+ '/opt/CrowdStrike' => 'CrowdShite' ,
255+ '/opt/FortiEDRCollector' => 'Fortinet FortiEDR' ,
256+ '/opt/FortiEDRCollector/scripts/fortiedrconfig.sh' => 'Fortinet FortiEDR' ,
257+ '/opt/McAfee' => 'FireEye/McAfee/Trellix Agent' ,
258+ '/opt/SumoCollector' => 'Sumo Logic Cloud SIEM' ,
259+ '/opt/Symantec' => 'Symantec EDR' ,
260+ '/opt/Tanium' => 'Tanium' ,
261+ '/opt/Trellix' => 'FireEye/McAfee/Trellix SIEM Collector' ,
262+ '/opt/avg' => 'AVG' ,
263+ '/opt/bitdefender-security-tools/bin/bdconfigure' => 'Bitdefender EDR' ,
264+ '/opt/cisco/amp/bin/ampcli ' => 'Cisco Secure Endpoint' ,
265+ '/opt/cisco/amp/bin/ampcli' => 'Cisco Secure Endpoint' ,
266+ '/opt/cyberark' => 'CyberArk' ,
267+ '/opt/ds_agent/dsa' => 'Trend Micro Deep Security Agent' ,
268+ '/opt/f-secure' => 'WithSecure (F-Secure)' ,
269+ '/opt/fireeye' => 'FireEye/Trellix EDR' ,
270+ '/opt/fortinet/fortisiem' => 'Fortinet FortiSIEM' ,
271+ '/opt/isec' => 'FireEye/Trellix Endpoint Security' ,
272+ '/opt/kaspersky' => 'Kaspersky' ,
273+ '/opt/logrhythm/scsm' => 'LogRhythm System Monitor' ,
274+ '/opt/secureworks' => 'Secureworks' ,
275+ '/opt/sentinelone/bin/sentinelctl' => 'SentinelOne' ,
276+ '/opt/splunkforwarder' => 'Splunk' ,
277+ '/opt/threatbook/OneAV' => 'threatbook.OneAV' ,
278+ '/opt/threatconnect-envsvr/' => 'ThreatConnect' ,
279+ '/opt/traps/bin/cytool' => 'Palo Alto Networks Cortex XDR' ,
280+ '/sf/edr/agent/bin/edr_agent' => 'Sangfor EDR' ,
281+ '/titan/agent/agent_update.sh' => 'Titan Agent' ,
282+ '/usr/bin/linep' => 'Group-iB XDR Endpoint Agent' ,
283+ '/usr/bin/oneav_start' => 'threatbook.OneAV' ,
284+ '/usr/lib/Acronis' => 'Acronis Cyber Protect' ,
285+ '/usr/lib/symantec/status.sh' => 'Symantec Linux Agent' ,
286+ '/usr/local/bin/intezer-analyze' => 'Intezer' ,
287+ '/usr/local/qualys' => 'Qualys EDR Cloud Agent' ,
288+ '/usr/local/rocketcyber' => 'Kseya RocketCyber' ,
289+ '/var/lib/avast/Setup/avast.vpsupdate' => 'Avast' ,
290+ '/var/log/checkpoint' => 'Checkpoint' ,
291+ '/var/pt' => 'PT Swarm'
292+ }
293+
294+ apps . each do |path , appname |
295+ next unless file_exist? ( path ) || directory? ( path )
296+
297+ print_good "#{ appname } found: #{ path } "
298+ report "#{ appname } : #{ path } "
299+ rescue RuntimeError
300+ print_bad ( "Unable to determine state of #{ appname } " )
301+ next
150302 end
151303 end
152304end
0 commit comments