Sicheres Linux-Desktop-Betriebssystem: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
Es soll untersucht werden, welche Technologien bei der Einrichtung eines möglichst sicheren und trotzdem bequem Nutzbaren Linux-Desktop-Betriebssystem von Nutzen sein können. Es soll außerdem evaluiert werden, welchen genauen Nutzen, welche Nachteile und welche Schwachstellen die Technologien haben und gegen welche Angreifermodelle sie letztendlich schützen.
Es soll untersucht werden, welche Technologien bei der Einrichtung eines möglichst sicheren und trotzdem bequem benutzbaren Linux-Desktop-Betriebssystem von Nutzen sein können. Als Referenz wird ein Lenovo ThinkPad aus der E-Serie verwendet. Es soll außerdem evaluiert werden, welchen Nutzen, welche Nachteile und welche Schwachstellen die Technologien haben und gegen welche Angreifer*innenmodelle sie letztendlich schützen.


== Sicherheitsfunktionen von Motherboard und BIOS ==
== Sicheres Installationsmedium ==


Ein Blick ins BIOS des vorliegenden Notebooks zeigt, dass bereits hardwareseitig Sicherungstechnologien vorhanden sind. Einerseits ist ein TPM 2.0 Modul verbaut, andererseits wird Intel SGX unterstützt.
* Vertrauen in alle beteiligte Hardware nötig
* Vertrauen in Betriebssystem nötig, das Installationsimage lädt bzw. prüft
* Absicherungsidee
** Installationsimage auf USB-Stick mit Schreibschutz-Switch laden
** Schreibschutz aktivieren
** Auf unabhängigen Rechnern [http://cdimage.debian.org/debian-cd/current/amd64/iso-cd/ SHA512-Checksumme] herunterladen und gegen USB-Stick prüfen
** Es muss nur einer der Rechner „die Wahrheit“ sagen damit ein falsches Image auffällt


Das TPM 2.0 Modul ermöglicht die „Secure Boot“-Funktionalität und die Passwortsperre des BIOS. Es unterstützt ausßerdem das Erzeugen von Zufallswerten, die Generierung und Speicherung von Schlüsseln und das Verschlüsseln und Signieren von Daten. Bei Verwendung aktueller Kernel ist es als <code>/dev/tpm0</code> eingebunden und kann vom Userspace aus verwendet werden.
== BIOS ==


Die „Intel SGX“-Technologie ermöglicht das Ausführen sicherheitskritischen Codes in einem abgesicherten Bereich, der von anderem Code abgeschirmt ist. Welche genauen Funktionen das ermöglicht, und ob diese Technologie unter Linux nutzbar ist, wurde hier nicht weiter untersucht.
* TPM 2.0 Modul

** Erlaubt Secure Boot
Des Weiteren kann im BIOS die „Internal Storage Tamper Detection“ aktiviert werden, durch die das Gerät automatisch heruntergefahren wird, wenn sich beim Erwachen aus dem Schlafzustand etwas an den internen Laufwerken geändert hat.
** Schlüsselgenerierung und -speicher

** Verschlüssellung und Signatur
Um das Booten fremder Software zu verhindern, sollten alle Booteinträge, außer das gewünschte Betriebssystem, deaktiviert werden und die BIOS-Einstellungen mit einem Passwort geschützt werden.
** Random Noise Generator
** Von aktuellen Kernels unterstützt und unter /dev/tpm0 eingebunden
* Intel SGX: abgesicherter Bereich für Sicherheitskritische Ausführung
* Internal Storage Tamper Detection: Fährt herunter, wenn Drive während Schlafmodus entfernt
* UEFI only und überflüssige Booteinträge entfernen


=== BIOS Passwort ===
=== BIOS Passwort ===


Das BIOS des betrachteten Notebooks unterstützt das Festlegen eines Supervisor-Passworts, welches den Zugriff auf bestimmte BIOS-Einstellungen sperrt. Optional kann eingestellt werden, dass es auch die anderen BIOS-Funktionen sperrt, auch die Auswahl von Booteinträgen bzw. sogar das Booten selbst.
* Supervisor Passwort sperrt Zugriff auf bestimmte BIOS Einstellungen
** Optional auf alle BIOS-Änderungen und Auswahl von Booteinträgen
** Booten kann auch durch Passwort geschützt werden
** Passwort für SSD Hardwareverschlüsselung (siehe [[#Verschl.C3.BCssellung|Verschlüsselung]])
* Kann vor Manipulation der Einstellungen und der Booteinträge schützen
* Sicherheitslücken:
** Viele Hersteller haben [https://www.cocosenor.com/articles/computer/3-ways-to-unlock-bios-password-on-lenovo-thinkpad-laptop.html Masterpasswörter] um das BIOS bei dreifacher Falscheingabe zu entsperren
** Kurzschluss an Kontakten eines Security Chips auf der Rückseite des Mainboards erlaubt angeblich, das Passwort zu umgehen
** CMOS-Batterie vorübergehend entfernen um BIOS zurückzusetzen
* Laut Lenovo-Support verhindert die TPM-Technologie all diese Möglichkeiten
** Mainboard ausbauen und flashen nötig


Im Netz finden sich viele Anleitungen, ein solches Passwort zurückzusetzen oder sogar zu umgehen. Entweder durch Eingabe eines Masterpasswortes von der Hersteller*in bzw. aus dem Netz oder durch vorübergehendes Entfernen der CMOS-Batterie oder durch Kurzschließen eines Security-Chips auf der Rückseite des Mainboards. Der Lenovo-Support hat, auf Anfrage, versichert, dass es kein Masterpasswort für das betrachtete Gerät gibt, das Entfernen der CMOS Batterie auch nicht funktioniert und das Kurzschließen des Sicherheitschips das Mainboard zerstört.
== UEFI Secure Boot ==


=== UEFI Secure Boot ===
* [https://www.howtogeek.com/116569/htg-explains-how-windows-8s-secure-boot-feature-works-what-it-means-for-linux/ Kleiner Bootloader names „shim“ ist von Microsoft signiert]

** Überprüft ob Kernel und Module signiert und startet Kernel dann
„UEFI Secure Boot“ ist eine, ursprünglich für Microsoft-Betriebssysteme eingeführte, Technologie, die vor dem Booten eines Bootimages dessen Signatur überprüft und das Booten ggf. unterbindet. Microsoft ist dementsprechend die Certificate-Authority, signiert aber auch Software anderer Hersteller*innen.
** [https://ubuntu.com/blog/how-to-sign-things-for-secure-boot Kernelmodule sind auch signiert und eigene Public-Keys können in shim enrolled werden]

** Eigene Public-Keys müssen während des Bootprozesses explizit vom Nutzer genehmigt werden
Linux-Betriebssysteme verwenden häufig einen kleinen Bootloader namens „shim“, der von Microsoft signiert ist, und seinerseits die Signaturen des Kernels und der Kernelmodule prüft. Im shim können auch eigene Public-Keys hinterlegt werden, um selbstsignierte Kernel und Kernelmodule zu verwenden. Diese Public-Keys müssen beim nächsten Bootvorgang erst per Hand von der Nutzer*in bestätigt werden und werden dann vom shim in einen NV-RAM geschrieben, welchen das Betriebssystem nicht selbstständig modifizieren kann.
*** Shim schreibt sie dann in einen NVRAM in den aus dem Betriebssystem nicht ohne weiteres geschrieben werden kann

*** Wer den Rechner in die Finger bekommt und Root-Zugriff auf ein gebootetes System hat, kann den Kernel trotz Secure Boot modifizieren
Diese Funktion des shim ermöglicht es Angreifer*innen natürlich, trotz Secure-Boot Schadcode zu injizieren, wenn sie Schreibzugriff auf die Bootpartition bekommen und kurzzeitig auf die Hardware zugreifen können. Dieser Schreibzugriff sollte allerdings durch die Beschränkung auf einen Booteintrag und die Passwortsicherung des BIOS verhindert werden, sofern die Angreifer*in das Gerät nicht aufschraubt.
*** Wenn ohne BIOS-Passwort nur das verschlüsselte OS gebootet werden kann, sollten wir sicher sein

== Sicheres Installationsmedium ==

Bei der Installation des Betriebssystems ist Vertrauen in alle Hardware nötig. Es muss aber auch dem Betriebssystem vertraut werden, von dem aus das Installationsmedium geladen, bzw. geprüft wird, da es sonst bereits Schadcode injizieren kann, bevor das neue System installiert wurde. Um nicht einem einzigen Rechner vertrauen zu müssen bietet sich folgendes Vorgehen an, falls ein USB-Stick mit Schreibschutzschalter zur Verfügung steht:

Der Schreibschutz wird deaktiviert und das Installationsimage wird auf den USB-Stick geladen. Im Anschluss wird der Schreibschutz aktiviert und eine Prüfsumme über die geschriebene Partition gebildet. Diese Prüfsumme wird mit der Referenzprüfsumme von der Website der Betriebssystementwickler*innen verglichen. Das Berechnen und Vergleichen der Prüfsumme kann nun auf beliebig vielen Maschienen wiederholt werden. Wegen des Schreibschutzes können diese das Installationsimage nicht modifizieren. Wenn am Ende nur eine der Maschienen vertrauenswürdig ist, und die Prüfsumme auf allen Maschienen bestätigt wird, muss der Installer intakt sein.


== Readonly-Laufwerk ==
== Readonly-Laufwerk ==


Ein Laufwerk mit Schreibschutzschalter könnte auch für die Installation der unverschlüsselten Bootpartition des Betriebssystems verwendet werden. Das wäre insbesondere bei einem Dualboot mit einem Microsoft-Betriebssystem sinnvoll, da Microsoft die CA für Secure-Boot ist und dem entsprechend unbemerkt Modifikationen am Linux-Bootimage vornehmen könnte. Der Schreibschutz dieses Laufwerks könnte immer aktiviert sein und könnte temporär deaktiviert werden, wenn das vertrauenswürdige Linux-System Updates des Bootloaders durchführt.
* Falls anderes OS gebooted werden kann, könnte unverschlüsselte Bootpartition infiziert werden

** Da Microsoft selbst die CA für Secure Boot ist, wäre Windows besonders bedenklich
Für das Notebook ist die Verwendung des vorhandenen USB-Sticks mit Schreibschutz bedenklich, da es einfacher sein könnte, den USB-Stick unbemerkt zu entwenden und zu infizieren, als das Notebook unbemerkt aufzuschrauben und zu modifizieren.
* Installation der unverschlüsselten Partition auf einem USB-Stick mit Schreibschutz-Switch
** Ist im normalen Betrieb (ggf. mehrerer Betriebssysteme) immer schreibgeschützt
** Kann nach dem Booten des sicheren OS für Updates vorübergehend entsperrt werden
* USB Stick darf nicht unbemerkt in fremde Hände fallen
** Ggf. schwerer zu sichern als die Notebook-Hardware (geht schnell, kein Werkzeug nötig)
* Für Notebook nicht sinnvoll, aber ggf. für Dualboot PC zu Hause


== Verschlüssellung ==
== Verschlüssellung ==


=== Self-Encrypting-Drives ===
=== Hardwareverschlüssellung der SSD ===


Viele moderne SSDs haben AES-Verschlüssellung bereits in ihrer Hardware integriert. Das bietet einerseits die Möglichkeit, die Daten vor Zugriff durch Fremde zu schützen. Andererseits ermöglicht es auch das schnelle und zuverlässige Löschen der gesammten SSD durch überschreiben des Schlüssels. Das BIOS des vorliegenden Gerätes bietet die Möglichkeit, Passwörter für die eingebauten SSDs festzulegen. Die entsprechende SSD wird dann per ATA angewiesen, den AES-Schlüssel mit dem Passwort zu verschlüsseln. Der AES-Schlüssel verlässt dabei niemals die SSD. Da das gewählte Passwort Hersteller*innenabhängig umgewandelt wird, bevor es an die SSD übertragen wird, ist es nicht ohne weiteres Möglich, die SSD dann in einem anderen System zu verwenden. Das Umwandlungsverfahren ist (im Fall des vorliegenden Gerätes) bekannt und bietet somit keine zusätzliche Sicherheit.
* Viele moderne [https://jbeekman.nl/blog/2015/03/lenovo-thinkpad-hdd-password/ SSDs verschlüsseln die gespeicherten Daten] mit AES-256
* Schlüssel in SSD persistiert, kann aber vom BIOS mit Passwort verschlüsselt werden
** Verschlüssellungsverfahren ist BIOS-Hersteller-abhängig
** Kann nicht ohne weiteres an anderem Rechner verwendet werden
** Verfahren ist bekannt und bietet keine besondere Sicherheit
* [https://threatpost.com/academics-find-critical-flaws-in-self-encrypting-hardware-drives/115103/ Sicherheitsbedenken] wegen Backdoors, gesetztlicher Vorgaben, achtloser Implementierung
* Zumindest für billiges Wipen der SSD vor Installation nutzbar
** Benötigt sog. „Physical Security Identification“-Nummer
** Erst sperren mit <code>sudo sedutil-cli --initialsetup debug &lt;Drive&gt;</code> und rebooten
** <code>sudo sedutil-cli --yesIreallywanttoERASEALLmydatausingthePSID &lt;PSID&gt; &lt;Drive&gt;</code>
** Vertrauenswürdigkeit wird bezweifelt


Die Selbstverschlüssellung steht teilweise wegen achtlosen Implementierungen mit Sicherheitslücken und wegen der Möglichkeit, bewusster Backdoors, in der Kritik. Letztere könnten auch durch Regierung vorgeschrieben sein. Es ist also besser, sich auf quelloffene Verschlüssellungssoftware wie LUKS zu verlassen.
=== LUKS ===


Zumindest für das Löschen alter Daten, kann es nicht schaden, die Funktionen der SSD trotzdem zu verwenden, sofern sich nicht darauf verlassen wird. Um die SSD anzuweisen, alle Daten zu löschen, wird eine „Physical Security Identification“-Nummer benötigt, die auf der SSD-Hardware zu finden ist. Diese muss korrekt an die SSD übertragen werden. Sonst verweigert sie das Generieren eines neuen AES-Schlüssels. Unter Linux kann das Werkzeug „sedutil“ verwendet werden. Der konkrete Befehl lautet <code>sudo sedutil-cli --yesIreallywanttoERASEALLmydatausingthePSID &lt;PSID&gt; &lt;Drive&gt;</code>. Damit dieser funktioniert, muss bereits ein Passwort gesetzt sein, was sich mit <code>sudo sedutil-cli --initialsetup &lt;Password&gt; &lt;Drive&gt;</code> und einem Reboot bewerkstelligen lässt.
* [https://gitlab.com/cryptsetup/cryptsetup LUKS] nutzt dm-crypt Kernelmodul für transparente Verschlüsselungsschichten

* Header enthält mit Passwort(en) verschlüsselten Masterkey (ohne den ist alles futsch)
=== Linux Unified Key Setup ===
* Bei SSDs bleiben alte LUKS-Header in ungenutzen Blöcken erhalten

** Daten können mit altem, deaktiviertem Passwort entschlüsselt werden
LUKS bietet einfache Verschlüssellung von Laufwerken oder Partitionen unter Linux. Es verwendet dafür das „dm-crypt“-Kernelmodul, welches eine transparente Verschlüssellungsschicht unter dem Dateisystem zur Verfügung stelt. LUKS Partitionen/Laufwerke bestehen aus einem Header und den verschlüsselten Daten. Im Header befindet sich ein Masterkey für die Entschlüssellung, welcher mit einem (oder mehreren) Passwörtern verschlüsselt ist. Ohne den Header ist der Rest der Daten unbrauchbar. Es bieten sich also extra Backups des Headers an. Bei SSDs ist zu beachten, dass überschriebene Header nicht unbedingt physisch gelöscht werden, sondern ggf. nur auf eine Liste freigegebener Blöcke verschoben werden. Es darf also nicht davon ausgegangen werden, dass die Daten mit Hilfe alter Passwörter nicht mehr entschlüsselt werden können. Um dieses Problem zu umgeben, könnte der LUKS-Header auf eine HDD ausgelagert werden, die dann zuverlässig überschrieben werden kann.
** LUKS-Header kann auf HDD ausgelagert werden
* Das „cryptsetup“ CLI hat explizite „luksHeaderBackup“-Funktionalität
* [https://en.wikipedia.org/wiki/Initial_ramdisk initrd] bereitet Zugriff (insbesondere entschlüssellung) auf Kernel vor und lädt treiber
** Erlaubt in bestimmten Debian-Versionen [https://www.cvedetails.com/cve/CVE-2016-4484/ Zugriff auf root-rescue-shell]
*** Noch aktuell? Wie lösbar? Bootparameter?


== Distribution und Softwarequellen ==
== Distribution und Softwarequellen ==


Es gibt spezielle Linux-Distributionen, deren Hauptziel es ist, ihren Benutzer*innen möglichst viel Sicherheit und Anonymität zu bieten.
* [https://www.youtube.com/watch?v=f4U8YbXKwog Qubes OS]

** Alle Applikationen laufen in virtuellen Maschienen
=== Qubes OS ===
** Mehrere Betriebssysteme auf einem Desktop (einschließlich Windows)

** „Disposable VMs“ die nur für die Laufzeit eines Programms existieren
Ein solches Betriebssystem ist Qubes OS. In Qubes laufen alle Anwendungen in virtuellen Maschienen und sind somit von Anwendungen aus anderen VMs abgekapselt. Die virtuellen Maschienen können dabei unterschiedliche Betriebssysteme bewirten. Sowohl Unixartige als auch Windows. Auf dem Desktop werden die Fenster aus unterschiedlichen VMs durch unterschiedliche Rahmenfarben unterschieden. Sogenannte „Disposable VMs“ ermöglichen es, Programme in einer Umgebung laufen zu lassen, die nach der Ausführung komplett verworfen wird. Für jede VM kann separat eingestellt werden, ob sie eine Netzwerkverbindung bekommt und ob sie durch das Tor-Netzwerk bzw. ein VPN getunnelt wird. Für USB-Geräte muss explizit eingestellt werden, welcher VM sie zur Verfügung stehen. Für das Austauschen von Dateien und kopierten Daten in der Zwischenablage zwischen VMs bietet Qubes eigene Funktionen an.
** Netzwerkzugriff und Tor-Tunnelling pro VM einstellbar

** Explizite Einstellung von USB-Passthrough zu VMs nötig
Letzendlich bestehen aber auch immer Möglichkeiten, aus einer VM auszubrechen und das Hostsystem zu infizieren. Diese ausfindig zu machen und auszunutzen ist allerdings eine erhebliche Hürde, sodass die Virtualisierung durchaus von Nutzen ist. Insgesammt bietet Qubes OS zwar viele Sicherheitsmechanismen, ist aber auch mit zusätzlichem Verwaltungsaufwand und CPU- und RAM-Belastung verbunden.
** Zusätzliche CPU- und RAM-Belastung und Verwaltungsaufwand
** [https://fossbytes.com/secure-linux-distros-privacy-anonymity/ Weitere sicherheitszentrierte Distributionen] vorhanden
** Für mich aktuell zu umständlich
* [https://www.educba.com/centos-vs-debian/ Debian und CentOS] sind zwei der stabilsten Linuxdistros
** CentOS ist etwas stabiler
** Debian hat mehr und aktuellere Software und bessere Hardwareunterstützung


=== Debian ===
=== Debian ===


Einen Kompromiss bieten herkömmliche Distributionen, die hohen Wert auf Stabilität und Sicherheit legen. Zwei solche Distributionen sind CentOS und Debian. Zwar wird CentOS als geringfügig stabiler erachtet, Debian bietet aber mehr und aktuellere Software und bessere Hardwareunterstützung und ist somit vermutlich besser für ein Desktopsystem geeignet.
* Alle Bug-Reports sind sofort öffentlich einsehbar, Probleme werden nicht „versteckt“
* [https://www.debian.org/security/audit/ „Security Audit“-Team] sucht aktiv nach Sicherheitsbugs im Softwarearchiv
** Untersucht nicht alle Pakete
* [https://lists.debian.org/debian-security-announce/ Debian Security Announce]-Mailingliste
* [https://www.debian.org/doc/user-manuals#securing Ausführliches Security Manual] (2012) zu allen Möglichen Themen
** Etwas veraltet und zu lang um alles zu lesen
** Auswahl notwendiger Services, Rechtevergabe, Schadensbegrenzung bei Kompromittierung, …
** Empfehlungen zu speziefischeren Ressourcen
** Möglichst sicheres Netzwerk während Installation (Ethernet-Kabel, Wifi aus)
** Root shell in GRUB deaktivieren?
** Root account deaktivieren (nur über sudo)
** Firewall (in meinem Fall GUFW)
** SysRq einschränken?
** Regelmäßige Integritätschecks von Binaries
* [https://wiki.debian.org/SetupGuides/SecurePersonalComputer Secure Personal Computer]-Wikiseite
** Verständliche aber voreingenommene Anleitung für Einrichtung eines möglichst sicheren Debians
*** „Do try to ignore the KDE fanboi zealotry“
** BIOS Einstellungen, Partitionierung, Softwareeinstellungen, …
** GRUB Passwort einstellen
*** Ist dann aber bei jedem Booten nötig
*** Mit UEFI ist eigentlich kein Bootloader nötig
**** Auch mit Verschlüsselung möglich? Keine Zeit mehr :(
** Kernelparameter in /etc/sysctl.conf für restriktivere Netzwerkeinstellungen
** Einrichtung einer Firewall
*** Lässt sich beliebig kleinlich verwalten (nur bestimmte Dienste, nur bestimmte Adressen, …)
*** Bei mir zunächst GUFW mit Standardeinstellung (eingehende Verbindungen blockieren)
** Empfehlung, Netzwerkverbindung erst nach der Installation und Konfiguration herzustellen
*** Habe als Kompromiss Wifi des Routers deaktiviert und mich per Ethernet verbunden
*** Wifi-Firmware dann erst nach der Einrichtung installiert
** Sandboxing mit firejail
** Empfehlung mehrer Anti-Malware- und Integritätsprüfungs-Programme
** „debsecan“ listet installierte Programme mit bekannten Sicherheitslücken
*** Ggf. zu automatisieren um möglichst zeitnah auf neue Sicherheitslücken aufmerksam gemacht zu werden


In Bezug auf Bugreports fährt Debian eine sehr transparente Strategie. Auch sicherheitskritische Bug-Reports sind sofort öffentlich einsehbar. Probleme werden nicht „versteckt“. Das Security-Team untersucht und behebt sie dann mit höchster Priorität. Über eine „Debian Security Announce“-Mailingliste werden sicherheitsrelevante Informationen an Interessierte verteilt. Ein zusätzliches „Security Audit“-Team durchsucht Debians Softwarearchiv aktiv nach Sicherheitsbugs. Dies beschränkt sich aber auf wichtigere und verbreitetere Pakete und deckt somit nicht alle Pakete ab. Mit dem Werkzeug „debsecan“ lassen sich die installierten Programme auflisten, die von bekannten Sicherheitslücken betroffen sind. In der Testinstallation von Debian 10 sind zum Zeitpunkt des Schreibens alleine 10 installierte Programme von sehr dringenden Sicherheitslücken betroffen, die sich aus der Ferne ausnutzen lassen.
== OS Konfiguration ==


Verschiedene Sicherheitsdokumente geben ausführliche Hinweise und Anleitungen um Debian-Systeme möglichst sicher einzurichten. Dazu gehören die Rechtevergabe, Netzwerkkonfiguration, Kernel-Hardening, Firewalls, spezielle Sicherheitspakete für Integritätschecks und Einstellungsoptimierung und Sandboxing.
* Konfigurationsdateien bei neuem OS vom alten zum neuen Betriebssystem kopiert
** Z. B. ~/.bashrc, ~/.xsessionrc, ~/.tmux.conf, ~/.config/nvim/init.vim, …
** Git-Repository mit Konfigurationsdateien, die dann entsprechend verlinkt werden
** Schnelles und sichereres Einrichten neuer Linux-Accounts
** Änderungen können einfach nachvollzogen und schnell


Es wird empfohlen, die Netzwerkverbindung erst nach der vollständigen Installation und Einrichtung herzustellen. Ein anderer Rechner kann dazu die aktuellsten Versionen der verwendeten Softwarepakete bereitstellen.
== Sichere Authentifizierung ==


Debian installiert standardmäßig GRUB als Bootloader. Da GRUB die Manipulation von Booteinträgen erlaubt und eine eigene Konsole hat, sollte GRUB ebenfalls mit einem Passwort gesichert werden, was den Bootprozess allerdings noch umständlicher macht. Mit UEFI sollte sich Debian auch ganz ohne Bootloader booten lassen und diese Problematik somit zu umgehen sein. Inwiefern sich komplizierte Bootloader auch bei verschlüsselten Installationen vermeiden lassen, wurde hier nicht weiter untersucht.
* Passwörter mit Kamera relativ leicht zu stehlen
** Multifaktorauthentifizierung für Festplattenentschlüssellung schwierig und riskant
** Starkes Passwort und Sichtschutz für sichere Eingabe


== OS Konfiguration ==
== Verschlüsseltes Backup ==


Es ist unter Linuxenthusiast*innen üblich, sich das System und die verwendeten Werkzeuge durch Anpassung der Konfigurationsdateien persönlich einzurichten. Es liegt nahe, diese Konfigurationsdateien einfach zum nächsten System herüberzukopieren. Dabei muss beachtet werden, dass viele solche Dateien direkt oder indirekt ausführbaren Code enthalten können und somit auch mit Schadcode infiziert werden können. Ein möglicher Ansatz um mehr Kontrolle und Überblick über Manipulationen an den Konfigurationsdateien zu bekommen, ist das Zusammenfassen all dieser Dateien, in einem Versionsmanager wie git und das pushen auf einen vertrauenswürdigen Server. Es können dann Softlinks auf dieses Repository erstellt werden um die Dateien an den ensprechenden Orten einzusetzen. Dieser Schritt lässt sich natürlich mit einem Bash-Script einfach automatisieren. Somit können Konfigurationsdateien komfortabel zwischen Maschienen synchronisiert werden und Änderungen detailliert nachvollzogen werden.
* “Stehendes” Backup von anderem Bootmedium (USB oder andere Partition)
** Z. B. Installation eines minimalen Archlinux mit Autostart von Backupscript
** Nur genutzte Blöcke betrachten und Komprimierung nutzen mit partclone und gzip
** Backup muss LUKS-Header, die Partitionsstruktur und alle Partition beinhalten
** Entweder LUKS-Verschlüssellung der Zielfestplatte oder Verschlüssellung des Backups
* Inkrementelles Backup von $HOME
** Backup aus dem laufenden OS auf separat verschlüsselte Festplatte mit rsync
** Z. B. Speicherung jeweils einer Version aus den letzten x Jahren, y Monaten, z Wochen, w Tagen
* Backups sollten möglichst immer nochmal überprüft werden
** Vorher sollten Caches geleert werden: <code>echo 3 &gt; /proc/sys/vm/drop_caches</code>


== Sandboxing ==
== Sandboxing ==


Ein weit verbreitetes Sandboxing-Werkzeug ist „firejail“. Firejail kann unter anderem mit Hilfe von AppArmor und OverlayFS die Ausführungsumgebungen unterschiedlicher Programme in geeigneter Weise von einander trennen. Mit Hilfe von Xpra können auch X11-Anwendungen von einander separiert werden. Firejail kommt bereits mit Konfigurationsprofilen für viele Anwendungen. Das Firefox-Profil schränkt den Dateizugriff innerhalb des Home-Directories z. B. auf das ~/.mozilla- und das ~/Downloads-Directory ein. Mit OverlayFS lassen sich Anwendungen auch in einem Copy-on-Write-Dateisystem ausführen, welches Schreibzugriffe auf das eigentliche Dateisystem abfängt und die geschriebenen Dateien an einem spezifizierten Ort ablegt. Mit Wrapper-Scripts lassen sich z. B. Programme wie Webbrowser, PDF-Viewer und Office-Programme relativ transparent einkapseln. Selbst das starten einer Root-Shell in einer Sandbox mit OverlayFS ist möglich, sodass die Installation von Programmen oder die Änderung von Konfigurationsdateien getestet werden kann, ohne das eigentliche Dateisystem zu vermüllen. Für eine möglichst sichere Ausführung sollten die zahlreichen Konfigurationsmöglichkeiten im Detail untersucht und verstanden werden. Insbesondere mit Root-Zugriff ist es weiterhin möglich, aus der Sandbox auszubrechen.
* Firejail

** Nutzt unter anderem AppArmor und OverlayFS
Das Kernelmodul AppArmor, welches in Debian 10 standardmäßig aktiviert ist, ermöglicht auch eigenständig die Einschränkung von Netzwerk-, Datei-, Socketzugriff etc.. AppArmor-Profile können in /etc/apparmor.d/ abgelegt werden. Softwarepakete machen das bei ihrer Installation teilweise selbst.
** OverlayFS erlaubt ein Copy-on-Write Dateisystem-Overlay
** Sandboxing von X11-Anwendungen via Xpra um Zugriffe auf andere Fenster vorzubeugen
** „firefox-esr“ Bash-Script im PATH, welches FireFox in Sandbox startet
*** Nur Zugriff auf Mozilla- und Downloads-Ordner
** Scripts für PDF-Viewer und LibreOffice geplant
** Auch Root-Shell in OverlayFS möglich um Programminstallation und -konfiguration zu testen
* [https://wiki.debian.org/AppArmor/HowToUse AppArmor] ab Debian 10 automatisch aktiviert
** Schränkt Netzwerkzugriff, Datei- und Socketzugriff etc. ein
** Installierte Pakete platzieren AppArmor-Profile in /etc/apparmor.d/


== USB Guard ==
== USB Guard ==


Um mehr Kontrolle über angeschlossene USB-Geräte zu erlangen, kann das Werkzeug „USB Guard“ verwendet werden. Es erlaubt White- und Blacklisting von USB-Geräten und verwendet dafür die USB-Authorisierungsfunktionen des Linux Kernels. Es bietet ein GUI-Frontend für einfache Bedienung, einschließlich eines Popups, welches bei jeder Verbindung eines USB-Gerätes um Erlaubnis fragt, es einzubinden. Im vorliegenden Notebook ist davon auch die eingebaute Webcam betroffen. Eine Funktion die leider noch fehlt, ist die Anzeige und ggf. sogar die Einschränkung des Gerätetyps. Wenn sich ein USB-Stick also z. B. als Tastatur ausgibt, um die Kontrolle über einen Rechner zu übernehmen, hilft der USB-Guard nicht dabei, ihn als solche zu identifizieren.
* [https://usbguard.github.io/ USB Guard] erlaubt White- und Blacklisting von USB-Geräten

** Verwendet USB Authorisierungsfunktion des Linux Kernels
== Verschlüsseltes Backup ==
** GUI-Frontend für einfache Bedienung

** Betrifft auch eingebaute Webcam
Gerade bei Verschlüsselten Laufwerken ist der vollständige Verlusst aller gespeicherten Daten nicht sehr unwahrscheinlich. Alle bekannten Speichermedien haben eine beschränkte Lebzeit. Backups aller wichtigen Daten sind also immer zu empfehlen.
** Popup bei jedem Einstecken von USB-Geräten um Nutzung zu bestätigen

** Zeigt/beschränkt nicht die Art des Geräts (Böswillige Geräte nicht identifizierbar)
Am besten sollte das gesammte System abgesichert werden, sodass es schnell wieder hergestellt werden kann und keine Neuinstallation bei Datenverlusst nötig wird. Es bietet sich an, Werkzeuge wie Partclone und Gzip zu verwenden, um nur genutze Blöcke zu replizieren und diese zusätzlich zu komprimieren. Bei verschlüsselten Daten ist das allerdings nicht möglich. Es sollte allerdings möglich sein, die Partitionsstruktur abzuspeichern, die unverschlüsselten Partitionen einzeln komprimiert abzulegen und das entsperrte Mapping der verschlüsselten Partition(en) im Klartext komprimiert als Backup zu replizieren. Um auch das Backup zu verschlüsseln können die Backup-Befehle entweder einzeln durch gpg gepipet werden oder auf eine, ihrerseits LUKS-Verschlüsselte, Festplatte abgelegt werden. Um einen Konsistenten Abzug des Festplattenzustandes zu machen, könnte ein kleines Backup-Betriebssystem auf einer separaten Partition zum Einsatz kommen, welches die Partitionen im ungenutzen Zustand kopiert.
** Zumindest abgesichertes Laden von USB-Geräten, die nicht mit OS interagieren sollen

Es wird empfohlen, das Backup im Anschluss immer nochmal zu prüfen. Vorher sollten durch den Befehl <code>echo 3 | sudo tee /proc/sys/vm/drop\_caches</code> die Caches geleert werden.

Da häufige Backups der gesammten Festplatte relativ viel Zeit und Ressourcen in Anspruch nehmen, bietet es sich an, stattdessen inkrementelle Backups des Home-Directories anzufertigen und die Backups der gesammte Festplatte nur gelegentlich durchzuführen. Das geht im laufenden Betrieb und dauert nur wenige Minuten. Langfristig kann dann eine Auswahl von Versionen gespeichert werden. Z. B. jeweils eine Version pro Jahr, aus den letzten 12 Monaten, den letzten 4 Wochen und den letzten 7 Tagen.

== Sichere Authentifizierung ==


Die Authentifizierung in einem Linuxsystem erfolgt standardmäßig nur über Passwörter. Die Eingabe von Passwörtern lässt sich auch schon mit günstigen Kameras beobachten und die Passwörter somit entwenden. Ein erster effektiver Schritt, um das Entwenden von Passwörtern zu verhindern ist somit die konsequente verdeckte Eingabe von Passwörtern. Es bietet sich hierfür an, eine entsprechende Einrichtung bereits an der Tastatur oder dem Notebook zu installieren. In diesem Projekt wurden dafür Klappen an den Seiten des Notebook-Bildschirms angebracht. Dieser kann dann bei der Passworteingabe heruntergeklappt werden, sodass die Tastatur nur noch von vorne sichtbar ist. Noch besser wäre ein undurchsichtiger Stoff, der auch von Vorne die Sicht auf die Hände verdeckt.
== Praktische Erfahrung ==


Statt einfachen Passworten bietet sich natürlich auch Multifaktor-Authentifizierung an. Mangels der dafür nötigen Hardware wurde diese hier nicht weiter betrachtet. Einige Methoden (z. B. biometrische) sind für die Ableitung eines Schlüssels für die Enschlüssellung des Laufwerks weniger gut geeignet oder benötigen ggf. angreifbare Zusatzhardware, um sie für diesen Zweck zu nutzen.
* Einige BIOS-Einstellungen nicht wirklich verständlich
* UEFI-Booteinträge zunächst nicht persistiert -&gt; System nicht bootbar
** Zurücksetzen des BIOS und Installation der aktuellsten Firmware-Version
*** Direkt aus Windows möglich oder mit CD-ROM


== Weitere Themen ==
== Weitere Themen ==


Weitere Themen, die in diesem Rahmen hätten betrachtet werden könne, sind sicherheitsstrategien für Plugins (z. B. für neovim), weitere Sicherheitsüberlegungen zu Dual-Boot-Systeme, die Angreifbarkeit der Hardware (z. B. Netzwerkkarte) von außen oder die Sicherheit von Hardwareunterstüzter Verschlüsselung. Diese haben aber nicht mehr in den zeitlichen Rahmen gepasst.
* Sicherheitsstrategie für VIM-Plugins
* Welche Maßnahmen sind auf Dual-Boot-Systeme übertragbar?
* Lassen sich BIOS oder Netzwerkkarte von außen steuern/flashen?
** Intel-Fernadministrierung/V-Pro?
* RAM-Verschlüsselung auf neuen AMD Ryzen Pro
* Hardwareverschlüsselung vs Softwareverschlüsselung (siehe BitLocker)
* Inwiefern sind die Technologien von der Hardware/dem BIOS abhängig?

Revision as of 22:13, 12 October 2019

Es soll untersucht werden, welche Technologien bei der Einrichtung eines möglichst sicheren und trotzdem bequem benutzbaren Linux-Desktop-Betriebssystem von Nutzen sein können. Als Referenz wird ein Lenovo ThinkPad aus der E-Serie verwendet. Es soll außerdem evaluiert werden, welchen Nutzen, welche Nachteile und welche Schwachstellen die Technologien haben und gegen welche Angreifer*innenmodelle sie letztendlich schützen.

Sicherheitsfunktionen von Motherboard und BIOS

Ein Blick ins BIOS des vorliegenden Notebooks zeigt, dass bereits hardwareseitig Sicherungstechnologien vorhanden sind. Einerseits ist ein TPM 2.0 Modul verbaut, andererseits wird Intel SGX unterstützt.

Das TPM 2.0 Modul ermöglicht die „Secure Boot“-Funktionalität und die Passwortsperre des BIOS. Es unterstützt ausßerdem das Erzeugen von Zufallswerten, die Generierung und Speicherung von Schlüsseln und das Verschlüsseln und Signieren von Daten. Bei Verwendung aktueller Kernel ist es als /dev/tpm0 eingebunden und kann vom Userspace aus verwendet werden.

Die „Intel SGX“-Technologie ermöglicht das Ausführen sicherheitskritischen Codes in einem abgesicherten Bereich, der von anderem Code abgeschirmt ist. Welche genauen Funktionen das ermöglicht, und ob diese Technologie unter Linux nutzbar ist, wurde hier nicht weiter untersucht.

Des Weiteren kann im BIOS die „Internal Storage Tamper Detection“ aktiviert werden, durch die das Gerät automatisch heruntergefahren wird, wenn sich beim Erwachen aus dem Schlafzustand etwas an den internen Laufwerken geändert hat.

Um das Booten fremder Software zu verhindern, sollten alle Booteinträge, außer das gewünschte Betriebssystem, deaktiviert werden und die BIOS-Einstellungen mit einem Passwort geschützt werden.

BIOS Passwort

Das BIOS des betrachteten Notebooks unterstützt das Festlegen eines Supervisor-Passworts, welches den Zugriff auf bestimmte BIOS-Einstellungen sperrt. Optional kann eingestellt werden, dass es auch die anderen BIOS-Funktionen sperrt, auch die Auswahl von Booteinträgen bzw. sogar das Booten selbst.

Im Netz finden sich viele Anleitungen, ein solches Passwort zurückzusetzen oder sogar zu umgehen. Entweder durch Eingabe eines Masterpasswortes von der Hersteller*in bzw. aus dem Netz oder durch vorübergehendes Entfernen der CMOS-Batterie oder durch Kurzschließen eines Security-Chips auf der Rückseite des Mainboards. Der Lenovo-Support hat, auf Anfrage, versichert, dass es kein Masterpasswort für das betrachtete Gerät gibt, das Entfernen der CMOS Batterie auch nicht funktioniert und das Kurzschließen des Sicherheitschips das Mainboard zerstört.

UEFI Secure Boot

„UEFI Secure Boot“ ist eine, ursprünglich für Microsoft-Betriebssysteme eingeführte, Technologie, die vor dem Booten eines Bootimages dessen Signatur überprüft und das Booten ggf. unterbindet. Microsoft ist dementsprechend die Certificate-Authority, signiert aber auch Software anderer Hersteller*innen.

Linux-Betriebssysteme verwenden häufig einen kleinen Bootloader namens „shim“, der von Microsoft signiert ist, und seinerseits die Signaturen des Kernels und der Kernelmodule prüft. Im shim können auch eigene Public-Keys hinterlegt werden, um selbstsignierte Kernel und Kernelmodule zu verwenden. Diese Public-Keys müssen beim nächsten Bootvorgang erst per Hand von der Nutzer*in bestätigt werden und werden dann vom shim in einen NV-RAM geschrieben, welchen das Betriebssystem nicht selbstständig modifizieren kann.

Diese Funktion des shim ermöglicht es Angreifer*innen natürlich, trotz Secure-Boot Schadcode zu injizieren, wenn sie Schreibzugriff auf die Bootpartition bekommen und kurzzeitig auf die Hardware zugreifen können. Dieser Schreibzugriff sollte allerdings durch die Beschränkung auf einen Booteintrag und die Passwortsicherung des BIOS verhindert werden, sofern die Angreifer*in das Gerät nicht aufschraubt.

Sicheres Installationsmedium

Bei der Installation des Betriebssystems ist Vertrauen in alle Hardware nötig. Es muss aber auch dem Betriebssystem vertraut werden, von dem aus das Installationsmedium geladen, bzw. geprüft wird, da es sonst bereits Schadcode injizieren kann, bevor das neue System installiert wurde. Um nicht einem einzigen Rechner vertrauen zu müssen bietet sich folgendes Vorgehen an, falls ein USB-Stick mit Schreibschutzschalter zur Verfügung steht:

Der Schreibschutz wird deaktiviert und das Installationsimage wird auf den USB-Stick geladen. Im Anschluss wird der Schreibschutz aktiviert und eine Prüfsumme über die geschriebene Partition gebildet. Diese Prüfsumme wird mit der Referenzprüfsumme von der Website der Betriebssystementwickler*innen verglichen. Das Berechnen und Vergleichen der Prüfsumme kann nun auf beliebig vielen Maschienen wiederholt werden. Wegen des Schreibschutzes können diese das Installationsimage nicht modifizieren. Wenn am Ende nur eine der Maschienen vertrauenswürdig ist, und die Prüfsumme auf allen Maschienen bestätigt wird, muss der Installer intakt sein.

Readonly-Laufwerk

Ein Laufwerk mit Schreibschutzschalter könnte auch für die Installation der unverschlüsselten Bootpartition des Betriebssystems verwendet werden. Das wäre insbesondere bei einem Dualboot mit einem Microsoft-Betriebssystem sinnvoll, da Microsoft die CA für Secure-Boot ist und dem entsprechend unbemerkt Modifikationen am Linux-Bootimage vornehmen könnte. Der Schreibschutz dieses Laufwerks könnte immer aktiviert sein und könnte temporär deaktiviert werden, wenn das vertrauenswürdige Linux-System Updates des Bootloaders durchführt.

Für das Notebook ist die Verwendung des vorhandenen USB-Sticks mit Schreibschutz bedenklich, da es einfacher sein könnte, den USB-Stick unbemerkt zu entwenden und zu infizieren, als das Notebook unbemerkt aufzuschrauben und zu modifizieren.

Verschlüssellung

Self-Encrypting-Drives

Viele moderne SSDs haben AES-Verschlüssellung bereits in ihrer Hardware integriert. Das bietet einerseits die Möglichkeit, die Daten vor Zugriff durch Fremde zu schützen. Andererseits ermöglicht es auch das schnelle und zuverlässige Löschen der gesammten SSD durch überschreiben des Schlüssels. Das BIOS des vorliegenden Gerätes bietet die Möglichkeit, Passwörter für die eingebauten SSDs festzulegen. Die entsprechende SSD wird dann per ATA angewiesen, den AES-Schlüssel mit dem Passwort zu verschlüsseln. Der AES-Schlüssel verlässt dabei niemals die SSD. Da das gewählte Passwort Hersteller*innenabhängig umgewandelt wird, bevor es an die SSD übertragen wird, ist es nicht ohne weiteres Möglich, die SSD dann in einem anderen System zu verwenden. Das Umwandlungsverfahren ist (im Fall des vorliegenden Gerätes) bekannt und bietet somit keine zusätzliche Sicherheit.

Die Selbstverschlüssellung steht teilweise wegen achtlosen Implementierungen mit Sicherheitslücken und wegen der Möglichkeit, bewusster Backdoors, in der Kritik. Letztere könnten auch durch Regierung vorgeschrieben sein. Es ist also besser, sich auf quelloffene Verschlüssellungssoftware wie LUKS zu verlassen.

Zumindest für das Löschen alter Daten, kann es nicht schaden, die Funktionen der SSD trotzdem zu verwenden, sofern sich nicht darauf verlassen wird. Um die SSD anzuweisen, alle Daten zu löschen, wird eine „Physical Security Identification“-Nummer benötigt, die auf der SSD-Hardware zu finden ist. Diese muss korrekt an die SSD übertragen werden. Sonst verweigert sie das Generieren eines neuen AES-Schlüssels. Unter Linux kann das Werkzeug „sedutil“ verwendet werden. Der konkrete Befehl lautet sudo sedutil-cli --yesIreallywanttoERASEALLmydatausingthePSID <PSID> <Drive>. Damit dieser funktioniert, muss bereits ein Passwort gesetzt sein, was sich mit sudo sedutil-cli --initialsetup <Password> <Drive> und einem Reboot bewerkstelligen lässt.

Linux Unified Key Setup

LUKS bietet einfache Verschlüssellung von Laufwerken oder Partitionen unter Linux. Es verwendet dafür das „dm-crypt“-Kernelmodul, welches eine transparente Verschlüssellungsschicht unter dem Dateisystem zur Verfügung stelt. LUKS Partitionen/Laufwerke bestehen aus einem Header und den verschlüsselten Daten. Im Header befindet sich ein Masterkey für die Entschlüssellung, welcher mit einem (oder mehreren) Passwörtern verschlüsselt ist. Ohne den Header ist der Rest der Daten unbrauchbar. Es bieten sich also extra Backups des Headers an. Bei SSDs ist zu beachten, dass überschriebene Header nicht unbedingt physisch gelöscht werden, sondern ggf. nur auf eine Liste freigegebener Blöcke verschoben werden. Es darf also nicht davon ausgegangen werden, dass die Daten mit Hilfe alter Passwörter nicht mehr entschlüsselt werden können. Um dieses Problem zu umgeben, könnte der LUKS-Header auf eine HDD ausgelagert werden, die dann zuverlässig überschrieben werden kann.

Distribution und Softwarequellen

Es gibt spezielle Linux-Distributionen, deren Hauptziel es ist, ihren Benutzer*innen möglichst viel Sicherheit und Anonymität zu bieten.

Qubes OS

Ein solches Betriebssystem ist Qubes OS. In Qubes laufen alle Anwendungen in virtuellen Maschienen und sind somit von Anwendungen aus anderen VMs abgekapselt. Die virtuellen Maschienen können dabei unterschiedliche Betriebssysteme bewirten. Sowohl Unixartige als auch Windows. Auf dem Desktop werden die Fenster aus unterschiedlichen VMs durch unterschiedliche Rahmenfarben unterschieden. Sogenannte „Disposable VMs“ ermöglichen es, Programme in einer Umgebung laufen zu lassen, die nach der Ausführung komplett verworfen wird. Für jede VM kann separat eingestellt werden, ob sie eine Netzwerkverbindung bekommt und ob sie durch das Tor-Netzwerk bzw. ein VPN getunnelt wird. Für USB-Geräte muss explizit eingestellt werden, welcher VM sie zur Verfügung stehen. Für das Austauschen von Dateien und kopierten Daten in der Zwischenablage zwischen VMs bietet Qubes eigene Funktionen an.

Letzendlich bestehen aber auch immer Möglichkeiten, aus einer VM auszubrechen und das Hostsystem zu infizieren. Diese ausfindig zu machen und auszunutzen ist allerdings eine erhebliche Hürde, sodass die Virtualisierung durchaus von Nutzen ist. Insgesammt bietet Qubes OS zwar viele Sicherheitsmechanismen, ist aber auch mit zusätzlichem Verwaltungsaufwand und CPU- und RAM-Belastung verbunden.

Debian

Einen Kompromiss bieten herkömmliche Distributionen, die hohen Wert auf Stabilität und Sicherheit legen. Zwei solche Distributionen sind CentOS und Debian. Zwar wird CentOS als geringfügig stabiler erachtet, Debian bietet aber mehr und aktuellere Software und bessere Hardwareunterstützung und ist somit vermutlich besser für ein Desktopsystem geeignet.

In Bezug auf Bugreports fährt Debian eine sehr transparente Strategie. Auch sicherheitskritische Bug-Reports sind sofort öffentlich einsehbar. Probleme werden nicht „versteckt“. Das Security-Team untersucht und behebt sie dann mit höchster Priorität. Über eine „Debian Security Announce“-Mailingliste werden sicherheitsrelevante Informationen an Interessierte verteilt. Ein zusätzliches „Security Audit“-Team durchsucht Debians Softwarearchiv aktiv nach Sicherheitsbugs. Dies beschränkt sich aber auf wichtigere und verbreitetere Pakete und deckt somit nicht alle Pakete ab. Mit dem Werkzeug „debsecan“ lassen sich die installierten Programme auflisten, die von bekannten Sicherheitslücken betroffen sind. In der Testinstallation von Debian 10 sind zum Zeitpunkt des Schreibens alleine 10 installierte Programme von sehr dringenden Sicherheitslücken betroffen, die sich aus der Ferne ausnutzen lassen.

Verschiedene Sicherheitsdokumente geben ausführliche Hinweise und Anleitungen um Debian-Systeme möglichst sicher einzurichten. Dazu gehören die Rechtevergabe, Netzwerkkonfiguration, Kernel-Hardening, Firewalls, spezielle Sicherheitspakete für Integritätschecks und Einstellungsoptimierung und Sandboxing.

Es wird empfohlen, die Netzwerkverbindung erst nach der vollständigen Installation und Einrichtung herzustellen. Ein anderer Rechner kann dazu die aktuellsten Versionen der verwendeten Softwarepakete bereitstellen.

Debian installiert standardmäßig GRUB als Bootloader. Da GRUB die Manipulation von Booteinträgen erlaubt und eine eigene Konsole hat, sollte GRUB ebenfalls mit einem Passwort gesichert werden, was den Bootprozess allerdings noch umständlicher macht. Mit UEFI sollte sich Debian auch ganz ohne Bootloader booten lassen und diese Problematik somit zu umgehen sein. Inwiefern sich komplizierte Bootloader auch bei verschlüsselten Installationen vermeiden lassen, wurde hier nicht weiter untersucht.

OS Konfiguration

Es ist unter Linuxenthusiast*innen üblich, sich das System und die verwendeten Werkzeuge durch Anpassung der Konfigurationsdateien persönlich einzurichten. Es liegt nahe, diese Konfigurationsdateien einfach zum nächsten System herüberzukopieren. Dabei muss beachtet werden, dass viele solche Dateien direkt oder indirekt ausführbaren Code enthalten können und somit auch mit Schadcode infiziert werden können. Ein möglicher Ansatz um mehr Kontrolle und Überblick über Manipulationen an den Konfigurationsdateien zu bekommen, ist das Zusammenfassen all dieser Dateien, in einem Versionsmanager wie git und das pushen auf einen vertrauenswürdigen Server. Es können dann Softlinks auf dieses Repository erstellt werden um die Dateien an den ensprechenden Orten einzusetzen. Dieser Schritt lässt sich natürlich mit einem Bash-Script einfach automatisieren. Somit können Konfigurationsdateien komfortabel zwischen Maschienen synchronisiert werden und Änderungen detailliert nachvollzogen werden.

Sandboxing

Ein weit verbreitetes Sandboxing-Werkzeug ist „firejail“. Firejail kann unter anderem mit Hilfe von AppArmor und OverlayFS die Ausführungsumgebungen unterschiedlicher Programme in geeigneter Weise von einander trennen. Mit Hilfe von Xpra können auch X11-Anwendungen von einander separiert werden. Firejail kommt bereits mit Konfigurationsprofilen für viele Anwendungen. Das Firefox-Profil schränkt den Dateizugriff innerhalb des Home-Directories z. B. auf das ~/.mozilla- und das ~/Downloads-Directory ein. Mit OverlayFS lassen sich Anwendungen auch in einem Copy-on-Write-Dateisystem ausführen, welches Schreibzugriffe auf das eigentliche Dateisystem abfängt und die geschriebenen Dateien an einem spezifizierten Ort ablegt. Mit Wrapper-Scripts lassen sich z. B. Programme wie Webbrowser, PDF-Viewer und Office-Programme relativ transparent einkapseln. Selbst das starten einer Root-Shell in einer Sandbox mit OverlayFS ist möglich, sodass die Installation von Programmen oder die Änderung von Konfigurationsdateien getestet werden kann, ohne das eigentliche Dateisystem zu vermüllen. Für eine möglichst sichere Ausführung sollten die zahlreichen Konfigurationsmöglichkeiten im Detail untersucht und verstanden werden. Insbesondere mit Root-Zugriff ist es weiterhin möglich, aus der Sandbox auszubrechen.

Das Kernelmodul AppArmor, welches in Debian 10 standardmäßig aktiviert ist, ermöglicht auch eigenständig die Einschränkung von Netzwerk-, Datei-, Socketzugriff etc.. AppArmor-Profile können in /etc/apparmor.d/ abgelegt werden. Softwarepakete machen das bei ihrer Installation teilweise selbst.

USB Guard

Um mehr Kontrolle über angeschlossene USB-Geräte zu erlangen, kann das Werkzeug „USB Guard“ verwendet werden. Es erlaubt White- und Blacklisting von USB-Geräten und verwendet dafür die USB-Authorisierungsfunktionen des Linux Kernels. Es bietet ein GUI-Frontend für einfache Bedienung, einschließlich eines Popups, welches bei jeder Verbindung eines USB-Gerätes um Erlaubnis fragt, es einzubinden. Im vorliegenden Notebook ist davon auch die eingebaute Webcam betroffen. Eine Funktion die leider noch fehlt, ist die Anzeige und ggf. sogar die Einschränkung des Gerätetyps. Wenn sich ein USB-Stick also z. B. als Tastatur ausgibt, um die Kontrolle über einen Rechner zu übernehmen, hilft der USB-Guard nicht dabei, ihn als solche zu identifizieren.

Verschlüsseltes Backup

Gerade bei Verschlüsselten Laufwerken ist der vollständige Verlusst aller gespeicherten Daten nicht sehr unwahrscheinlich. Alle bekannten Speichermedien haben eine beschränkte Lebzeit. Backups aller wichtigen Daten sind also immer zu empfehlen.

Am besten sollte das gesammte System abgesichert werden, sodass es schnell wieder hergestellt werden kann und keine Neuinstallation bei Datenverlusst nötig wird. Es bietet sich an, Werkzeuge wie Partclone und Gzip zu verwenden, um nur genutze Blöcke zu replizieren und diese zusätzlich zu komprimieren. Bei verschlüsselten Daten ist das allerdings nicht möglich. Es sollte allerdings möglich sein, die Partitionsstruktur abzuspeichern, die unverschlüsselten Partitionen einzeln komprimiert abzulegen und das entsperrte Mapping der verschlüsselten Partition(en) im Klartext komprimiert als Backup zu replizieren. Um auch das Backup zu verschlüsseln können die Backup-Befehle entweder einzeln durch gpg gepipet werden oder auf eine, ihrerseits LUKS-Verschlüsselte, Festplatte abgelegt werden. Um einen Konsistenten Abzug des Festplattenzustandes zu machen, könnte ein kleines Backup-Betriebssystem auf einer separaten Partition zum Einsatz kommen, welches die Partitionen im ungenutzen Zustand kopiert.

Es wird empfohlen, das Backup im Anschluss immer nochmal zu prüfen. Vorher sollten durch den Befehl echo 3 | sudo tee /proc/sys/vm/drop\_caches die Caches geleert werden.

Da häufige Backups der gesammten Festplatte relativ viel Zeit und Ressourcen in Anspruch nehmen, bietet es sich an, stattdessen inkrementelle Backups des Home-Directories anzufertigen und die Backups der gesammte Festplatte nur gelegentlich durchzuführen. Das geht im laufenden Betrieb und dauert nur wenige Minuten. Langfristig kann dann eine Auswahl von Versionen gespeichert werden. Z. B. jeweils eine Version pro Jahr, aus den letzten 12 Monaten, den letzten 4 Wochen und den letzten 7 Tagen.

Sichere Authentifizierung

Die Authentifizierung in einem Linuxsystem erfolgt standardmäßig nur über Passwörter. Die Eingabe von Passwörtern lässt sich auch schon mit günstigen Kameras beobachten und die Passwörter somit entwenden. Ein erster effektiver Schritt, um das Entwenden von Passwörtern zu verhindern ist somit die konsequente verdeckte Eingabe von Passwörtern. Es bietet sich hierfür an, eine entsprechende Einrichtung bereits an der Tastatur oder dem Notebook zu installieren. In diesem Projekt wurden dafür Klappen an den Seiten des Notebook-Bildschirms angebracht. Dieser kann dann bei der Passworteingabe heruntergeklappt werden, sodass die Tastatur nur noch von vorne sichtbar ist. Noch besser wäre ein undurchsichtiger Stoff, der auch von Vorne die Sicht auf die Hände verdeckt.

Statt einfachen Passworten bietet sich natürlich auch Multifaktor-Authentifizierung an. Mangels der dafür nötigen Hardware wurde diese hier nicht weiter betrachtet. Einige Methoden (z. B. biometrische) sind für die Ableitung eines Schlüssels für die Enschlüssellung des Laufwerks weniger gut geeignet oder benötigen ggf. angreifbare Zusatzhardware, um sie für diesen Zweck zu nutzen.

Weitere Themen

Weitere Themen, die in diesem Rahmen hätten betrachtet werden könne, sind sicherheitsstrategien für Plugins (z. B. für neovim), weitere Sicherheitsüberlegungen zu Dual-Boot-Systeme, die Angreifbarkeit der Hardware (z. B. Netzwerkkarte) von außen oder die Sicherheit von Hardwareunterstüzter Verschlüsselung. Diese haben aber nicht mehr in den zeitlichen Rahmen gepasst.