Under Construction

Sind die verwendeten Zertifikate echt?

Die Sicherheit das eine nicht-volatile Datei mit einem Eintrag in der TSD nicht durch einen Angreifer verändert wurde, basiert auf einer digitalen Signatur die von IBM erzeugt und in der TSD hinterlegt wurde. Hier z.B. für das Executable /usr/bin/ls:

# trustchk -q /usr/bin/ls
/usr/bin/ls:
        owner = bin
        group = bin
        mode = 555
        type = FILE
        hardlinks =
        symlinks =
        size = 29389
        cert_tag = 49424d4149583a30344232302d30334233303a324b3a41
        signature = 20e9e76eae8cad24dd57a1076f4b4f08acfdd0984960c109cddc2e5d2f3696f4404515da159fa33aedae4d7af7416a30e9d1fabe1afd6c069e42bd582304d1b2dc7f397ac93f29fd65b85f0067be46b36f09edc9ce94b43159ae79ac9ffb280969a6ece7393e07e549fc82c4d746e8c813e6aba30e398aa33381961a53b8e2db895932890caa7fdf353f8a2380dbdb095bdfe2a02d2ce38ba6a4d4dde203ab65c75727f675907756c0fc185613956b0eeef2adadb6881998e68183d77c9400455972c012393a06738f4ea178d4f46cdd5d6655c4343b0386140a4afe51335ef0e1de287637bebe82cca91b23293f2c91292b3f1bb62296b756708c46ef230940
        hash_value = df389b0e52e59ea8bee03e511d10efe6f86625578f9c8d3347b5f70b45b33da9


#

Die digitale Signatur ist im Attribut signature hinterlegt, das verwendete Zertifikat wird über das Attribut cert_tag referenziert. Dabei wird als Referenz die Seriennummer des Zertifikates benutzt. Alle von Trusted Execution verwendeten Zertifikate befinden sich im Verzeichnis /etc/security/certificates:

# ls -l /etc/security/certificates
total 112
-rw-r-----    1 root     security       1009 Jul 07 2021  AIX_PSIRT_cert
-rw-r-----    1 root     security        451 Jul 07 2021  AIX_PSIRT_pubkey.txt
-rw-r-----    1 root     security        571 Jul 25 2020  certificate_61
-rw-r-----    1 root     security        571 Jul 25 2020  certificate_610
-rw-r-----    1 root     security        571 Jul 25 2020  certificate_71
-rw-r-----    1 root     security        846 Jul 25 2020  certificate_72
-rw-r-----    1 root     security        846 Mar 24 2021  certificate_73
-r-xr-xr-x    1 root     system          933 Mar 12 2024  certificate_rsct_3.2
-r-xr-xr-x    1 root     system          935 Mar 12 2024  certificate_rsct_3.3
-rw-r-----    1 root     security        272 Mar 17 09:50 pubkey_71.pem
-rw-r-----    1 root     security        451 Mar 17 09:50 pubkey_72.pem
-rw-r-----    1 root     security        451 Mar 17 09:50 pubkey_73.pem
-rw-r-----    1 root     security        451 Mar 17 09:50 pubkey_rsct_3.2.pem
-rw-r-----    1 root     security        451 Mar 17 09:50 pubkey_rsct_3.3.pem
drwxr-x---    2 root     security        256 Oct 27 2022  tnc
#

Die Seriennummern der Zertifikate unter /etc/security/certificates können mit Hilfe von OpenSSL und einer kleinen for-Schleife leicht aufgelistet werden:

# for cert in /etc/security/certificates/* ; do echo $cert $( openssl x509 -in $cert -noout -serial 2>/dev/null ) ; done
/etc/security/certificates/AIX_PSIRT_cert serial=8CC6C56B2F01F0D0
/etc/security/certificates/AIX_PSIRT_pubkey.txt
/etc/security/certificates/certificate_61 serial=AF4B62B878AA47F7
/etc/security/certificates/certificate_610 serial=AF4B62B878AA47F7
/etc/security/certificates/certificate_71 serial=D3CBD2922627B209
/etc/security/certificates/certificate_72 serial=49424D4149583A31324331342D33314332303A324B3A41
/etc/security/certificates/certificate_73 serial=49424D4149583A30344232302D30334233303A324B3A41
/etc/security/certificates/certificate_rsct_3.2 serial=C7CD756D9B1BDFEE
/etc/security/certificates/certificate_rsct_3.3 serial=801AD49B5EA3532A
/etc/security/certificates/pubkey_71.pem
/etc/security/certificates/pubkey_72.pem
/etc/security/certificates/pubkey_73.pem
/etc/security/certificates/pubkey_rsct_3.2.pem
/etc/security/certificates/pubkey_rsct_3.3.pem
/etc/security/certificates/tnc
#

Hinweis: Nicht alle Dateien enthalten Zertifikate.

Achtung: Seriennummern sollten nicht doppelt vorkommen, da dann nicht klar ist, welches Zertifikat verwendet werden muss.

Die Seriennummer (cert_tag) „49424d4149583a30344232302d30334233303a324b3a41” aus dem Beispiel oben mit /usr/bin/ls gehört zur Zertifikatsdatei /etc/security/certificates/certificates_73. Die digitale Signatur von /usr/bin/ls lässt sich leicht überprüfen:

# trustchk -n /usr/bin/ls
#

Die digitale Signatur stimmt mit dem TSD-Eintrag für /usr/bin/ls überein. Bei dem ls-Kommando scheint es sich also um das original Executable von IBM zu handeln. Oder?

Ein Angreifer, der Zugriff auf ein System erlangt hat, könnte aber das Zertifikat und das /usr/bin/ls Executable ausgetauscht haben und anschließend den TSD-Eintrag mit der neuen digitalen Signatur aktualisieren. Eine Überprüfung mit „trustchk -n“ wäre dann weiterhin erfolgreich.

Es stellen sich daher mindestens die beiden folgenden Fragen:

    • Welche Zertifikate werden aktuell von der TSD verwendet?
    • Sind diese Zertifikate vertrauenswürdig und stammen wirklich von IBM?

Als erstes ermitteln wir einmal welche Zertifikate überhaupt über die TSD referenziert werden (Attribut cert_tag):

# trustchk -q ALL | grep cert_tag | sort -u
        cert_tag =
        cert_tag = 00801ad49b5ea3532a
        cert_tag = 00af4b62b878aa47f7
        cert_tag = 00d3cbd2922627b209
        cert_tag = 49424d4149583a30344232302d30334233303a324b3a41
        cert_tag = 49424d4149583a31324331342d33314332303a324b3a41
        cert_tag = VOLATILE
#

Das sind konkret die folgenden Zertifikats-Dateien:

00801ad49b5ea3532a - certificate_rsct_3.3
00af4b62b878aa47f7 - certificate_61
00d3cbd2922627b209 - certificate_71
49424d4149583a30344232302d30334233303a324b3a41 - certificate_73
49424d4149583a31324331342d33314332303a324b3a41 - certificate_72

Eine Verifizierung der Zertifikate zeigt, das es sich in allen Fällen um self-signed Zertifikate handelt. Hier die Überprüfung für /etc/security/certificates/certificate_73:

# openssl verify /etc/security/certificates/certificate_73
C = US, ST = TX, L = Austin, O = IBM Corp., OU = AIX, CN = Security
error 18 at 0 depth lookup: self-signed certificate
error /etc/security/certificates/certificate_73: verification failed
#

Hinweis: Um ganz sicher zu gehen, könnte man die Zertifikate auf ein anderes, vertrauenswürdiges, System kopieren und dort überprüfen.

Aktuell (April 2025), verwendet IBM leider self-signed Zertifikate. Damit lässt sich auf diesem Wege („openssl verify“) die Echtheit der Zertifikate leider nicht bestätigen.

Hat man ein anderes AIX System, von dem man zu 100% weiß das dort keine Änderungen stattgefunden haben, z.B. weil dort von Anfang an Trusted Execution verwendet wurde, dann kann man natürlich die Zertifikate auch mit diesem System vergleichen.

Die Sicherheit von Trusted Execution basiert aber letztlich auf der Echtheit der verwendeten Zertifikate, daher sollte man auf einem schon länger laufenden System nicht einfach die Zertifikate als korrekt akzeptieren, ohne dies kontrolliert zu haben.

Nachfolgend sind Möglichkeiten der Überprüfung beschrieben: