Trucha Bug
Der Trucha Bug (auch als Signing Bug oder strncmp Bug bekannt) war ein Fehler in früheren IOS, boot1 und boot2 auf der Nintendo Wii, welcher es erlaubte, die digitale Signatur von Software so zu fälschen, dass es so aussieht, als käme diese offiziell direkt von Nintendo. Der Bug wurde zum ersten Mal im Februar 2008 mit dem Wii-Systemmenü 3.2 im neuen IOS37 behoben und dann im 23. Oktober Update in allen IOS.
Erklärung
Zuerst entschlüsselt IOS bei der Installation eines Titels die Signatur und vergleicht die SHA1 des Payloads mit dem SHA1-Hash in der Signatur - das erste Problem hierbei ist, dass der Payload-Hash ein binärer SHA1-Hash ist und kein ASCII-String und deshalb ein NULL-Byte (\0
) enthalten kann. Das weitaus größere Problem ist jedoch, dass zum Vergleichen der Hashes die C-Funktion strncmp, statt memcmp benutzt wird, welche Strings vergleicht und beim ersten NULL-Byte stoppt:
„This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ, until a terminating null-character is reached, or until num characters match in both strings, whichever happens first.“
Fakesigning
Das heißt, wenn strncmp auf ein NULL-Byte trifft, vergleicht es nicht mehr weiter, selbst wenn mehr Daten hinter dem NULL-Byte existieren. Hier kann einfach auf Bruteforcing zurückgegriffen werden: Einige Bytes der Daten werden geändert, bis der SHA-1-Hash mit 00
anfängt. Auch muss die Signatur genullt werden, da diese dann entschlüsselt null ergibt (da 0 hoch Public-Key-Exponent modulo Public-Key-Modulo
gleich 0
ergibt, eine Eigenschaft von RSA). Die strncmp-Funktion schließt das Vergleichen vorzeitig ab und die Signatur ist valide. Wenn dieser Fehler in boot1 ausgenutzt wird, lässt sich der boot2 modifizieren - der HackMii Installer nutzt dies, um BootMii dort zu installieren. Fakesigning erlaubt es letztendlich, unsignierte IOS und Systemmenüs zu installieren, sowieso unsignierte Spiele zu starten.
Fix
Zum ersten Mal wurde der Bug im IOS37 behoben, welches mit dem Wii-Systemmenü 3.2 veröffentlicht wurde. Später wurde der Trucha Bug in allen IOS im 23. Oktober 2008 Update behoben - außer im IOS16. Ein aktualisierter boot1 wurde mit neueren Wiis ab Ende 2008 veröffentlicht.
IOS16
Das IOS16 (0000000100000010) war ursprünglich auf der Wii Backup Disc vorhanden und wurde von jemanden, in dessen Wii eine solche Disc vergessen wurde, unerlaubt veröffentlicht. Als Nintendo den Trucha Bug in jedem IOS gefixt hat, haben sie nicht daran gedacht, den Trucha Bug auch im IOS16 zu beheben, da dieses ja nie veröffentlicht werden sollte.
Nach diesem Update war das IOS16 das letzte IOS mit dem Trucha Bug und wurde unerlaubt genutzt, um andere IOS und das Systemmenü auf eine Version ohne den gefixten Trucha Bug zu downgraden, um Raubkopien abzuspielen. Mit dem Wii-Systemmenü 4.0 wurde das IOS16 gestubbt und somit der Trucha Bug endgültig in allen IOS behoben.
Weblinks
- Signing bug auf WiiBrew
- 25C3: Console Hacking 2008: Wii Fail - Part 4 von 0:50 bis 3:15