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. Allianz Deutschland AG, Stuttgart
  2. AKDB, Regensburg
  3. ROHDE & SCHWARZ SIT GmbH, Stuttgart
  4. Robert Bosch GmbH, Leonberg

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Blu-ray-Angebote
  1. (u. a. Game of Thrones, Big Bang Theory, The Vampire Diaries, Supernatural)
  2. 12,99€


Haben wir etwas übersehen?

E-Mail an news@golem.de


Homepod im Test: Smarter Lautsprecher für den Apple-affinen Popfan
Homepod im Test
Smarter Lautsprecher für den Apple-affinen Popfan
  1. Rückstände Homepod macht weiße Ringe auf Holzmöbeln
  2. Smarter Lautsprecher Homepod schwer reparierbar
  3. Smarter Lautsprecher Homepod-Reparaturen kosten fast so viel wie ein neues Gerät

Indiegames-Rundschau: Tiefseemonster, Cyberpunks und ein Kelte
Indiegames-Rundschau
Tiefseemonster, Cyberpunks und ein Kelte
  1. Indiegames-Rundschau Krawall mit Knetmännchen und ein Mann im Fass
  2. Games 2017 Die besten Indiespiele des Jahres

HP Omen X VR im Test: VR auf dem Rücken kann nur teils entzücken
HP Omen X VR im Test
VR auf dem Rücken kann nur teils entzücken
  1. 3D Rudder Blackhawk Mehr Frags mit Fußschlaufen
  2. Kreativ-Apps für VR-Headsets Austoben im VR-Atelier
  3. Apps und Games für VR-Headsets Der virtuelle Blade Runner und Sport mit Sparc

  1. Raumfahrt: Falsch abgebogen wegen Eingabefehler
    Raumfahrt
    Falsch abgebogen wegen Eingabefehler

    Jeder macht einmal Fehler, aber bei Raketen sind sie besonders ärgerlich. Ein kleiner Irrtum bei der Eingabe reicht, damit eine Ariane 5 in die falsche Richtung fliegt.

  2. Cloud: AWS bringt den Appstore für Serverless-Software
    Cloud
    AWS bringt den Appstore für Serverless-Software

    Von AWS-Kunden für AWS-Kunden: Das Serverless Application Repository ist eine Datenbank, die Nutzer nach Diensten durchstöbern können, die sie dann für ihre eigenen Projekte nutzen. Das Ganze findet ausschließlich in der Cloud statt.

  3. Free-to-Play-Strategie: Total War Arena beginnt den Betabetrieb
    Free-to-Play-Strategie
    Total War Arena beginnt den Betabetrieb

    Mit Römern, Griechen und anderen antiken Völkern können Spieler im Onlinegame Total War Arena antreten und darin kostenpflichtige Kriegselefanten über die Schlachtfelder schicken.


  1. 17:17

  2. 16:50

  3. 16:05

  4. 15:45

  5. 15:24

  6. 14:47

  7. 14:10

  8. 13:49