Informationssicherheit, 5. Übung
Aufgabe 1, 4 Punkte, Gruppe
Das folgende Programm ist ziemlich kaputt:
#include <stdio.h>
#include <stdlib.h>
int get_first_char(char *p) {
int c = p[0];
if(c<50){
free(p);
}
return c;
}
int main() {
char *buf = malloc(32);
fgets(buf, 64, stdin);
char c = get_first_char(buf);
if(c != '0'){
printf("%d %d\n", c, buf[0]);
}
free(buf);
}
(Die Probleme sind bei diesem kurzen Programm recht offensichtlich,
aber ein langes Programm, in dem sich solche Probleme besser
verstecken können, wäre für diese Übungsaufgabe zu aufwendig.)
Verwendet für Eure Analyse gcc und clang in der Challenge tools
auf unserer CTF-Plattform. Testet außerdem das Verhalten verschiedener
Compiler und Betriebssysteme, z.B. auf den x-Rechnern im Fachbereich.
Kompiliert dieses Programm zunächst ohne weitere Benutzung von
Analysewerkzeugen und probiert es aus; benutzt dabei auch verschiedene
Eingabelängen und Zeichen (z.B. auch mal 100 Zeichen und verschiedene
Anfangszeichen). Welche Werte sind besonders interessant? Gebt den
verwendeten Compiler und das Betriebssystem mit an.
Was hat der analyzer dazu zu sagen? (Aufruf mit scan-build
…compiler-aufruf…) Stimmt Ihr mit der Analyse überein, oder
seht Ihr ein false positive?
Kompiliert dann das Programm mit dem Address Sanitizer (verwendet dazu gcc), und probiert das Ergebnis wieder
mit verschiedenen Eingabelängen. Was sagt uns das Ergebnis?
An welchen Stellen des Programms treten die Fehler auf? Warum?
Welche Probleme findet der einfache manuelle Test (Verwenden des
Compilers, Testen des erzeugten Programms mit verschiedenen Werten)?
Welche findet die statische Analyse, welche die Laufzeit-Überprüfung?
Welche Unterschiede gibt es daher in der Erkennungsfähigkeit?
Welches Vorgehen würdet Ihr daher empfehlen?
Abgabe
bis 2024-11-21 23:59 UTC, digital in Stud.IP als zip-Archiv mit einer
Markdown-Datei, einem gerenderten PDF dieser Markdown-Datei und allen
Dateien, die die Markdown-Datei zum Rendern braucht. Als Dateinamen
verwendet Ihr isec24_ueb05_grpYY.(md|pdf|zip) (Das YY mit Eurer
Gruppennummer ersetzen). Dabei bitte in der Datei alle
Gruppenmitglieder namentlich nennen. Ebenso die Nummer Eurer Gruppe in
Stud.IP.
Bitte steckt die Energie ins Denken und Schreiben, nicht in eine
wunderschöne Formatierung — lesbar darf es allerdings sein. Die
Lösungswege sollten nachvollziehbar sein.
Wenn Ihr Euch irgendwelcher Quellen bedient (Anleitungen, Howtos,
andere Gruppe, etc.), gebt diese bitte an (Quellen aus dem Netz bitte
gleich als URI).
Carsten Bormann, Karsten Sohr, Stefanie Gerdes, Jan-Frederik
Rieckers, Finn Ewers, Andreas Benischke ·
isec@tzi.org, WS 2024/25