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,

  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

Stellenmarkt
  1. Hella Gutmann Solutions GmbH, Ihringen bei Freiburg im Breisgau
  2. ETAS GmbH, Stuttgart
  3. SCISYS Deutschland GmbH, Bochum
  4. MailStore Software GmbH, Viersen

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Blu-ray-Angebote
  1. (2 Monate Sky Ticket für nur 4,99€)
  2. 4,25€


Haben wir etwas übersehen?

E-Mail an news@golem.de


Shift6m-Smartphone im Hands on: Nachhaltigkeit geht auch bezahlbar und ansehnlich
Shift6m-Smartphone im Hands on
Nachhaltigkeit geht auch bezahlbar und ansehnlich

Cebit 2018 Das deutsche Unternehmen Shift baut Smartphones, die mit dem Hintergedanken der Nachhaltigkeit entstehen. Das bedeutet für die Entwickler: faire Bezahlung der Werksarbeiter, wiederverwertbare Materialien und leicht zu öffnende Hardware. Außerdem gibt es auf jedes Gerät ein Rückgabepfand - interessant.
Von Oliver Nickel


    Mars: Die Staubstürme des roten Planeten
    Mars
    Die Staubstürme des roten Planeten

    Der Mars-Rover Opportunity ist nicht die erste Mission, die unter Staubstürmen leidet. Aber zumindest sind sie inzwischen viel besser verstanden als in der Frühzeit der Marsforschung.
    Von Frank Wunderlich-Pfeiffer

    1. Nasa Dunkle Nacht im Staubsturm auf dem Mars
    2. Mars Insight Ein Marslander ist nicht genug

    Kreuzschifffahrt: Wie Brennstoffzellen Schiffe sauberer machen
    Kreuzschifffahrt
    Wie Brennstoffzellen Schiffe sauberer machen

    Die Schifffahrtsbranche ist nicht gerade umweltfreundlich: Auf hoher See werden die Maschinen der großen Schiffe mit Schweröl befeuert, im Hafen verschmutzen Dieselabgase die Luft. Das sollen Brennstoffzellen ändern - wenigstens in der Kreuzschifffahrt.
    Von Werner Pluta

    1. Hyseas III Schottische Werft baut Hochseefähre mit Brennstoffzelle
    2. Roboat MIT-Forscher drucken autonom fahrende Boote
    3. Elektromobilität Norwegen baut mehr Elektrofähren

    1. Notebook: Apple gibt nach Monaten Fehler bei Macbook-Tastatur zu
      Notebook
      Apple gibt nach Monaten Fehler bei Macbook-Tastatur zu

      Die Tastaturen in Macbook- oder Macbook-Pro-Modellen können fehlerhaft sein. Das hat Apple nach mehreren Monaten zugegeben. Betroffene Kunden können sich kostenlos eine funktionierende Tastatur in ihr Notebook einbauen lassen.

    2. Oberstes US-Gericht: Durchsuchungsbefehl für Abfrage von Handyposition notwendig
      Oberstes US-Gericht
      Durchsuchungsbefehl für Abfrage von Handyposition notwendig

      Der oberste US-Gerichtshof der USA hat den Schutz der Privatsphäre erhöht. Sicherheitsbehörden dürfen nicht einfach auf die Funkmastdaten eines Handys zugreifen. Dafür wird ein richterlich angeordneter Durchsuchungsbefehl verlangt.

    3. Vodafone: Edeka Mobil erhält mehr ungedrosseltes Datenvolumen
      Vodafone
      Edeka Mobil erhält mehr ungedrosseltes Datenvolumen

      Edeka Mobil von Vodafone lebt weiter und die Leistungen des Tarifs werden aufgestockt. Das ungedrosselte Datenvolumen erhöht sich ohne Preisaufschlag. Zudem ist es einfacher geworden, das Guthaben aufzuladen.


    1. 11:59

    2. 11:33

    3. 10:59

    4. 10:22

    5. 09:02

    6. 17:15

    7. 16:45

    8. 16:20