Meltdown-Spectre-Test mit Python?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

Hallo!

Es soll zwischenzeitlich einige Meltdown-Spectre-Tests geben, die Malware beinhalten.

Da wäre es doch schön, wenn es einen Meltdown-Spectre-Tests in Python geben würde, wo man - aufgrund des Verständnisses der Sprache - sicher sein könnte, dass der Test keine Malware enthält.

Gibt es einen Meltdown-Spectre-Test in Python?

Man will sich bei sowas ja nicht auf das Redmond-Langley Konsortium verlassen!


Grüssle
Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin mir nicht so sicher, das man das ohne Maschinensprache hinbekommt. Womit es dann wieder undurchsichtig wird. Reines Python trampelt dermassen ueber alle Cache-Lines, dass man da nicht wirklich etwas sinnvolles rausbekommen wird.

Insofern denke ich muss man da eher auf vertrauenswuerdige Quellen ala c't etc setzen. Und wenn du MS nicht vertraust (und Windows faehrst), dann ist das ja nun eh hinfaellig. Ob Spectre oder nicht, deren OS kann ja nun ganz ohne getrickse abgreifen was es will. Da jetzt zu fuerchten, das gerade der Spectre-Test nicht serioes ist, ist ja ein bisschen sehr selektiv.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

Ja, mit eingebettetem hardwarenahem C natürlich. Sorry.

Die Proof-of-Concepts für Spectre (V1/ V2) und Meltdown sind ja auch "nur" in C geschrieben, und nicht in Assembler, AFAIK.

Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man kann C nicht einbetten in Python. Jedenfalls nicht in einer sinnvollen Art. Wenn man dann eh einen Compiler braucht, um das C zu uebersetzen, wo genau ist dann der Gewinn, Python irgendwie drumrumgeschnoerkelt zu haben?

Und der Beispielcode arbeitet massiv mit intrinsics. Klar, das schluckt der C-Compiler, aber so besonders weit weg von Assembler ist das nun nicht.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

consuli hat geschrieben:Die Proof-of-Concepts für Spectre (V1/ V2) und Meltdown sind ja auch "nur" in C geschrieben, und nicht in Assembler, AFAIK.
Es gibt C und es gibt C das zu Assembler wie TypeScript zu JS steht.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

Ich habe hier auch ein ganz praktisches Problem.

Ich habe hier zwei Firewalls liegen. Eine ist OPNSense Software mit embedded AMD-Prozessor (Spectre-1 Lücke). Die andere ist proprietäre Software eines chinesischen Herstellers mit unbekanntem Prozessor. Für beide gibt es m.W. bisher noch keine Meltdown/ Spectre Patches.

Ich will nun wissen, welche der beiden Firewall-Optionen noch die bessere ist.

Mit dem Ausführen von eingebettetem C Code aus einem compilierten PythonC Modul hatte ich einen Denkfehler drin. Ich habe auf den Firewalls keinen (vollen) Root Zugriff, um dort einen Prozess zu starten.

Also habe ich mir folgendes überlegt:
  1. Die Sicherheitslücken beruhen auf verschieden Out-of-Order Funktionalitäten der Prozessoren
  2. Namentlich Speculative Execution (Meltdown), Branch Prediction (Spectre-1), und Branch Target Adress Predcition (Spectre-2)
  3. Auf den Firewalls laufen verschiedene Prozesse, zum Filtern des Netzwerkverkehrs, z.B. ein Prozess für Paketfilter und ein anderer für Stateful-Inspection
  4. Kann ich nun in einem (offline) Test-Setup nicht einfach einen Rechner jeweils vor die Firewall und einen hinter die Firewall klemmen, die
  5. der Firewall eine größere Serie von präparierten Paketen schicken (für unterschiedliche Filter, die innerhalb der Firewall von unterschiedlichen Prozessen betrieben werden) und
  6. dann anhand der Reihenfolge wie die Pakete aus der Firewall wieder rauskommen, darauf zurück schließen, ob der Firewall-Prozessor eine der für die Sicherheitslücken ursächlichen Funktionalität hat (Speculative Execution, Branch Prediction, und Branch Target Address Prediction)?
  7. (ohne den Exploit effektiv durchzuführen)
Und da ich nur Python kann, sollte das ganze so weit wie möglich in Python erfolgen. :D

Bei der aktuellen Vorsorge gegen Meltdown und Spectre bin ich ja stehts auf das Gusto des Herstellers angewiesen, inbesondere der Hersteller bereit sein muss, sich als "von den Sicherheitslücken betroffen" zu outen. Wie wir bereits bei AMD gesehen haben, tun manche Hersteller dies aber nur, wenn sie nicht mehr anders können, weil der Nachweis erbracht ist. Diese Situation ist ÄUSSERST unbefriedigend.

Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Die side-channel Timing-Attacken die durch die Angriffe ausgenutzt werden bewegen sich im nano, bestenfalls Mikrosekundenbereich. Da bekommst du durch den gesamten Stack von NIC, Bus, OS-Scheduling mal zwei etc dermassen viel ungwaegbarkeit rein, das du da ueberhaupt keine Informationen draus gewinnst.

Zusaetzlich dazu ist deine Angriffs-Szenario-Logik ja auch komplett daneben: die Angriffe erlauben Code, der *auf* einem Rechner ausgefuehrt wird, Dateninhalte von *anderen* Prozessen *auf dem Rechner* auszuspionieren. Und diese Gefahr ist deshalb so gross, weil man eben Hinz und Kunz (inklusive Javascript) erlaubt, Code auf einem Computer der am Netz haengt auszufuehren.

Dein Szenario ist also schon mal voellig irrelevant, weil niemand auf deiner Firewall drive-by-maessig Code ausfuehrt. Der Angreifer muss also erstmal Zugriff auf die Firewall bekommen, den du selbst schon wie beschrieben noch nicht mal hast. Falls also jemand dazu in der Lage ist, eben dies zu tun - dann stehen die Chancen schon mal 100:1, des er eh root-Rechte hat, womit sich die Frage nach side-channel-Attacken eruebrigt. Da lese ich einfach den gesamten Speicher nach gusto aus.

Und jetzt nehmen wir mal an, es gaebe ein komisches Firewall-Widget-Feature oder der Angreifer bekommt nur eine normale aber keine root-Rechte: was bewegt sich denn auf deiner Firewall? Die Angriffe sind *sehr* langsam. Es lohnt sich also nur bei Daten, die lange im Speicher verbleiben, wie der Browser-Passwort-Store. Die Netzwerkpakete, die da fuer Sekundenbruchteile durchflitzen - da hast du mit den Angriffen keine Chance.

Insofern - mach dir da keinen Kopf.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

__deets__ hat geschrieben: Und jetzt nehmen wir mal an, es gaebe ein komisches Firewall-Widget-Feature oder der Angreifer bekommt nur eine normale aber keine root-Rechte: was bewegt sich denn auf deiner Firewall? Die Angriffe sind *sehr* langsam. Es lohnt sich also nur bei Daten, die lange im Speicher verbleiben, wie der Browser-Passwort-Store. Die Netzwerkpakete, die da fuer Sekundenbruchteile durchflitzen - da hast du mit den Angriffen keine Chance.

Insofern - mach dir da keinen Kopf.
Und eine Software-Firewall (nicht-geschlossenes System) hat keine Passwörter im Speicher, z.B. von einem vorherigen administrativen Zugriff?

Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

Nur damit wir nicht aneinander vorbeireden:
consuli hat geschrieben:
  • (Um dann) darauf zurück schließen, ob der Firewall-Prozessor eine der für die Sicherheitslücken ursächliche Funktionalität hat (Speculative Execution, Branch Prediction, und Branch Target Address Prediction)?
  • (ohne den Exploit effektiv durchzuführen)
Ich will ja eben nicht mit Python testweise einen Sidechannel-Angriff demonstrieren, sondern nur testen, ob der Prozessor dafür GRUNDSÄTZLICH die entsprechende out-of-order FUNKTIONALITÄT besitzt (insbesondere wenn ich nicht weiß, was für eine CPU drin ist), um ggf. entsprechend Vorsorge zu betreiben.

Vielleicht sollte ich da Thema lieber "Meltdown-Spectre-VOR-Test mit Python?" nennnen.

Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Zur Passwort-Frage: es waere schon sehr ungewoehnlich, wenn Passwoerter laenger als ein paar Sekundenbruchteile im Speicher waeren. Fuer einen erfolgreichen Login ist das nicht noetig. Aber selbst wenn: zum laufen lassen einer Software, das aus dem Speicher rauspult, braucht es ja - Trommelwirbel - schon administrativen Zugang zum System... wozu den noch abgreifen?

Und deine neu gestellte Frage ist nicht anders als die Urspruengliche: fuer diese Art von Nachweis braucht es direkte Ausfuehrung von Code der tendentiell nicht in Python geschrieben werden kann *auf dem System*. Durch irgendwelche Pakete erfaehrst du da nix. Ob der Prozessor prinzipiell dafuer anfaellig ist, entnimmst du dem Datenblatt oder einem Blick ins Gehauese.

Aber ich wiederhole mich, wenn ich sage: so what? Diese Luecken sind schlimm, aber nicht fuer jedes Szenario, und IoT Geraete sind genau *keines* davon. Wenn du dir Sorgen machen willst, schmeiss die chinesische propriertaere Software raus. Da ist unter Garantie eine Backdoor drin....
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und noch ein Nachtrag: wenn du nicht weisst, ob das Problem besteht, du aber "Vorsorge" betreiben willst - dann betreib doch einfach die Vorsorge. Dazu musst du doch nicht wissen, ob das Problem wirklich besteht, dazu reicht die Annahme, das das hinreichend wahrscheinlich ist.
consuli
User
Beiträge: 52
Registriert: Sonntag 26. Juli 2015, 22:10

__deets__ hat geschrieben: Wenn du dir Sorgen machen willst, schmeiss die chinesische Firewall raus. Da ist unter Garantie eine Backdoor drin....
Ist nicht eher die Frage, passt die Backdoor zu meinen Feinden, respektive wer hat den Schlüssel für diese Backdoor? :)

Consuli
Who controls the British crown? Who keeps the metric system down? We do! We do!
Who leaves Atlantis off the maps? Who keeps the Marsians under wraps? We do! We do!
Antworten