Geautomatiseerd Audit Voorbeeld: RATS

RATS is een algemene scanner voor detectie van potentiële beveiligingsproblemen in een aantal programmeertalen.

RATS uitvoeren

RATS uitvoeren is gewoon een kwestie van het commando op te geven met een te behandelen map. Elk van de herkende broncodebestanden die het vindt, zal worden behandeld. RATS begrijpt verschillende programmeertalen: C, Perl, PHP en Python en zal elk van hen behandelen als geldige broncode om te onderzoeken.

Er zijn verschillende opties die kunnen meegegeven worden naast een te scannen map, deze worden beschreven in de manpagina.

De nuttigste opties zijn deze die de uitvoer aangaan, zoals:

Er van uitgaande dat het testbestand in de huidige map is, zonder andere broncodebestanden, kunnen we de scanner oproepen met het volgende commando:

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

Dit zal een HTML-bestand aanmaken die de resultaten van de scan bevat, het kan ingeladen worden door een browser.

De Resultaten

RATS uitvoeren tegen onze voorbeeldcode geeft volgende uitvoer:


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


Deze uitvoer is nogal lijvig, ondanks dat de code zelf vrij kort is - dit toont één van de nadelen van geautomatiseerd scannen: het grote volume aan uitvoer.

De uitvoer begrijpen

De geproduceerde uitvoer is een beschrijving van de functies die werden tegengekomen, de regelnummer waarop het lek werd gedetecteerd en een beschrijving van het probleem. (Omdat we het "--warning"-niveau gebruikten om de uitvoer te beperken tot de "hoge" niveau functies, hebben we de uitvoer wat gereduceerd).

Elk van de gevonden problemen moet handmatig worden onderzocht om te zien of er iets echt mis mee is, of om te zien dat het een valse positieve is (v.b. een functie die kan misbruikt worden die correct wordt gebruikt).

In dit geval kunnen we zien dat alle lekken in onze code zijn opgemerkt, maar het is niet helemaal duidelijk zonder door de code te lopen met een editor en de regels te matchen.

Een sterke zwakte is dat de uitvoer niet toont over welke regels gerapporteerd wordt - iets dat flawfinder wel toestaat.


Terug naar het auditproject | Terug naar de auditvoorbeeldenpagina