Lecture 7: Eingabe Flashcards

(29 cards)

1
Q

Was ist ein Buffer Overflow?

A

Ein Lese‑ oder Schreibzugriff, der über die reservierten Grenzen eines Puffers (Arrays) hinausgeht.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Nenne ein konkretes Angriffsszenario, das ein Buffer Overflow ermöglicht.

A

Durch Überschreiben der Rücksprungadresse im Stack kann der Angreifer den Kontrollfluss zu beliebigem Code umlenken.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Warum kann bereits ein 1‑Byte‑Overflow kritisch sein?

A

Selbst ein einzelnes überschriebenes Byte kann Metadaten (z. B. Längenfelder, Flags, Funktionspointer) verändern und so Sicherheitsmechanismen umgehen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Welche typische Fehlermeldung weist auf einen illegalen Speicherzugriff hin?

A

Segmentation Fault (Verletzung des Speicherschutzes).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Zwei häufige Ursachen eines Segmentation Faults?

A

Schreibzugriff auf read‑only‑Bereiche (z. B. Konstanten).

Dereferenzierung eines Null‑Pointers.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist ein Off‑By‑One‑Fehler?

A

Ein Über‑ oder Unterschreiten der Array‑Grenze um genau ein Element, z. B. weil das Null‑Byte nicht mitgerechnet wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Warum ist gets() gefährlich und seit C11 aus dem Standard entfernt?

A

Es liest unbegrenzt Daten bis ’\n’ oder EOF – ohne Längenprüfung – und provoziert so leicht Buffer Overflows.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Sichere Alternative zu gets()?

A

fgets(dest, n, stream) – liest maximal n‑1 Zeichen und nullterminiert den String.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist das Problem bei strcpy(dest, src)?

A

Kopiert, ohne zu prüfen, ob src länger als dest ist.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Welche Funktion kann strcpy entschärfen, und welche Falle gibt es trotzdem?

A

strncpy(dest, src, n) – aber nur nullterminiert, wenn innerhalb der ersten n Bytes ein ’\0’ in src vorkommt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Warum ist strcat riskant?

A

Es hängt src an dest an, ohne zu kontrollieren, ob dest genug Platz hat (Summe der Längen +1 ≤ Buffergröße).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Sichere Variante zu strcat?

A

strncat(dest, src, n) – trotzdem muss gelten: strlen(dest) + n < size(dest).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Welcher klassische Fehler entsteht durch scanf(“%40s”, buf), wenn buf exakt 40 Bytes groß ist?

A

Off‑By‑One‑Overflow, weil scanf bis zu 40 Zeichen plus Null‑Byte schreibt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was versteht man unter Format‑String‑Injection?

A

Wenn ein Benutzerformatstring direkt an printf übergeben wird (z. B. printf(buf)) und Platzhalter wie %x, %n Register/Stack auslesen oder überschreiben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie verhindert man Format‑String‑Fehler?

A

Immer einen konstanten Formatstring verwenden, z. B. printf(“Hello %s!\n”, buf);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist ein Memory Leak?

A

Heap‑Speicher, der nach Gebrauch nicht freigegeben wird und dadurch dauerhaft verloren ist.

17
Q

Wann sind Memory‑Leaks besonders kritisch?

A

In lang laufenden Programmen (Server, Daemons), weil sie zu stetig wachsendem Speicherbrauch führen.

18
Q

Use‑After‑Free vs. Double Free – was ist der Unterschied?

A

Use‑After‑Free: Ein Pointer wird nach free() weiterbenutzt.

Double Free: Derselbe Speicherblock wird zwei‑mal an free() übergeben.

19
Q

Welche Kategorie von Fehlern beschreibt der Begriff Undefined Behavior in C?

A

Programmzustände, die laut Sprachstandard nicht definiert sind und somit beliebige Effekte haben dürfen.

20
Q

Drei Beispiele für Undefined Behavior?

A

Null‑Pointer‑Dereferenzierung, signed Integer‑Overflow, Verschieben (shift) um mehr Bits als das Integer breit ist.

21
Q

Welche drei Compiler‑Sanitizer können typische Speicherfehler entdecken?

A

-fsanitize=address (Overflows, Dangling Pointers)

-fsanitize=leak (Memory Leaks)

-fsanitize=undefined (Undefined Behavior)

22
Q

Hauptnachteile beim Kompilieren mit Sanitizern?

A

Langsamere Programmausführung und teilweise erschwertes Debugging, außerdem nicht alle Fehler abgedeckt.

23
Q

Warum sollte man den Rückgabewert von malloc prüfen?

A

Bei Speicherknappheit liefert malloc NULL; eine ungeprüfte Dereferenzierung führt zu Undefined Behavior oder Segmentation Fault.

24
Q

In welchem Fall ist ein ausgelassener free() weniger dramatisch?

A

Unmittelbar vor Programmende – aber selbst dann ist sauberes Aufräumen gute Praxis (Testbarkeit, Wiederverwendung von Code).

25
Was passiert mit einem Pointer nach free()?
Er wird ungültig (wird nicht automatisch auf NULL gesetzt); jede spätere Nutzung ist Use‑After‑Free.
26
Warum ist das Mischen mehrerer printf‑Aufrufe ineffizient und gefährlich?
Es verkompliziert Format‑String‑Sicherheit und macht Code unübersichtlich; besser alles in einem Formatstring.
27
Einfache Strategie, Off‑By‑One bei scanf zu verhindern?
Puffergröße − 1 angeben oder direkt fgets nutzen.
28
Warum kann Flushen von stdin mit fflush(stdin) UB auslösen?
Der C‑Standard garantiert fflush nur für Ausgabestreams; bei Eingabestreams ist das Verhalten undefiniert.
29
Welche Rolle spielt die Calling‑Convention bei Speicherfehlern?
Werden Stack‑Layout oder Register‑Übergaben verletzt (z. B. falscher Funktions‑Prolog), führt das zu Segmentation Faults.