ALT drücken jederzeit -
USB Windows auswählen keinesfalls freiwillig.
DU weisst das, und einige geimpfte ;-) aber der übliche Verdächtige eher nicht.
Deshalb werde ich nicht müde da immer wieder reinzugrätschen. Das Fiese an diesem Zertifikat das da geschrieben wird, ist das es einen nicht standartisierten Uefi 1.1 Header hat und so die Garbage Collection durcheinander bringen kann weil das Ende dieser Variable nicht erkannt wird.
Auch wenn ich die Dinger schon lange kenne, habe ich im Zuge einer Erweiterung vom test_nvram shell script (das ist der Bestandteil vom Dumper der die Auswertung macht) zum Anzeigen _aller_ Variablen, inklusive gelöschter und nicht-Standard Variablen noch mehr darüber in Erfahrung gebracht.
aa55 7f00 2700 ist der "böse" header, normal haben wir aa55 7f0 0300 oder aa55 7f0 0700 - je nachdem durch was die Variable verändert werden darf (im Boot oder im laufenden System). Valid heisst hier, dass im Header 7f (Byte 3) steht und das eine Variable ist die noch gültig ist und nicht gelöscht wird.
Gehen wir von einer Uefi Firmware eines PC aus, dann soll das Zertifikat ja auch nicht gelöscht werden. Das besagt ja, das die Firmware dieses Rechners Windows booten darf. Dies zu löschen macht keinen Sinn.
Und da haben wir wieder das Problem: "normale" Variablen haben im Header aa557f0003 oder aa557f0007, wenn zu löschen aa557[c-e]0003 oder aa557[c-e]0007 aber keine 27 am Ende.
Deshalb sind die Dinger so giftig. Eigentlich wäre es eine ganz normale, ordinäre Variable. Aber eben nicht für die UEFI 1.1 Firmware unserer Mac Pros.
Code:
test_nvram /Users/pathtonvram.vol -hexdumpall
...
1 1 CurrentPolicy (MS Certificate) (not ok)
1 1 Microsoft certificates (very bad)
5 (0 deleted) 5 Microsoft variables
...
Variable at position: 2442, data size: 0x0601 (VSS1) (valid)
> 77fa9abd-0359-4d32-bd60-28f4e78f784b:CurrentPolicy
00000000: aa55 7f00 2700 0000 1c00 0000 0106 0000 .U..'...........
00000010: bd9a fa77 5903 324d bd60 28f4 e78f 784b ...wY.2M.`(...xK
00000020: 4300 7500 7200 7200 6500 6e00 7400 5000 C.u.r.r.e.n.t.P.
00000030: 6f00 6c00 6900 6300 7900 0000 e007 090e o.l.i.c.y.......
00000040: 1033 2c00 0000 0000 0000 0000 f005 0000 .3,.............
00000050: 0002 f10e 9dd2 af4a df68 ee49 8aa9 347d .......J.h.I..4}
00000060: 3756 65a7 3082 05d4 0201 0131 0f30 0d06 7Ve.0......1.0..
00000070: 0960 8648 0165 0304 0201 0500 300b 0609 .`.H.e......0...
00000080: 2a86 4886 f70d 0107 01a0 8203 de30 8203 *.H..........0..
00000090: da30 8202 c2a0 0302 0102 0210 2d15 5e67 .0..........-.^g
000000a0: d170 47b7 45e7 0d60 fdc1 df86 300d 0609 .pG.E..`....0...
000000b0: 2a86 4886 f70d 0101 0b05 0030 818c 310b *.H........0..1.
000000c0: 3009 0603 5504 0613 0255 5331 1330 1106 0...U....US1.0..
000000d0: 0355 0408 0c0a 5761 7368 696e 6774 6f6e .U....Washington
000000e0: 3110 300e 0603 5504 070c 0752 6564 6d6f 1.0...U....Redmo
000000f0: 6e64 311e 301c 0603 5504 0a0c 154d 6963 nd1.0...U....Mic
00000100: 726f 736f 6674 2043 6f72 706f 7261 7469 rosoft Corporati
00000110: 6f6e 3136 3034 0603 5504 030c 2d4d 6963 on1604..U...-Mic
00000120: 726f 736f 6674 2057 696e 646f 7773 2053 rosoft Windows S
00000130: 6563 7572 6520 426f 6f74 2056 6172 6961 ecure Boot Varia
00000140: 626c 6520 5369 676e 6572 301e 170d 3136 ble Signer0...16
00000150: 3039 3039 3139 3031 3030 5a17 0d31 3930 0909190100Z..190
00000160: 3930 3930 3730 3030 305a 3081 8c31 0b30 909070000Z0..1.0
00000170: 0906 0355 0406 1302 5553 3113 3011 0603 ...U....US1.0...
00000180: 5504 080c 0a57 6173 6869 6e67 746f 6e31 U....Washington1
00000190: 1030 0e06 0355 0407 0c07 5265 646d 6f6e .0...U....Redmon
000001a0: 6431 1e30 1c06 0355 040a 0c15 4d69 6372 d1.0...U....Micr
000001b0: 6f73 6f66 7420 436f 7270 6f72 6174 696f osoft Corporatio
000001c0: 6e31 3630 3406 0355 0403 0c2d 4d69 6372 n1604..U...-Micr
000001d0: 6f73 6f66 7420 5769 6e64 6f77 7320 5365 osoft Windows Se
000001e0: 6375 7265 2042 6f6f 7420 5661 7269 6162 cure Boot Variab
000001f0: 6c65 2053 6967 6e65 7230 8201 2230 0d06 le Signer0.."0.
...
...
00000630: 05d3 531c 55d9 cde1 c8ef 9f36 02 ..S.U......6.
Wenn das Ding praktisch kein Ende hat, dann stimmt die ganze Kalkulation, wann die Garbage Collection laufen soll nicht mehr richtig. Wenn dann noch ein paar andere blöde Dinge zusammenkommen, dann gibt's keine GC und die Firmware schreibt in den nächsten Stream und dann in Fsys (wo die Sensorbeschreibung und die meisten IDs sind) - und spätestens dann gibt es den Brick.