(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Grundsätzliches
- Mit dem Kommando rpm -V können die Dateien überprüft werden, die über RPM-Pakete auf dem System installiert wurden.
- Mit diesem Werkzeug kann der Systemadministrator Veränderungen an den Dateien des Systems feststellen.
- Diese Veränderungen können gewollt sein (Konfigurationsdateien etc ...)
- Sie können aber auch von einem Angreifer stammen, der Dateien im System gegen veränderte Binaries ausgetauscht hat (beispielsweise /bin/login).
- Anders als bei Debian ist nichts zu installieren, die Funktion ist fester Bestandteil von rpm.
Funktionsweise
- Bei der Installation speichert rpm zu jeder Datei eines Pakets Informationen in seiner Datenbank unter /var/lib/rpm: Checksumme (SHA256), Größe, Rechte, Besitzer, Gruppe, Änderungszeit und einiges mehr.
- rpm -V vergleicht die installierten Dateien mit diesen gespeicherten Werten.
- Im Gegensatz zu debsums wird also nicht nur der Inhalt geprüft, sondern auch Rechte und Besitzer. Ein nachträglich gesetztes SUID-Bit fällt damit ebenfalls auf.
- Konfigurationsdateien werden mitgeprüft und in der Ausgabe mit einem c markiert.
Grenzen
- Die Vergleichsdaten liegen in der RPM-Datenbank auf demselben System wie die geprüften Dateien.
- Ein Angreifer mit Root-Rechten kann also nicht nur /bin/login austauschen, sondern auch die Datenbank oder rpm selbst manipulieren.
- Ein Rootkit im Kernel kann rpm außerdem beim Lesen der Dateien den Originalinhalt vorspielen.
- Auf einem möglicherweise kompromittierten System ist das Ergebnis daher nur ein Hinweis. Verlässlich ist erst die Prüfung vom Rettungssystem aus bzw. gegen ein frisch geladenes Paket (siehe unten).
Ausgabe lesen
- rpm -V ist still, solange alles stimmt. Ausgegeben werden nur Abweichungen.
- Jede Zeile beginnt mit neun Zeichen, eines pro Test:
| Zeichen |
Bedeutung
|
| S |
Größe weicht ab
|
| M |
Rechte oder Dateityp weichen ab
|
| 5 |
Checksumme weicht ab (Inhalt verändert)
|
| D |
Major/Minor-Nummer der Gerätedatei weicht ab
|
| L |
Ziel eines symbolischen Links weicht ab
|
| U |
Besitzer weicht ab
|
| G |
Gruppe weicht ab
|
| T |
Änderungszeit weicht ab
|
| P |
Capabilities weichen ab
|
| . |
Test bestanden
|
| ? |
Test konnte nicht durchgeführt werden (z.B. fehlende Leserechte)
|
- Danach folgt ggf. die Art der Datei:
| Zeichen |
Bedeutung
|
| c |
Konfigurationsdatei
|
| d |
Dokumentation
|
| g |
ghost-Datei (gehört zum Paket, wird aber erst zur Laufzeit angelegt)
|
| l |
Lizenzdatei
|
| r |
readme-Datei
|
- Fehlende Dateien werden mit missing gemeldet.
- Beispiel
S.5....T. c /etc/ssh/sshd_config
- Größe, Inhalt und Änderungszeit der Konfigurationsdatei sind verändert - bei einer angepassten Konfiguration völlig normal.
S.5....T. /usr/bin/ls
- Dasselbe bei einem Binary - das darf nicht sein.
.M....... /usr/bin/find
- Nur die Rechte haben sich geändert - z.B. ein nachträglich gesetztes SUID-Bit.
Optionen
-V, --verify
- Überprüft die angegebenen Pakete.
rpm -V openssh-server
-a, --all
- Überprüft alle installierten Pakete.
rpm -Va
-f, --file
- Überprüft das Paket, zu dem die angegebene Datei gehört.
rpm -Vf /usr/bin/ls
-p, --package
- Vergleicht die installierten Dateien mit einer Paketdatei statt mit der RPM-Datenbank.
rpm -Vp coreutils-*.rpm
--noconfig
- Konfigurationsdateien werden nicht geprüft.
--noghost
- ghost-Dateien werden nicht geprüft.
--nofiledigest
- Die Checksumme wird nicht geprüft. Das ist schneller, aber veränderte Inhalte bei gleicher Größe fallen nicht mehr auf.
-r, --root=DIR
- Legt das Wurzelverzeichnis des zu prüfenden Systems fest (Standard /).
- Damit lässt sich ein eingehängtes fremdes System prüfen, z.B. vom Rettungssystem aus.
- Die RPM-Datenbank wird unterhalb dieses Verzeichnisses benutzt.
Beispiele
Alle Pakete prüfen
S.5....T. c /etc/ssh/sshd_config
.......T. c /etc/chrony.conf
missing c /etc/sysconfig/ip6tables
[..]
Alle Pakete prüfen, ohne Konfigurationsdateien
Nur veränderte Konfigurationsdateien anzeigen
Nur Dateien mit verändertem Inhalt anzeigen
Ein bestimmtes Paket prüfen
Das Paket einer bestimmten Datei prüfen
Manipulation simulieren
- Ein Binary verändern (hier wird nur ein Byte angehängt, ls funktioniert weiter):
echo >> /usr/bin/ls
rpm -Vf /usr/bin/ls
S.5....T. /usr/bin/ls
- Datei aus dem Originalpaket wiederherstellen:
dnf reinstall coreutils
Prüfung gegen ein frisch geladenes Paket
- Statt der lokalen Datenbank dient hier das Paket aus dem Repository als Vergleich.
- Paket herunterladen:
dnf download coreutils
- Signatur des Pakets prüfen:
rpm -K coreutils-*.rpm
- Installierte Dateien gegen das Paket prüfen:
rpm -Vp coreutils-*.rpm
- Damit ist eine manipulierte RPM-Datenbank kein Problem mehr. Gegen ein Kernel-Rootkit hilft aber auch das nicht - dafür braucht es das Rettungssystem.
Prüfung vom Rettungssystem
- Das verdächtige System wird von einem Rettungssystem gebootet, Kernel und rpm des verdächtigen Systems werden also nicht benutzt.
- Bei Rocky Linux eignet sich das Installationsmedium: Troubleshooting - Rescue a Rocky Linux system. Das installierte System wird dort unter /mnt/sysimage eingehängt.
- Prüfen:
rpm --root /mnt/sysimage -Va
- Die Vergleichsdaten stammen hier immer noch aus der RPM-Datenbank des verdächtigen Systems.
Vergleich mit debsums
|
debsums |
rpm -V
|
| Installation |
nötig |
nicht nötig
|
| Checksumme |
MD5 |
SHA256
|
| Rechte, Besitzer, Gruppe |
nein |
ja
|
| Konfigurationsdateien |
nur mit -a |
immer, mit c markiert
|
| Ausgabe |
jede Datei (ohne -s) |
nur Abweichungen
|
| Vergleich mit Paketdatei |
über -g |
rpm -Vp
|