Linux-Logs forensisch sichern: tar, UAC, Velociraptor
Was Sie für eine Linux-Log-Ermittlung sichern und wie: ein tar-Befehl am laufenden Host, journalctl-Export, ausearch, UAC, Velociraptor oder ein Abbild.
Kurzfassung. Archivieren Sie als root /var/log (Textlogs, Journal, Audit, wtmp/btmp/lastlog), das flüchtige Journal in /run/log/journal und vier Kontextdateien: /etc/localtime, /etc/timezone, /etc/passwd und /etc/hostname. Behalten Sie jede Rotation und jede .journal~-Datei, bewahren Sie die Ordnerstruktur und berechnen Sie einen Hash des Archivs. Ein einziger tar-Befehl genügt; UAC und Velociraptor erledigen das im großen Maßstab.
Die Dateiliste
| Pfad | Inhalt | Warum |
|---|---|---|
/var/log/auth.log*, /var/log/syslog* | Textlogs unter Debian, Ubuntu | SSH, sudo, PAM, cron, Dienste |
/var/log/secure*, /var/log/messages* | Textlogs unter RHEL, Rocky, Alma, Fedora | Dasselbe, mit datierten Rotationen (secure-20260913) |
/var/log/journal/<machine-id>/*.journal, *.journal~ | Persistentes systemd-Journal | Vertrauenswürdige Felder, Mikrosekunden, Sequenznummern |
/run/log/journal/<machine-id>/*.journal | Flüchtiges Journal | Beim Neustart verloren; auf manchen Hosts das einzige Journal |
/var/log/audit/audit.log* | auditd | Logins, Sitzungen, ausgeführte Programme |
/var/log/wtmp*, /var/log/btmp*, /var/log/lastlog | Login-Einträge | Sitzungen, fehlgeschlagene Logins, letzter Login pro UID |
/run/utmp | Aktuelle Sitzungen | Nur am laufenden Host |
/var/lib/wtmpdb/wtmp.db, /var/log/wtmp.db | wtmpdb | openSUSE, Debian 13 |
/var/lib/lastlog/lastlog2.db | lastlog2 | util-linux 2.40+ |
/etc/localtime, /etc/timezone | Zeitzone | Für Syslog-Zeilen ohne Offset |
/etc/passwd, /etc/hostname | UID zu Name, Hostname | Zuordnung |
Die Zeitzonendateien sind wichtiger, als sie aussehen. Eine traditionelle RFC-3164-Zeile wie Sep 14 10:02:11 hat weder Jahr noch Zone: Ohne /etc/localtime ist jede Umrechnung in UTC geraten.
Laufender Host: ein tar-Befehl
Als root auf dem Host:
sudo tar -C / -czf /tmp/linux-logs.tar.gz --ignore-failed-read --sparse \
var/log run/log/journal etc/localtime etc/timezone etc/passwd etc/hostname
Kopieren Sie das Archiv anschließend auf Ihre Workstation:
scp user@host:/tmp/linux-logs.tar.gz .
Hinweise zu den Optionen:
--ignore-failed-readüberspringt Pfade, die es auf dieser Distribution nicht gibt (kein/etc/timezoneunter RHEL, kein/run/log/journalauf Hosts mit persistenter Speicherung), mit einer Warnung, statt abzubrechen.--sparseist fürlastlogwichtig: Die Datei ist eine nach UID indizierte Sparse-Datei und kann viele Gigabyte groß erscheinen, wenn sich eine hohe UID angemeldet hat.--sparsespeichert nur die belegten Blöcke.- Root ist erforderlich:
auth.log,btmp,audit.logund das Journal sind für normale Benutzer nicht lesbar.
Wenn Sie das Archiv nach /tmp schreiben, verändern Sie den Datenträger des Zielsystems. Ist das nicht akzeptabel, schreiben Sie auf eingehängte externe Medien oder streamen Sie das Archiv stattdessen über SSH.
Wenn Sie nur journalctl ausführen können
Das Exportformat von journalctl ist verlustfrei und behält jedes Feld:
sudo journalctl -o export > journal.export
sudo journalctl -D /mnt/evidence/var/log/journal -o export > journal.export # aus einem eingehängten Abbild
-o json funktioniert ebenfalls. Rohe Journal-Dateien sind dennoch besser: Der Export enthält, was journalctl lesen konnte, während die Dateien Sequenznummern, Dateiköpfe und beschädigte Enden behalten, und genau dort zeigen sich gelöschte Einträge. Geben Sie beim Lesen von Beweismitteln immer -D an: Ohne diese Option liest journalctl das eigene Journal des Analysesystems.
Alle Audit-Logs in einer Datei
sudo ausearch --input-logs --raw > audit.log
--input-logs liest den Log-Speicherort aus auditd.conf, einschließlich rotierter audit.log.N-Dateien, und --raw behält die Originaleinträge, einschließlich der ENRICHED-Felder nach dem Trennzeichen 0x1D. Sichern Sie am laufenden Host auch die geladenen Regeln: auditctl -l und auditctl -s. Die geladenen Regeln können von /etc/audit/rules.d/ abweichen.
UAC
UAC (Unix-like Artifacts Collector) ist ein Shell-Skript, das auf nahezu jedem Unix läuft. Nur mit den Log-Artefakten:
sudo ./uac -a files/logs/var_log.yaml,files/logs/run_log.yaml,files/system/etc.yaml,files/system/utmp.yaml /tmp
-a nimmt eine kommagetrennte Liste von Artefaktdateien. Die Ausgabe ist uac-<host>-linux-<date>.tar.gz, das Linux Log Parser direkt öffnet. Alternativ verwenden Sie das Standard-Triage-Profil, das dieselben Logs und vieles mehr enthält:
sudo ./uac -p ir_triage /tmp
UAC bringt die Profile ir_triage, full, offline und offline_ir_triage mit. Die Offline-Profile sind für ein eingehängtes Abbild gedacht, nicht für ein laufendes System.
Velociraptor
Sichern Sie die Rohdateien mit Generic.Collectors.File, ausgehend von /, über die GUI, einen Hunt, einen Offline-Collector oder die Kommandozeile:
velociraptor artifacts collect Generic.Collectors.File \
--args Root=/ --args collectionSpec=$'Glob\nvar/log/**\nrun/log/journal/**\netc/localtime\netc/timezone\netc/passwd\netc/hostname' \
--output linux-logs.zip
Ziehen Sie das resultierende ZIP unverändert in das Tool. Velociraptor hat außerdem Parsing-Artefakte wie Linux.Forensics.Journal, Linux.Sys.LastUserLogin, Linux.Syslog.SSHLogin und Linux.Ssh.AuthorizedKeys. Sie sind nützlich für die Suche über eine ganze Flotte, liefern aber Zeilen statt Dateien und lassen sich daher später weder erneut parsen noch auf Sequenzlücken prüfen. Sichern Sie die Dateien zusätzlich.
Ausgeschaltetes System oder Datenträgerabbild
Hängen Sie das Root-Dateisystem schreibgeschützt ein (idealerweise ohne das ext4-Journal nachzuspielen) und archivieren Sie dann dieselben Pfade:
sudo mount -o ro /dev/sdX1 /mnt/evidence # oder ein schreibgeschützt eingehängtes Abbild
tar -C /mnt/evidence -czf ~/linux-logs.tar.gz --ignore-failed-read --sparse \
var/log etc/localtime etc/timezone etc/passwd etc/hostname
Das flüchtige Journal in /run/log/journal und /run/utmp existieren nur auf einem laufenden System. Wurde der Host ausgeschaltet und war journald flüchtig konfiguriert, ist das Journal verloren; dann bleibt nur die Arbeitsspeichersicherung.
Stolperfallen
- Nehmen Sie jede Rotation mit.
auth.log.1,auth.log.2.gz,secure-20260913,wtmp.1,audit.log.4: In der älteren Historie liegt meist der Erstzugriff. - Nehmen Sie die
.journal~-Dateien mit. Es sind Journale, die nach einem unsauberen Stopp oder erkannter Beschädigung umbenannt wurden, und sie decken oft den Vorfall ab. - Sichern Sie Benutzer-Journale. journald nummeriert Einträge über alle Dateien eines Systems hinweg, daher sehen zurückgelassene
user-<UID>.journal-Dateien wie gelöschte Einträge aus. - Erhalten Sie die Änderungszeiten. Das Jahr traditioneller Syslog-Zeilen wird daraus erschlossen.
tarbehält sie; eine Kopie über manche Filesharing-Tools nicht. - Notieren Sie die Uhrzeit. logrotate kann während der Sicherung laufen. Berechnen Sie einen Hash des Archivs und halten Sie fest, wann es erstellt wurde.
- Prüfen Sie die Architektur. wtmp-Einträge sind auf x86_64 384 Bytes, auf aarch64 aber 400 Bytes groß; notieren Sie, welche der Host hatte.
Nächster Schritt
Ziehen Sie das Archiv, das UAC-Tarball, das Velociraptor-ZIP oder den Ordner in Linux Log Parser. Der Grundlagenleitfaden erklärt, was jede Quelle beiträgt, und die Beispielermittlung zeigt eine vollständige Analyse. Der Journal-Spickzettel und der auth.log-Spickzettel listen die Pfade pro Distribution ausführlicher auf.