Autorenarchiv: Jörg Kastning

Support-Subskriptionen von SUSE und RedHat

Nachdem ich an dieser Stelle bereits ausführlich über das kommerzielle Angebot Ubuntu Advantage berichtet habe, möchte ich in diesem Artikel kurz die Support-Subskriptionen von SUSE und RedHat vorstellen.

Die Subskriptionen

Beim SUSE Linux Enterprise Server (SLES) sowie dem RedHat Enterprise Linux (RHEL) handelt es sich um kommerzielle Produkte, welche nur mit einer gültigen Subskription verwendet werden dürfen.

Mit einer Subskription erhält man neben dem Recht, das erworbene Enterprise Linux verwenden zu dürfen, auch Zugriff auf Software-Paketquellen und darin enthaltene Updates für das Betriebssystem und enthaltene Software. Darüber hinaus umfassen die Subskriptionen Zugang zu Wissensdatenbanken und zu technischem Support. Für letzteren legen die einzelnen Subskriptionen auch das jeweilige Service-Level-Agreement fest.

Im Unterschied zu Ubuntu Advantage umfassen die in der folgenden Tabelle dargestellten Subskriptionen keine Verwaltungs-Werkzeuge, wie z.B. das von Canonical angebotene Landscape. Diese können sowohl bei SUSE, als auch bei RedHat zusätzlich erworben werden.

Die folgende Tabelle bietet eine Übersicht über die gängigen Support-Subskriptionen für SLES und RHEL:

SLES StandardSLES PriorityRHEL StandardRHEL Premium
Subskription für1-2 Sockets oder 1-2 VMs1-2 Sockets oder 1-2 VMs2 Sockets, 1 physischer Server oder 2 VMs2 Sockets, 1 physischer Server oder 2 VMs
Software Upgrades & UpdatesJaJaJaJa
Anzahl Supportanfragenunbegrenztunbegrenztunbegrenztunbegrenzt
ZugangChat, Telefon und E-MailChat, Telefon und E-MailWeb und TelefonWeb und Telefon
Verfügbarkeit12x524x78x524x7
Reaktionszeiten
Stufe 12 Std.1 Std.1 Geschäfts-Std.1 Std.
Stufe 24 Std.2 Std.4 Geschäfts-Std.2 Std.
Stufe 31 Werktag4 Std.1 Werktag4 Std.
Stufe 41 Werktag1 Werktag2 Werktage8 Std. initial / 2 Werktage ongoing
Listenpreis pro Jahr670 EUR1.250 EUR700 EUR1.139 EUR

Die in der Tabelle enthaltenen Informationen beziehen sich auf die bei Veröffentlichung dieses Artikels aktuellen Angaben der Distributionen.

Die dargestellten Subskriptionen gelten für je einen physischen Server mit 1-2 CPU Sockets oder 2 VMs. Besitzt man einen physischen Server mit mehr als 2 CPU-Sockets muss eine Subskription mehrfach erworben werden, um diesen Server abzudecken. Besitzt ein Server bspw. 4 CPU-Sockets, muss die Subskription für diesen Server zweimal erworben werden. Möchte man die benötigte Anzahl der Subskriptionen für virtuelle Maschinen bestimmen, so lautet die Formel Anzahl VMs / 2 = Anzahl benötigter Subskriptionen.

Bei den Subskriptionen für virtuelle Maschinen spielt es dabei keine Rolle, ob diese mit Hilfe von VMware, Microsoft Hyper-V, XEN oder KVM betrieben werden.

Ab einer bestimmten Menge VMs ist es kostengünstiger statt Subskriptionen für einzelne VMs solche einzusetzen, welche das gesamte virtuelle Datacenter abdecken:

SUSE für hochdichte VirtualisierungsumgebungenRed Hat Enterprise Linux for Virtual Datacenters
StandardPriorityStandardPremium
Gültig für1-2 Sockets mit unbegrenzter Anzahl virtueller Maschinen1-2 Sockets mit unbegrenzter Anzahl virtueller Maschinen1-2 Sockets mit unbegrenzter Anzahl virtueller Maschinen1-2 Sockets mit unbegrenzter Anzahl virtueller Maschinen
Listenpreis für 1 Jahr1.330 EUR2.490 EUR2.192 EUR3.507 EUR

Die in der obigen Tabelle dargestellten Subskriptionen gelten jeweils für einen physischen Host, auf welchem virtuelle Maschinen ausgeführt werden. Zum Beispiel müssen für einen VMware vSphere-Cluster bestehend aus drei physischen Hosts mit je 1-2 CPU Sockets dann drei der entsprechenden Subskriptionen erworben werden. Auch hier gilt wieder, besitzt ein Host mehr als 2 CPU-Sockets, muss die jeweilige Subskription entsprechend mehrmals für diesen Host gekauft werden, bis die Gesamtzahl der CPU-Sockets pro Host abgedeckt ist.

Der Vorteil dieses Subskriptions-Modells liegt darin, dass hiermit beliebig viele VMs in einem virtuellen Datacenter betrieben werden können. Wird das virtuelle Datacenter jedoch um einen physischen Host erweitert, muss für diesen ebenfalls eine Subskription erworben werden, obwohl weiterhin die gleiche Anzahl VMs darauf ausgeführt wird. Je nach Kostenbetrachtung kann dies einen Nachteil darstellen.

Die folgenden Diagramme stellen den Break Even der jeweiligen Subskriptionen dar. Sie wurden für die Verwendung eines virtuellen Datacenters bestehend aus 3 Hosts mit jeweils 1-2 CPU Sockets berechnet.

Bei den in diesem Artikel verwendeten Preisen handelt es sich um Listenpreise. Beim Kauf von Subskriptionen über einen Fachhändler können je nach Umfang der Bestellung meist noch Rabatte gewährt werden.

Neben den hier betrachteten Subskriptionen existieren noch weitere für die Bereiche Forschung und Lehre sowie zur Erweiterung des Leistungsumfangs. Weitere Informationen dazu finden sich über die Links am Ende dieses Artikels.

Die in diesem Artikel enthaltenen Informationen wurden im Rahmen einer Linux-Evaluierung im Hochschulrechenzentrum der Uni Bielefeld erhoben.

Links

Überwachung eines Bienenbrutschranks mit Raspi-SHT21 v1.5.0

Vor ein paar Wochen erreichte mich eine Nachricht aus der Schweiz mit einer Frage zum Raspi-SHT21. Mario interessierte sich für das Projekt, um damit die Temperatur und Luftfeuchtigkeit in einem Bienenbrutschrank zu überwachen und die Messwerte für die Heizungssteuerung zu verwenden.

Neben den bereits bestehenden Funktionen wünschte sich Mario zusätzlich zur Anzeige der aktuellen Temperatur und Luftfeuchtigkeit noch die Anzeige der Minimal- und Maximal-Werte mit Zeitstempel der Messung. Da mir die Idee gefallen hat, war ich gerne bereit, ihm diese Funktionen zur Verfügung zu stellen. Die neuen Funktionen sind in die Version 1.5.0 eingeflossen, welche auf GitHub zum Download bereit steht.

Mario hat inzwischen einen ersten Prototyp fertiggestellt. Eine Beschreibung seines Projekts findet ihr auf seiner Webseite im Artikel „Brutschrank InkuPI“.

Viel Spaß beim Lesen.

Die Verwendung von „date“ in der crontab

Bei der Verwendung des Kommandos date +%Y%m%dT%H%M%S in der crontab meines Benutzers erlebte ich heute eine Überraschung. Das Kommando wurde nicht wie erwartet abgearbeitet.

Das Problem ließ sich jedoch schnell und einfach lösen. Die %-Zeichen der date-Formatierungsangaben müssen mit einem Backslash escaped werden. Ein korrekter Aufruf sieht bspw. wie folgt aus:


# m h dom mon dow command
*/10 * * * * /bin/echo `/bin/date +\%Y-\%m-\%dT\%H:\%M:\%S` >> /home/bob/check.log

Erster bekannter Missbrauch eines Let’s Encrypt Zertifikats

Dennis Schirrmacher berichtet in seinem heise-Artikel „Erste Malvertising-Kampagne mit Let’s-Encrypt-Zertifikat“ über die missbräuchliche Verwendung eines Let’s Encrypt Zertifikats.

Laut dem Artikel ist es Online-Gaunern gelungen, eine Subdomain für eine legitime Domain einzurichten und für diese ein Let’s Encrypt Zertifikat zu beantragen. Mit Hilfe der legitimen Domain und des vertrauenswürdigen Zertifikats wird Besuchern der Webseite Schadcode untergeschoben. Im konkreten Fall wird ein Online-Banking-Trojaner auf den Computern der Opfer installiert.

Die missbräuchliche Nutzung ist kein spezielles Problem von Let’s Encrypt. Es handelt sich vielmehr um ein generelles Designproblem der öffentlichen TLS/SSL-Infrastruktur, welches ich bereits in der Einleitung von „Certificate Pinning mit NGINX“ beschrieben habe.

Let’s Encrypt versucht den Missbrauch durch den Einsatz kurzlebiger Zertifikate einzuschränken. Dieser Versuch läuft meiner Ansicht nach jedoch weitgehend ins Leere. Denn auch Online-Gauner können die Erneuerung der ergaunerten Zertifikate mit dem Let’s Encrypt Client automatisieren.

Einen deutlich effektiveren Schutz gegen die genannte Art von Missbrauch bieten Verfahren wie „Public Key Pinning Extension for HTTP“[1. RFC 7469 – Public Key Pinning Extension for HTTP] [2. HTTP Public Key Pinning – Wikipedia (de)] und „HTTP Strict Transport Security (HSTS)“[3. RFC 6796 – HTTP Strict Transport Security (HSTS)] [4. HTTP Strict Transport Security – Wikipedia (de)]. Speziell mit Hilfe des Certificate Pinning kann ein Browser erkennen, ob ein TLS/SSL-Zertifikat zur besuchten Domain gehört oder nicht. Nähere Informationen dazu und wie das Certificate Pinning für den Webserver NGINX konfiguriert werden kann, finden sich im Artikel „Certificate Pinning mit NGINX“. Viel Spaß beim Lesen.

Pinning-Test im Firefox bei lokaler Root-CA erzwingen

In Certificate Pinning mit NGINX habe ich das „Public Key Pinning for HTTP“[1. RFC 7469] und dessen Einrichtung mit dem Webserver NGINX[2. Ubuntuusers.de-Wiki-Artikel zu NGINX] beschrieben. Im vorliegenden Artikel beschreibe ich, wie man den Pinning-Test im Firefox auch bei Installation einer lokalen Root-CA aktiviert.

Schmidt schreibt in seinem Artikel[3. Schmidt, Jürgen: Festgenagelte Zertifikate: TLS wird sicherer durch Certificate Pinning, in: c’t magazin für computer technik, Nr. 23, 17.10.2015, Seite 120-121], dass Firefox in der Standardeinstellung sämtliche Pinning-Tests deaktiviert, wenn nachträglich ein Root-CA-Zertifikat auf dem System installiert wurde. Um die Pinning-Tests auch in diesem Fall zu erzwingen ist der unten genannte Parameter auf der Seite „about:config“ auf den Wert „2“ zu setzen.

security.cert_pinning.enforcement_level

Dieser Parameter kann die folgenden Werte annehmen:

  • 0 -> Schaltet die Pin-Prüfung komplett ab.
  • 1 -> Standardwert; Führt Pin-Prüfung durch, solange keine lokale Root-CA im Spiel ist.
  • 2 -> Strict; Erzwingt die Pin-Prüfung in jedem Fall.

Update vom 08.12.2015
Wie ich bei meinen Tests am vergangenen Wochenende herausgefunden habe, muss noch ein weiterer Parameter in der Firefox-Konfiguration angepasst werden, um das Public-Key-Pinning im Firefox bei Existenz eines Root CA Zertifikats zu aktivieren.

security.cert_pinning.process_headers_from_non_builtin_roots;true

Wir oben genannter Parameter auf „true“ gesetzt, führt der Firefox den Pinning Test auch durch, wenn zusätzliche Root-Zertifikate auf dem System installiert wurden.

Einen ausführlichen Bericht zum Thema findet ihr auch in „Certificate_Pinning_mit_NGINX (PDF)„.

Biblatex mit Tex Live und Kile unter Ubuntu nutzen

BibLaTex[1. CTAN: biblatex – Bibliographies in LaTeX using BibTeX for sorting only (en)] ist eine Neuimplementierung des bekannten BibTeX[2. Wikipedia – BibTeX (de)]. Da die Nutzung mit Kile[3. Kile im Ubuntuusers Wiki (de)] unter Ubuntu mich heute fast wahnsinnig gemacht hat, möchte ich hier kurz dokumentieren, mit welchen Einstellungen ich meine LaTeX-Umgebung einsatzbereit gemacht habe.

Systemumgebung

Ich setze aktuell folgende Ubuntuversion mit den angegebenen Paketen ein:

:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:        14.04
Codename:       trusty
:~$ dpkg -l texlive-full biber
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                Version        Architektur    Beschreibung
+++-===================-==============-==============-===========================================
ii  biber               1.8-1          all            Much-augmented BibTeX replacement for BibLa
ii  texlive-full        2013.20140215- all            TeX Live: metapackage pulling in all compon
ii  kile                4:2.1.3-2ubunt amd64          KDE Integrated LaTeX Environment
:~$

Kile Einstellungen

Bei der Erstellung eines Dokuments hagelte es jedoch unzählige Fehlermeldungen. Nach langer Recherche im Internet bin ich auf die folgenden Einstellungen in Kile gestoßen:

Kile Einstellungen BibTeX (falsch)

Kile Einstellungen BibTeX (falsch)

Diese Einstellungen mussten auf die Verwendung von biber konfiguriert werden:

Kile Einstellungen BibTeX (richtig)

Kile Einstellungen BibTeX (richtig)

Zum Test habe ich folgendes Minimalbeispiel verwendet:

\documentclass[a4paper,12pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english,ngerman]{babel}
\usepackage[babel]{csquotes}
% Bibliographie
\usepackage[style=numeric,backend=biber]{biblatex}
\addbibresource{Quellen.bib}
%\usepackage[german]{varioref}
\usepackage{url}
\usepackage{hyperref}

\begin{document}
Lorem ipsum \dots
\cite[][]{key}
\printbibliography[title={Quellen:},heading=bibintoc]
\end{document}

Um das fertige Dokument zu erzeugen, wurden folgende Arbeitsschritte ausgeführt:

latex document_name.tex
biber document_name
latex document_name.tex
latex document_name.tex

Was lange währt, wird endlich gut. Nun kann ich wieder Dokumente mit ordentlichen Quellenangaben erstellen.

Certificate Pinning mit NGINX

Dieser Artikel beschreibt, was Certificate Pinning ist, wie es TLS/SSL-Verbindungen sicherer macht und wie man es für den Webserver NGINX konfiguriert.

Der Artikel steht in einer PDF-Version zum Download und Druck zur Verfügung: Certificate_Pinning_mit_NGINX

Einleitung

Um zu verstehen, wie Certificate Pinning hilft, TLS/SSL-Verbindungen sicherer zu machen, muss man sich zuerst der Schwachstelle der TLS/SSL-Verschlüsselung bewusst sein.

TLS/SSL-Verbindungen sollen die vertrauliche Kommunikation zwischen zwei Kommunikationspartnern sicherstellen. Bei den Kommunikationspartnern handelt es sich typischerweise um einen Client und einen Server. Die Sicherheit der Vertraulichkeit beruht darauf, dass der Client auch tatsächlich mit dem richtigen Server verbunden ist. Dazu weist sich der Server mit einem Zertifikat aus, welches von einer Zertifizierungsstelle (Certificate Authority, CA) ausgestellt wurde. Die Zertifizierungsstelle prüft die Identität des Dienstbetreibers und beglaubigt mit ihrer digitalen Signatur das Zertifikat.

Die c’t schreibt in ihrem Artikel „Festgenagelte Zertifikate“ in Ausgabe Nr. 23 vom 17.10.2015: „Das Problem dabei: Es gibt weit über hundert solcher Zertifizierungsstellen, denen die gängigen Internet-Programme wie Browser und E-Mail-Client vertrauen. Als wäre das nicht unübersichtlich genug, haben die dann auch noch zahllose Unter-CAs, die berechtigt und in der Lage sind, im Namen dieser CAs zu unterschreiben.“[1. Schmidt, Jürgen: Festgenagelte Zertifikate: TLS wird sicherer durch Certificate Pinning, in: c’t magazin für computer technik, Nr. 23, 17.10.2015, S. 118, Spalte 2-3.]

Das Problem besteht nun nicht in der Anzahl der Zertifizierungsstellen, sondern darin, dass jede dieser Zertifizierungsstellen Zertifikate für beliebige Domains ausstellen darf. So können sich Dritte ein Zertifikat auf eine bereits existierende Domain ausstellen lassen und dieses zum Beispiel für einen Man-In-The-Middle-Angriff (MITM-Angriff) verwenden.

Das genannte Angriffsszenario existiert nicht nur in der Theorie. Wie die c’t berichtet nutzte die chinesische Regierung gefälschte Google-Zertifikate auf ihrer großen Firewall, um den Google-Mail-Verkehr ihrer Bevölkerung überwachen zu können. Darüber hinaus werden weitere Fälle wie der Hack der niederländischen Zertifizierungsstelle DigiNotar und TrustWave aufgeführt.[2. Schmidt, Jürgen: Festgenagelte Zertifikate: TLS wird sicherer durch Certificate Pinning, in: c’t magazin für computer technik, Nr. 23, 17.10.2015, S. 119, Spalte 1.] Im ersten Fall wurden gefälschte Zertifikate für GMail und Facebook ausgestellt. Im zweiten Fall wurden Zertifikate für Firmen ausgestellt, welche diese Zertifikate nutzten, um den verschlüsselten Internet-Verkehr ihrer Mitarbeiter zu überwachen.

Die Man-In-The-Middle-Angriffe funktionieren, da die Zertifizierungsstellen, welche die gefälschten Zertifikate ausgestellt haben, in der Liste der vertrauenswürdigen Zertifizierungsstellen der gängigen Browser geführt werden. Für den Browser ist damit auch das gefälschte Zertifikat gültig. Der Benutzer kann den MITM-Angriff nicht erkennen und nimmt fälschlicherweise an direkt mit dem gewünschten Server zu kommunizieren.

Um einen MITM-Angriff erkennen zu können, muss der Client überprüfen können, ob das ihm vorliegende Zertifikat von der CA des Dienstbetreibers oder von einer anderen CA ausgestellt wurde. Hier kommt Certificate Pinning ins Spiel.

Certificate Pinning für TLS/SSL

Certificate Pinning wurde im RFC 7469 spezifiziert.[3. RFC 7469: Public Key Pinning Extension for HTTP] Es handelt sich dabei um einen Mechanismus, bestimmte Eigenschaften eines Zertifikats festzunageln. Der Browser erhält dabei mit dem Zertifikat zusätzliche Informationen, mit denen er die Authentizität des Zertifikats überprüfen kann.

In der Praxis wird dem Browser ein Hash-Wert übermittelt, welcher über den öffentlichen Schlüssel des Zertifikats gebildet wurde. Dieser Hash-Wert wird in einem HTTP-Header-Field an den Browser übertragen und von diesem gespeichert. Wie dieses Verfahren genau funktioniert, beschreibt der RFC 7469 ab Abschnitt 2.1.1[4. RFC 7469 Section 2.1. Response Header Field Syntax] Da nur der Dienstbetreiber über den dazugehörigen privaten Schlüssel verfügt, ist ein Missbrauch durch Dritte ausgeschlossen. Übermittelt nun nämlich ein Angreifer bei einem MITM-Angriff den zu seinem Zertifikat gehörenden öffentlichen Schlüssel, kann der Browser mit Hilfe des PINs erkennen, dass dieser Schlüssel nicht dem Dienstbetreiber gehört und den Angriff damit auffliegen lassen.

Eine Schwachstelle bleibt jedoch. Damit das beschriebene Verfahren funktioniert, muss die erste Verbindung, die ein Client zum Server aufbaut, integer und vertrauenswürdig sein. Findet bereits beim ersten Verbindungsaufbau ein MITM-Angriff statt, kann der Angreifer einen zu seinem öffentlichen Schlüssel passenden Hash übermitteln und das beschriebene Verfahren damit aushebeln.

Es existiert also ein gewisses Henne-Ei-Problem, welches im folgenden Abschnitt kurz angerissen wird.

TOFU: Trust On First Use

Nein, mit TOFU ist an dieser Stelle kein Nahrungsmittel gemeint. TOFU steht in diesem Kontext für das Trust-On-First-Use-Prinzip, welches die c’t in ihrem Artikel „Zertifikate festnageln“ erläutert.[5. Schmidt, Jürgen: Festgenagelte Zertifikate: TLS wird sicherer durch Certificate Pinning, in: c’t magazin für computer technik, Nr. 23, 17.10.2015, S. 121, Kasten „TOFU: Trust On First Use.]

Das darin beschriebene Henne-Ei-Problem besteht darin, dass man zuerst eine sichere Verbindung benötigt, um die erforderlichen Informationen zu erhalten, mit denen zukünftige Verbindungen gesichert werden können.

Mittlerweile sollte jedoch bekannt sein, dass es keine hundertprozentige Sicherheit gibt. Damit ist der beschriebene Schutz besser als gar keiner. In der Praxis kann Certificate Pinning daher in sehr vielen Fällen helfen, die Sicherheit vertraulicher Kommunikation zu steigern.

Certificate Pinning auf dem eigenen Server

Dieser Abschnitt beschreibt, wie man Certificate Pinning auf dem eigenen Server konfigurieren kann. Es wird dabei auf notwendige Vorüberlegungen eingegangen und die Berechnung der PINs beschrieben. Im Anschluss wird das Certificate Pinning beispielhaft an einem NGINX-Server demonstriert.

Vorüberlegungen

In den vorangegangenen Abschnitten wurde erläutert, wie Man-In-The-Middle-Angriffe durch Certificate Pinning erheblich erschwert werden können. Nun stellt sich die Frage, welchen öffentlichen Schlüssel man festnageln möchte. Denn Certificate Pinning kann auf jeden öffentlichen Schlüssel der gesamten Zertifizierungskette angewendet werden. So kommen sowohl das eigene Serverzertifikat, als auch das der Intermediate CAs und das der Root CA in Frage.[6. Schmidt, Jürgen: Sicher mit Pin: Zertifikats-Pinning auf dem eigenen Server, in: c’t magazin für computer technik, Nr. 23, 17.10.2015, S. 122, Spalte 1.]

Pinnt man den öffentlichen Schlüssel einer Intermediate CA oder gar einer Root CA, so werden alle von diesen Zertifizierungsstellen ausgestellten Zertifikate vom Browser als gültig und sicher akzeptiert. Daher erscheint es am sichersten, wenn man den öffentlichen Schlüssel des eigenen Serverzertifikats festnagelt. Hierbei muss allerdings folgendes Risiko beachtet werden.

Wird der Schlüssel durch Kompromittierung unbrauchbar, oder geht durch Hardwaredefekt verloren, können Benutzer die gesicherten Dienste eventuell nicht mehr nutzen. Denn die Browser haben den Pin gespeichert und werden vor Ablauf der Lebensdauer keinen neuen Pin akzeptieren. Die Lebensdauer kann je nach Konfiguration mehrere Wochen bis Monate betragen.[7. Schmidt, Jürgen: Sicher mit Pin: Zertifikats-Pinning auf dem eigenen Server, in: c’t magazin für computer technik, Nr. 23, 17.10.2015, S. 122, Spalte 2.]

Um das im vorigen Absatz beschriebene Risiko zu minimieren definiert RFC 7469 die zusätzliche Verwendung eines Backup-PINs. Dabei wird ein Hash-Wert über den öffentlichen Schlüssel eines Schlüsselpaares gebildet, welches aktuell noch nicht genutzt wird.[8. RFC 7469, Abschnitt 4.3. Backup Pins] Dies kann zum Beispiel dadurch erreicht werden, dass ein Hash-Wert für den öffentlichen Schlüssel eines Certificate Signing Request (CSR) generiert wird.

Der Backup-Pin wird ebenfalls über ein HTTP-Header-Feld ausgeliefert und vom Browser eines Clients gespeichert. Der erzeugte Backup-CSR sollte sicher offline aufbewahrt werden. Er kann genutzt werden, um ein neues Zertifikat für die entsprechende Domain ausstellen zu lassen. Auf diese Weise können Zertifikate verlängert bzw. erneuert werden, ohne dass der Zugriff auf die entsprechende Domain unterbrochen wird.

Backupstrategie

In diesem Abschnitt wird eine konkrete Backupstrategie für den Backup-Pin beschrieben.

Der für den Backup-Pin verwendete CSR ist sicher aufzubewahren. Denn mit ihm kann ein Zertifikat für eine Domain bzw. einen Host ausgestellt werden, welches von Clients als gültig anerkannt wird, da sie den dazugehörigen Backup-Pin gespeichert haben.

Ich persönlich speichere den CSR und den dazugehörigen privaten Schlüssel in KeePassX[9. The Official KeePassX Homepage]. Auf diese Weise werden die Informationen sicher in einer Datenbank mit einer 256 Bit AES-Verschlüsselung abgelegt. Die KeePassX-Datenbank selbst bewahre ich in einem TeamDrive[10. TeamDrive Homepage]-Space auf. Dadurch wird die Datenbank sicher auf meine Endgeräte synchronisiert, so dass die Daten auch bei Ausfall eines Endgeräts erhalten bleiben.

Die lokalen Datenträger der zur TeamDrive-Synchronisation verwendeten Endgeräte sind ebenfalls verschlüsselt. So sind die Daten im Falle eines Diebstahls eines Endgeräts gleich doppelt geschützt. Erstens durch die Verschlüsselung des lokalen Datenträgers und zweitens durch die verschlüsselte KeePassX-Datenbank.

Die PINs berechnen

Die benötigten PINs werden auf der Kommandozeile mit openssl generiert.[11. RFC 7469: Appendix A. Fingerprint Generation] Für ein existierendes SSL-Zertifikat kann der Pin mit folgendem Code erzeugt werden:

openssl x509 -noout -in certificate.pem -pubkey | openssl asn1parse -noout -inform pem -out public.key
openssl dgst -sha256 -binary public.key | openssl enc -base64

Der erzeugte Pin wird auf der Standardausgabe ausgegeben und endet immer auf das Zeichen „=“.

Für den Backup-Pin wird zunächst ein neuer Certificate Signing Request erstellt:

openssl genrsa -out example.com.key 2048
openssl req -new -key example.com.key -out example.com.csr

Über den so erzeugten Certificate Signing Request (example.com.csr) wird nun ebenfalls ein Pin mit folgendem Code erzeugt:

openssl req -noout -in example.com.csr -pubkey | openssl asn1parse -noout -inform pem -out example.com_csr.key
openssl dgst -sha256 -binary example.com_csr.key | openssl enc -base64

Der erzeugte Backup-Pin wird ebenfalls auf der Standardausgabe ausgegeben und muss ebenfalls auf das Zeichen „=“ enden.

Konfiguration von NGINX

Sind die PINs erzeugt, kann anschließend der Webserver konfiguriert werden, diese auszuliefern. Neben der Pin-Direktive[12. RFC 7469: Abschnitt 2.1.1. The Pin Directive] ist hier die Max-Age-Direktive[13. RFC 7469: Abschnitt 2.1.2. The max-age Directive] von Bedeutung. Letztere gibt die Zeit in Sekunden an, für die ein Pin durch den Browser gespeichert wird.

Für die ersten Tests sollte die Max-Age-Direktive auf wenige Minuten gesetzt werden. Dieser Wert sollte erst bei reibungslosem Betrieb auf mehrere Wochen erhöht werden.

Das zusätzliche Header-Feld muss im SSL-Block der NGINX-Konfiguration hinzugefügt werden. Dazu wird folgender Code in den SSL-Block eingefügt:

add_header Public-Key-Pins 'pin-sha256="PRIMARY-PIN"; pin-sha256="BACKUP-PIN"; max-age=300; includeSubDomains';

Dabei sind PRIMARY-PIN und BACKUP-PIN durch die entsprechenden PINs zu ersetzen. Die optionale includeSubDomains-Direktive[14. RFC 7469: Abschnitt 2.1.3. The includeSubDomains Directive] gibt an, dass die übermittelten PINs auch für alle Subdomains des Hosts gelten.

Anschließend muss die Konfiguration neue geladen werden, um diese zu aktivieren:

sudo service nginx reload

Fazit

Certificate Pinning ist ein in RFC 7469 spezifizierter Standard, welcher heute bereits von den weit verbreiteten Browsern Chrome und Firefox unterstützt wird. Auch die Konfiguration weit verbreiteter Webserver wie Apache, lighttpd und NGINX ist mit geringem Aufwand, wie hier am Beispiel von NGINX gezeigt, zu erledigen.

Lediglich die sichere Aufbewahrung des Backup-CSR ist sicherzustellen, um eine längere Nichterreichbarkeit einer Domain vermeiden zu können.

Damit ist Certificate Pinning grundsätzlich geeignet, die verschlüsselte Kommunikation im Internet noch sicherer zu machen.

Quellen:

Verzeichnisse auf Linux-Server nachträglich verschlüsseln

Auf einem entfernten Linux-Server sollen nachträglich das HOME-Verzeichnis eines Benutzers und weitere einzelne Verzeichnisse im Dateisystem verschlüsselt werden. Nach einer ersten Recherche im Internet kommen für diese Aufgabe ecryptfs, EncFS und VeraCrypt in Frage.

In diesem Artikel möchte ich mich im Folgenden näher mit der Zielstellung auseinandersetzen und die damit zusammenhängenden Fragen diskutieren. Daher freue ich mich, wenn ihr euch an der Diskussion beteiligt und weitere Informationen und Quellen zum Thema beisteuert.

Zielstellung

Es sind Verzeichnisse eines entfernten Linux-Servers zu verschlüsseln. Auf den Server kann via SSH zugegriffen werden. Bei den zu verschlüsselnden Verzeichnissen handelt es sich um das HOME-Verzeichnis eines Benutzers und um weitere Verzeichnisse innerhalb des Dateisystems, wie z.B. /var/www/sitename/data.

Mit der Verschlüsselung sollen die Verzeichnisse vor unberechtigtem Zugriff geschützt werden für den Fall,

  1. dass die Festplatten des Servers gestohlen werden.
  2. dass der Server von einem anderen Bootmedium gestartet wird, um auf das Dateisystem zuzugreifen.

Beim Start des Servers sollen die verschlüsselten Verzeichnisse eingehängt werden, so dass sie unabhängig von einer Benutzeranmeldung zur Verfügung stehen.

Fragen

Um die beschriebene Zielstellung zu erreichen, sind im Vorfeld folgende Fragen zu beantworten:

  1. Ist es mit einer der genannten Lösungen prinzipiell möglich, nachträglich Verzeichnisse eines entfernten Linux-Servers zu verschlüsseln, wenn diese Verzeichnisse bereits existieren und Daten enthalten?
  2. Ist es mit einer der genannten Lösungen möglich, die verschlüsselten Verzeichnisse nach dem Bootvorgang einzuhängen, ohne dass sich ein Benutzer dazu am Server anmelden muss?
  3. Gibt es bekannte Schwachstellen in den genannten Lösungen, die einen Einsatz obsolet erscheinen lassen?
  4. Welche Angriffsvektoren bestehen bei der in der Zielstellung beschriebenen Verschlüsselung?

Eigene Gedanken und Diskussion

Besonders was den zweiten Stichpunkt betrifft, bin ich skeptisch, ob dies überhaupt möglich ist. Denn um ein verschlüsseltes Verzeichnis entschlüsseln zu können, ist in der Regel die Eingabe von Passwort oder Passphrase erforderlich.

Bei einem Desktop-System wird meist bei Eingabe des Benutzerpassworts bei der Anmeldung der Benutzer-Keyring entsperrt, in dem sich die Passphrase zum Entschlüsseln des Verzeichnisses befindet.

Es leuchtet ja auch ein, dass ein Schlüssel bzw. eine Passphrase nicht aus einem verschlüsselten Bereich geladen werden kann. Daher glaube ich nicht, dass sich oben beschriebenes Vorhaben umsetzen lässt.

Was ist eure Meinung dazu? Habt ihr vielleicht andere Ideen, wie oben genannte Anforderungen erfüllt werden können?

Mauszeiger in rdesktop-Sitzung auf Windows Server 2012 R2 wieder sichtbar machen

Zur Administation von Windows-Servern unter Linux/Unix verwende ich das Programm „rdesktop“. Beim Zugriff auf Hosts mit dem Betriebssystem Windows Server 2012 R2 musste ich feststellen, dass der Mauszeiger in der RDP-Sitzung nicht mehr zu sehen war. Er nahm automatisch die Farbe des Hintergrunds an.

Bevor ich wahnsinnig wurde, fand zum Glück ein Kollege die folgende Lösung für dieses Problem:

Auf dem jeweiligen Windows-Server ist der Mausschatten zu deaktivieren. Die dazugehörige Einstellung findet man in der Systemsteuerung unter Hardware -> Maus -> Registerkarte Zeiger. Anschließend sieht man den Mauszeiger wieder und die Administration geht einem deutlich leichter von der Hand.

WLAN-Stick am Raspberry Pi einrichten

Dies wird eine Notiz zu meiner persönlichen Erinnerung. Obwohl ich schon lange mit dem Pi arbeite, hatte ich erst jetzt Gelegenheit, ihn auch mittels eines Wifi-USB-Sticks mit einem WLAN zu verbinden.

Dazu bin ich der Anleitung von datenreise gefolgt, welche auch für den mir zur Verfügung stehenden Adapter von CSL funktioniert.

Anleitung: datenreise – Raspberry Pi – WLAN einrichten (Edimax)