Abo
  1. Foren
  2. Kommentare
  3. Sonstiges
  4. Alle Kommentare zum Artikel
  5. › Memcmp: Timing-Attacke auf Philips…

Wenn memcmp zum String vergleichen genutzt wird,

Anzeige
  1. Thema

Neues Thema Ansicht wechseln


  1. Wenn memcmp zum String vergleichen genutzt wird,

    Autor: bstea 10.08.14 - 17:57

    was macht man dann mit strcmp?

    --
    Erst wenn der letzte Baum gefällt, der letzte Fluss gestaut und der letzte Fisch gefangen ist, werdet ihr feststellen, dass man Biber nicht essen kann!

  2. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: muhzilla 10.08.14 - 19:33

    Und genau wegen solchen Dingen kann ich wenn es hart auf hart kommt, sehr gut auf golem verzichten :)

  3. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: Elberet 10.08.14 - 20:01

    > Wenn memcmp zum String vergleichen genutzt wird,
    ... dann hat der Programmierer gezeigt, dass er wenigstens die grundlegendsten Patterns für guten C Code kennt.

    memcmp() nimmt als dritten Parameter die Länge der zu vergleichenden Speicherblöcke. Die Funktion vergleicht höchstens so viele Bytes wie dort angegeben. strcmp() nimmt nur zwei char* Pointer und betrachtet das erste Null-Byte als Ende des Strings, was potentiell unsicher ist. Zwar sind die Risiken geringer als bei strcpy(), aber eine erfolgreiche Manipulation kann z.B. dazu führen, dass strcmp() ungemappten Speicher lesen will und damit einen page fault auslöst. Unter Windows und Linux stirbt daran das Programm, in einem embedded System kann daraus schnell ein triple fault / reset werden.

  4. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: HansHorstensen 10.08.14 - 21:01

    Elberet schrieb:
    --------------------------------------------------------------------------------
    Zwar sind die
    > Risiken geringer als bei strcpy(), aber eine erfolgreiche Manipulation kann
    > z.B. dazu führen, dass strcmp() ungemappten Speicher lesen will und damit
    > einen page fault auslöst. Unter Windows und Linux stirbt daran das
    > Programm, in einem embedded System kann daraus schnell ein triple fault /
    > reset werden.

    Was veranlasst dich dazu, zu glauben, dass memcmp() anfaellig fuer deinen an dieser stelle vollkommen irrelevanten, an den haaren herbeigezogenen angriffsvektor anfaellig ist, strcmp() hingegen nicht? zeichenketten vergleicht man mit strcmp(), binaerdaten mit memcmp(). wenn zeichenketten per memcmp() verglichen werden, werden diese gerade durch angabe eines laengenfeldes ueber das null-terminierende byte hinaus verglichen, was alles andere als korrekt ist. wenn binaerdaten per strcmp() verglichen werden, dann wird der vergleich beim auftreten eines nullbytes in einer der beiden speicherbereiche abgebrochen. durch letzteres wurde bei einem vergleich zweier binaer-hashes die ausfuehrung eigenen codes auf der nintendo wii ermoeglicht.

    bitte kein wikipedia halbwissen verbreiten... und strcpy() hat in diesem kontext ueberhaupt nichts verloren.

  5. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: unknown75 10.08.14 - 22:02

    +1
    wo er recht hat, hat er recht ;-)

  6. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: DerVorhangZuUndAlleFragenOffen 11.08.14 - 03:06

    Frage: Warum memcmp um Zeichenketten zu vergleichen...
    Antwort: Weil es unter Umständen schneller sein kann, weil die Register-Länge voll ausnutzen kann (Implementationsabhängig). Wichtig ist dabei natürlich wie man im Programm Zeichenketten handhabt. Aber ein Programmierer der memcpy kennt, sollte auch memset kennen, und den Puffer damit immer schön mit Null aufzufüllen bevor er seine Zeichenkette darin ablegt damit der memcmp nachher auch das richtige tut.

    "Entwickeln Sie ein positives Verhältnis zu Daten und freuen sie sich wenn wir mehr wissen!" ~Angela Merkel (12.06.2015)

  7. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: DerVorhangZuUndAlleFragenOffen 11.08.14 - 03:30

    DerVorhangZuUndAlleFragenOffen schrieb:
    --------------------------------------------------------------------------------
    > Frage: Warum memcmp um Zeichenketten zu vergleichen...
    > Antwort: Weil es unter Umständen schneller sein kann, weil die
    > Register-Länge voll ausnutzen kann (Implementationsabhängig). Wichtig ist
    > dabei natürlich wie man im Programm Zeichenketten handhabt. Aber ein
    > Programmierer der memcpy kennt, sollte auch memset kennen, und den Puffer
    > damit immer schön mit Null aufzufüllen bevor er seine Zeichenkette darin
    > ablegt damit der memcmp nachher auch das richtige tut.
    Frage: Warum memcmp um Zeichenketten zu vergleichen...
    Antwort: Weil es unter Umständen schneller sein kann, weil bei bekannter Datenblocklänge die Registerlänge der CPU zum Vergleichen voll ausgenutzt kann (Implementationsabhängig; Vergleiche hierzu auch einmal den Debug/CRT Code der vom MS Visual Studio Debugger angezeigt wird, mit dem Assembler-Output der im Release-Mode vom Compiler erzeugt wird).

    Aber der Vorredner hat natürlich auch recht. Wie man in einem Programm Zeichenketten handhabt ist sehr wichtig. Aber ein Programmierer der memcpy kennt, sollte auch memset kennen, und den Puffer damit immer schön mit Null aufzufüllen bevor er seine Zeichenkette darin ablegt, damit der memcmp nachher auch das richtige tut. Das Überprüfen der Länge einer Zeichenkette bevor man etwas macht ist auch von Vorteil. Haben wir bei OpenSSL neulich ja bereits herausgefunden.

    Für den genannten Angriffsvektor gibt es nur eine gescheite Lösung. Nutze kein memcmp, sondern nutze eine Funktion die immer erst einmal alle Zeichen vergleicht und bei jedem Vergleich eine Variable aufdatet. Dann ist die Timing-Attacke unmöglich. Also in etwa folgendes:

    int result = 0
    char a[256]
    char b[256]
    int i = 256
    while (i--) {
    result |= a ^ b
    }
    if (result) { falsches passwort } else { passt! }

    "Entwickeln Sie ein positives Verhältnis zu Daten und freuen sie sich wenn wir mehr wissen!" ~Angela Merkel (12.06.2015)



    4 mal bearbeitet, zuletzt am 11.08.14 03:33 durch DerVorhangZuUndAlleFragenOffen.

  8. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: bstea 11.08.14 - 05:46

    Sollte nicht a und b mitlaufen?

    --
    Erst wenn der letzte Baum gefällt, der letzte Fluss gestaut und der letzte Fisch gefangen ist, werdet ihr feststellen, dass man Biber nicht essen kann!

  9. Re: Wenn memcmp zum String vergleichen genutzt wird,

    Autor: DerVorhangZuUndAlleFragenOffen 11.08.14 - 12:13

    bstea schrieb:
    --------------------------------------------------------------------------------
    > Sollte nicht a und b mitlaufen?

    Ups... Ja... Der Sinn ist natürlich i als Array-Index zu verwenden... Aber man versteht denke ich was ich meinte.

    "Entwickeln Sie ein positives Verhältnis zu Daten und freuen sie sich wenn wir mehr wissen!" ~Angela Merkel (12.06.2015)

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Anzeige
Stellenmarkt
  1. über Hays AG, Hamburg
  2. SOLUTIONS Gesellschaft für Organisationslösungen mbH, Region Stuttgart
  3. Mitscherlich PartmbB, München
  4. über Nash Direct GmbH, Böblingen

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote
  1. und Assassin´s Creed Origins gratis downloaden
  2. 89,90€ + 3,99€ Versand (Vergleichspreis ca. 140€)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Erneuerbare Energien: Siemens leitet die neue Steinzeit ein
Erneuerbare Energien
Siemens leitet die neue Steinzeit ein
  1. Siemens und Schunk Akkufahrzeuge werden mit 600 bis 1.000 Kilowatt aufgeladen
  2. Parkplatz-Erkennung Bosch und Siemens scheitern mit Pilotprojekten

Orbital Sciences: Vom Aufstieg und Niedergang eines Raketenbauers
Orbital Sciences
Vom Aufstieg und Niedergang eines Raketenbauers
  1. Arkyd-6 Planetary Resources startet bald ein neues Weltraumteleskop
  2. Astronomie Erster interstellarer Komet entdeckt
  3. Nasa und Roskosmos Gemeinsam stolpern sie zum Mond

Ideenzug: Der Nahverkehr soll cool werden
Ideenzug
Der Nahverkehr soll cool werden
  1. 3D-Printing Neues Druckverfahren sorgt für bruchfesteren Stahl
  2. Autonomes Fahren Bahn startet selbstfahrende Buslinie in Bayern
  3. Mobilitätsprojekt Ioki Bahn macht Sammeltaxi zum autonomen On-Demand-Shuttle

  1. Tele Columbus: 1 GBit würden "gegenwärtig nur die Nerds buchen"
    Tele Columbus
    1 GBit würden "gegenwärtig nur die Nerds buchen"

    Auch wenn sie die Telekom wegen ihres Vectoringausbaus kritisieren, lassen sich die Kabelnetzbetreiber bewusst Zeit beim Ausbau von Gigabitnetzen. Sehr hohe Datenraten wolle heute noch kaum einer, betonte ein großer Betreiber.

  2. Systemkamera: Leica CL verbindet Retro-Design mit neuester Technik
    Systemkamera
    Leica CL verbindet Retro-Design mit neuester Technik

    Leica entwickelt sein APS-C-System weiter und hat nun die CL vorgestellt, die sich vor allem durch einen höher auflösenden Sensor, einen schnelleren Autofokus und ein etwas verändertes Aussehen von der TL unterscheidet und an klassische Leicas erinnert.

  3. Android: Google bekommt Standortdaten auch ohne GPS-Aktivierung
    Android
    Google bekommt Standortdaten auch ohne GPS-Aktivierung

    Ein Hintergrunddienst sendet offenbar Standortdaten von Android-Nutzern an Google, auch wenn diese kein GPS verwenden. Dafür verantwortlich ist der Firebase-Cloud-Messaging-Dienst. Das Unternehmen will die umstrittene Praxis künftig unterlassen.


  1. 20:00

  2. 18:28

  3. 18:19

  4. 17:51

  5. 16:55

  6. 16:06

  7. 15:51

  8. 14:14