Springe zum Hauptinhalt

Bin "offiziell" Entdecker einer Sicherheitslücke

/images/2016/mat.png

Anfang des jahres habe ich eine Sicherheitslücke im Programm „Metadata Anonymisation Toolkit“ (kurz: MAT) entdeckt. Diese wurde nun endlich in Form eines „Security Advisory“ von Debian gewürdigt und hat dort Nummer DSA-3708 bekommen. Und mir wurde die Entdeckung der Lücke zugeschrieben :-)

Mehr zu MAT und der Lücke beschreibt der Blogeintrag von Digitalourage.

Der Anlass ist aber traurig: Der Entwickler von MAT hat die fehlerhafte PDF-Säuberungsfunktion nicht etwa repariert, sondern komplett entfernt. Anschließend hat er sich aus gesundheitlichen Gründen von diesem Projekt verabschiedet.

Wer in Python programmieren kann, Lust und Zeit hat, ist herzliche eingeladen das Problem beheben. Das ist nicht einmal so schwer: Mittels des Python-Moduls PyPDF2 das PDF laden, alle enthaltenen Bilder speichern, mit der bereits bestehenden Funktion von MAT bereinigen, das Bild dann durch die bereinigte Funktion ersetzten und das PDF wieder speichern.

K-9 mail statt Apps der Mailprovider

Etwas tun gegen Überwachung: Mailprogramm auf dem Smartphone

Die „kostenlos“ Mailprovider web.de, gmx, yahoo und wie sie alle heißen, bieten für Smartphones eigene Apps. Damit bekommt man ein buntes Icon auf dem Startbildschirm  und bequemen Zugriff auf sein Mailpostfach dort. Was sonst noch drin ist, weiß niemand. Zumindest die App von Yahoo möchte den Standort abfragen. Nachtigall ich hör dich trapsen!

Dabei gibt es eine tolle Alternative, die zudem Freie Software ist: K-9 Mail.

Wenn Sie, wie ich, Mail-Konten bei mehreren Providern haben, können Sie die in K-9 Mail gemeinsam verwalten. Sie können sogar die "Posteingang"-Ordner der Mail-Konten in einem  gemeinsamen Posteingang anzeigen lassen. Wer viele Mails bearbeiten muss oder viele Ordner angelegt hat kann die in K9 zügig bearbeiten.

Sie müssen also – anders als bei den Apps der Provider – nicht mehrere Apps durchsuchen, auf dem Startbildschirm ist ein einziges Icon und die behalten die Kontrolle.

K-9 Mail gibt es in F-droid, dem App Store für Freie Software, oder im Gockel Store. Falls Sie F-droid noch nicht nutzen: Wikipedia hat einen Artikel zu F-droid und Digitalcourage erklärt, weshalb Sie F-droid nutzen sollten und wie die es einrichten.

Das Fass ist voll: Gründe, Linux' ‚systemd‘ zu meiden

Meine positive Meinung zu ‚systemd‘ muss ich leider revidieren.

Ursprünglich dachte ich, ‚systemd‘ bringt Linux voran. Ein neues ‚init‘-System war lange fällig. Nachdem ‚systemd‘ aber mehr und immer mehr Features bekommen hat, wurde mir schummrig.

Vor einige Wochen hatte ich dann entdeckt, dass der ‚systemd-timed‘ standardmäßig die Zeit-Server von Google fragt. Ich möchte aber nicht, dass alle meine Systeme ständig mit Google in Kontakt treten! Der „Fix“ dafür war auch bemerkenswert halbherzig: Die Macher einer Linux-Distribution bekommen nun zwar eine Warnung, wenn Sie keine eigenen Zeit-Server angeben, aber ‚systemd-timed‘ benutzt dann munter einfach die von Goolge. Und die Warnung geht in hunderten von Log-Meldungen sowieso unter.

Das spricht nicht dafür, dass die Programmieren von ‚systemd‘ sensibel für Datenschutz sind – und auch nicht für die Qualität ihrer Software sprechen solche halbherzige Lösungen nicht.

Nun habe ich einen Blogeintrag von Andrew Ayer entdeckt ("How to Crash Systemd in One Tweet"), der das Fass voll macht. Der Autor beschreibt nicht nur einen Fehler, sondern auch, wie ‚systemd‘ systematisch gegen best-practices der IT-Sicherheit und ‚good coding practices“ verstößt. Außerdem bekommt ‚systemd‘ immer mehr Features, die ein ‚init‘-System gar nicht braucht. Beispielsweise eben diesen ‚timed‘ - das gehört nicht in zum ‚Initialisieren‘ eines System. dafür gibt es eigene Software, die das seit langem und besser kann. Das ‚init‘-System muss allenfalls dafür sorgen, dass diese Software läuft.

Aber der Blogeintrag hat noch schlimmere Beispiele: ‚systemd’ bringt einen sogenannten DNS-Resolver mit, der Fehler enthält, die schon vor acht Jahren für sehr, viel Aufregung gesorgt haben und mit großer Anstrengung bei allen DNS-Resolvern behoben wurden.

Mich beschleicht das Gefühl, das den Programmierern von ‚systemd‘ der Erfolg zur Nase gestiegen ist und sie sich für unfehlbar halten. Das kann nur schief gehen.

Petition gegen das BND-Gesetz

Reporter ohne Grenzen haben eine Petition gegen das BND- Gesetz online. „Wir fordern, dass der deutsche Bundestag Schutzpflichten für Journalisten und andere Berufsgeheimnisträger (…) ins neue BND-Gesetz aufnimmt. Damit dürfte der BND nur im Ausnahmefall Journalisten überwachen (…) Im Oktober oder November soll das Gesetz verabschiedet werden und bereits am 1. Januar 2017 in Kraft treten.“

Reporter ohne Grenzen haben eine Petition gegen das BND-Gesetz online. „Wir fordern, dass der deutsche Bundestag Schutzpflichten für Journalisten und andere Berufsgeheimnisträger (…) ins neue BND-Gesetz aufnimmt. Damit dürfte der BND nur im Ausnahmefall Journalisten überwachen (…) Im Oktober oder November soll das Gesetz verabschiedet werden und bereits am 1. Januar 2017 in Kraft treten.“

URL: https://www.reporter-ohne-grenzen.de/mitmachen/petition-bnd-de/

Totgeburt Volksverschlüsselung

Ich halte von der Volksverschlüsselung nichts, sie ist eine Totgeburt, weil viel zu kompliziert und wieder zentralistisch. Ich hatte eine ganze Reihe von Argumente dagegen gesammelt, aber die beste Zusammenfassung fand ich in den Secorvo Security News 07/2016:

Die Volksverschlüsselungs-Software, die die Fraunhofer Gesellschaft mit Unterstützung der Deutschen Telekom am 29.06.2016 in der aktuellen Version zum Download bereit gestellt hat, um Ende-zu-Ende E-Mail-Verschlüsselung auf Grundlage von S/MIME und PGP mit kostenlosen Zertifikaten für private Endanwender tauglich zu machen, ist gar keine Verschlüsselungslösung – sie kümmert sich allein um die Erzeugung und Einbindung des Public-Private-Schlüsselpaars.

Keine ganz neue Idee: Schon Anfang der 2000er Jahre hatte TC Trustcenter kostenlose S/MIME- und PGP-Zertifikate für Privatnutzer im Angebot.

Vor allem aber kombiniert sie die Nachteile offener und geschlossener PKIs: den aufwändigen Registrierungsprozess einer jedermann offenstehenden PKI mit der Beschränkung auf „mitspielende“ Kommunikationspartner wie bei einer geschlossenen PKI.

Vielleicht sollte man lieber die vereinfachte Benutzerschnittstelle der Open-Source Volksverschlüsselungs-App mit einem Open-Source E-Mail-Client wie bspw. Thunderbird kombinieren – und auf die ebenfalls kostenlosen E-Mail-Zertifikate öffentlicher Trust Center wie Comodo oder StartCom zurückgreifen

Um Verschlüsselung in die Breite zu tragen, ist die Volksverschlüsselung also ungeeignet.

Die in meinen Augen richtige Lösung heißt p≡p (Pretty Easy Privacy), das jetzt endlich öffentlich verfügbar ist. Was pEp will und kann erklärt sehr gut die 10-Minuten-Zusammenfassung eines Vortrags von Volker Birk, dem Kopf hinter pEp. Zu pEp werde ich bald mehr schreiben.

Falls Sie eine Diskussions-Veranstaltung zu diesem Thema planen, laden Sie mich doch ein. Ich bin gerne bereit, meine Position fundiert zu vertreten.

Warum Sie nicht Perl programmiern sollten

Ein Freund hatte angekündigt, es wolle jetzt "richtig" Perl lernen. Ich rat ihm dringend davon ab. Hier, was ich ihm geschrieben habe:

Lieber Freund

es lässt mir keine Ruhe, dass Du Deine Lebenszeit mit so schlechten Dingen wie Perl vertun möchtest.

Ich hab schon mit einigen Programmiersprachen gearbeitet und mir viele angesehen. Perl ist eine der schlechtesten! Perl versagt bei der wichtigen Aufgabe, dem Programmierer zu unterstützen. Im Gegenteil: Perl steckt voll Fallstricke und Undurchdachtem.

Ein paar Beispiele:

Der Rückgabewert vieler Standard-Funktionen hängt vom Aufrufkontext ab. Mal ein Scalar, mal ein Hash, mal ein Objekt.

Durch automatische Typumwandlung fällt man immer wieder auf die Schnauze. Statt der Liste oder dem Hash hast du plötzlich die Anzahl der Elemente darin - oder war es der höchste Index? Damit musst du aber auch denn wissen, was eine Funktion liefert, wenn dich der Wert überhaupt nicht interessiert und du ihn nur an eine andere Funktion weiterreichen willst.

Übergeben von Parametern an Funktionen t eine Krankheit, alles muss der Programmierer selbst schreiben:

  • Die Parameter einer Funktion werden als dumme Liste übergeben, man muss sie selbst den einzelnen Variablen zuweisen. Welche Parameter die Funktion annimmt, *kann* man in einem Prototype festlegen, aber trotzdem muss man die Liste der Argumente weiterhin händisch auswerten.

  • "Named parameter" muss man komplett händisch implementieren, siehe das Beispiel in http://docstore.mik.ua/orelly/perl/cookbook/ch10_08.htm. Wenn der Nutzer der Funktion dann zu viele oder unbekannte Parameter übergibt, gibt es keine Fehlermeldung -- außer der Programmierer hat das extra programmiert. Doppelte Parameter werden dabei gar nicht erkannt.

Dinge die eigentlich der Normalfall sind, muss man ausdrücklich hinschreiben und der Normallfall ist das, was man nur selten will:

  • Dinge, die man eigentlich immer braucht, um sauber zu programmieren muss man extra einschalten: use strict, user warnings.

  • Unausgereiftes Scope-Konzept: Der Normalfall ist eigentlich, dass man lokale Variablen nutzen möchte. Auch hier muss man den Standard Fall wieder mit „my“ angeben.

Eine Klasse zu definieren ist ein religiöser Akt ("bless") und insgesamt umständlich. Es scheint zwar ein Modul zu geben, dass das besser macht, aber da sind wir wieder bei: "einfaches ist umständlich".

  • Zitat vom "perlmaster" aus dem aktuellen Linux-Magazin (8/2016, S. 92): "… niemand, der einigermaßen bei Verstand ist, hätte auch nur in einem mittelgroßen Programm die zu Klassen gestempelten Hashstruktuen […] verwendet."

Das Modulkonzept ist der Sprache aufgepfropft.

Die gesamte Syntax ist unübersichtlich, es gibt keine EBNF o.ä. der Grammatik, "only perl can parse Perl". Für alles Mögliche gibt es eigene Syntax-Konstrukte, die aber keine wirklichen Vorteile bringen. Man merkt, dass Larry Wall Sprachwissenschaftler ist und keine Ahnung von Programmiersprachen hat. Das Ganze ist zusammengestöpselt aus alten Unix-Tools, und so schaut es auch aus.

Kein Exception-Handling, dadurch muss man eval() benutzen, wenn man Fehler abfangen will. Wenn Du einmal erkannt hast, wie elegant man Programmieren kann, wenn es Exception-Handling gibt, möchtest Du es nicht mehr missen. Der Clou ist nämlich, dass man nicht bei jeder Funktion eine Fehlermeldung zurückgeben muss und nicht bei jedem Funktionsaufruf auf Fehler prüfen muss.

Nachgestellte Kontrollstrukturen – lassen sich super einfach lesen.

Ständig muss man kryptische Zeichen vor den Variablennamen schreiben, teilweise mehrere. Was ich mich damit abgekämpft habe.

Ich habe auch ein halbes Jahr mit Perl programmiert. Das war die unproduktivste Zeit meines Lebens. Zum Glück habe ich dann Python entdeckt, siehe auch die ca. 20 Zeilen des "Zen of Python" [1],[2]. Ich spare es mir, aufzuzeigen, dass alle oben genannten Punkte in Python besser gelöst sind, aber zu Parametern empfehle ich einen Blick auf http://www.diveintopython.net/power_of_introspection/optional_arguments.html

Lieben Gruß
Hartmut

Get current locale with Ansible

I just had the problem to get the currently set locate using ansible. This is non-trivial, since one has to consider four environment variables: LC_ALL, LC_MESSAGES (or another one), and LANG. For details see the Locale Categories documentation.

Now here is the solution, included into an ansible playbook:

# -*- indent-tabs-mode: nil -*-
---

- hosts: all
  become: yes
  gather_facts: false

  vars:

   env1:
     LC_ALL: "de_DE.UTF-8"
     LC_MESSAGES: "de_AT.UTF-8"
     LANG: "de_CH.UTF-8"

   env2:
     LC_MESSAGES: "de_AT.UTF-8"
     LANG: "de_CH.UTF-8"

   env3:
     LANG: "de_CH.UTF-8"

   env4:
     empty: empty


   davical_default_locale: '{{ (ansible_env.LC_ALL|d(ansible_env.LC_MESSAGES)|d(ansible_env.LANG)|d("en")).split(".",1)[0] }}'

  tasks:

  - set_fact:
      ansible_env: '{{ env1 }}'
  - debug: var=davical_default_locale

  - set_fact:
      ansible_env: '{{ env2 }}'
  - debug: var=davical_default_locale

  - set_fact:
      ansible_env: '{{ env3 }}'
  - debug: var=davical_default_locale

  - set_fact:
      ansible_env: '{{ env4 }}'
  - debug: var=davical_default_locale

Verschlüsselte Mailingslisten

Für ein NGO habe ich recherchiert, welche Möglichkeiten es gibt, Mailinglisten zu verschlüsseln.

/images/2015/mailman-logo.jpg

Zum Verwalten der Mailinglisten verwendet das NGO Mailman 2 – eines der weitest verbreitetsten und besten Programme hierfür.

Hierbei gibt es grundsätzlich zwei Möglichkeiten:

  1. Alle Abonnenten bekommen den privaten Schlüssel der Mailingliste

  2. Ein sogenannter Patch für die Mailinglisten-Software

In beiden fällen wird ein GPG-Schlüssel auf die auf Adresse der Mailingliste ausgestellt.

Alle Abonnenten bekommen den privaten Schlüssel der Mailingliste

zu 1): So wie jede.r Abonnent.in einen eigenen GPG-Schlüssel erstellt, erstellen wir einen auf die Adresse der Mailingliste. Wenn wir an die Liste schreiben, werden die Mails für diesem Empfänger verschlüsselt. Damit jede.r Abonnent.in die Mails dann entschlüsseln kann, bekommt sie/er den privaten Teil des Schlüssels.

Das widerspricht zwar der "reinen Lehre", wie mit privaten Schlüsseln umzugehen ist, kann für viel Anwendungsfälle aber völlig okay sein.

Der Nachteil dieser Lösung ist, dass sie nicht skaliert. Sprich: Für einen kleinen Empfängerkreis mit geringer Fluktuation funktioniert das. Aber für größere Gruppen wird es schwierig.

Ein sogenannter Patch für die Mailinglisten-Software

zu 2)  Für Mailman gibt es einen Patch, also eine eine kleinere Softwarekorrektur, die Mailman Unterstützung für GPG- und S/MIME-verschlüsselte Mails beibringt

Auch hier würden ein GPG-Schlüssel auf die Adresse der Mailingliste ausgestellt. aber der private Teil würde nicht verteilt sondern bliebe auf dem Mailinglisten-Server. Dort würden für jede.n Abonnent.in deren öffentlichen Schlüssel abgelegt werden. Mailman würde dann die Mails entschlüsseln und für alle Abonnentinnen verschlüsseln.

Vorteil dieser Lösung wäre, dass sie skaliert, also auch für Mailinglisten mit hoher Fluktuation oder vielen Abonnentinnen praktikabel wäre.

Nachteil ist, dass Admins sich gerne weigern diesen Patch zu installieren - oder die Mailinglisten werden von einem Dienstleister betrieben, den man nicht davon überzeugen kann.

Vortrag "Digitalen Selbstverteidigung für Unternehmen"

Am 21. Oktober 2015, 18 Uhr im Wirtschaftsrathaus, Theresienstraße 9, 90403 Nürnberg.

Wer auf der it-sa nicht dabei sein konnte: Im Rahmen Security Angels halte ich meinen neuen Vortrag "Digitalen Selbstverteidigung für Unternehmen" – diesmal in der  Langfassung.

Veranstalter sind der NIK e.V., die IHK und die Stadt Nürnberg.

Die Teilnahme ist kostenlos. Anmeldung und weitere Infos unter http://www.nik-nbg.de/veranstaltung/digitalen-selbstverteidigung-fuer-unternehmen/

Portrait von Hartmut Goebel
Hartmut Goebel
Diplom-Informatiker, CISSP, CSSLP, ISO 27001 Lead Implementer

Haben Sie noch Fragen?
Anruf oder Mail genügt:
Telefon:   +49 871 6606-318
Mobil:   +49 175 29 78 072
E-Mail:   h.goebel@goebel-consult.de