Knækkede det! Højdepunkter fra KringleCon 5: Golden Rings

Knækkede det! Højdepunkter fra KringleCon 5: Golden Rings

Læring møder sjov ved 2022 SANS Holiday Hack Challenge – spænd dig fast til en crackerjack-tur på Nordpolen, mens jeg ødelægger Grinchums dårlige plan og genvinder de fem gyldne ringe

Dette er mit første år, jeg deltager i SANS Holiday Hack Challenge og det var et brag. Gennem en serie på 16 udfordringer, der spænder fra let til svær, øvede jeg mig i at analysere mistænkelig netværkstrafik og PowerShell-logfiler, skrive Suricata regler, bryde ud af en Docker container, at finde lækkede nøgler til at udnytte en GitLab CI/CD pipeline og en AWS bruger, dirigering XML-eksterne enhedsangreb, og hacke en smart kontrakt for at købe en ikke-svampeligt token.

Den bedste del af denne oplevelse var, at den introducerede mig til nye værktøjer og teknologier, og dermed strækkede min viden om cybersikkerhed så meget længere. Her deler jeg et par højdepunkter fra løsningen af ​​udfordringerne.

Orientering

Hver deltager modtager en avatar til at navigere i et videospilmiljø i browseren, der er sat på Nordpolen:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Under orienteringen modtager du en cryptocurrency-pung, som spillet bruger til at tildele KringleCoins for at gennemføre udfordringer, og som du bruger i den sidste udfordring til at hacke en smart kontrakt. Interessant nok holder spillet styr på alle KringleCoin-transaktioner i en Ethereum-blockchain, hvilket betyder, at en komplet registrering af dine fremskridt også er gemt i denne blockchain.

Videre til spillets første ring.

1. Tolkien Ring

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

At finde Tolkien-ringen krævede at spænde mine logs-analysemuskler.

Wireshark-phishing

Først brugte jeg Wireshark til at analysere det leverede .pcap fil, der afslørede en server kl adv.epostoday[.]uk downloader filen Ref_Sept24-2020.zip til en computer:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Da jeg kiggede ind i ZIP-filen, fandt jeg en eksekverbar, der hedder Ref_24. september-2020.scr der udløste to registreringer i ESET Endpoint Security: BAT/Runner.ES , Generik.TAGTBG. Denne malware førte til sidst til en ondsindet eksekverbar, der kører i hukommelsen kaldet config.dll og detekteret af ESET'er Avanceret hukommelsesscanner as Win32/Dridex.DD.

Windows hændelseslogfiler

Dernæst analyserede jeg det leverede .evtx fil, der indeholder PowerShell-logfiler med Event Viewer. Mens der er andre værktøjer til at analysere PowerShell-logfiler, bør forsvarere også være velbevandrede i de native værktøjer, som et operativsystem tilbyder, hvis angribere ved, hvordan man bruger levende-off-the-land-binære filer til at holde sig under radaren.

Da logfilerne indeholdt 10,434 hændelser, grupperede jeg hændelserne efter dato og kørte derefter handlingen Find for at lede efter hændelser, der indeholdt $ Karakter. I PowerShell, $ bruges til at skabe og referere variabler. Jeg fandt et angreb, der fandt sted den 24. december 2022, da angriberen kørte følgende script:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Det ser ud til, at angriberen fandt en hemmelig opskrift, og skiftede den hemmelige ingrediens fra honning forum fiskeolie, og oprettede derefter en ny opskriftsfil. Dette udløste en hændelse med et ID på 4104, som står for udførelse af eksterne PowerShell-kommandoer. Så jeg filtrerede begivenhederne efter dette id, hvilket hjalp mig med at finde yderligere ondsindede begivenheder hurtigere.

Suricata Regatta

Den sidste øvelse for Tolkien Ring var at skrive fire Suricata-regler for at overvåge netværkstrafikken for et Dridex-angreb:

alarm dns $HOME_NET any -> any any (msg:"Kendt dårligt DNS-opslag, mulig Dridex-infektion"; dns.query; indhold:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

advare http 192.185.57.242 enhver <> enhver nogen (msg:"Undersøg mistænkelige forbindelser, mulig Dridex-infektion"; sid:2; rev:1;)

alert tls any any -> any any (msg:"Undersøg dårlige certifikater, mulig Dridex-infektion"; tls.cert_subject; indhold:"CN=heardbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

advare http enhver hvilken som helst -> enhver hvilken som helst (msg:"Mitænkelig JavaScript-funktion, mulig Dridex-infektion"; file_data; content:"let byteCharacters = atob"; sid:4; rev:1;)

I rækkefølge fanger disse regler DNS-opslag for adv.epostoday[.]uk, forbindelser til IP-adressen 192.185.57[.]242, brugen af ​​den ondsindede server heardbellith.Icanwepeh[.]nagoya identificeret via det almindelige navn (CN) i et TLS-certifikat og brugen af ​​JavaScript atob() funktion til at afkode en binær streng indeholdende base64-kodede data på klienten.

At fuldføre disse tre udfordringer gav mig Tolkien-ringen:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Videre til den anden ring.

2. Elfen Ring

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

De mest fremtrædende udfordringer for Elfen-ringen var Prison Escape og Jolly CI/CD.

Fængsel undslippe

Prison Escape var en streng påmindelse om, at det at give root-privilegier til en bruger i en Docker-container er lige så godt som at give root-privilegier på værtssystemet. Udfordringen var at bryde ud af containeren. Nå, let gjort, når du er root:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Som root-bruger listede jeg partitionstabellerne for enheden og monterede derefter værtsfilsystemet, hvilket gav mig fuld adgang til værten. Nu kunne jeg søge efter nøglen, som skulle være placeret i hjemmebiblioteket som afsløret af in-game hints:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Jolly CI/CD

Selvom det var hurtigt, tog Jolly CI/CD mig den længste udfordring at finde ud af. Først fik vi et Git-lager til at klone over HTTP:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Fra URL'en kunne jeg se, at navnet på depotet var wordpress.flag.net.intern, så jeg flyttede til depotet og fandt et WordPress-websted. Jeg tjekkede om hjemmesiden var live:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Ja, hjemmesiden var funktionel. Jeg var nysgerrig efter, om der var nogen lækkede nøgler i kildekodens historie. Hvis ja, burde jeg være i stand til at skubbe redigeringer til kildekoden. Så jeg løb git log:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Fra commit-beskederne ser det ud som en begå blev lavet efter at have tilføjet aktiver for at rette op på et hov. Tid til at tjekke pre-hoops commit:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Fremragende, jeg fandt en .ssh mappe med nøgler. Lad os kopiere disse nøgler over og konfigurere en SSH-agent og en Git-bruger for at se, om jeg kan efterligne ejeren af ​​disse nøgler:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Lad os nu vende tilbage til hovedgrenen og teste, om vi kan skubbe en triviel ændring af kildekoden (ved at bruge nano tilføjede jeg blot et mellemrum til en af ​​filerne):

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Så jeg nåede den første del af udfordringen ved at efterligne en af ​​WordPress-udviklerne, men fungerede hjemmesiden stadig efter mit skub?

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Mit push ændrede noget, for nu blev hjemmesiden omdirigeret til port 8080.

Indtil nu havde jeg ignoreret CI/CD-delen af ​​udfordringen, som burde være nøglen til at gennemføre den. Depotet indeholder en .gitlab-ci.yml fil, som giver konfigurationen til en GitLab CI/CD-pipeline. Hver gang du skubber til depotet, starter CI/CD-systemet, og en GitLab Runner udfører scripts i denne YML-fil. Det er lige så godt som at opnå fjernudførelse af kode på serveren, hvor GitLab Runner er installeret, tænkte jeg.

Da jeg så nærmere, så jeg en rsync script, der kopierer alle filerne fra Git-lageret til mappen på webserveren, hvorfra hjemmesiden blev serveret. Først prøvede jeg at bruge rsync at vende datastrømmen ved at kopiere alle filerne fra webserveren til Git-lageret, men uden held.

Efter en masse hypotesetestning fik jeg til sidst min banebrydende indsigt: I stedet for at forsøge at "fixe" WordPress-webstedet eller køre ondsindede scripts via build-systemet, server en hjemmeside, der lækker information fra webserveren. Inde index.php (placeret på det øverste niveau af depotet), kan jeg kommentere koden, der indlæser WordPress-webstedet, og køre PHP-kommandoer, der sonderer webserveren.

Faktisk kan jeg endda køre shell-kommandoer med PHP. Det fandt jeg passthru() fungerede let.

In index.php, Jeg brugte // at kommentere to linjer, og jeg tilføjede passthru('ls -la /'); på sidste linje. Dette opretter et websted, der viser alle filerne i rodmappen på webserveren:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Så skubbede jeg denne ændring til Git-lageret, og GitLab CI/CD-systemet sørgede for at opdatere hjemmesiden for mig:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Ah, Elfen-ringen skal være med flag.txt! Jeg gentog de foregående trin, men denne gang ved at bruge passthru('cat /flag.txt'); afslørede Elfen-ringen næste gang jeg bad om hjemmesiden:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Videre til tredje ring.

3. Web Ring

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Den sjoveste udfordring for mig var Open Boria Mine Door, selvom Glamtariel's Fountain var interessant, mens den også præsenterede gåder.

Åbn Boria-minedøren

I Open Boria Mine Door blev vi præsenteret for seks stifter eller mini-udfordringer for at omgå inputvalidering eller en Politik om indholdssikkerhed at forbinde indgangs- og udgangsrørene mellem stifterne, herunder matchning af rørfarverne. For de fleste pins brugte jeg HTML til at skrive en liste over forbindende bogstaver 'o'er. Her er min endelige løsning:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Pind 1

Der var ingen validering for Pin 1, så det var et simpelt spørgsmål om HTML og inline CSS:

Pind 2

Pin 2 havde en indholdssikkerhedspolitik, der ikke tillod JavaScript, men tillod inline CSS, så det var ikke noget problem for min metode:

Pind 3

Pin 3 havde en indholdssikkerhedspolitik, der ikke tillod CSS, men tillod inline JavaScript, så jeg brugte JavaScript til at ændre stilene i stedet:

Pind 4

Pin 4 havde ingen indholdssikkerhedspolitik, men den havde en sanitizeInput-funktion på klientsiden, der fjernede dobbelte anførselstegn, enkelte anførselstegn, venstre vinkel parentes og højre vinkel parentes. Tricket her var at indse, at denne funktion ikke blev udløst ved at indsende formularen, men af onblur begivenhed. Med andre ord udløste det at flytte musen væk fra inputfeltet onblur begivenhed, renser enhver input. Løsningen var at indsende formularen ved at trykke på Indtast tast, mens du sørger for ikke at flytte musemarkøren uden for grænserne af inputfeltet:

Pind 5

Pin 5 havde det samme sanitizeInput funktion og bypass sammen med en indholdssikkerhedspolitik, der forbyder inline CSS, men tillader inline JavaScript:

Pind 6

Endelig rensede Pin 6 ikke inputtet, men det brugte en strengere indholdssikkerhedspolitik, der forbyder både inline CSS og JavaScript. Min løsning var at bruge forældet HTML til at få de stilarter, jeg havde brug for, og bruge en tabel i stedet for en liste:

Glamtariels springvand

Glamtariels springvand var en mulighed for at øve sig XML External Entity (XXE) angreb. Det var ikke svært at finde ud af, hvordan man definerer en brugerdefineret XML-entitet, definere en enhed, der anmoder om en fil fra serveren, og tilføje denne enhed som en nyttelast til en HTTP-anmodning. Den sværeste del var at finde ud af gåderne i spillet for at vise vejen til de filer, som serveren ville lække. Her er gennembrudsanmodningen, der afslører placeringen af ​​guldringen:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Jeg vil tilbyde to erfaringer fra denne udfordring. Først skal du bruge Indholdstypekonverter forlængelse i Bøvse at konvertere JSON-nyttelast til XML. For det andet, prøv at placere XXE nyttelasten i forskellige tags – det tog mig lang tid at finde ud af, at alt jeg skulle gøre var at placere &xxe; nyttelast i reqType tag i stedet for imgDrop tag.

Videre til den fjerde ring.

4. Skyring

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

At spille for Cloud Ring var et begynderindtog i Amazon Web Services (AWS) Command Line Interface (CLI).

Højdepunktet i dette sæt udfordringer var at bruge trøffelsvin at finde AWS-legitimationsoplysninger i et Git-lager og derefter udnytte dem til at autentificere som en AWS-bruger. En angriber, der kommer til denne position, kan bruge aws iam kommandoer til at forespørge på de politikker, der gælder for brugeren, og dermed hvilke cloud-aktiver, der kan tilgås og misbruges.

Videre til den femte ring.

5. Brændende Ring af Ild

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Den mest lærerige del af dette sæt udfordringer var at lære om Merkle træer at udnytte en smart kontrakt og komme på forhåndssalgslisten for at købe en ikke-fungibel token (NFT). Her var udfordringen at opdage de bevisværdier, der sammen med min tegnebogsadresse og rodværdien af ​​et Merkle-træ beviste min optagelse på forhåndssalgslisten.

Efter et par mislykkede forsøg på at give bevisværdier indså jeg, at jeg aldrig ville være i stand til at finde ud af bevisværdierne for den angivne rodværdi, fordi der ikke var nogen måde at kende alle bladværdierne, der blev brugt til at beregne den. Jeg var nødt til at ændre rodværdien, så jeg kunne levere et gyldigt Merkle-træ.

Ved brug af Professor QPetabytes værktøj, Jeg skabte et Merkle-træ af to blade bestående af min pungadresse og adressen til BSRS_nft smart kontrakt, som jeg fandt ved at bruge Blockchain Explorer i spillet i blok to af spillets Ethereum blockchain. Værktøjet genererede rodværdien af ​​dette træ og bevisværdien for min tegnebogsadresse. Derefter brugte jeg Burp til at opsnappe anmodningen til serveren og ændrede standardrodværdien, så jeg kunne indsende et gyldigt Merkle-træ. Her er min NFT spor købt til en fast pris på 100 KringleCoins:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Sikke et grimt eksemplar.

Final

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

En stor tak til arrangørerne af SANS Holiday Hack Challenge for at strække mit sind på nye måder og hjælpe med at uddybe min viden om cybersikkerhed. Jeg ser ikke kun frem til næste års udfordring, men jeg vil endda prøve 2020- og 2021-udgaverne af denne udfordring. Og hvis du ikke har deltaget i denne udfordring før, håber jeg, at disse højdepunkter har vakt din interesse.

Tidsstempel:

Mere fra Vi lever sikkerhed