32-Bit
und 64-Bit
Zur Zeit kursiert ein Bildschirm-Photo eines Warnhinweises der Netzwerk-Einstellungen
in Schnee-Leopard, die besagt, die System-Einstellungen müssen im 32-Bit
-Modus
neugestartet werden, um die Netzwerk-Einstellungen zu verwenden.
Schnee-Leopard, also Version 10.6, befindet sich zur Zeit in der Entwicklung und das Veröffentlichen von Bildschirm-Photos ist den Leuten, die Zugang dazu haben, vertraglich verboten. Irgendwer hat sich nicht daran gehalten und das Bild des bislang unfertigen Betriebssystems löste anschließend auf diversen Seiten und in allerlei Foren unnötige Verwirrung und Spekulationen aus.
Ein schönes Mißverständnis auf apfeltalk beispielsweise ist, daß Felix schreibt:
… Warnhinweis: Der Anwender möchte bitte die Systemeinstellungen im 32-Bit-Modus starten …
Korrekt ist, daß das "System" die "System-Einstellungen" neustarten möchte dafür. Der
Anwender hat damit nichts zu tun. Das erkennt man leicht, wenn man den englischen
Text in dem Photo richtig übersetzt. Man würde es allerdings auch blind wissen, wenn
man die Details kennt, wie
OS X die fetten
Binärdateien (fat binaries
), die Apple "Universal Binaries"
nennt, handhabt.
Die fetten Binärdateien enthalten mehrere ausführbare Versionen des gleichen Programmtextes in einer einzigen Datei. Der Anwender kann nicht festlegen, welcher Teil der Datei ausgeführt wird. Er kann nur das Programm starten und das System wählt die passende Variante. Und genau das passiert auch in dem Szenario, was das diskutierte Bildschirm-Photo andeutet: Das System bemerkt, daß es die falsche Variante ausführt und möchte nun lieber die andere, passende Variante starten. Der Anwender darf sagen, ob er der dazu nötigen Beendigung der gerade laufenden Version zustimmt. Denn es wäre doch nicht sehr schön, wenn das System dem Anwender einfach ein von ihm gestartetes Programm beendet.
Hier ist ein praktisches Beispiel für eine fette Binärdatei, das jeder selbst ausprobieren kann. Es enthält ausführbare Versionen für vier verschiedene Prozessor-Typen. Zuerst zeige ich den Programmtext.
KeyWest:~ macmark$ cat hello.c
/* Hello World program */
#include<stdio.h>
main()
{
printf("Hello World");
}
Nun erstelle ich daraus eine übersetzte, ausführbare Datei, die vier verschiedene Versionen enthält für vier verschiedenen Prozessor-Architekturen:
KeyWest:~ macmark$ gcc -arch ppc -arch ppc64 -arch i386 -arch x86_64 -c hello.c
Dann schauen wir uns das Ergebnis mal an.
KeyWest:~ macmark$ file hello.o
hello.o: Mach-O universal binary with 4 architectures
hello.o (for architecture ppc7400): Mach-O object ppc
hello.o (for architecture ppc64): Mach-O 64-bit object ppc64
hello.o (for architecture i386): Mach-O object i386
hello.o (for architecture x86_64): Mach-O 64-bit object x86_64
Wir können auch noch genauer hineinschauen.
KeyWest:~ macmark$ lipo -detailed_info hello.o
Fat header in: hello.o
fat_magic 0xcafebabe
nfat_arch 4
architecture ppc7400
cputype CPU_TYPE_POWERPC
cpusubtype CPU_SUBTYPE_POWERPC_7400
offset 4096
size 744
align 2^12 (4096)
architecture ppc64
cputype CPU_TYPE_POWERPC64
cpusubtype CPU_SUBTYPE_POWERPC_ALL
offset 8192
size 852
align 2^12 (4096)
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
offset 12288
size 512
align 2^12 (4096)
architecture x86_64
cputype CPU_TYPE_X86_64
cpusubtype CPU_SUBTYPE_X86_64_ALL
offset 16384
size 728
align 2^12 (4096)
Man erkennt hier, daß jeweils die Stelle (offset
) vermerkt ist,
an der jeweils eine andere
Variante des übersetzten Programmes innerhalb der Datei zu finden ist.
Wird diese ausführbare Datei nun gestartet, dann wählt das System die am besten passende Variante innerhalb der Datei und führt sie aus.
Die System-Einstellungen sind ein Programm, das zur Laufzeit (die coolen Kids sagen "dynamisch") weitere Programmteile (die coolen Kids sagen "Plug-ins") nachladen kann. Jede einzelne Einstellungs-Option ist ein solches Plug-in.
Ein 32-Bit
-Programm kann jedoch nur Plug-ins
verwenden, die auch in 32 Bit
vorliegen. Analog kann
ein 64-Bit
-Programm nur Plug-ins
verwenden, die in 64 Bit
vorliegen.
Weil Plug-ins Teil des laufenden Programmes (Prozesses) sind,
wenn sie geladen wurden, gibt es diese Bedingung auf
OS X. Allerdings
kann OS X
32-Bit
-Programme und 64-Bit
-Programme gleichzeitig ausführen.
Die Einschränkung gilt also nur innerhalb eines Programmes.
Ein Ziel von Version 10.6 "Schnee-Leopard" ist, weitere Systembestandteile in
64 Bit
verfügbar zu machen. Das ist insbesondere auf Intel-Prozessoren
sinnvoll, weil diese
bestimmte leistungssteigernde Merkmale (zusätzliche Register
beispielsweise) nur 64-Bit
-Programmen zugänglich machen. Beim
64-Bit
-
PowerPC konnten hingegen Programme, die im
32-Bit
-Modus laufen, die gleichen Prozessor-Ressourcen nutzen wie
im 64-Bit
-Modus. Da aber bei 64-Bit
-Intel-Prozessoren
nur 64-Bit
-Programme den Prozessor ganz nutzen können, ist es sinnvoll,
sämtliche Programme auf 64 Bit
umzustellen, weil die dann zusätzlich verfügbaren
Prozessor-Ressourcen auch solche Programme beschleunigen,
die gar keine 64-Bit
-Adressierung benötigen.
Die System-Einstellungen und ihre Plug-ins verfügen bis 10.5
nur über 32-Bit
-Versionen für Intel und
PowerPC.
KeyWest:~ macmark$ system_profiler -detailLevel mini SPSoftwareDataType
Software:
System Software Overview:
System Version: Mac OS X 10.5.6 (9G55)
Kernel Version: Darwin 9.6.0
Time since boot: 22 minutes
KeyWest:~ macmark$ cd /Applications/System\ Preferences.app/Contents/MacOS/
KeyWest:MacOS macmark$ file System\ Preferences
System Preferences: Mach-O universal binary with 2 architectures
System Preferences (for architecture i386): Mach-O executable i386
System Preferences (for architecture ppc7400): Mach-O executable ppc
KeyWest:~ macmark$ cd /System/Library/PreferencePanes/Network.prefPane/Contents/MacOS/
KeyWest:MacOS macmark$ file Network
Network: Mach-O universal binary with 2 architectures
Network (for architecture i386): Mach-O bundle i386
Network (for architecture ppc7400): Mach-O bundle ppc
Apple fügt offenbar nun auch für die System-Einstellungen und ihre
Plug-ins mindestens eine 64-Bit
-Version für
die beiden Prozessor-Architekturen hinzu, genauer gesagt mindestens für die Intel-Version.
Wenn beim aktuellen Entwicklungs-Stand von 10.6 nur das
System-Einstellungen-Programm selbst zusätzlich eine
64-Bit
-Version in seiner fetten Binärdatei hat und
beispielsweise das "Netzwerk"-Plug-in
nicht, dann wird "System-Einstellungen" auf einem
64-Bit
-Prozessor automatisch in der 64-Bit
-Version
gestartet, weil diese am besten paßt. Klickt man dann jedoch auf
"Netzwerk", was nur unpassende, weil noch nicht um zusätzliche
64-Bit
-Versionen ergänzte, ausführbare Programme enthält,
dann kann das "Netzwerk"-Plug-in nicht geladen
werden und man kann oben erwähnte Meldung erwarten.
Es ist jedoch davon auszugehen, daß Apple von allen
Plug-ins der System-Einstellungen auch
64-Bit
-Version erstellen wird. Wie einfach das prinzipiell ist,
kann ja jeder mit obigen Beispielen nachvollziehen.
Ebenso einfach wäre es auch, weiterhin die PowerPC-Familie zu unterstützen, denn OS X enthält nur verschwindend wenig System-Programme, die auf einzelne Prozessoren zugeschnitten sind.
Was war wirklich passiert?
OS X verwendet viele quelloffene andere Projekte, um das Rad nicht selbst neu zu erfinden. Eines davon ist die PCRE-Bibliothek. Diese wird für die JavaScript-Engine in Webkit und damit in Safari verwendet, um mit "regulären Ausdrücken" zu arbeiten.
Da solche quelloffenen Komponenten, wenn sie frei verfügbar sind, auch von vielen verwendet werden, ist die Chance hoch, mögliche Fehler auszumerzen. So wurden in dieser Bibliothek in 2007 diverse Fehler behoben und wer diese Bibliothek einsetzt, tut gut daran, eine jeweils möglichst fehlerbereinigte Version zu verwenden.
Apples aktualisierte seine Version leider erst, nachdem Charlie Miller einen bekannten Fehler in dieser Bibliothek nutzte, um den Safari auf dem iPhone, das gerade frisch auf dem Markt war, medienwirksam anzugreifen. Apple korrigierte alle zu der Zeit verfügbaren und betroffenen Version des Betriebssystems.
Als im letzten Quartal von 2007 dann Leopard fertiggestellt wurde, war eine veraltete Version der PCRE-Bibliothek enthalten. Das liegt daran, daß in den Entwicklungszweig von Leopard einige Aktualisierungen von externen Bibliotheken, die in Tiger schon eingebaut waren, nicht eingepflegt wurden. In Leopard tauchten leider einige schon früher behobene Fehler erneut auf.
Apples Fehler bestand also darin, nicht schnell genug die korrigierten Versionen externer Bibliotheken einzusetzen. Die veraltete Version in Leopard wurde erst in 2008 behoben, nachdem Charlie Miller auch in Leopard die gleiche fehlerhafte PCRE-Bibliothek nochmals ausnutzte, um auch darauf Safari anzugreifen. Wieder medienwirksam und diesmal in einem unter anderem von Microsoft gesponserten öffentlichem Wettbewerb.
Ein schönes Beispiel für reißerische Negativ-Artikel über OS X, denen man bei Kenntnis der Details nachweisen kann, daß fast nichts darin stimmt und vor allem die Schlagzeile vollkommener Unfug war, ist diese Geschichte vom 28. März 2008. Man konnte haufenweise Artikel wie diesen lesen:
MacBook Air über Zero-Day-Lücke in Safari geknackt.
Hacker benötigen im Rahmen eines Wettbewerbs für ihren Angriff nur zwei Minuten.
Auch wurde gerne so formuliert:
MacBook bei Hacker-Wettbewerb vor Vista- und Linux-Rechner geknackt
Über eine Lücke im Browser Safari konnte der Apple-Rechner innerhalb von zwei Minuten gehackt werden …
Juror auf präparierte Website gelockt
Das siegreiche Team schaffte es, einen der Juroren des Wettbewerbs auf eine präparierte Website zu locken und erlangte dadurch die Kontrolle über den Apple-Rechner.
Was stimmt an diesen Aussagen nicht?
Ein Zero-Day-Exploit ist ein Programm, das eine bisher unbekannte Sicherheitslücke am Tag ihrer Veröffentlichung ausnutzt. Das ist hier nicht der Fall, denn der zugrundeliegende Bug wurde schon 2007 veröffentlicht. Charlie Miller hat also keinen Zero-Day-Exploit gebracht, wie es der Wettbewerb, an dem er teilnahm vorschrieb, sondern einen seit Monaten veröffentlichten Fehler genutzt. Damit hat er zu unrecht "gewonnen".
Charlie Miller sagt selbst, daß er nicht allein war und daß es länger dauerte:
Wir haben uns drei Wochen vor dem Wettbewerb hingesetzt und beschlossen mitzumachen. Es dauerte ein paar Tage, um eine passende Sicherheitslücke zu finden und dann den Rest der Woche, um einen Exploit zu programmieren, der diese Lücke ausnutzen kann, und diesen zu testen. Insgesamt brauchten wir vielleicht eine Woche.
Dabei kam Charlie Miller und seinen Kollegen zugute, daß sie die fehlerhafte PCRE-Bibliothek bereits seit einem Jahr gut kannten, weil sie diese ja schon damals für einen fast identischen Angriff ausgenutzt hatten.
Auf dem Wettbewerb hat er dann den Tag abgewartet, der die Nutzung eines Browsers erlaubte, und dann Safari auf einer Seite, die seinen bereits vorbereiteten Exploit nutzte, erfolgreich angegriffen.
Von zwei Minuten kann man daher wohl kaum sprechen, sondern von mindestens einem Jahr Erfahrung mit einem vergleichbaren Angriff und wochenlanger gezielter Vorbereitung für eine weitere Variante eben dieses Angriffs.
Shane Macaulay, der Vista bei dem Wettbewerb angriff, hatte nicht damit gerechnet, daß auf dem Rechner das Service Pack 1 installiert war. Er mußte sich daher vor Ort noch ein paar weitere Tricks ausdenken, um die von ihm genutzte Sicherheitslücke ausnutzen zu können.
Auf der einen Seite hatten wir also Charlie Miller, der nachweislich gut und lange vorbereitet zum Wettbewerb kam, und auf der anderen Seite Shane Macaulay, der offenbar nicht einmal die Regeln des Wettbewerbs gelesen hatte, in denen stand, wie die Rechner ausgerüstet sind.
Neben der besseren Vorbereitung war möglicherweise auch eine deutlich höhere Motivation auf der Seite von Charlie Miller im Spiel: Er soll angeblich gesagt haben, er sehe seine Lebensaufgabe darin, die Sicherheit von Apple-Produkten zu diskreditieren.
Der Exploit für Safari ermöglicht Programmausführung unter dem Benutzer, der gerade mit Safari arbeitet. Um den Rechner zu kontrollieren, müßte er an Systemrechte damit gelangen können. Er hatte jedenfalls definitiv nicht den Rechner unter Kontrolle, sondern "nur" dem Benutzer etwas untergeschoben.
Ferner suggeriert "den Rechner hacken", daß der Angreifer allein tätig ist. Tatsächlich ist er aber darauf angewiesen, daß der Benutzer eine eigens dafür angelegte Seite besucht und JavaScript dabei aktiviert hat.
Die Regeln sahen vor, daß man dem Juror sagen darf, welche Seite er besuchen soll. Von "locken" kann daher keineswegs die Rede sein.
Die meisten Artikel über dieses oder ähnliche Sicherheitsthemen sind einfach schlecht oder gar nicht recherchiert. Sie nutzen eine plakative Schlagzeile, die die Klickrate hochtreibt, aber nicht der Wahrheit entspricht. Man sollte also sehr vorsichtig sein, der Presse solche Meldungen ungeprüft zu glauben.
Zweifelsohne hat Apple sich nicht mit Ruhm bekleckert, wenn es darum ging, sicherheitsrelevante Aktualisierungen der verwendeten Bibliotheken so bald wie möglich einzusetzen. Hier könnten sie besser sein.
Ich schreibe bewußt, sie "können" besser sein, weil die praktische Möglichkeit dazu besteht. Diese Möglichkeit hat beispielsweise Microsoft nicht:
Würde Microsofts Betriebssystem weitgehend quelloffen sein wie das von Apple, dann hätten sie ein riesiges Problem. Wie sie selbst vor Gericht ausgesagt haben, können sie Windows nicht offenlegen, weil es APIs und Protokolle enthält, die bei Offenlegung ein Sicherheitsproblem wären. Es sind also wohlgemerkt nicht einmal Bugs nötig, um Windows in Gefahr zu bringen. Es ist "broken by design", weil es APIs und Protokolle nutzt, die unsicher entworfen wurden. Das geht so weit, daß sie sicherheitskritische Bugs erst nach sieben Jahren beheben können, weil sie das fehlerhafte Design nicht einfach austauschen können. Im Gegensatz dazu lassen sich Bugs wie bei diesem Wettbewerb leicht beheben.