Taggat med: fuzzing

JSON fuzzing

Allt eftersom fler och fler applikationer hanterar JSON (JavaScript Object Notation) så blir det också viktigare att genomföra olika former av säkerhetstester som just fokuserar på JSON. Många verktyg såsom Burp Suite och ZAP har stöd för att lägga till egna listor och där passar SecLists-listor bra såsom denna:

Problemet dock med dessa listor är att dom är ”dumma” och tar inte så mycket hänsyn till övriga värden och kriterier som eventuellt måste uppfyllas.

För att råda bot på detta så tog Michael Henriksen fram verktyget JDAM ”A structure-aware JSON fuzzer” som baseras på samma idé som mitt favoritverktyg radamsa.

Gif-animation som visar hur JDAM kan användas:

Och här är ett till exempel när jag använder jdam för 10 st iterationer:

Nästa utmaning är att mata in dessa värden mot den applikation eller system vi vill testa. Man kan givetvis skriva ut dessa testfall till en fil och sedan använda den filen i Burp eller ZAP. Det går även att köra ffuf direkt med utdata från jdam på följande sätt:

ffuf -input-cmd 'cat test.json | jdam -rounds 3' -d FUZZ -u http://localhost/api/user/1 -X PUT -v -mc 500 -mr 'error|failed|failure|fault|abort|root:|1764|0x|\d{20}' -od /tmp/ffuf_test

Att vi väljer just en regexp att matcha mot (-mr) som innehåller bla 1764 är för att detta är ett ”magiskt” värde där vi matar in 42*42 vilket blir 1764. Detta kan indikera på bl.a. template injections. Håll även koll på krashar, felmeddelanden eller annat som kan indikera på att applikationen hanterar indata på ett felaktigt sätt.

Samtliga olika mutationer som JDAM känner till är följande:

Ett flertal sårbarheter uppdagade i OpenVPN

OpenVPN har utsatts för ett antal olika oberoende granskningar och jag har skrivit om några av dessa. Nu har även en person vid namn Guido Vranken fuzzat OpenVPN och identifierat en hel del bunt med säkerhetsbuggar.

För att citera Guido:

I’ve discovered 4 important security vulnerabilities in OpenVPN. Interestingly, these were not found by the two recently completed audits of OpenVPN code

Att fuzza OpenVPN var dock inte helt trivialt. Bland annat för att OpenVPN anropar externa binärer via execve samt att koden är full av ASSERT:s.

För fuzzing användes LLVM libFuzzer tillsammans med AddressSanitizer (ASAN), UndefinedBehaviorSanitizer (UBSAN) och MemorySanitizer (MSAN).

Buggarna har fått följande CVE:er: CVE-2017-7521, CVE-2017-7520, CVE-2017-7508, CVE-2017-7522.

Uppgradera till OpenVPN version 2.4.3 som innehåller säkerhetsfixar för ovan sårbarheter.

Snabbare fuzztester med taviso loadlibrary

Tavis Ormandy (taviso) på Google har släppt ett nytt verktyg som underlättar fuzztester av mjukvaror. Verktyget heter loadlibrary och gör att dynamiska bibliotek (DLL:er) från Windows kan köras på Linux.

Vid storskaliga fuzztester är det viktigt med så lite overhead som möjligt för att inte slösa resurser på onödiga saker. Därför utvecklade taviso verktyget loadlibrary för att enkelt kunna skapa små containers med Windows-DLL:er och sedan fuzza dessa DLL:er i en storskalig miljö. Google har även sedan tidigare utvecklat verktyget OSS-fuzz som just är ett ramverk för att snabbt och enkelt göra fuzzing av mjukvaror.

Fuzz-tester är en metodik för att skicka in mer eller mindre slumpmässig data på olika sätt och sedan se hur ett program beter sig. Och kan då upptäcka en mängd olika sårbarheter såsom buffer-overflows, integer underflows osv.

Taviso har med hjälp av loadlibrary identifierat en allvarlig sårbarhet i bl.a. Microsofts antivirus-motor vid namn Microsoft Malware Protection Engine, Mpengine.dll (Windows Defender).

Exempel på hur Mpengine kan köras på Linux för att genomsöka filen eicar.com efter Eicar-testvirus:

$ ./mpclient eicar.com
main(): Scanning eicar.com...
EngineScanCallback(): Scanning input
EngineScanCallback(): Threat Virus:DOS/EICAR_Test_File identified.

Till skillnad från Wine som kör hela Windows-applikationer så kör taviso-loadlibrarykod från enstaka DLL:er.

Här kan du ladda hem loadlibrary från Github:

Obligatorisk Dilbert: