Archive for the ‘Trusted Platform Module’ Category

Trusted Platform Module (TPM) unter Windows und SpecVersion ermitteln

13 Februar 2018

Um Passwörter und Geheimnisse abzusichern werden immer mehr Hardwaremodule eingesetzt. Eines dieser Module ist z. B. TPM. Die Aufgabe eines Trusted Platform Module ist es bestimmte Schlüssel und Geheimnisse abzuspeichern. Es ist zwar meist ein Hardwaremodul aber es kann im Innern doch auch wieder per Software updatebar sein. Ich hatte bereits vor Jahren versucht TPM unter Hyper-V mit ans laufen zu bekommen https://newyear2006.wordpress.com/2014/05/15/hyper-v-vms-trusted-platform-module-und-das-problem-mit-den-virtual-smart-cards/.  Damals gab es aber noch keine Unterstützung im Hyper-V. Dies sieht heute anders aus. Dadurch kann man sich nun mit TPM beschäftigen, ohne sich viel Gedanken machen zu müssen. Wo TPM bei Windows 10 zum Einsatz kommt, kann man hier nachlesen: https://docs.microsoft.com/en-us/windows/security/hardware-protection/tpm/how-windows-uses-the-tpm.

Eine Frage die sich schnell ergibt, wenn man sich damit beschäftigt, ist, welche Version hat man eigentlich? Gängig sind Version 1.2 oder 2.0. Ruft man mittels TPM.MSC also die “Trusted Platform Module”-Management (TPM)-Konsole auf, dann kann man dort unter TPM-Herstellerinformationen die Spezifikationsversion einsehen. Schön, aber wie geht das auch per Commandline? Da gibt es eigentlich das Cmdlet Get-Tpm:

PS > Get-Tpm

TpmPresent                : True
TpmReady                  : True
ManufacturerId            : 1297303124
ManufacturerIdTxt         : MSFT
ManufacturerVersion       : 8213.275
ManufacturerVersionFull20 : 8213.275.21.18466

ManagedAuthLevel          : Full
OwnerAuth                 : R8yRy4e6DfK2hDS/EbQxdhA=
OwnerClearDisabled        : False
AutoProvisioning          : Enabled
LockedOut                 : True
LockoutHealTime           : 10 minutes
LockoutCount              : 0
LockoutMax                : 31
SelfTest                  : {}

Hier hätte ich erwartet, dass SpecVersion auftaucht, doch leider tut sie es nicht. Ok wir haben ja Powershell, vielleicht versteckt sich die Info woanders:

Get-Command -Module TrustedPlatformModule -ParameterName *spec*

Aber da kommt leider auch nix raus. Zumindest in der Version 2.0 der Cmdlets aus dem TrustedPlatformModule-Modul.

Also was tun? Wie immer liegt die Lösung im WMI, denn dort kann man die Klasse Win32_Tpm finden, zunächst brauchen wir aber eine einfache Möglichkeit um alle Namespaces zu durchlaufen:

Function Get-NamespaceRecursive ($namespace) {
$nss=Get-CimInstance -Namespace $namespace -ClassName __NAMESPACE
$nss | % {"$namespace/$($_.Name)"; Get-NamespaceRecursive "$namespace/$($_.Name)" }
}

Mit dieser können wir mittels diesem Aufruf alle verfügbaren Namespaces ermitteln und dort nach TPM Ausschau halten:

$ns=Get-NamespaceRecursive "root"
$tpm=$ns| % {Get-CimClass -Namespace $_ -ClassName *} | where CimClassName -match tpm

   NameSpace: ROOT/CIMV2/Security/MicrosoftTpm

CimClassName                        CimClassMethods      CimClassProperties
————                        —————      ——————
Win32_Tpm                           {IsEnabled, IsOwn… {IsActivated_Initial…

Damit erhalten wir zwei Treffer, einer davon Win32_TPM. Diesen schauen wir uns genauer an:

(Get-CimClass -Namespace ROOT/CIMV2/Security/MicrosoftTpm -ClassName Win32_Tpm).CimClassProperties | where name -match specversion

Name               : SpecVersion
Value              :
CimType            : String
Flags              : Property, NullValue
Qualifiers         : {Description, Implemented}
ReferenceClassName :

Also Volltreffer. Es gibt sie also, die gesuchte Information.

Um in Zukunft die SpecVersion des TPM zu ermitteln verwendet man diesen einfachen Aufruf:

wmic /namespace:\\root\CIMV2\Security\MicrosoftTpm path Win32_Tpm get /value

IsActivated_InitialValue=TRUE
IsEnabled_InitialValue=TRUE
IsOwned_InitialValue=TRUE
ManufacturerId=1297303124
ManufacturerIdTxt=MSFT
ManufacturerVersion=8213.275
ManufacturerVersionFull20=8213.275.21.18466
ManufacturerVersionInfo=496f5420536f6674776172652054504d00
PhysicalPresenceVersionInfo=1.3
SpecVersion=2.0, 0, 1.15

Ups, das war der falsche Befehl 🙂 Bin da etwas in alte Zeiten ohne Powershell abgerutscht… Trotz allem könnte obiger Befehl in Situationen wichtig sein, wenn man mittels WinPE oder WinRE unterwegs ist und kein Powershell an Bord hat. In diesem Fall sollte man aber noch drvload x:\windows\inf\tpm.inf im Hinterkopf behalten, denn ohne Treiber geht evtl. nix. Zurück aber zum Thema.

Gemeint war dieser:

(Get-CimInstance -Namespace ROOT/CIMV2/Security/MicrosoftTpm -ClassName Win32_Tpm).SpecVersion
2.0, 0, 1.15

Schön nun haben wir Version 2.0, 0, 1.15 und das bedeutet nun? Ist es 2.0 oder eine verkappte 1.2 Version? Tja, Aufklärung gibt es auf der Microsoft Seite zur Win32_Tpm-Klasse https://msdn.microsoft.com/en-us/library/windows/desktop/aa376484, dort steht:

The version of the Trusted Computing Group (TCG) specification that the TPM supports. This value includes the major and minor TCG specification version, the specification revision level, and the errata revision level. All values are in hexadecimal. For example, a version information of "1.2, 2, 0" indicates that the device was implemented to TCG specification version 1.2, revision level 2, and with no errata.

When the data is unavailable, "Not Supported" is returned.

Aha, wir bekommen also ziemlich viel geboten. Nur stellt sich die Frage, was für Erratas und Revisionen gibt es? Nun, wenn man beim Informationsimperium anfragt, dann bekommt man diese Seite geliefert: https://trustedcomputinggroup.org/tpm-library-specification/. Übrigens hatte ich die Trusted Computing Group schon mal mit SED im Programm: https://newyear2006.wordpress.com/2016/10/01/self-encrypting-drives-sed-und-probleme-mit-gelschten-bitlocker-partitionen/.

Obige SpecVersion mit 2.0, 0, 1.15 sagt also aus, dass wir es mit der 2.0er-Familie, dem Level 0 und der Revision 01.16 vom Oktober 2014 zu tun haben. Wobei die Angaben sich mit der Beschreibung von Microsoft oben nicht decken.

Hier die aktuell bekannten Versionen:

Familie/Version Level Revision vom
2.0 0 01.38 September 2016
2.0 0 01.16 Oktober 2014
2.0 0 00.99 Oktober 2013
2.0 0 00.96 März 2013
1.2 2 116  
1.2 2 103  
1.2   94  
1.2   85  
1.2   62  
1.1b      

Die Werte für 1.2 sind von hier: https://trustedcomputinggroup.org/tpm-main-specification/.

Wer sich tiefergehend mit TPM 2.0 beschäftigen möchte, der sollte sich unbedingt die Architekturbeschreibung und die Einrichtungsrichtlinien anschauen, https://trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-1-Architecture-01.38.pdf und https://trustedcomputinggroup.org/wp-content/uploads/TCG-TPM-v2.0-Provisioning-Guidance-Published-v1r1.pdf.

TPM 2.0 und Linux sind dann nochmal ein Thema für sich: https://blog.hansenpartnership.com/tpm2-and-linux/.

Nicht zu vergessen sind auch die CVEs mit TPMs, welche es zu beachten gibt: https://www.google.de/search?q=cve+tpm.

Werbeanzeigen

Hyper-V VMs, Trusted Platform Module und das Problem mit den Virtual Smart Cards

15 Mai 2014

Von Microsoft gibt es endlich mal wieder tolles, neues Spielzeug. Seit Windows 8 gibt es sogenannte Virtual Smart Cards. Von der Funktion her reagieren sie wie echte Smartcards, allerdings hat man sie im Rechner. Vor ein paar Tagen wurde nun Windows Phone 8.1 vorgestellt und siehe da, Windows Phone 8.1 ist nun auch Virtual Smart Card fähig!

OK, wenn man drüber nachdenkt, dann kommt man schnell zum Punkt: Toll was soll die Sache, wenn dann jeder kurz mal meine Smartcards kopieren kann, der irgendwie Zugriff auf meinen Rechner oder Handy hat?

Da kommt nun TPM ins Spiel. Im Businessbereich schon seit Jahren in vielen Rechnern eingebaut und oft unbenutzt, hat TPM mittlerweile Version 2 erreicht. Übrigens vergleichbares bei ARM nennt sich TrustZone. Auf jeden Fall handelt es sich dabei um einen speziellen Speicherbereich, auf dem z. B. auch Privatkeys sicher gespeichert werden können sollen. Android unterstützt diese Hardwarespeicherung auch seit Version 4.3 mit dem sogenannten Hardware Credential Store.

Um sich nun mit diesen interessanten Dingen beschäftigen zu können, kann man selber Smartcards anlegen. Üblicherweise macht man heutzutage alles in VMs. Aber leider fehlt es an diesem Ende mal wieder. Der aktuelle Hyper-V Server 2012 R2 unterstützt zwar SecureBoot bei Generation 2 VMs allerdings bringt er keine Unterstützung von TPM innerhalb von virtuellen Maschinen mit. Schade, sehr schade.

So führt die Verwendung von TPMVSCMGR.EXE dazu:

tpmvscmgr create /name MyVSC /pin default /adminkey random /generate

Standard—PIN verwenden: 12345678
TPM—Smartcard wird erstellt…
Komponente für virtuelle Smartcards wird initialisiert…
Komponente für virtuelle Smartcards wird erstellt…
Fehler beim Erstellen der Komponente für virtuelle Smartcards.
         (0x80090030) Das Gerät, das von diesem kryptografischen Anbieter angefordert wird, kann nicht verwendet werden.

Dieser Artikel bestätigt auch nochmal das Fehlen von TPM in VMs in der aktuellen Version: http://blogs.technet.com/b/jhoward/archive/2013/11/04/hyper-v-generation-2-virtual-machines-part-7.aspx. Schade.

Wenn man bestimmte übergeordnete Instanzen bei Microsoft außer acht lässt und man zunächst davon ausgeht, dass TPM die Privatkeys sicher speichert, dann könnte man es mittels dieser Technologie endlich schaffen sich per Handy mittels Bluetooth über die virtuelle Smartcard anzumelden. Da ja nun mittels Bluetooth 4.0 LE auch der Abstand der Geräte über das ProximityProfile ermittelbar ist, kann man z. B. definieren, dass das Handy immer im Bereich von 30-40cm zum Rechner sein muss, ansonsten wird automatisch der Lockscreen aktiv. Klar klappt das erst perfekt, wenn man mehrere Bluetoothsignalgeber an verschiedenen Stellen hat, aber die Dinger werden immer billiger und kleiner. Daraus resultiert dann quasi ein Inhouse GPS.

Davon spricht man schon ewig aber nun hat man wahrscheinlich alle Komponenten beieinander um so etwas sinnvoll umsetzen zu können. Oh, hab ich was von Windows 9 gehört? Ähm nö, gibts doch noch gar nicht.

Allgemein zu Virtual Smart Cards unter Windows: http://technet.microsoft.com/en-us/library/dn593708.aspx
Der Blog-Eintrag der VSC in Windows Phone 8.1 benennt: http://blogs.windows.com/windows/b/business/archive/2014/04/02/building-the-mobile-workplace-with-windows-and-windows-phone.aspx
Das dahinterliegende Management Protokoll: http://msdn.microsoft.com/library/hh880895.aspx
TPMVSCMGR.EXE-Beschreibung: http://technet.microsoft.com/en-us/library/dn593707.aspx