Knekte den! Høydepunkter fra KringleCon 5: Golden Rings

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings

Læring møter moro på 2022 SANS Holiday Hack Challenge – fest deg selv på en crackerjack-tur på Nordpolen mens jeg ødelegger Grinchums stygge plan og gjenvinner de fem gylne ringene

Dette er første året jeg deltar i SANS Holiday Hack Challenge og det var en blast. Gjennom en serie på 16 utfordringer som spenner fra lett til vanskelig, øvde jeg på å analysere mistenkelig nettverkstrafikk og PowerShell-logger, skrive Suricata regler, bryte ut av en Docker-container, finne lekke nøkler for å utnytte en GitLab CI/CD-pipeline og en AWS bruker, dirigering XML-angrep fra eksterne enheter, og hacke en smart kontrakt for å kjøpe en ikke-soppbart token.

Den beste delen av denne opplevelsen var at den introduserte meg for nye verktøy og teknologier, og dermed utvidet kunnskapen min om nettsikkerhet mye lenger. Her deler jeg noen få høydepunkter fra å løse utfordringene.

Orientering

Hver deltaker mottar en avatar for å navigere i et videospillmiljø i nettleseren satt på Nordpolen:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Under orienteringen mottar du en kryptovaluta-lommebok som spillet bruker til å tildele KringleCoins for å fullføre utfordringer og som du bruker i den siste utfordringen for å hacke en smart kontrakt. Interessant nok holder spillet styr på alle KringleCoin-transaksjoner i en Ethereum-blokkjede, noe som betyr at en fullstendig oversikt over fremgangen din også er lagret i denne blokkjeden.

Videre til spillets første ring.

1. Tolkien Ring

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Å finne Tolkien-ringen krevde å bøye logganalysemusklene mine.

Wireshark-phishing

Først brukte jeg Wireshark til å analysere det oppgitte .pcap fil som avslørte en server på adv.epostoday[.]uk laster ned filen Ref_Sept24-2020.zip til en datamaskin:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Da jeg kikket inn i ZIP-filen, fant jeg en kjørbar fil kalt Ref_Sept24-2020.scr som utløste to deteksjoner i ESET Endpoint Security: BAT/Runner.ES og Generik.TAGTBG. Denne skadelige programvaren fører til slutt til en ondsinnet kjørbar fil som kjører i minnet kalt config.dll og oppdaget av ESETs Avansert minneskanner as Win32/Dridex.DD.

Windows hendelseslogger

Deretter analyserte jeg det oppgitte .evtx fil som inneholder PowerShell-logger med Event Viewer. Selv om det finnes andre verktøy for å analysere PowerShell-logger, hvis angripere vet hvordan de skal bruke levende-off-the-land binærfiler for å holde seg under radaren, bør forsvarere også være godt kjent med de opprinnelige verktøyene et operativsystem gir.

Siden loggene inneholdt 10,434 XNUMX hendelser, grupperte jeg hendelsene etter dato og kjørte deretter Finn-handlingen for å se etter hendelser som inneholder $ karakter. I PowerShell, $ brukes til å lage og referere variabler. Jeg fant et angrep som skjedde 24. desember 2022, da angriperen kjørte følgende skript:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Det ser ut til at angriperen fant en hemmelig oppskrift, byttet ut den hemmelige ingrediensen til honning forum fiskeolje, og opprettet deretter en ny oppskriftsfil. Dette utløste en hendelse med en ID på 4104, som står for utførelse av eksterne PowerShell-kommandoer. Så jeg filtrerte hendelsene etter denne ID-en, noe som hjalp meg å finne flere skadelige hendelser raskere.

Suricata Regatta

Den siste øvelsen for Tolkien Ring var å skrive fire Suricata-regler for å overvåke nettverkstrafikk for en Dridex-angrep:

alert dns $HOME_NET any -> any any (msg:"Kjent dårlig DNS-oppslag, mulig Dridex-infeksjon"; dns.query; innhold:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

varsle http 192.185.57.242 enhver <> hvilken som helst (melding:”Undersøk mistenkelige sammenhenger, mulig Dridex-infeksjon”; sid:2; rev:1;)

alert tls any any -> any any (msg:”Undersøk dårlige sertifikater, mulig Dridex-infeksjon”; tls.cert_subject; innhold:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

varsle http any any -> any any (msg:”Mistenkelig JavaScript-funksjon, mulig Dridex-infeksjon”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

I rekkefølge fanger disse reglene DNS-oppslag for adv.epostoday[.]uk, tilkoblinger til IP-adressen 192.185.57[.]242, bruken av den ondsinnede serveren heardbellith.Icanwepeh[.]nagoya identifisert via det vanlige navnet (CN) i et TLS-sertifikat, og bruk av JavaScript atob() funksjon for å dekode en binær streng som inneholder base64-kodede data på klienten.

Å fullføre disse tre utfordringene ga meg Tolkien-ringen:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Videre til den andre ringen.

2. Elfen Ring

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

De mest fremtredende utfordringene for Elfen-ringen var Prison Escape og Jolly CI/CD.

Prison Escape

Prison Escape var en streng påminnelse om at det å gi root-privilegier til en bruker i en Docker-beholder er like bra som å gi root-privilegier på vertssystemet. Utfordringen var å bryte ut av containeren. Vel, enkelt gjort når du er root:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Som rotbruker listet jeg opp partisjonstabellene for enheten og monterte deretter vertsfilsystemet, og ga meg full tilgang til verten. Nå kunne jeg søke etter nøkkelen, som skal være plassert i hjemmekatalogen som avslørt av hint i spillet:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Jolly CI/CD

Selv om det gikk raskt, tok Jolly CI/CD meg den lengste utfordringen å finne ut av. Først fikk vi et Git-depot for å klone over HTTP:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Fra URL-en kunne jeg se at navnet på depotet var wordpress.flag.net.internt, så jeg flyttet til depotet og fant et WordPress-nettsted. Jeg sjekket om nettstedet var live:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Ja, nettsiden var funksjonell. Jeg var nysgjerrig på om det var noen lekke nøkler i kildekodehistorikken. Hvis ja, bør jeg kunne pushe redigeringer til kildekoden. Så jeg løp git logg:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Fra commit-meldingene ser det ut som en forplikte ble laget etter å ha lagt til eiendeler for å fikse en jøss. På tide å sjekke ut pre-hoops-forpliktelsen:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Utmerket, jeg fant en .ssh katalog med nøkler. La oss kopiere disse nøklene og konfigurere en SSH-agent og en Git-bruker for å se om jeg kan etterligne eieren av disse nøklene:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

La oss nå gå tilbake til hovedgrenen og teste om vi kan presse en triviell endring i kildekoden (ved å bruke nano la jeg rett og slett et mellomrom til en av filene):

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Så jeg oppnådde den første delen av utfordringen ved å utgi meg for en av WordPress-utviklerne, men fungerte nettstedet fortsatt etter at jeg ble presset?

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Min push endret noe fordi nettstedet nå ble omdirigert til port 8080.

Til nå hadde jeg ignorert CI/CD-delen av utfordringen, som burde være nøkkelen til å fullføre den. Depotet inneholder en .gitlab-ci.yml fil, som gir konfigurasjonen for en GitLab CI/CD-pipeline. Hver gang du trykker til depotet, starter CI/CD-systemet, og en GitLab Runner kjører skriptene i denne YML-filen. Det er like bra som å oppnå ekstern kjøring av kode på serveren der GitLab Runner er installert, tenkte jeg.

Da jeg så nærmere, så jeg en rsync skript som kopierer alle filene fra Git-depotet til katalogen på webserveren som nettstedet ble servert fra. Først prøvde jeg å bruke rsync å reversere dataflyten ved å kopiere alle filene fra webserveren til Git-depotet, men uten å lykkes.

Etter mye hypotesetesting fikk jeg til slutt min banebrytende innsikt: I stedet for å prøve å "fikse" WordPress-nettstedet eller kjøre ondsinnede skript via byggesystemet, server et nettsted som lekker informasjon fra nettserveren. Innsiden index.php (plassert på toppnivået i depotet), kan jeg kommentere koden som laster WordPress-nettstedet og kjøre PHP-kommandoer som sonderer webserveren.

Faktisk kan jeg til og med kjøre skallkommandoer med PHP. jeg fant det passere gjennom() fungerte lett.

In index.php, Jeg brukte // å kommentere ut to linjer og jeg la til passthru('ls -la /'); på siste linje. Dette oppretter et nettsted som viser alle filene i rotkatalogen til webserveren:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Så presset jeg denne endringen til Git-depotet og GitLab CI/CD-systemet tok seg av å oppdatere nettstedet for meg:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Ah, Elfen-ringen må være med flag.txt! Jeg gjentok de forrige trinnene, men denne gangen brukte jeg passthru('cat /flag.txt'); avslører Elfen-ringen neste gang jeg ba om nettstedet:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Videre til den tredje ringen.

3. Nettring

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Den morsomste utfordringen for meg var Open Boria Mine Door, selv om Glamtariel's Fountain var interessant samtidig som den presenterte gåter.

Åpne døren til Boria-gruven

I Open Boria Mine Door ble vi presentert med seks pinner eller miniutfordringer for å omgå inndatavalidering eller en Retningslinjer for innhold for å koble inn- og utløpsrørene mellom pinnene, inkludert matching av rørfargene. For de fleste pinner brukte jeg HTML til å skrive en liste over sammenhengende bokstav 'o'er. Her er min endelige løsning:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Pinne 1

Det var ingen validering for Pin 1, så det var et enkelt spørsmål om HTML og innebygd CSS:

Pinne 2

Pin 2 hadde en innholdssikkerhetspolicy som ikke tillot JavaScript, men tillot innebygd CSS, så det var ikke noe problem for metoden min:

Pinne 3

Pin 3 hadde en innholdssikkerhetspolicy som ikke tillot CSS, men tillot innebygd JavaScript, så jeg brukte JavaScript til å endre stilene i stedet:

Pinne 4

Pin 4 hadde ingen innholdssikkerhetspolicy, men den hadde en sanitizeInput-funksjon på klientsiden som ville fjerne doble anførselstegn, enkle anførselstegn, venstre vinkelparentes og høyre vinkel parentes. Trikset her var å innse at denne funksjonen ikke ble utløst ved å sende inn skjemaet, men av onblur begivenhet. Med andre ord utløste det å flytte musen bort fra inndatafeltet onblur arrangementet, renser eventuelle innspill. Løsningen ble å sende inn skjemaet ved å trykke på Enter tasten, mens du passer på å ikke flytte musepekeren utenfor grensene til inndatafeltet:

Pinne 5

Pin 5 hadde det samme sanitizeInput funksjon og bypass sammen med en innholdssikkerhetspolicy som forbyr innebygd CSS, men tillater innebygd JavaScript:

Pinne 6

Til slutt renset ikke Pin 6 inndataene, men den brukte en strengere innholdssikkerhetspolicy som forbyr både innebygd CSS og JavaScript. Min løsning var å bruke utdatert HTML for å få stilene jeg trengte og bruke en tabell i stedet for en liste:

Glamtariels fontene

Glamtariels fontene var en mulighet til å øve XML External Entity (XXE)-angrep. Det var ikke vanskelig å finne ut hvordan man definerer en egendefinert XML-enhet, definere en enhet som ber om en fil fra serveren og legge til den som en nyttelast til en HTTP-forespørsel. Den vanskeligste delen var å finne ut av gåtene i spillet for å vise veien til filene som serveren ville lekke. Her er gjennombruddsforespørselen som avslører plasseringen av gullringen:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Jeg vil tilby to erfaringer fra denne utfordringen. Først bruker du Konverter for innholdstype forlengelse i Å rape for å konvertere JSON-nyttelast til XML. For det andre, prøv å plassere XXE-nyttelasten i forskjellige tagger – det tok meg lang tid å finne ut at alt jeg måtte gjøre var å plassere &xxe; nyttelast i reqType tag i stedet for imgDrop tag.

Videre til den fjerde ringen.

4. Skyring

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Å spille for Cloud Ring var en nybegynners inntog i Amazon Web Services (AWS) Command Line Interface (CLI).

Høydepunktet i dette settet med utfordringer var bruk trøffelsvin for å finne AWS-legitimasjon i et Git-depot og deretter utnytte dem til å autentisere som en AWS-bruker. En angriper som kommer til denne posisjonen kan bruke aws iam kommandoer for å spørre retningslinjene som gjelder for brukeren, og dermed hvilke skyaktiva som kan aksesseres og misbrukes.

Videre til den femte ringen.

5. Burning Ring of Fire

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Den mest lærerike delen av dette settet med utfordringer var å lære om Merkle trær å utnytte en smart kontrakt og komme på forhåndssalgslisten for å kjøpe en ikke-fungibel token (NFT). Her var utfordringen å oppdage bevisverdiene som, sammen med lommebokadressen min og rotverdien til et Merkle Tree, beviste at jeg var med på forhåndssalgslisten.

Etter noen mislykkede forsøk på å gi bevisverdier, innså jeg at jeg aldri ville være i stand til å finne ut bevisverdiene for den oppgitte rotverdien fordi det ikke var noen måte å vite alle bladverdiene som ble brukt til å beregne den. Jeg trengte å endre rotverdien slik at jeg kunne gi et gyldig Merkle-tre.

Ved hjelp av Professor QPetabytes verktøy, Jeg laget et Merkle-tre fra to blader som består av min lommebokadresse og adressen til BSRS_nft smart kontrakt, som jeg fant ved å bruke Blockchain Explorer i blokk to av spillets Ethereum-blokkjede. Verktøyet genererte rotverdien til dette treet og bevisverdien for lommebokadressen min. Deretter brukte jeg Burp for å avskjære forespørselen til serveren og endret standard rotverdi slik at jeg kunne sende inn et gyldig Merkle Tree. Her er min NFT spor kjøpt til en fast pris på 100 KringleCoins:

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Virkelig et stygt eksemplar.

Endelig

Knekte den! Høydepunkter fra KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

En stor takk til arrangørene av SANS Holiday Hack Challenge for å strekke tankene mine på nye måter og bidra til å utdype kunnskapen min om nettsikkerhet. Ikke bare gleder jeg meg til neste års utfordring, men jeg vil til og med prøve ut 2020- og 2021-utgavene av denne utfordringen. Og hvis du ikke har deltatt i denne utfordringen før, håper jeg disse høydepunktene har vakt interessen din.

Tidstempel:

Mer fra Vi lever sikkerhet