{"id":3826,"date":"2024-04-08T07:00:00","date_gmt":"2024-04-08T06:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3826"},"modified":"2024-03-30T14:10:39","modified_gmt":"2024-03-30T13:10:39","slug":"proof-of-concept-mit-ansible-das-advanced-intrusion-detection-environment-aide-steuern","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/proof-of-concept-mit-ansible-das-advanced-intrusion-detection-environment-aide-steuern\/","title":{"rendered":"Proof of Concept: Mit Ansible das Advanced Intrusion Detection Environment (AIDE) steuern"},"content":{"rendered":"\n<p>Dies ist der Folgeartikel, den ich in der <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/einfuehrung-in-das-advanced-intrusion-detection-environment-aide\/\">Einf\u00fchrung in das Advanced Intrusion Detection Environment (AIDE)<\/a> versprochen hatte. Es handelt sich hierbei um einen Proof of Concept (PoC), der zeigt, wie AIDE mithilfe einer Ansible-Rolle ferngesteuert werden kann. Die Einf\u00fchrung wird als bekannt vorausgesetzt.<\/p>\n\n\n\n<p>Grundlegende Ansible-Kenntnisse, wie die Verwendung von Ansible-Rollen und das Ausf\u00fchren von Playbooks werden ebenfalls als bekannt vorausgesetzt. Wer Ansible nicht kennt, sei an die <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/index.html\">offizielle Dokumentation<\/a> verwiesen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Welche Aufgaben sind mit Ansible zu l\u00f6sen?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Das Paket <code>aide<\/code> ist auf den Zielsystemen installiert<\/li>\n\n\n\n<li>Die optionale Generierung und Verteilung der Konfigurationsdatei <code>aide.conf<\/code><\/li>\n\n\n\n<li>Die Initialisierung der AIDE-Datenbank<\/li>\n\n\n\n<li>Zentrale Speicherung der AIDE-Datenbanken aller verwalteter Hosts auf dem Ansible Control Node (ACN)<\/li>\n\n\n\n<li>Durchf\u00fchrung von Integrit\u00e4ts-Checks<\/li>\n\n\n\n<li>Aktualisierung der AIDE-Datenbanken und erneute Speicherung auf dem ACN<\/li>\n<\/ul>\n\n\n\n<p>Durch die Speicherung der AIDE-Datenbanken und -Konfigurationsdateien auf dem ACN sind diese gegen Ver\u00e4nderung auf einem kompromittierten Host gesch\u00fctzt. Gegen Ver\u00e4nderungen auf dem ACN selbst sind die Dateien nur mit Unix-Dateiberechtigungen gesch\u00fctzt. Doch wenn der ACN kompromittiert ist, hat man eh ein ganz anderes Problem, als sich um AIDE Sorgen zu machen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Labor-Umgebung<\/h2>\n\n\n\n<p>Meine Labor-Umgebung f\u00fcr diesen PoC besteht aus den vier Hosts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ansible-ctrl (RHEL 8 mit installiertem <code>ansible-core<\/code>)<\/li>\n\n\n\n<li>rhel7<\/li>\n\n\n\n<li>rhel8<\/li>\n\n\n\n<li>rhel9<\/li>\n<\/ul>\n\n\n\n<p>Der ACN kann sich via SSH zu den Zielsystemen (rhel{7,8,9}) verbinden und dort Programmcode mit erh\u00f6hten Rechten ausf\u00fchren.<\/p>\n\n\n\n<p>Die von mir f\u00fcr diesen PoC entwickelte Ansible-Rolle gibt es unter der URL: <a href=\"https:\/\/github.com\/Tronde\/aide\">https:\/\/github.com\/Tronde\/aide<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"beschreibung-aide\">Beschreibung der Ansible-Rolle <em>aide<\/em><\/h2>\n\n\n\n<p>Die Rolle ist nicht idempotent. Sie ruft das Programm <code>aide<\/code> auf den Zielsystemen mit verschiedenen Optionen auf und verarbeitet deren Ausgabe. Dazu macht die Rolle Gebrauch des Moduls <code>ansible.builtin.command<\/code>.<\/p>\n\n\n\n<p>Gesteuert wird die Rolle \u00fcber <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/playbook_guide\/playbooks_tags.html\">Ansible-Tags<\/a>. Wird die Rolle in einem Playbook ohne Angabe von Tags ausgef\u00fchrt, werden keinerlei Ver\u00e4nderungen an den Zielsystemen vorgenommen.<\/p>\n\n\n\n<p>Der folgende Code-Block zeigt ein Beispiel-Playbook zum Aufruf der Rolle. Die Tags und die Variable <code>aide_db_fetch_dir<\/code> werden im Anschluss erl\u00e4utert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># SPDX-License-Identifier: MIT\n---\n- name: Example aide role invocation\n  hosts: targets\n  tasks:\n    - name: Include role aide\n      tags:\n        - install\n        - generate_config\n        - init\n        - check\n        - update\n      vars:\n        aide_db_fetch_dir: files\n      ansible.builtin.include_role:\n        name: aide<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>install<\/strong> &#8211; Bei Angabe dieses Tags stellt die Rolle sicher, dass das Paket <code>aide<\/code> auf den Zielsystemen installiert ist<\/li>\n\n\n\n<li><strong>generate_config<\/strong> &#8211; Generiert die Datei <code>\/etc\/aide.conf<\/code> unter Nutzung von <code>templates\/aide.conf.j2<\/code>; das Template ist an die individuellen Bed\u00fcrfnisse anzupassen; Details siehe n\u00e4chster Abschnitt<\/li>\n\n\n\n<li><strong>init<\/strong> &#8211; Hiermit wird die AIDE-Datenbank initialisiert, welche als Referenzdatenbank f\u00fcr zuk\u00fcnftige Checks dient<\/li>\n\n\n\n<li><strong>check<\/strong> &#8211; F\u00fchrt einen Integrit\u00e4ts-Check unter Verwendung der Referenzdatenbank durch<\/li>\n\n\n\n<li><strong>update<\/strong> &#8211; F\u00fchrt einen Integrit\u00e4ts-Check durch und erzeugt eine neue AIDE-Datenbank, welche zuk\u00fcnftig als Referenz dient<\/li>\n<\/ul>\n\n\n\n<p>Die Variable <code>aide_db_fetch_dir<\/code> erwartet im Auslieferungszustand das Verzeichnis <code>files<\/code> parallel zum Playbook. In diesem Verzeichnis werden Unterverzeichnisse f\u00fcr jeden Host erstellt, in denen die AIDE-Datenbank der verwalteten Systeme gespeichert wird. Soll ein anderer Speicherort verwendet werden, ist der Wert dieser Variablen entsprechend anzupassen. Die AIDE-Datenbanken werden mit dem Ansible-Module <code><a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/collections\/ansible\/builtin\/fetch_module.html\">ansible.builtin.fetch<\/a><\/code> von den verwalteten Systemen geholt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nutzung f\u00fcr die verschiedenen Anwendungsf\u00e4lle<\/h2>\n\n\n\n<p>In diesem Abschnitt beschreibe ich die f\u00fcnf Anwendungsf\u00e4lle f\u00fcr den PoC. Alle Anwendungsf\u00e4lle wurden gegen RHEL 7, RHEL 8 und RHEL 9 getestet. F\u00fcr diesen Blog beschr\u00e4nke ich mich jedoch auf Tests gegen RHEL 9, um die \u00dcbersichtlichkeit der Ausgaben zu verbessern.<\/p>\n\n\n\n<p>Es wird stets das Playbook aus dem Abschnitt <a href=\"#beschreibung-aide\">Beschreibung der Ansible-Rolle <em>aide<\/em><\/a> verwendet und mit unterschiedlichen Tags ausgef\u00fchrt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsfall 1: Installation von AIDE<\/h3>\n\n\n\n<p>Um AIDE nutzen zu k\u00f6nnen, muss es zuerst installiert sein. Dies wird mit folgendem Playbook-Aufruf festgestellt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags install\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Ensure required packages are installed] ***************************\nchanged: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>F\u00fcr diesen Anwendungsfall arbeitet die Rolle idempotent. Bei einer zweiten Ausf\u00fchrung werden keine weiteren \u00c4nderungen am System vorgenommen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags install\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Ensure required packages are installed] ***************************\nok: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsfall 2: Generierung der Datei \/etc\/aide.conf<\/h3>\n\n\n\n<p>Zusammen mit der Rolle wird die Datei <code>templates\/aide.conf.j2<\/code> ausgeliefert. Dabei handelt es sich um die Standardkonfigurationsdatei aus einer RHEL9-Installation, in welcher zus\u00e4tzlich der Pfad <code>\/root\/.ansible*<\/code> von der \u00dcberwachung ausgenommen wurde, um falsch positive Ergebnisse zu vermeiden.<\/p>\n\n\n\n<p>Diese Datei ist an die individuellen Bed\u00fcrfnisse anzupassen. Wer Hilfe zum Templating mit Jinja2 ben\u00f6tigt, findet in der <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/playbook_guide\/playbooks_templating.html\">Ansible-Dokumentation<\/a> einen Einstieg.<\/p>\n\n\n\n<p>Ausgerollt wird die Konfigurationsdatei dann wie folgt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags generate_config\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Generate \/etc\/aide.conf] ******************************************\nchanged: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Auch mit diesem Tag arbeitet die Rolle idempotent.<\/p>\n\n\n\n<p>Wird dieser Schritt ausgelassen, wird in allen folgenden Anwendungsf\u00e4llen die Standardkonfigurationsdatei verwendet, welche bei der Installation des Pakets <code>aide<\/code> mitinstalliert wurde.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsfall 3: Initialisierung der AIDE-Datenbank<\/h3>\n\n\n\n<p>Um Integrit\u00e4ts-Checks durchf\u00fchren zu k\u00f6nnen, muss zuerst die AIDE-Datenbank initialisiert werden. Dies geschieht mit dem folgenden Aufruf:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags init\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Initialize AIDE database] *****************************************\nchanged: &#91;rhel9]\n\nTASK &#91;aide : Fetch AIDE database] **********************************************\nchanged: &#91;rhel9]\n\nTASK &#91;aide : Remove remote AIDE database file] *********************************\nchanged: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Nach der Initialisierung der AIDE-Datenbank wird diese auf den ACN kopiert und von den verwalteten Systemen entfernt. Dies hat den Hintergrund, dass es sich beim ACN um ein sehr gut gesichertes System handelt und die Datenbanken hier am besten vor einer Kompromittierung gesch\u00fctzt sind.<\/p>\n\n\n\n<p>Wird der Standardwert der Variable <code>aide_db_fetch_dir<\/code> verwendet, findet sich die AIDE-Datenbank jetzt im Pfad <code>files\/rhel9\/var\/lib\/aide\/aide.db.new.gz<\/code>. Dabei entspricht <code>rhel9<\/code> in der Pfadangabe dem <code>inventory_hostname<\/code> des jeweiligen Zielsystems.<\/p>\n\n\n\n<p>Dieser Teil der Rolle ist nicht idempotent. Wird das Playbook erneut ausgef\u00fchrt, wird eine neue AIDE-Datenbank erstellt, auf den ACN heruntergeladen und vom Zielsystem gel\u00f6scht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsfall 4: Ausf\u00fchrung einer Integrit\u00e4tspr\u00fcfung<\/h3>\n\n\n\n<p>Der nun folgende Code-Block zeigt den Playbook-Aufruf zur Integrit\u00e4tspr\u00fcfung. Hier wird zuerst die AIDE-Datenbank auf das Zielsystem kopiert, anschlie\u00dfend ein AIDE-Check ausgef\u00fchrt. Da im folgenden Beispiel keine \u00c4nderungen detektiert wurden, besitzt der Task &#8222;[aide : Check against AIDE reference database]&#8220; den Status &#8222;ok&#8220;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags check\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Copy AIDE reference database to remote] ***************************\nchanged: &#91;rhel9]\n\nTASK &#91;aide : Check against AIDE reference database] ****************************\nok: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Dieser Teil der Rolle ist nicht idempotent. Bei jedem Aufruf wird ein neuer Integrit\u00e4ts-Check ausgef\u00fchrt.<\/p>\n\n\n\n<p>Ich habe die Datei <code>\/etc\/hosts<\/code> auf dem Zielsystem manipuliert, um auch den Fall zu zeigen, wenn eine \u00c4nderung erkannt wurde.<\/p>\n\n\n\n<p>Zu Beginn der folgenden Ausgabe ist zu erkennen, dass der Task &#8222;[aide : Copy AIDE reference database to remote]&#8220; den Status &#8222;ok&#8220; besitzt. Ansible hat erkannt, dass die AIDE-Datenbank bereits in unver\u00e4ndertem Zustand auf dem Zielsystem existiert, und hat sie deshalb nicht erneut \u00fcbertragen. Der Task &#8222;[aide : Check against AIDE reference database]&#8220; schl\u00e4gt nun allerdings fehl (Status: &#8222;fatal&#8220;), da Ver\u00e4nderungen erkannt wurden. Die zugegeben etwas un\u00fcbersichtliche Ausgabe enth\u00e4lt die Nachricht, dass die Datei <code>\/etc\/hosts<\/code> ver\u00e4ndert wurde.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags check\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Copy AIDE reference database to remote] ***************************\nok: &#91;rhel9]\n\nTASK &#91;aide : Check against AIDE reference database] ****************************\nfatal: &#91;rhel9]: FAILED! =&gt; {\"changed\": true, \"cmd\": &#91;\"aide\", \"--check\"], \"delta\": \"0:00:27.177397\", \"end\": \"2024-03-29 05:16:50.682795\", \"msg\": \"non-zero return code\", \"rc\": 4, \"start\": \"2024-03-29 05:16:23.505398\", \"stderr\": \"\", \"stderr_lines\": &#91;], \"stdout\": \"Start timestamp: 2024-03-29 05:16:23 -0400 (AIDE 0.16)\\nAIDE found differences between database and filesystem!!\\n\\nSummary:\\n  Total number of entries:\\t45541\\n  Added entries:\\t\\t0\\n  Removed entries:\\t\\t0\\n  Changed entries:\\t\\t1\\n\\n---------------------------------------------------\\nChanged entries:\\n---------------------------------------------------\\n\\nf   ...    .C... : \/etc\/hosts\\n\\n---------------------------------------------------\\nDetailed information about changes:\\n---------------------------------------------------\\n\\nFile: \/etc\/hosts\\n  SHA512   : YobgpcvAMPey0QX1lK4K+5EFySF1xrB\/ | 7nIivvNa5ozfhOqSFLmPIiu6g04Wbx1n\\n             9FRzTCPNC93+13Y5\/lm2inC4x4rydlf2 | iGNf0\/QTgFjaMGug8HywxTiO2PREZRNS\\n             EcvonCf3pHuXj6lEmAjBnw==         | 3qNEi4Qm6an5inSY72sjfA==\\n\\n\\n---------------------------------------------------\\nThe attributes of the (uncompressed) database(s):\\n---------------------------------------------------\\n\\n\/var\/lib\/aide\/aide.db.gz\\n  MD5      : gMgRyMOExVAdOAvdgt4QDA==\\n  SHA1     : w7tmPKNvRYggY\/JZ5wv+7ZdcSZM=\\n  RMD160   : CO0pK5tfg66MaO17YB8eaRuyyMw=\\n  TIGER    : n8UbZJNt9gL672+pR9IPjoyhpAsUJ46O\\n  SHA256   : k8UHnv2CK4zYrfZN+bDp6SCcLkx21px6\\n             GNZlwySPKcY=\\n  SHA512   : DFw5wlBoJQOBCrs0ulvVxaMvoQk\/oBEQ\\n             TkOmhfHAdevUWNAgCJ0KH0q26LsynEMj\\n             MWQpsGf7v12iACc4SP9ANA==\\n\\n\\nEnd timestamp: 2024-03-29 05:16:50 -0400 (run time: 0m 27s)\", \"stdout_lines\": &#91;\"Start timestamp: 2024-03-29 05:16:23 -0400 (AIDE 0.16)\", \"AIDE found differences between database and filesystem!!\", \"\", \"Summary:\", \"  Total number of entries:\\t45541\", \"  Added entries:\\t\\t0\", \"  Removed entries:\\t\\t0\", \"  Changed entries:\\t\\t1\", \"\", \"---------------------------------------------------\", \"Changed entries:\", \"---------------------------------------------------\", \"\", \"f   ...    .C... : \/etc\/hosts\", \"\", \"---------------------------------------------------\", \"Detailed information about changes:\", \"---------------------------------------------------\", \"\", \"File: \/etc\/hosts\", \"  SHA512   : YobgpcvAMPey0QX1lK4K+5EFySF1xrB\/ | 7nIivvNa5ozfhOqSFLmPIiu6g04Wbx1n\", \"             9FRzTCPNC93+13Y5\/lm2inC4x4rydlf2 | iGNf0\/QTgFjaMGug8HywxTiO2PREZRNS\", \"             EcvonCf3pHuXj6lEmAjBnw==         | 3qNEi4Qm6an5inSY72sjfA==\", \"\", \"\", \"---------------------------------------------------\", \"The attributes of the (uncompressed) database(s):\", \"---------------------------------------------------\", \"\", \"\/var\/lib\/aide\/aide.db.gz\", \"  MD5      : gMgRyMOExVAdOAvdgt4QDA==\", \"  SHA1     : w7tmPKNvRYggY\/JZ5wv+7ZdcSZM=\", \"  RMD160   : CO0pK5tfg66MaO17YB8eaRuyyMw=\", \"  TIGER    : n8UbZJNt9gL672+pR9IPjoyhpAsUJ46O\", \"  SHA256   : k8UHnv2CK4zYrfZN+bDp6SCcLkx21px6\", \"             GNZlwySPKcY=\", \"  SHA512   : DFw5wlBoJQOBCrs0ulvVxaMvoQk\/oBEQ\", \"             TkOmhfHAdevUWNAgCJ0KH0q26LsynEMj\", \"             MWQpsGf7v12iACc4SP9ANA==\", \"\", \"\", \"End timestamp: 2024-03-29 05:16:50 -0400 (run time: 0m 27s)\"]}\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=2    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>An dieser Stelle wurde gezeigt, dass sowohl unver\u00e4nderte Systeme als auch Systeme mit Ver\u00e4nderungen erkannt und gemeldet werden. Dabei muss nat\u00fcrlich niemand die Standardausgabe beobachten. Stattdessen kann <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/reference_appendices\/logging.html\">Logging f\u00fcr Ansible Ausgaben<\/a> konfiguriert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsfall 5: Update der AIDE-Datenbank<\/h3>\n\n\n\n<p>Dieser Anwendungsfall nimmt an, dass erfolgte \u00c4nderungen legitim sind und in die AIDE-Referenzdatenbank aufgenommen werden sollen. Dies geschieht wie folgt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags update\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Update AIDE database] *********************************************\nchanged: &#91;rhel9]\n\nTASK &#91;aide : Fetch AIDE database] **********************************************\nchanged: &#91;rhel9]\n\nTASK &#91;aide : Remove remote AIDE database file] *********************************\nchanged: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Nachdem die Referenzdatenbank aktualisiert wurde, wird diese wieder auf den ACN kopiert und vom Zielsystem entfernt.<\/p>\n\n\n\n<p>Das folgende Beispiel zeigt, dass auf dem Zielsystem der AIDE-Check nun ohne Fehler absolviert wird:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook aide.yml --tags check\n\nPLAY &#91;Example aide role invocation] ********************************************\n\nTASK &#91;Gathering Facts] *********************************************************\nok: &#91;rhel9]\n\nTASK &#91;Include role aide] *******************************************************\n\nTASK &#91;aide : Copy AIDE reference database to remote] ***************************\nchanged: &#91;rhel9]\n\nTASK &#91;aide : Check against AIDE reference database] ****************************\nok: &#91;rhel9]\n\nPLAY RECAP *********************************************************************\nrhel9                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Ansible hat erkannt, dass die AIDE-Datenbank auf dem Zielhost nicht mit der aktuellen Referenzdatenbank \u00fcbereinstimmt und hat letztere daher auf das Zielsystem \u00fcbertragen. Die \u00dcberpr\u00fcfung endet mit dem Status &#8222;ok&#8220;. Das System entspricht dem Soll-Zustand.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Der Proof of Concept hat gezeigt, dass AIDE mit der verwendeten <a href=\"https:\/\/github.com\/Tronde\/aide\">Ansible-Rolle<\/a> ferngesteuert genutzt werden kann. AIDE-Datenbank und Konfigurationsdatei werden dabei getrennt von den verwalteten Systemen gespeichert und sind daher gegen Ver\u00e4nderung bei Kompromittierung der Zielsysteme gesch\u00fctzt. Bei Bedarf, wenn Ansible Abweichungen des Ist- zum Soll-Zustand erkennt, werden diese Dateien auf die Zielsysteme \u00fcbertragen.<\/p>\n\n\n\n<p>Der gr\u00f6\u00dfte Arbeitsaufwand steckt in der Erstellung einer oder mehrerer AIDE-Konfigurationsdateien, die optimal zur eigenen Umgebung passen und m\u00f6glichst keine falsch positiven Ergebnisse erzeugen. Dieser Aufwand besteht jedoch auch, wenn man AIDE ohne Ansible einsetzt.<\/p>\n\n\n\n<p>Einen Punkt hat dieser PoC unber\u00fccksichtigt gelassen. Es n\u00fctzt nat\u00fcrlich nichts, wenn man die Ausgaben der Playbooks nur protokolliert, die Protokolle jedoch nicht analysiert, um entsprechende Alarme in Monitoring- oder Ticket-Systemen zu erzeugen. Dies sei den Anwendern zur selbstst\u00e4ndigen \u00dcbung \u00fcberlassen. ;-)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dies ist der Folgeartikel, den ich in der Einf\u00fchrung in das Advanced Intrusion Detection Environment (AIDE) versprochen hatte. Es handelt sich hierbei um einen Proof of Concept (PoC), der zeigt, wie AIDE mithilfe einer Ansible-Rolle ferngesteuert werden kann. Die Einf\u00fchrung wird als bekannt vorausgesetzt. Grundlegende Ansible-Kenntnisse, wie die Verwendung von Ansible-Rollen und das Ausf\u00fchren von<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/proof-of-concept-mit-ansible-das-advanced-intrusion-detection-environment-aide-steuern\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[532],"tags":[807,804,410],"class_list":["post-3826","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-advanced-intrustion-detection-environment","tag-aide","tag-ansible"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3826","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3826"}],"version-history":[{"count":7,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3826\/revisions"}],"predecessor-version":[{"id":3835,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3826\/revisions\/3835"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3826"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3826"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3826"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}