Vergleich der Plattformen
Primär haben wir die Plattformen AWS, GCP und Hetzner an dem Wert des Lynis Hardeningindexes verglichen. Der Lynis Hardeningindex befindet sich im Bereich von 0 bis 100 und bewertet die Sicherheit des gescannten Systems, wobei ein höherer Wert ein sichereres System darstellt.
SELECT r.*, avg(l.hardening_index) AS avg_hardening
FROM runs r
JOIN lynis_results l ON r.run_id == l.run_id
WHERE r.system IN ("debian", "ubuntu")
AND platform IN ("aws", "gcp", "hetzner")
AND l.round = 1
GROUP BY platform
ORDER BY avg_hardening
Verwendete SQL-Query zur agregation des durchschnittlichen Hardening Index
Vergleicht man den durchschnittlichen Hardeningindex der Plattformen, ist GCP auf dem 1. Platz, Hetzner auf dem 2. und AWS auf dem 3. Platz. Jedoch ist der Unterschied zwischen den Plattformen eher gering, da die maximale Differenz (GCP zu AWS) ca. fünf Punkte beträgt. Ebenfalls zu erkennen ist, dass GCP bei Ubuntu 20.04 und Debain 9 den höchsten Hardeningindex der Plattformen erreicht hat.
Neben dem Hardeningindex haben wir auch die Anzahl der installierten Pakete betrachtet. Die Liste der Pakete ist Teil des Berichts von Otseca. Bei der durchschnittlichen Anzahl installierter Pakete fällt auf, dass AWS und GCP mit einem Abstand von ca. zwölf Paketen nah beieinander liegen, wobei Hetzner mit einem Abstand von ca. 45 Paketen weniger, besser abschneidet. Betrachtet man die Differenz der Pakete pro Image, ist erkennbar, dass Hetzner für Ubuntu Systeme ca. 100 Pakete weniger benötigt. Bei Debian 9 liegen alle drei Plattformen verhälltnismäßig nah beieinander.
Zusätzlich haben wir einen Blick die Images OpenVpn und Wordpress aus dem AWS- und GCP-Marketplace geworfen. Hierbei fällt auf, dass beide Plattformen durchschnittlich nur einen Punkt auseinander liegen. Auch wenn der Hardeningindex per Image betrachtet wird, ist kein größerer Unterschied erkennbar. Das gleiche gillt auch für die Anzahl installierter Pakete. Durch die von Testssl gewonnenen Informationen fiel auf, dass das Wordpress SSL Zertifikat von AWS abgelaufen ist. Das von GCP hingegen war gültig.
Des Weiteren haben wir ein Image mit LAMP Stack aufgesetzt und dieses mit einem LAMP Stack Image aus dem GCP-Marketplace verglichen. Auffällig ist hier, dass beide Images den gleichen Hardeningindex erreicht haben. Jedoch sind auf dem von uns aufgesetzten Image ca. doppelt so viele Pakete installiert. Die Anzahl an Suggestions weißt nur einen geringen Unterschied von acht auf.
Vergleich von Ubuntu Server Images
Um die Ubuntu Versionen 14.04, 16.04 und 20.04 zu vergleichen, haben wir ebenfalls den durchschnittlichen Lynis Hardeningindex betrachtet. Hier ist eine kontinuierliche Verbesserung von insgesamt ca. zehn Punkten erkennbar. Zusätzlich haben wir die Lynis Warnings und Suggestions betrachtet. Hierbei stellen Warnings kritische Funde dar. Suggestions sind Empfehlungen, die das gescannte Element sicherer machen. Bei den Warnings und Suggestions ist ein Rückgang erkennbar, daraus lässt sich schließen, dass die gescannten Versionen mit fortschreitender Version sicherer werden. Betrachtet man die durchschnittlich installierten Pakete, kann man erkennen, dass die Versionen 14.04 und 16.04 nah beieinander liegen. Die Anzahl ist mit der Version 20.04 um ca. 100 Pakete angestiegen.
SELECT r.*, avg(l.hardening_index),avg(l.warning_count), avg(l.suggestion_count)
FROM runs r
JOIN lynis_results l ON r.run_id == l.run_id
WHERE r.system IN ("ubuntu")
AND version IN ("14.04", "16.04", "20.04")
AND l.round = 1
GROUP BY version
ORDER BY version
Verwendete SQL-Query zur aggregation des Hardening Index, der Warnings und Suggestions
JShielder - Einfluss auf die Sicherheit der Images
Wie bei allen anderen Auswertungen haben wir uns den Hardeningindex als Merkmal ausgewählt. Hier ist eine durchschnittliche Steigerung nach Ausführung des JShielders um ca. zehn Punkte erkennbar. Ebenfalls fällt auf, dass JShielder mehrere Pakete installiert (z.B. anti-Malware Programme).
Während einem Lynis Scans werden alle durchgeführten Tests in drei Kategorien eingeordnet. Diese sind optimale Funde, verbesserungswürdige Funde und kritische Funde. Betrachtet man die durchschnittliche Kategorisierung, ist erkennbar, dass die Anzahl der optimalen Funde durch JShielder stark ansteigt, sowie die Anzahl an verbesserungswürdigen und kritischen Funden fällt. Ein eher unerwartetes Ergebnis ist die durchschnittliche Anzahl durchgeführter Tests. Hier wurden nach dem Update des Images minimal mehr Tests durchgeführt als davor und danach. Die Beobachtung lässt sich vermutlich auf Komponenten zurückführen, welche durch ein Update aktiviert und durch JShielder deaktiviert wurden.
SELECT r.*,l.round , avg(json_extract(boot_and_services, "$.counts.green") + json_extract(kernel, "$.counts.green") + json_extract(mermory_and_processes, "$.counts.green") + json_extract(user_groups_auth, "$.counts.green") + json_extract(shells, "$.counts.green") + json_extract(file_systems, "$.counts.green") + json_extract(usb_devices, "$.counts.green") + json_extract(storage, "$.counts.green") + json_extract(nfs, "$.counts.green") + json_extract(name_services, "$.counts.green") + json_extract(ports_and_packages, "$.counts.green") + json_extract(networking, "$.counts.green") + json_extract(printers_and_spools, "$.counts.green") + json_extract(software_email, "$.counts.green") + json_extract(software_filewalls, "$.counts.green") + json_extract(software_webserver, "$.counts.green") + json_extract(ssh_support, "$.counts.green") + json_extract(databases, "$.counts.green") + json_extract(php, "$.counts.green") + json_extract(logging_and_files, "$.counts.green") + json_extract(insecure_services, "$.counts.green") + json_extract(scheduled_tasks, "$.counts.green") + json_extract(accounting, "$.counts.green") + json_extract(time_and_sync, "$.counts.green") + json_extract(crypto, "$.counts.green") + json_extract(security_frameworks, "$.counts.green") + json_extract(software_malware, "$.counts.green") + json_extract(file_permissions, "$.counts.green") + json_extract(home_dirs, "$.counts.green") + json_extract(kernel_hardening, "$.counts.green") + json_extract(hardening, "$.counts.green")) AS avg_green, avg(json_extract(boot_and_services, "$.counts.yellow") + json_extract(kernel, "$.counts.yellow") + json_extract(mermory_and_processes, "$.counts.yellow") + json_extract(user_groups_auth, "$.counts.yellow") + json_extract(shells, "$.counts.yellow") + json_extract(file_systems, "$.counts.yellow") + json_extract(usb_devices, "$.counts.yellow") + json_extract(storage, "$.counts.yellow") + json_extract(nfs, "$.counts.yellow") + json_extract(name_services, "$.counts.yellow") + json_extract(ports_and_packages, "$.counts.yellow") + json_extract(networking, "$.counts.yellow") + json_extract(printers_and_spools, "$.counts.yellow") + json_extract(software_email, "$.counts.yellow") + json_extract(software_filewalls, "$.counts.yellow") + json_extract(software_webserver, "$.counts.yellow") + json_extract(ssh_support, "$.counts.yellow") + json_extract(databases, "$.counts.yellow") + json_extract(php, "$.counts.yellow") + json_extract(logging_and_files, "$.counts.yellow") + json_extract(insecure_services, "$.counts.yellow") + json_extract(scheduled_tasks, "$.counts.yellow") + json_extract(accounting, "$.counts.yellow") + json_extract(time_and_sync, "$.counts.yellow") + json_extract(crypto, "$.counts.yellow") + json_extract(security_frameworks, "$.counts.yellow") + json_extract(software_malware, "$.counts.yellow") + json_extract(file_permissions, "$.counts.yellow") + json_extract(home_dirs, "$.counts.yellow") + json_extract(kernel_hardening, "$.counts.yellow") + json_extract(hardening, "$.counts.yellow")) AS avg_yellow, avg(json_extract(boot_and_services, "$.counts.red") + json_extract(kernel, "$.counts.red") + json_extract(mermory_and_processes, "$.counts.red") + json_extract(user_groups_auth, "$.counts.red") + json_extract(shells, "$.counts.red") + json_extract(file_systems, "$.counts.red") + json_extract(usb_devices, "$.counts.red") + json_extract(storage, "$.counts.red") + json_extract(nfs, "$.counts.red") + json_extract(name_services, "$.counts.red") + json_extract(ports_and_packages, "$.counts.red") + json_extract(networking, "$.counts.red") + json_extract(printers_and_spools, "$.counts.red") + json_extract(software_email, "$.counts.red") + json_extract(software_filewalls, "$.counts.red") + json_extract(software_webserver, "$.counts.red") + json_extract(ssh_support, "$.counts.red") + json_extract(databases, "$.counts.red") + json_extract(php, "$.counts.red") + json_extract(logging_and_files, "$.counts.red") + json_extract(insecure_services, "$.counts.red") + json_extract(scheduled_tasks, "$.counts.red") + json_extract(accounting, "$.counts.red") + json_extract(time_and_sync, "$.counts.red") + json_extract(crypto, "$.counts.red") + json_extract(security_frameworks, "$.counts.red") + json_extract(software_malware, "$.counts.red") + json_extract(file_permissions, "$.counts.red") + json_extract(home_dirs, "$.counts.red") + json_extract(kernel_hardening, "$.counts.red") + json_extract(hardening, "$.counts.red")) AS avg_red, avg(l.tests_performed) AS avg_tests_performed
FROM runs r
JOIN lynis_results l ON r.run_id == l.run_id
GROUP BY l.round
ORDER BY version
Verwendete SQL-Query zur aggregation der Testergebnisse
Die aussagekräftigste Kategorie ist Kernel Hardening. Bei dieser Kategorie konnten ca. zehn kritische Funde in optimale Funde umgewandelt werden.
Vulnerable Image
Zusätzlich zu den herkömmlich aufgesetzten Images haben wir ein Image mit geziehlt eingebauten Fehlern erstellt. Die vier Fehler waren:
- Ein SETUID Script, welches jeden als Parameter übergebenen Befehl mit Root-Berechtigungen ausführt.
- Alle Ports TCP und UDP wurden in der Uncomplicated Firewall geöffnet.
- Mehrere Compiler wurden installiert.
- Berechtigungen von SSH Ordnern und privaten Keys wurden falsch gesetzt.
Von den genannten Punkten wurden nur zwei gefunden. Der erste Punkt sind die installierten Compiler, hier hat Lynis empfohlen, den Zugriff nur mit Root-Berechtigungen zu erlauben. Der zweite Punkt sind die Berechtigungen auf dem SSH Ordner im Root Verzeichnis, hier hat Lynis empfohlen diese zu ändern. Außer diesen Funden wurden keine weiteren Ergebnisse erziehlt.