Jeden Monat berichtet MetaMask Security Director Luker über die neuesten Krypto-Angriffe und aufkommenden Risiken, die Sie kennen sollten.
Der April-2022-Bericht des MetaMask Security Teams behandelt Endos CommonJS-Kompatibilitätsmeilenstein für unsere npm-Abhängigkeitskette, LavaMoat v6's neue 'a'a-Paketbenennungsnotation, die die Ausführungszeit von metamask-extension um etwa das 600-fache von 10 Minuten auf unter 1 Sekunde reduziert, die Einführung von LavaMoat v6-Supply-Chain-Schutzmaßnahmen in der MetaMask Extension, LavaMoat's lockdown(), das React Native-Kompatibilität erreicht und damit den Weg zu MetaMask Mobile ebnet, sowie eine iCloud-Backup-Warnung für MetaMask-Vault-Daten. Tauchen Sie unten in die Details ein, aber zuerst...
MINT-Pionier im Fokus: Butler Lampson, Vater der fähigkeitsbasierten Computersicherheit
Butler Lampson ist ein amerikanischer Informatiker, der formalisiert hat, wie Software den Zugriff auf Ressourcen kontrolliert. Sein Zugriffsmatrix-Modell, das in den frühen 1970er Jahren entwickelt wurde, vereinte Capabilities und Zugriffssteuerungslisten in einem einzigen Framework – und brachte ihm 1992 den Turing Award ein. Die von ihm entwickelte fähigkeitsbasierte Isolation ist die theoretische Grundlage für das Compartment-Sandboxing, das Endo und LavaMoat heute zum Schutz von MetaMask einsetzen.
Endo erreicht CommonJS-Modulkompatibilität und deckt verbleibende Lücken beim Laden von npm-Paketen auf
Endos CommonJS-Unterstützung erreichte im April 2022 einen Meilenstein. End-to-End-Tests mit echten Paketen aus dem npm-Ökosystem – größtenteils aus MetaMask-Abhängigkeiten ausgewählt – deckten Fälle auf, in denen die CommonJS-Unterstützung unzureichend war, und halfen bei der Weiterentwicklung der Implementierung. Ein Test, der mehrere Export-Formen vergleicht – CommonJS in ESM importiert, über Endo, Node.js und eine Auswahl von Bundlern – half dabei, Ziele zu setzen und Regressionen zu vermeiden.
Die bedeutendsten Änderungen in der Endo-CommonJS-Unterstützung in diesem Zeitraum umfassten die Verknüpfung von Exporten mit import * und die Einführung eines impliziten Standard-Exports, die Verbesserung des Lexers zur Erkennung aller Vorkommen von require und die Verschiebung fehlender Paketfehler auf die Laufzeit, das Refactoring der Exportverarbeitung, um module.exports als Standard festzulegen und benannte Exporte zu identifizieren, sowie die Unterstützung für verschachtelte package.json mit type:module und Arrays optionaler Werte in package.json-Exporten.
Der Fortschritt wird im CommonJS-Tracking-Epic verfolgt.
Endo unterstützt nun das korrekte Laden von CommonJS-Modulen. Alle verbleibenden Probleme beim Laden echter Pakete aus npm lassen sich in vier Kategorien einteilen: Verwendung fehlender Features (wie require.resolve oder import.meta), Modifikation von Globals und Intrinsics, Auslösen von Filtern zum Schutz vor dem Einschleusen von Imports oder HTML-Kommentaren sowie fehlerhafte Export-Zuordnung und Modultypauflösung durch Endo.
Endos experimenteller run-Befehl führt JS-Dateien mit Compartment-Isolation aus
Basierend auf vorhandenem Tooling zur Verknüpfung von Endo-End-to-End-Tests kann ein experimenteller endo run-Befehl nun eine JS-Datei mit Compartments ausführen – ähnlich wie node app.js, jedoch mit Endos Isolationsmodell.
Derzeit werden alle Node.js-Kernmodule für require/import durch die Codebasis und Abhängigkeiten bereitgestellt. Weitere Arbeiten sollten die Unterstützung für Richtlinien von LavaMoat hinzufügen.
LavaMoat v6 'a'a-Paketbenennung reduziert die Ausführungszeit von metamask-extension um das 600-fache – von 10 Minuten auf unter 1 Sekunde
LavaMoat v6 wurde mit einer neuen Paketbezeichner-Notation ausgeliefert, um Probleme durch Identitätsmissbrauch und Wiederverwendung von Paketnamen zu verhindern. Die als 'a'a bezeichnete Notation wird nun als Schlüssel in Policy-Dateien verwendet.
Die Performance der ursprünglichen Implementierung wurde stark durch Ineffizienzen in Node.js beim Suchen und Zugreifen auf Dateien beeinträchtigt. Ein erster Versuch zur Leistungsverbesserung – beschränkt auf zwei Fälle einfacher Memoization – reduzierte die Worst-Case-Ausführungszeit von 'a'a in metamask-extension von 10 Minuten auf 30 Sekunden. Die Kosten durch Spitzen im Speicherverbrauch waren jedoch zu hoch.
Eine zweite Iteration von Performance-Diagnose und -Verbesserungen lieferte im Vergleich zur ersten Iteration durch einen neuen Algorithmus, eliminierte Rekursion und lokale Performance-Verbesserungen bei der Node.js-Modulauflösung über 25-mal weniger Zeit- und RAM-Verbrauch.
Insgesamt betrug die Verbesserung der Ausführungszeit zwischen der ersten vollständigen Implementierung und der aktuellen Version etwa das 600-fache.
MetaMask Extension übernimmt LavaMoat v6-Supply-Chain-Schutzmaßnahmen
MetaMask Extension läuft nun unter dem Schutz von LavaMoat v6, wobei der Rollout in PR #14488 verfolgt wird.
LavaMoat lockdown() erreicht React Native-Kompatibilität und ebnet den Weg zu MetaMask Mobile
Der grundlegende Schritt, um LavaMoat in React Native-Anwendungen funktionsfähig zu machen, ist die Ausführung der SES-Funktion lockdown(). Die Funktion lockdown() schützt Software vor Supply-Chain-Angriffen, indem sie die Primordials in JavaScript auflistet und Prototypen einfriert, wodurch es für einen böswilligen Akteur unwahrscheinlich wird, einen Prototype-Pollution-Angriff durchzuführen.
Eine detaillierte Beschreibung der gewonnenen Erkenntnisse aus dieser Arbeit findet sich im React Native Compatibility Tracker. Wesentliche Voraussetzungen für die Kompatibilität sind: Metro die Ausführung des SES-Bundles durch das Ausführen von .cjs-Dateien zu ermöglichen, spezifische lockdown-Optionen hinzuzufügen, Babel-Plugins zu entfernen und den Promise-Polyfill zu entfernen. Weitere Probleme sind spezifisch für die MetaMask Mobile-Anwendung, wie etwa Sentry- und EthereumJS-Abhängigkeiten.
Das Ergebnis ist ein Pull Request in das MetaMask Mobile-Anwendungsrepository. Die nächsten Schritte umfassen die Durchführung von End-to-End-Tests, um zu bestätigen, dass lockdown() keine zusätzlichen Funktionen beeinträchtigt hat, bevor mit der nächsten Phase fortgefahren wird: der Integration von LavaMoat in MetaMask Mobile.
iCloud-Backup enthält passwortgeschützte MetaMask-Vault-Daten
Apple-Nutzer, die iCloud-Backup für App-Daten aktiviert haben, sichern möglicherweise ohne ihr Wissen ihren passwortgeschützten MetaMask-Vault. Wenn Ihr Passwort nicht stark genug ist und jemand Ihre iCloud-Zugangsdaten durch Phishing erlangt, kann dies zum Diebstahl von Geldern führen. MetaMask veröffentlichte eine Anleitung auf X mit Schritten, die erläutern, wie diese Einstellung auf den jeweiligen Geräten kontrolliert werden kann.
MetaMasks Krypto-Sicherheitsbericht für April 2022 behandelte Endos CommonJS-Kompatibilitätsmeilenstein für MetaMasks npm-Abhängigkeitskette, LavaMoat v6's 600-fache Performance-Verbesserung in metamask-extension durch die neue 'a'a-Paketbenennungsnotation sowie die iCloud-Backup-Warnung für MetaMask-Vault-Daten. Stöbern Sie in früheren Ausgaben des MetaMask-Krypto-Sicherheitsberichts für weitere Bedrohungen, Trends und Tipps, um im gesamten Ökosystem sicher zu bleiben.