Taggat med: OSS-fuzz

Identifiera log4j med OSS-Fuzz och några säkerhetshöjande tips

Såhär i efterhand är det bra att dra lärdomar från log4j-sårbarheten och hur vi i framtiden kan förhindra liknande sårbarheter. En av mina personliga metoder är att genomföra fuzz-tester för att identifiera indikationer på att något är fel i ett system, bibliotek eller mjukvara.

Ett av Googles projekt som har identifierat flest antal sårbarheter genom tiderna heter OSS-Fuzz och drivs av ett antal backends såsom  libFuzzerAFL++ och Honggfuzz. I början av 2021 så fick libFuzzer stöd för att fuzza Java-kod med hjälp av Jazzer. Främst kod som är skriven JVM-baserade språk, såsom Java, Kotlin och Clojure.

Bildkälla: code-intelligence.com

För den fuzzing-kod som har hand om Remote JNDI-lookups så går den att se här. Men givetvis är fuzz-tester inte enbart den enda lösningen på att bygga säkra och robusta IT-system. Några andra säkerhetshöjande åtgärder för att försvåra attacker såsom Log4Shell (log4j) i framtiden:

  • Begränsa så att servrar och klienter inte får prata godtyckligt ut mot internet. Gäller även DNS-uppslag
  • Använd data-dioder för att föra in loggar i fysiskt separerade system. Till exempel en SOC/SIEM (airgap)
  • Se över Er software bill of materials (SBOM)
  • Genomför regelbundet automatiska och manuella penetrationstester
  • Öva regelbundet olika scenarior där ni exempelvis snabbt måste identifiera ett tredjepartsbibliotek och begränsa skadan som kan uppstå till följd av en sårbarhet
  • Se till att ni har verktyg som stödjer alla olika former av aktiviteter såsom den på raden ovan. Buzz-word för ett sådant verktyg kan vara Endpoint Detection & Response (EDR). Rekommenderar att snegla på Velociraptor (blogginlägg kommer)
  • Mjukvaror, system osv bör separeras så mycket som det går och gå med så låga behörigheter som möjligt. Se till att ha en förmåga att logga om en mjukvara avviker från detta
  • Ställ relevanta säkerhetskrav vid anskaffning av produkter och system. Följ upp så att dessa krav efterlevs

Photo by Danial Igdery on Unsplash

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: