Automated Audit Example: RATS

RATS ist ein Allzweck-Durchsuch-Programm, um mögliche Sicherheitsprobleme in einer Anzahl von Programmiersprachen zu erkennen.

RATS benutzen

RATS zu benutzen ist so einfach wie es mit einem zu verarbeitenden Verzeichnis aufzurufen. Jede von ihm gefundene erkannte Quelldatei wird verarbeitet. RATS versteht einige Programmiersprachen, C, Perl, PHP und Python, und wird jede Datei als gültige Quelle für die Prüfung behandeln.

Es gibt eine Reihe von Optionen, die zusätzlich zu dem zu prüfenden Verzeichnisnamen übergeben werden können, diese werden in der Handbuchseite beschrieben.

Die nützlichsten dieser Optionen sind diejenigen, die die Ausgabe betreffen, wie:

Unter der Annahme, dass sich die test-Datei als einzige Quelldatei im aktuellen Verzeichnis befindet, können wir das Durchsuch-Programm mit dem folgenden Kommando aufrufen:

rats --warning 1 --html . >output.html

Dies erzeugt eine HTML-Datei, die die Ergebnisse der Durchsuchung enthält, die dann von einem Browser geladen werden kann.

Die Ergebnisse

Lassen wir RATS gegen unseren Beispiel-Code laufen, produziert er folgende Ausgabe:


Severity: High

Issue: fixed size global buffer

Extra care should be taken to ensure that character arrays that are allocated on the stack are used safely. They are prime targets for buffer overflow attacks.

File: test.c
Lines: 10 11 12

Severity: High

Issue: strcpy

Check to be sure that argument 2 passed to this function call will not copy more data than can be handled, resulting in a buffer overflow.

File: test.c
Lines: 18

Severity: High

Issue: getenv

Environment variables are highly untrustable input. They may be of any length, and contain any data. Do not make any assumptions regarding content or length. If at all possible avoid using them, and if it is necessary, sanitize them and truncate them to a reasonable length.

File: test.c
Lines: 22 24

Severity: High

Issue: sprintf

Check to be sure that the format string passed as argument 2 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle. Additionally, the format string could contain `%s' without precision that could result in a buffer overflow.

File: test.c
Lines: 24

Severity: High

Issue: popen

Argument 1 to this function call should be checked to ensure that it does not come from an untrusted source without first verifying that it contains nothing dangerous.

File: test.c
Lines: 33

Severity: High

Issue: printf

Check to be sure that the non-constant format string passed as argument 1 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle.

File: test.c
Lines: 42

Total lines analyzed: 49
Total time 0.000288 seconds
170138 lines per second


Diese Ausgabe ist recht umfangreich, obwohl der Code selbst nur sehr kurz ist – dies zeigt eine der negativen Seiten vom automatischen Durchsuchen, der schiere Umfang der Ausgabe.

Die Ausgabe verstehen

Die erzeugte Ausgabe ist im Grunde eine Beschreibung der Funktionen, die angetroffen wurden, die Zeilennummer, in der der Mangel entdeckt wurde, und eine Beschreibung des Problems (da wir die »--warning«-Stufe verwendet haben, um die Ausgabe nur auf Funktionen auf »high«-Stufe (hoher Stufe) zu beschränken, haben wir die Ausgabe etwas reduziert.).

Jede der entdeckten Punkte sollte manuell untersucht werden, um zu sehen, ob dort tatsächlich etwas falsch ist oder ob es falsche positive Meldungen waren (d.h. eine potenziell falsch eingesetzte Funktion wurde korrekt verwendet).

In diesem Fall können wir sehen, dass alle Verwundbarkeiten in unserem Code entdeckt wurden, aber es ist nicht ganz klar ohne mit einem Editor durch den Code zu gehen und die Zeilennummern zuzuordnen.

Eine große Unterlassung ist, dass die Ausgabe nicht die Zeilen, über die berichtet wird, beinhaltet – etwas, das Flawfinder Ihnen erlaubt hinzuzufügen.


Zurück zum Audit-Projekt | Zurück zur Beispiele-für-Audits-Seite