Das Thema Vertrauen und Authentizität der bereitgestellten Softwarepakete wird bei Debian großgeschrieben. Ziel ist, dass Sie sicher sein können, dass die von einem Debian-Spiegelserver bezogene Software unverändert ist. Es greifen dabei eine ganze Reihe von automatischen Überprüfungen. Mit den nachfolgend beschriebenen Vorgehensweisen können Sie die entsprechenden Einzelschritte selbst nachvollziehen und durchführen.
Wir unterscheiden hier zwei Fälle:
Die offiziellen Paketquellen von Debian, als auch die darüber referenzierten Quellpakete sind kryptographisch signiert (siehe dazu Abschnitt 3.13, „Paketquelle auf Echtheit überprüfen“). Die Signaturen werden mit Hilfe der Public-Key-Kryptographie erstellt. Mit dem entsprechenden öffentlichen Schlüssel (engl. Public Key) können Sie (und jeder andere Benutzer ebenso) überprüfen, ob das Paket vertrauenswürdig ist.
Die Grundlage dazu bildet die Vertrauenskette bei Debian, die sich vom Entwickler zum Build-Daemon (kurz „buildd“) bis hin zum FTP-Master-Server, den Paketlisten, dem Debian-Archive-Keyring und dem Debian-Keyring erstreckt. Genutzt wird dabei eine Kombination aus kryptographischen Hashsummen und einer digitalen Signatur.
Auf den Debian-Spiegelservern befindet sich pro Veröffentlichung eine digital
signierte Datei namens Release
. Sie beinhaltet die Namen der Paketlisten
(heutzutage meist Packages
, Packages.gz
und Packages.xz
, früher oft
auch noch Packages.bz2
) sowie deren Hashsummen als MD5-, SHA1- und
SHA256-Variante. Mit der digitalen Signatur der Release-Datei und den darin
enthalten Hashsummen wird sichergestellt, dass diese Dateien nicht verändert
wurden.
Die Datei Packages
(wie auch deren komprimierten Varianten) beinhaltet
wiederum eine Liste von Paketen bzw. deren Dateien, die für diese
Veröffentlichung zur Verfügung stehen – und deren Hash-Summen. Dies stellt
wiederum sicher, dass die Paketdateien aus der Liste nicht verändert wurden.
Durch die gesamte Kette aus Paket-Hashsummen in den Paketlisten und Paketliste-Hashsummen in der Release-Datei garantiert die einzelne digitale Signatur auf der Release-Datei die Integrität sämtlicher Pakete einer Veröffentlichung.
Eine lokale Kopie der vertrauenswürdigen Schlüssel passend zur Veröffentlichung
verwalten Sie mit dem Programm apt-key
aus dem Paket apt [Debian-Paket-apt].
Auf dessen Bedienung gehen wir unter Abschnitt 3.13.3, „Unterkommandos von apt-key
“ ein.
Zu dem Programm gehört ein Schlüsselring von öffentlichen GnuPG-Schlüsseln,
sog. „Public Keys“, mit denen die Signaturen in der Datei Release.gpg
auf den Debian-Spiegelservern überprüft werden können. Dieser
Schlüsselring ist im Paket debian-archive-keyring enthalten und lokal
in Dateien im Verzeichnis /etc/apt/trusted.gpg.d
gespeichert. Dazu
kommt noch die Datei /etc/apt/trusted.gpg
, welche heutzutage nur noch
manuell per apt-key add
hinzugefügte Schlüssel enthält. Bei früheren
Veröffentlichungen war diese Datei die alleinige Quelle zur Überprüfung
von Veröffentlichungssignaturen.
Debian signiert seine einzelnen Pakete nicht kryptographisch mittels
dpkg-sig
, sondern vertraut auf die signierte RELEASE
-Datei und die darin
gespeicherten Hashsummen der Pakete.
Die kyptographische Signatur eines einzelnen Paketes überprüfen Sie mit
Hilfe des Werkzeugs dpkg-sig
[Debian-Paket-dpkg-sig]. Hat das Paket
keine kyptographische Signatur, sieht die Ausgabe so aus:
Paket ohne kryptographische Signatur.
$ dpkg-sig --verify /var/cache/apt/archives/mc-data_3%3a4.8.18-1_all.deb Processing /var/cache/apt/archives/mc-data_3%3a4.8.18-1_all.deb... NOSIG $
Im positiven Fall sehen Sie das folgende Ergebnis, hier für das in Kapitel 22, Metapakete bauen erzeugte Metapaket meta-mc:
Paket mit kryptographischer Signatur.
$ dpkg-sig --verify meta-mc_1.0_all.deb Processing meta-mc_1.0_all.deb... GOODSIG _gpgbuilder 35F8DF9C884E36AB974460AFCFA72978D431AC07 1573823436 $
Nun überprüfen Sie, ob ein Debianpaket selbst noch eine kryptographische
Signatur enthält. Sie packen dieses aus und schauen nach, ob darin eine
Datei namens _gpgbuilder
enthalten ist:
Dateiliste eines Pakets mit kryptographischer Signatur.
$ ar vx meta-mc_1.0_all.deb x - debian-binary x - control.tar.gz x - data.tar.xz x - _gpgbuilder $
Im vorliegenden Fall enthält die Datei _gpgbuilder
folgendes
Klartextzertifikat („clearsign GnuPG signature“):
Enthaltenes Klartextzertifikat.
$ cat _gpgbuilder -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Version: 4 Signer: Frank Hofmann (Hofmann EDV) <frank.hofmann@efho.de> Date: Fri Nov 15 14:10:36 2019 Role: builder Files: 3cf918272ffa5de195752d73f3da3e5e 7959c969e092f2a5a8604e2287807ac5b1b384ad 4 debian-binary 9fd3b3462326a863565c1ca251ff0fe7 46aebc946b932b8b7e9ab541a01231d474e08330 458 control.tar.gz 0baf7633e67bbcd272663089133a9cbc 2ad0ecd5fa6e5f2dd6b296e786fc4569050ea025 1400 data.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBAgAdFiEENfjfnIhONquXRGCvz6cpeNQxrAcFAl3Oo8wACgkQz6cpeNQx rAeExhAAp7zBeBjijB6De5myMolGxGx9JqLNA2sF48RHsibFJwf4LmXC8NMcGHwO q9c4TvIdUXb/94pIPTSLdLXSpPiEC4sFRx5SU7zwLaHO/HO7O+Qn0Y9XvuuJJDXm 0Fj+M8LyJPBpV7VgngTvXP7mX9mTPGD+ZxidJuZrR028LjxZYQ1kX6yiivZS4HBU cKJlmRlopKaJ5Kdfypa52Nr9PB5MSTdaKm0jYz9W1nW+LCo4IDJAnii8VU2F7VuP 6ISTtcdC3sa4nh6+PaWC7lWR8wpj9A/Bc/n6ddGql3VaswUNNHGuVfxqoim7hrPc uGckJ8sUgqYtWbCG+zyF4jgwoc+DtLwMHjoSIJPtxgEBI1R4GIzxF8Poa8ZVEuOY fvRc9158oZVQpBc9w4MaWWtuImzjaQGLOgyutN4ow8UiQxzEIc7pep2N0zMw+Ir4 7C69KOjJ0exA+Fu34aLghe1SOhiNLSFu52r1axyomuN2cQfzw2cuVn2eLWZDxqAD qlMQjMwtuYR9yED7R/PVC2B2Hq5pzBltN2kekhe3XL9yLgy3tyyGh7vNOeQn15+j QKAxD31KZHIDdExeifRhQrLwBU3YVyuj1kSFIULO5kAD6v+i6dd341IUBNip2B7z +2M2eryG8LOriFw5m7C39WmYcJr14tdm0ENmxqnEBzh+EhBwkhk= =/SDv -----END PGP SIGNATURE-----
Installieren Sie ein Debianpaket, landen die darin enthaltenen Dateien üblicherweise eins-zu-eins auf dem Speichermedium. Als Administrator gehört zu Ihren Aufgaben, das System und die Dateien auf Integrität zu prüfen. Das umfasst auch das Nachschauen, ob die lokalen Dateien eines bereits installierten Paket später verändert wurden, d.h. ob zwischen der Version vom Paketmirror und der lokalen Version Unterschiede bestehen. Falls ja, ist von Ihnen zu klären, welche Dateien verändert wurden. Es gibt mehrere Situationen, in denen das wichtig ist, gewollte oder unerwünschte Änderungen von Daten festzustellen.
Bei der Klärung dieser Fragen helfen Ihnen u.a. die Werkzeuge
debsums
[Debian-Paket-debsums], dlocate
[Debian-Paket-dlocate],
diffoscope
[Debian-Paket-diffoscope] sowie auch dpkg
selbst
weiter. Letzteres steht Ihnen mit einem passenden Schalter ab der
Version 1.17 ab Debian 8 Jessie und Ubuntu 14.04 LTS Trusty Tahr zur
Verfügung.
Während Debian bei der Verifizierung der bezogenen Pakete auch SHA1-
und SHA256-Hashsummen zur kryptographischen Absicherung verwendet (siehe
dazu Abschnitt 8.32.1, „Prüfung eines Paketes auf Unversehrtheit“), werden zum Erkennen von
Änderungen an installierten Paketdateien nur MD5-Summen verwendet. Diese
sind pro Paket in den Dateien /var/lib/dpkg/info/*.md5sums
gespeichert. Alle o.g. Programme verwenden die Hashsummen aus diesen via
dpkg
bereitgestellten Dateien.
Die ausschließliche Verwendung von MD5-Summen an dieser Stelle bedeutet, dass diese nicht mehr den heutigen Ansprüchen für das Aufdecken von Datei-Ersetzungen entsprechen, insbesondere wenn diese mit hoher krimineller Energie ausgeführt wurden. Sie können jedoch durchaus helfen, von dilettantischen Einbrechern durchgeführte Datei-Ersetzungen zu finden. Bedenken Sie jedoch dabei, dass die Einbrecher genauso gut auch die o.g. Dateien mit den MD5-Summen angepasst haben könnten. Möchten Sie sich jedoch stärker gegen Datei-Ersetzungen oder Änderungen durch professionelle Angreifer schützen, so reichen die hier genannten Techniken nicht aus. Dazu gibt es spezialisierte Pakete wie z. B. tripwire, samhain, aide, integrit, fcheck, stealth und tiger.
Mit dem Schalter -md5sum
des Werkzeugs dlocate
zeigen Sie die
MD5-Summen aller Dateien in einem bestimmten Paket an, so wie sie in
o.g. Dateien von dpkg
gespeichert werden. Nachfolgend sehen Sie die
Ausgabe zum Paket htop, wobei sich in der linken Spalte die MD5-Summe
befindet und in der rechten Spalte die dazugehörige Datei mit ihrem
vollständigem Pfad. Die Angaben entsprechen dem Inhalt der Datei
/var/lib/dpkg/info/htop.md5sums
.
Darstellung der MD5-Summen für alle Dateien aus dem Paket htop.
$ dlocate -md5sum htop 292b696a5b879f1068f7c15073c245cd usr/bin/htop 194b840f96d3e6bbf29229811a6195c2 usr/share/applications/htop.desktop 75557092070931bcb0fb9a6d74575542 usr/share/doc/htop/AUTHORS 0c9303726b090f478b383dd059b3265f usr/share/doc/htop/README 3adf8fa10448f27bb30385b37eb14231 usr/share/doc/htop/changelog.Debian.gz 84555fa6bc74568aea8de2a18072d5b2 usr/share/doc/htop/changelog.gz ee7657b42989a83c9b04a179b35e59e1 usr/share/doc/htop/copyright 58a889c99141c2945c1c50bb51d314c6 usr/share/man/man1/htop.1.gz f059e3f0159a5aeb761d41514a117310 usr/share/menu/htop 5bbd19dc6cccaf0a74866a92f5cca75c usr/share/pixmaps/htop.png $
dlocate
kann nicht nur die MD5-Summe für eine Datei ausgeben, sondern
diese auch überprüfen. Dazu benutzen Sie den Schalter -md5check
. Falls
die ermittelte MD5-Summe mit dem Original aus dem Paket übereinstimmt,
ergänzt dlocate
hinter dem Dateinamen ein OK
, andernfalls ein FAILED
.
Bitte beachten Sie dabei, dass dlocate -md5check
keine
Konfigurationsdateien überprüft und auch nur die Dateien von explizit
angegebenen Paketen überprüfen kann.
Überprüfung der MD5-Summen für jede einzelne Datei aus dem Paket htop.
$ dlocate -md5check htop usr/bin/htop: OK usr/share/applications/htop.desktop: OK usr/share/doc/htop/AUTHORS: OK usr/share/doc/htop/README: OK usr/share/doc/htop/changelog.Debian.gz: OK usr/share/doc/htop/changelog.gz: OK usr/share/doc/htop/copyright: OK usr/share/man/man1/htop.1.gz: OK usr/share/menu/htop: OK usr/share/pixmaps/htop.png: OK $
Genauso wie dlocate
kann auch debsums
die Dateien eines Pakets auf
Integrität überprüfen. Dazu braucht es jedoch keine weitere Option, da
das Überprüfen von Dateien die einzige Aufgabe von debsums
ist:
debsums
beim Prüfen des Pakets htop
.
$ debsums htop /usr/bin/htop OK /usr/share/applications/htop.desktop OK /usr/share/doc/htop/AUTHORS OK /usr/share/doc/htop/README OK /usr/share/doc/htop/changelog.Debian.gz OK /usr/share/doc/htop/changelog.gz OK /usr/share/doc/htop/copyright OK /usr/share/man/man1/htop.1.gz OK /usr/share/menu/htop OK /usr/share/pixmaps/htop.png OK $
Im Gegensatz zu dlocate
braucht debsums
jedoch nicht
notwendigerweise einen Paketnamen als Parameter. Rufen Sie das Werkzeug
debsums
ohne weitere Parameter auf, so prüft es alle Dateien (außer
Konfigurationsdateien in /etc/
) sämtlicher installierten Pakete auf
Veränderungen zum Original und gibt hinter dem Dateinamen den Wert OK
für unverändert und FAILED
für modifizierte Daten aus. Dieser Schritt
eignet sich gut, um ihr gesamtes System einer Integritätsprüfung zu
unterziehen.
debsums
bei der Arbeit.
# debsums /usr/bin/a2ps OK /usr/bin/a2ps-lpr-wrapper OK /usr/bin/card OK /usr/bin/pdiff OK /usr/bin/psmandup OK /usr/bin/psset OK /usr/bin/texi2dvi4a2ps OK /usr/share/a2ps/README OK /usr/share/a2ps/afm/fonts.map OK ... #
Desweiteren hat debsums
noch ein paar nützliche Schalter:
-a
(Langform --all
)
-c
(Langform --changed
)
Auflistung der Dateien, die sich geändert haben.
# debsums --changed /usr/local/Brother/Printer/HL2250DN/inf/brHL2250DNfunc /usr/local/Brother/Printer/HL2250DN/inf/brHL2250DNrc debsums: missing file /usr/share/doc/hl2250dnlpr/copyright (from hl2250dnlpr package) debsums: missing file /usr/share/doc/hl2250dnlpr/changelog.Debian.gz (from hl2250dnlpr package) debsums: missing file //opt/PDFStudio/jre/lib/charsets.jar.pack (from pdfstudio package) #
-e
(Langform --config
)
/etc/
.
Auflistung aller Conffiles des Pakets unburden-home-dir mit Zustand:
$ debsums -e unburden-home-dir /etc/unburden-home-dir.list FAILED /etc/unburden-home-dir OK /etc/default/unburden-home-dir FAILED /etc/X11/Xsession.d/95unburden-home-dir OK $
Möchten Sie nur die Konfigurationsdateien (genauer Conffiles) eines
Pakets auflisten, die lokal geändert wurden, so kombinieren Sie die
beiden Schalter -c
und -e
miteinander:
Auflistung geänderter Conffiles des Pakets unburden-home-dir.
$ debsums -ce unburden-home-dir /etc/default/unburden-home-dir /etc/unburden-home-dir.list $
Möchten Sie die Originaldatei wiedereinspielen (und damit die Änderungen rückgängig machen), ermitteln Sie zuerst das Paket, in dem besagte Datei enthalten ist (siehe Abschnitt 8.24, „Paket zu Datei finden“) und installieren dieses dann erneut (siehe Abschnitt 8.39, „Pakete erneut installieren“).
Bitte beachten Sie, dass das bei Conffiles nicht funktioniert, da
dpkg
nur dann wegen geänderter (oder gelöschter) Konfigurationsdateien
fragt, wenn sich die Konfigurationsdatei auch im Paket geändert hat.
Dies ist bei einer Reinstallation nie der Fall. Hier hilft entweder, die
Datei aus dem heruntergeladenen Paket manuell zu extrahieren oder
zunächst das Paket mit dpkg --purge vollständig zu entfernen und
danach wieder zu installieren.
Bei der Benutzung von debsums
spielen die Berechtigungen des Benutzers
eine Rolle. Die Integrität von Dateien, die für normale Benutzer nicht
lesbar sind, können nur vom Benutzer root geprüft werden.
Auflistung geänderter Conffiles des Pakets sudo
geht nur root
-Rechten:
$ debsums -e sudo /etc/pam.d/sudo OK /etc/init.d/sudo OK debsums: can't open sudo file /etc/sudoers (Permission denied) debsums: can't open sudo file /etc/sudoers.d/README (Permission denied) $ sudo debsums -e sudo /etc/pam.d/sudo OK /etc/sudoers OK /etc/init.d/sudo OK /etc/sudoers.d/README OK $
Ab dpkg Version 1.17 kann auch dpkg
selbst Dateien anhand der
gespeicherten MD5-Summen auf Unversehrtheit überprüfen. Im Gegensatz
zu debsums
und dlocate -md5check
überprüft es Conffiles stets
mit und zeigt auch immer nur Dateien an, die sich nicht mehr im
Originalzustand befinden.
Die passende Option dazu ist -V
bzw. in der Langform --verify
. Geben
Sie zum Aufruf einen oder mehrere Paketnamen als Parameter mit, so
werden nur die Dateien dieser Pakete überprüft:
Dateien der Pakete unburden-home-dir und ack-grep mit dpkg -V
überprüfen.
$ dpkg -V unburden-home-dir ack-grep ??5?????? c /etc/unburden-home-dir.list ??5?????? c /etc/default/unburden-home-dir ??5?????? /usr/bin/ack $
Das Ausgabeformat stellen Sie über die Option --verify-format
ein. Das
Standardformat ist von RPM übernommen [Bailey-Maximum-RPM-verify].
Da dpkg
bisher nur die MD5-Summe überprüft, werden alle anderen
Spalten nur als Fragezeichen ausgegeben. Erscheint ein einzelnes c in
der Ausgabe, handelt es sich hierbei um Conffiles.