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:
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
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:
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:
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:
Videre til den anden ring.
2. Elfen Ring
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:
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:
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:
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:
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:
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:
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:
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):
Så jeg nåede den første del af udfordringen ved at efterligne en af WordPress-udviklerne, men fungerede hjemmesiden stadig efter mit skub?
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:
Så skubbede jeg denne ændring til Git-lageret, og GitLab CI/CD-systemet sørgede for at opdatere hjemmesiden for mig:
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:
Videre til tredje ring.
3. Web Ring
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:
Pind 1
Der var ingen validering for Pin 1, så det var et simpelt spørgsmål om HTML og inline CSS:
<p style=“letter-spacing: -4px; margin: 0; padding: 0;”>oooooooooooooo</p> |
Pind 2
Pin 2 havde en indholdssikkerhedspolitik, der ikke tillod JavaScript, men tillod inline CSS, så det var ikke noget problem for min metode:
1 2 3 4 5 6 7 8 9 10 11 12 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>oooooooooooooo</li> </ul> |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>oooooooooooooooooooooo</li>” + “<li>o</li><li>o</li><li>o</li><li>o</li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.color = “blue”; o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; </script> |
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:
1 2 3 4 5 6 7 8 9 10 11 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>oooooooooooooo</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li style=“color: blue;”>oooooooooooooo</li> </ul> |
Pind 5
Pin 5 havde det samme sanitizeInput funktion og bypass sammen med en indholdssikkerhedspolitik, der forbyder inline CSS, men tillader inline JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>o</li>” + “<li class=’red’>oooooooooooooo</li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> ooooooooooo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> B</span></li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; o.style.fontSize = “xx-large”; const reds = document.getElementsByClassName(“red”); for (let red of reds) { red.style.color = “red”; } const blues = document.getElementsByClassName(“blue”); for (let blue of blues) { blue.style.color = “blue”; } </script> |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<table border=“0” frame=“void” rules=“none” cellpadding=“0” cellspacing=“0” width=“100%”> <tr bgcolor=“#00FF00”> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> </tr> <tr bgcolor=“red”> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td bgcolor=“red”><font color=“red” size=“9”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> </tr> </table> |
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:
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
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
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:
Sikke et grimt eksemplar.
Final
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.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. Adgang her.
- Kilde: https://www.welivesecurity.com/2023/01/09/cracked-it-highlights-kringlecon-5-golden-rings/
- 1
- 10
- 100
- 11
- 202
- 2020
- 2021
- 2022
- 7
- 9
- a
- I stand
- Om
- adgang
- af udleverede
- opnået
- opnå
- Handling
- tilføjet
- Yderligere
- adresse
- Efter
- Agent
- Alle
- tillade
- Skønt
- Amazon
- Amazon Web Services
- Amazon Web Services (AWS)
- analyse
- analysere
- analysere
- ,
- Indløs
- Aktiver
- angribe
- Forsøg på
- autentificere
- avatar
- tildeling
- AWS
- Bad
- fordi
- før
- være
- BEDSTE
- mellem
- Big
- Bloker
- blockchain
- Blå
- købte
- Branch
- Pause
- bryde ud
- Breaking
- gennembrud
- bygge
- købe
- kaldet
- hvilken
- brydning
- certifikat
- certifikater
- udfordre
- udfordringer
- lave om
- karakter
- kontrollere
- kunde
- tættere
- Cloud
- kode
- farve
- KOMMENTAR
- begå
- Fælles
- fuldføre
- færdiggøre
- computer
- udførelse
- Konfiguration
- Tilslut
- Tilslutning
- Tilslutninger
- Bestående
- Container
- indeholder
- indhold
- kontrakt
- konvertere
- kopiering
- kunne
- skabe
- oprettet
- skaber
- Legitimationsoplysninger
- cryptocurrency
- Cryptocurrency tegnebog
- CSS
- nysgerrig
- skik
- Cybersecurity
- data
- Dato
- december
- uddybe
- Standard
- Defenders
- definere
- opdaget
- udviklere
- enhed
- DID
- Die
- forskellige
- svært
- opdage
- dns
- Docker
- dokumentet
- Ved
- fordoble
- optjent
- nemt
- Endpoint
- Endpoint sikkerhed
- enhed
- indrejse
- Miljø
- ethereum
- Ethereum blockchain
- Endog
- begivenhed
- begivenheder
- til sidst
- Udfører
- udførelse
- Dyrke motion
- Udgang
- erfaring
- Exploit
- opdagelsesrejsende
- udvidelse
- ekstern
- få
- felt
- Figur
- File (Felt)
- Filer
- endelige
- Finde
- finde
- Fornavn
- Fix
- fast
- flow
- folie
- efter
- strejftog
- formular
- format
- Videresend
- fundet
- springvand
- Fjerde
- fra
- fuld
- sjovt
- funktion
- funktionel
- yderligere
- spil
- Spil
- genereret
- få
- gif
- Git
- GitHub
- given
- Guld
- Golden
- godt
- tildeling
- hack
- hacking
- Hård Ost
- hjælpe
- link.
- Skjule
- Fremhæv
- højdepunkter
- hints
- historie
- Ferie
- Home
- håber
- host
- Hvordan
- How To
- HTML
- HTTPS
- identificeret
- in
- I andre
- in-game
- Herunder
- inklusion
- oplysninger
- indgang
- indsigt
- i stedet
- interesse
- interessant
- grænseflade
- introduceret
- IP
- IP-adresse
- IT
- JavaScript
- json
- Nøgle
- nøgler
- Kicks
- Kend
- viden
- Efternavn
- føre
- lække
- Lækager
- lærte
- læring
- Lessons
- Erfaringer
- brev
- Niveau
- Li
- Line (linje)
- linjer
- Liste
- Børsnoterede
- Lister
- leve
- belastninger
- placeret
- placering
- Lang
- lang tid
- Se
- leder
- UDSEENDE
- kig op
- Lot
- lavet
- Main
- malware
- Margin
- matchende
- Matter
- max-bredde
- betyder
- opfylder
- Hukommelse
- beskeder
- metode
- microsoft
- tankerne
- Overvåg
- mere
- mest
- bevæge sig
- flytning
- Mozilla
- navn
- nano
- indfødte
- Naviger
- netto
- netværk
- netværkstrafik
- Ny
- næste
- NFT
- ikke-ombyttelige
- ikke-svampeligt token
- Nord
- tilbyde
- ONE
- åbent
- drift
- operativsystem
- Opportunity
- ordrer
- arrangører
- Andet
- uden for
- ejer
- del
- deltog
- deltager
- sti
- PHP
- fyr
- rør
- pipeline
- Place
- anbringelse
- fly
- plato
- Platon Data Intelligence
- PlatoData
- politikker
- politik
- position
- mulig
- PowerShell
- praksis
- forsalg
- forelagt
- tidligere
- pris
- fængsel
- privilegier
- sonde
- Problem
- Progress
- fremtrædende
- bevis
- bevist
- give
- forudsat
- giver
- køb
- Skub ud
- skubbet
- Hurtig
- hurtigt
- radar
- spænder
- indse
- gik op for
- modtage
- modtager
- opskrift
- optage
- Recover
- Rød
- fjern
- gentaget
- Repository
- anmode
- anmodninger
- påkrævet
- afkast
- Revealed
- afslørende
- vende
- Ride
- ring
- rod
- regler
- Kør
- runner
- kører
- scripts
- Søg
- Anden
- sekunder
- Secret
- sikkerhed
- Series
- tjener
- Tjenester
- sæt
- Del
- Shell
- bør
- side
- Simpelt
- ganske enkelt
- enkelt
- SIX
- Smart
- smart kontrakt
- So
- Soft
- løsninger
- Løsning
- noget
- Kilde
- kildekode
- Space
- står
- forblive
- Steps
- Stadig
- opbevaret
- strengere
- stil
- indsende
- succes
- mistænksom
- skiftede
- syntaks
- systemet
- bord
- TAG
- tager
- TD
- Teknologier
- prøve
- Test
- The Source
- Tredje
- tænkte
- tre
- Gennem
- tid
- til
- token
- også
- værktøj
- værktøjer
- top
- spor
- Trafik
- Transaktioner
- udløst
- under
- opdatering
- URL
- brug
- Bruger
- validering
- værdi
- Værdier
- via
- video
- video game
- tegnebog
- måder
- web
- Webserver
- webservices
- Hjemmeside
- som
- mens
- bred
- vilje
- uden
- WordPress
- ord
- Arbejde
- arbejdede
- ville
- skriver
- skrivning
- XML
- år
- Du
- Din
- dig selv
- zephyrnet
- Zip