ADMIN

2021

03

2021-03-01T12:00:00

IT-Automatisierung

PRAXIS

056

Sicherheit

Open-Source-Tipp

Tool

Application Whitelisting mit fapolicyd

Handverlesen

von Thorsten Scherf

Veröffentlicht in Ausgabe 03/2021 - PRAXIS

Die Integrität eines IT-Systems dauerhaft sicherzustellen, ist sicherlich eine der größten Herausforderungen beim Erstellen von Security-Richtlinien. Der Einsatz klassischer File-Integrity-Monitoring-Software reicht hierfür schon lange nicht mehr aus. Stattdessen müssen sich Sicherheitsexperten heutzutage mit Application Whitelisting auseinandersetzen. Der Beitrag stellt mit fapolicyd ein hierfür passendes Tool vor.

Die Sicherheit von Informationssystemen ist von vielen unterschiedlichen Faktoren abhängig. Das IT-Grundschutz-Kompendium des Bundesamtes für Sicherheit in der Informationstechnik (BSI) führt eine Vielzahl von Bausteinen auf, die zusammengenommen die Sicherheit einer IT-Landschaft bestimmen. Das Kapitel OPS.1.1.4 des Kompendiums, Schutz vor Schadprogrammen [1], zeigt so unter anderem, wie Administratoren die Integrität ihrer Systeme vor Schadsoftware schützen können.
Application Black- und Whitelisting
Um Schadsoftware von einem System fernzuhalten, gibt es grundsätzlich unterschiedliche Methoden. Zum Beispiel können Sie Buch über sämtliche Software führen, die Sie auf Ihren Rechnern nicht sehen wollen, was als Blacklisting bezeichnet wird. Oder aber Sie nennen explizit die Anwendungen, die Sie zuvor autorisiert haben, in diesem Fall ist die Rede von Whitelisting.
Anti-Virus-Software verwendet primär die erste Methode, um den Virusbefall anhand von bekannten Mustern festzumachen. Der zweite Ansatz kommt beim Festlegen einer Baseline zum Einsatz. Das System schlägt erst dann Alarm, wenn es eine Differenz zu der Baseline erkennt. Also beispielsweise wenn ein Programm ausgeführt werden soll, das in der Baseline entweder gar nicht oder mit einer anderen Prüfsumme hinterlegt wurde.
Die Sicherheit von Informationssystemen ist von vielen unterschiedlichen Faktoren abhängig. Das IT-Grundschutz-Kompendium des Bundesamtes für Sicherheit in der Informationstechnik (BSI) führt eine Vielzahl von Bausteinen auf, die zusammengenommen die Sicherheit einer IT-Landschaft bestimmen. Das Kapitel OPS.1.1.4 des Kompendiums, Schutz vor Schadprogrammen [1], zeigt so unter anderem, wie Administratoren die Integrität ihrer Systeme vor Schadsoftware schützen können.
Application Black- und Whitelisting
Um Schadsoftware von einem System fernzuhalten, gibt es grundsätzlich unterschiedliche Methoden. Zum Beispiel können Sie Buch über sämtliche Software führen, die Sie auf Ihren Rechnern nicht sehen wollen, was als Blacklisting bezeichnet wird. Oder aber Sie nennen explizit die Anwendungen, die Sie zuvor autorisiert haben, in diesem Fall ist die Rede von Whitelisting.
Anti-Virus-Software verwendet primär die erste Methode, um den Virusbefall anhand von bekannten Mustern festzumachen. Der zweite Ansatz kommt beim Festlegen einer Baseline zum Einsatz. Das System schlägt erst dann Alarm, wenn es eine Differenz zu der Baseline erkennt. Also beispielsweise wenn ein Programm ausgeführt werden soll, das in der Baseline entweder gar nicht oder mit einer anderen Prüfsumme hinterlegt wurde.
In diesem Beitrag beschäftigen wir uns mit Application Whitelisting. Bis vor wenigen Jahren kam für diesen Zweck Software zum Einsatz, um einen Snapshot vom einem System anzufertigen und den Ist-Zustand in regelmäßigen Abständen mit dem Snapshot abzugleichen. War eine Differenz vorhanden, deutete dies auf Änderungen hin und der Administrator musste entscheiden, ob es sich um autorisierte oder nicht-autorisierte Änderungen handelte. Bekannte Softwarepakete in dieser Kategorie sind beispielsweise Tripwire [2] oder auch AIDE [3].
File-Integrity-Monitoring-Tools wie Tripwire und AIDE oder auch andere Werkzeuge dieser Kategorie reichen heutzutage allerdings nicht mehr aus, um auf aktuelle Angriffsvektoren zu reagieren. Denken Sie beispielsweise nur an die Meltdown- und Spectre-Angriffe [4] aus dem Jahr 2018. Bei diesen Sicherheitslücken konnten Angreifer sensitive Daten aus dem Speicher eines Systems auslesen, ohne ein einzelnes Programm modifizieren zu müssen. Stattdessen nutzten sie Schwachstellen auf Hardware-Ebene aus, um den gewünschten Schadcode zum Auslesen der Daten auszuführen.
File Access Policy Daemon
Neben vielen kommerziellen Angeboten steht mit fapolicyd (File Access Policy Daemon) [5] ein recht neues Open-Source-Tool für das Application Whitelisting zur Verfügung. Auf Basis von sogenannten trusted sources, also vertrauenswürdigen Quellen, definieren Sie mit fapolicyd, welcher Code auf einem System ausgeführt werden darf. Der Daemon stuft hierfür alle Dateien, die mithilfe des lokalen Paketmanagers installiert wurden, als vertrauenswürdig ein und erzeugt für diese einen Eintrag in der LMDB (Lightning Memory-Mapped Database), die im Verzeichnis "/var/lib/fapolicyd/" liegt. Neben dem Dateipfad speichert die Datenbank auch die Hash-Summe und den Mime-Type.
Von Haus aus bietet fapoliycd ein Plug-in für den dnf/yum-Paketmanager an, sodass der Daemon bei der Installation von neuen Paketen für diese einen Datenbankeintrag anlegt. Allerdings existiert auch eine API, mit deren Hilfe sich beliebige Quellen als trusted sources definieren lassen. An dieser Stelle sei angemerkt, dass natürlich lediglich Pakete von vertrauenswürdigen Anbietern zu installieren sind. Tools wie DNF, Yum oder RPM bieten die Möglichkeit, die Signatur eines Pakets zu überprüfen, um es erst nach erfolgreicher Verifizierung zu installieren. Dazu muss das System entsprechend konfiguriert sein [6].
Konfiguration und Regelwerk
Die Konfiguration des Daemons erfolgt über die Dateien im Verzeichnis "/etc/fapolicyd/". Mithilfe der fapolicyd.conf-Datei definieren Sie grundlegende Einstellungen für den Daemon selbst, also beispielsweise, welche trusted sources auf dem System existieren dürfen. Wenn Sie Programme unabhängig von Ihrem Paketmanager installieren möchten, können Sie diese in die Datei "fapolicyd.trust" eintragen. Der Daemon betrachtet sie dann ebenfalls als vertrauenswürdig und nimmt sie in die zuvor genannte LMDB auf.
Des Weiteren existiert eine Vielzahl an Optionen, mit denen sich die Performance des Dienstes beeinflussen lässt. Dies ist nicht ganz unwichtig, da schließlich bei jeder Ausführung eines Programms zuerst eine Anfrage an fapolicyd geht, ob es sich hierbei um ein autorisiertes Programm aus einer vertrauenswürdigen Quelle handelt.
Um die Abfragen zu beschleunigen, können Sie in fapolicyd.conf die Größe eines Caches bestimmen, der die Zugriffsentscheidungen von fapolicyd im Speicher vorhält. Somit ist nicht für jede neue Ausführung eines Programms eine Abfrage der Datenbank notwendig.
Die eigentlichen Regeln, die der Daemon verwendet, befinden sich in der Datei "fapolicyd.rules". Sie sorgen dafür, dass nur Programme ausgeführt werden dürfen, die sich in der fapoliycd-Trust-Datenbank befinden. An dieser Stelle können Sie auch einzelne Interpreter für das Ausführen von Skripten erlauben.
Für die genaue Syntax der Regeln werfen Sie einen Blick auf die Dokumentation mittels der Eingabe man fapolicyd.rules. Eine komplette Liste aller Regeln erhalten Sie mithilfe des folgenden Befehls:
fapolicyd-cli --list
Die Konfiguration des Daemons erfolgt über die Datei "fapolicy.conf". Der Aufruf von fapolicy-cli --list gibt den Inhalt von "fapolicyd.rules" aus.
File Access Daemon einsetzen
Das fapolicyd-Tool installieren Sie entweder aus dem Repository Ihrer Distribution oder laden die Quellen von [5] herunter. Das folgende Beispiel demonstriert die Funktionsweise des Daemons auf einem Fedora-33-System. Nachdem Sie das passende Paket mithilfe der Befehle
dnf install fapolicyd
 
systemctl enable --now fapolicyd
installiert und aktiviert haben, erzeugt fapolicyd direkt eine LMDB-Datenbank anhand der installierten RPM-Pakete. Wenn Sie nun eine ausführbare Datei in das "/tmp-Verzeichnis" kopieren und versuchen diese als regulärer Benutzer zu starten:
cp /bin/ls /tmp
 
/tmp/ls
erhalten Sie die Ausgabe "Operation not permitted", da die Datei als nicht vertrauenswürdig gilt. Fügen Sie diese aber wie folgt der "fapolicyd.trusted"-Datei hinzu und melden es dem Daemon, wird die Ausführung beim nächsten Versuch erfolgreich sein:
fapolicyd-cli --file add /tmp/ls
 
fapolicyd-cli --update
 
/tmp/ls && echo $?
Die Ausgabe "0" bestätigt dies.
Verwenden Sie auf dem System zudem den Audit-Daemon, erzeugt fapolicyd für jede nicht autorisierte Programmausführung ein Deny-Event, das Sie mit dem Befehl ausearch -m fanotify -ts recent auslesen können.
Fazit
Mithilfe von fapolicyd können Sie ein Whitelisting von vertrauenswürdigen Programmen und Skript-Interpretern erzeugen. Die Standard-Policy verbietet das Ausführen von Programmen, die fapolicyd nicht in seiner Trust-Datenbank aufgeführt hat. Sollte bereits ein nicht-autorisierter Zugriff auf Ihr System erfolgt sein, lässt sich somit auch sicherstellen, dass der Angreifer seine Rechte nicht ausweiten kann.
Das Nachladen von zusätzlicher Schadsoftware oder anderen Tools ist nämlich nicht möglich. Allerdings ist dieser Schutz nicht gegeben, wenn ein Angreifer bereits über Root-Rechte auf einem betroffenen System verfügt. In diesem Fall kann er fapolicyd komplett abschalten oder beliebige Modifikationen an der Trust-Datenbank oder der Policy vornehmen.
(jm)
Link-Codes
[4] Meltdown und Spectre: https://meltdownattack.com/