Gunnar Bittersmann: Microsoft Edge verrät eure Passwörter!

Microsoft Edge verrät eure Passwörter! (Video von heise & c't, 4 min)

Oder weniger reißerisch: Microsoft Edge speichert eure Passwörter im Klartext. Aber schlimm genug.

🖖 Live long and prosper

--
In our chants of “ICE out now”
Our city’s heart and soul persists
Through broken glass and bloody tears
On the streets of Minneapolis

— Bruce Springsteen, Streets of Minneapolis
  1. Hallo Gunnar,

    dass ein Programm Daten im Klartext im Speicher hält, kommt oft vor. Natürlich kann man die Daten des Passwortmanagers verschlüsselt im Speicher halten, aber irgendwann muss man Farbe bekennen und das Ding entschlüsseln. Spätestens dann, wenn das Passwort an den damit geschützten Dienst übermittelt werden muss. Ein treusorgender Browser sorgt sofort nach Übermittlung dafür, dass der entschlüsselte Speicherbereich überschrieben wird, so dass der Klartext nur wenige Mikrosekunden im Browserspeicher vorliegt.

    Aber er liegt auch im Netzwerkstack vor. Okay. base64-codiert, aber er liegt vor. D.h. der Angriffsvektor ist nicht weg, sondern etwas kleiner, und zeigt woanders hin.

    Hinzu kommt, dass man den Speicher eines Prozesses auslesen muss, um an die Daten heranzukommen. Das benötigt meines Wissens Code in diesem Prozess, oder erhöhte Admin-Rechte. Aber ich lasse mich gerne eines Schlimmeren belehren.

    Allerdings:

    • Mit JavaScript geht das nicht, es sei denn, man findet einen Pufferüberlauftrick
    • Einen Taskmanager-Dump als Sicherheitslücke zu beschreiben ist in etwa so schlau wie einen Hauseinbruch zu demonstrieren, indem man vorher den Schlüssel unter die Fußmatte legt.
    • Ob Browser-Extensions, die in C++ oder anderem geschrieben sind, auf diesen Speicher zugreifen können, wäre erstmal zu beweisen. Edge, Chrome und Konsorten teilen sich nicht ohne Grund auf mehrere Prozesse, nicht Threads, auf.

    Mit anderen Worten: das ist Heise-typisches Microsoft-Bashing. Und alle Kommentare bashen stumpf mit. Ich weiß, warum ich mein c't Abo storniert habe.

    Ein kritischer Angriffsvektor liegt mMn vor, wenn ein fremdes Programm – und zwar NICHT der Taskmanager, denn den hat der Benutzer ja selbst aufgerufen und der kann den PW-Manager eh direkt aufrufen – den Speicher von Edge auslesen kann und darin die Passwörter findet. Dazu muss es aber erstmal wissen, wo es suchen muss. Dass ich ein Passwort finde, wenn ich es kenne, ist keine Kunst. Ich muss es finden, ohne es zu kennen. Dies hätte das Video vorführen müssen.

    Nur - wie macht man es besser? Man müsste die Daten verschlüsselt speichern, aber man muss sie auch entschlüsseln können. D.h. der Code zum Entschlüsseln muss im Browser vorliegen. Wenn man weiß, wie der Passwortmanager programmiert ist und hinreichend schlau ist (ok, ich nicht), sollte es möglich sein, so die nötigen Infos im Dump zu finden.

    Die einzige sichere Methode wäre ein geschützter Windows-Prozess, der die Passworthaltung übernimmt und der im Namen des Browsers den Authenticate-Header in den betreffenden Request einsteuert. Dieser muss dann auch noch die Passwort-DB so speichern, dass man sie bei einem Boot von USB-Stick nicht einfach knacken kann.

    Das heißt dann aber auch, dass dieser Prozess zwischen Klartext und HTTPS-Datenstrom sitzen müsste, denn die HTTPS-Verschlüsselung macht der Browser, nicht der Netzwerkstack. Und damit findet sich der Authenticate-Header wieder irgendwo im RAM.

    Um das zu lösen, müsste jede Menge Netzwerk-Code vom Browser ins OS verschoben werden, um sicherer zu werden. Macht das irgendwer? Linux? Mac?

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Ob Browser-Extensions, die in C++ oder anderem geschrieben sind, auf diesen Speicher zugreifen können, wäre erstmal zu beweisen.

      Im RAM? Das ist jedenfalls alles andere als einfach. Wenn ich verstehe, was ich in den letzten 36 Jahren so gelesen habe, verhindern moderne Betriebssysteme das (oder versuchen es). Jedem Prozess wird ein virtueller Speicherbereich mit logischen Adressen zugewiesen, der vom Betriebssystem verwaltet wird. Dieses „mappt“ dann auch die logischen Adressen (nach der Prüfung ob der Prozess oder Thread das auch darf) auf die physikalischen und „visa versa“.

      Will man Programm B den Zugriff auf Daten von Programm A erlauben gibt es hingegen sehr explizites Zeug wie Shared Memory, Message Queues, Pipes und natürlich das Dateisystem. Letztes spielt hier eine wichtige Rolle. (siehe ganz unten)

      Im vorigen Jahrtausend hingegen konnte Prozess A sich tatsächlich unter gewissen Umständen durch den Prozess B zugeordneten Speicher greppen. Das war, wenn ich mich richtig erinnere, ein Bug, weil in C (oder war es Assembler?) geschiebenene Programme auf Adressen jenseits des zugewiesenen Speichers zugreifen konnten. Hatte ein Programm meinetwegen 1MB erhalten hat es, dem Wille des pösen Programmierers folgend, einfach lesend auf Adressen jenseits von 1MB zugegriffen (die einem anderen Programm gehörten) und „Peng!“

      Zum Video: Heise umgeht diesen Schutz, in dem es ein Speicherabbild wegschreibt. Das ist ein Dump genau des kompletten, dem Prozess zugewiesene Speichers. Dieses Risiko geht man aber ziemlich bewusst ein. Jedenfalls wenn man ausreichend intelligent (undoof) ist oder durch eine Schulung sensibilisiert wurde. Gunnar hat insoweit recht: Man kann mit Software nicht alles verhindern...

      1. Hallo Raketenwilli,

        wenn ich den User dazu bringen kann, ein bösartiges Programm mit erhöhten Rechten auszuführen, steht mir das Debug-API zur Verfügung und damit kann ich fremden Prozessspeicher nach Belieben auslesen.

        Wie tue ich das? Ich verstecke mich bleistiftsweise als Custom Setup in einem Installer-Paket. Um für "Alle Benutzer" zu installieren, muss der Installer mit erhöhten Rechten laufen. Mein Custom Setup dann auch, soweit ich weiß. Und das startet dann im Hintergrund Edge, liest seinen RAM, saugt sich den Inhalt des Passwort-Managers und schickt ihn an приме́р.ru. Oder 榜样.zh. Oder example.gov. Oder bmi.bund.de - wer weiß das schon.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. @@Rolf B

          приме́р.ru

          Im Russischen werden keine Akzentzeichen gesetzt – außer zum Erlernen der Sprache zur Kennzeichnung der im Wort betonten Silbe. Vielleicht findet man sie auch in der russischen Wikipedia für die Aussprache (fremdsprachiger) Namen. Sonst nicht.

          Das sollte ohne Strich пример.ru heißen. Oder richtig konsequent пример.рф.

          🖖 Live long and prosper

          --
          In our chants of “ICE out now”
          Our city’s heart and soul persists
          Through broken glass and bloody tears
          On the streets of Minneapolis

          — Bruce Springsteen, Streets of Minneapolis