Har knäckt det! Höjdpunkter från KringleCon 5: Golden Rings

Har knäckt det! Höjdpunkter från KringleCon 5: Golden Rings

Lärande möter kul vid SANS Holiday Hack Challenge 2022 – spänn fast dig för en crackerjack-tur på Nordpolen när jag omintetgör Grinchums fula plan och återställer de fem gyllene ringarna

Detta är mitt första år som jag deltar i SANS Holiday Hack Challenge och det var en viskning. Genom en serie av 16 utmaningar, från lätt till svår, tränade jag på att analysera misstänkt nätverkstrafik och PowerShell-loggar, skriva Suricata regler, bryta sig ur en Docker-behållare, hitta läckta nycklar för att utnyttja en GitLab CI/CD pipeline och en AWS-användare, ledande XML External Entity-attacker, och hacka ett smart kontrakt för att köpa en icke-svampbar token.

Det bästa med den här upplevelsen var att den introducerade mig till nya verktyg och teknologier, vilket sträckte min kunskap om cybersäkerhet så mycket längre. Här delar jag med mig av några höjdpunkter från att lösa utmaningarna.

Riktning

Varje deltagare får en avatar för att navigera i en webbläsares videospelmiljö på Nordpolen:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Under orienteringen får du en kryptovaluta-plånbok som spelet använder för att ge KringleCoins för att genomföra utmaningar och som du använder i den sista utmaningen för att hacka ett smart kontrakt. Intressant nog håller spelet reda på alla KringleCoin-transaktioner i en Ethereum-blockkedja, vilket innebär att en komplett registrering av dina framsteg också lagras i denna blockkedja.

Vidare till spelets första ring.

1. Tolkien Ring

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Att hitta Tolkien-ringen krävde att jag böjde mina loggaranalysmuskler.

Wireshark-nätfiske

Först använde jag Wireshark för att analysera det tillhandahållna .pcap fil som avslöjade en server på adv.epostoday[.]uk ladda ner filen Ref_Sept24-2020.zip till en dator:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

När jag kikade in i ZIP-filen hittade jag en körbar fil som heter Ref_Sept24-2020.scr som utlöste två upptäckter i ESET Endpoint Security: BAT/Runner.ES och Generik.TAGTBG. Denna skadliga programvara leder så småningom till en skadlig körbar fil som körs i minnet config.dll och detekteras av ESET:s Avancerad minnesskanner as Win32/Dridex.DD.

Windows händelseloggar

Därefter analyserade jag det tillhandahållna .evtx fil som innehåller PowerShell-loggar med Event Viewer. Även om det finns andra verktyg för att analysera PowerShell-loggar, om angripare vet hur man använder levande-off-the-land binärer för att hålla sig under radarn, bör försvarare också vara väl insatta i de inbyggda verktyg som ett operativsystem tillhandahåller.

Eftersom loggarna innehöll 10,434 XNUMX händelser grupperade jag händelserna efter datum och körde sedan åtgärden Hitta för att leta efter eventuella händelser som innehåller $ karaktär. I PowerShell, $ används för att skapa och referera variabler. Jag hittade en attack som ägde rum den 24 december 2022, när angriparen körde följande skript:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Det ser ut som att angriparen hittade ett hemligt recept, bytte ut den hemliga ingrediensen honung för fisk oljaoch skapade sedan en ny receptfil. Detta utlöste en händelse med ett ID på 4104, vilket står för exekvering av fjärrstyrda PowerShell-kommandon. Så jag filtrerade händelserna efter detta ID, vilket hjälpte mig att hitta ytterligare skadliga händelser snabbare.

Suricata Regatta

Den sista övningen för Tolkien Ring var att skriva fyra Suricata-regler för att övervaka nätverkstrafiken för en Dridex-angrepp:

alert dns $HOME_NET any -> any any (msg:”Känt dålig DNS-uppslagning, möjlig Dridex-infektion”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

alert http 192.185.57.242 any <> any any (msg:”Undersök misstänkta kopplingar, möjlig Dridex-infektion”; sid:2; rev:1;)

alert tls any any -> any any (msg:”Undersök dåliga certifikat, möjlig Dridex-infektion”; tls.cert_subject; innehåll:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg:”Suspicious JavaScript-funktion, möjlig Dridex-infektion”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

I ordning fångar dessa regler DNS-uppslagningar för adv.epostoday[.]uk, anslutningar till IP-adressen 192.185.57[.]242, användningen av den skadliga servern heardbellith.Icanwepeh[.]nagoya identifieras via det vanliga namnet (CN) i ett TLS-certifikat och användningen av JavaScript a till B() funktion för att avkoda en binär sträng som innehåller base64-kodad data på klienten.

Att slutföra dessa tre utmaningar gav mig Tolkien-ringen:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Till den andra ringen.

2. Elfen Ring

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

De mest framträdande utmaningarna för Elfenringen var Prison Escape och Jolly CI/CD.

Prison Escape

Prison Escape var en sträng påminnelse om att att bevilja root-privilegier till en användare i en Docker-behållare är lika bra som att bevilja root-privilegier på värdsystemet. Utmaningen var att bryta sig ut ur containern. Tja, lätt gjort när du är root:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Som rotanvändare listade jag partitionstabellerna för enheten och monterade sedan värdfilsystemet, vilket gav mig full åtkomst till värden. Nu kunde jag söka efter nyckeln, som borde finnas i hemkatalogen som avslöjas av tipsen i spelet:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Jolly CI/CD

Även om det gick snabbt, tog Jolly CI/CD mig den längsta utmaningen att lista ut. Först fick vi ett Git-förråd för att klona över HTTP:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Från webbadressen kunde jag se att namnet på förvaret var wordpress.flag.net.internt, så jag flyttade till förvaret och hittade en WordPress-webbplats. Jag kollade om hemsidan var live:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ja, hemsidan var funktionell. Jag var nyfiken på om det fanns några läckta nycklar i källkodens historik. Om ja, bör jag kunna pusha redigeringar till källkoden. Så jag sprang git logg:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Från commit-meddelandena ser det ut som ett förbinda gjordes efter att ha lagt till tillgångar för att fixa ett hopp. Dags att kolla in pre-hoops-åtagandet:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Utmärkt, jag hittade en .ssh katalog med nycklar. Låt oss kopiera dessa nycklar och konfigurera en SSH-agent och en Git-användare för att se om jag kan utge mig för att vara ägaren till dessa nycklar:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Låt oss nu gå tillbaka till huvudgrenen och testa om vi kan driva en trivial ändring av källkoden (med nano lade jag helt enkelt till ett mellanslag i en av filerna):

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Så jag uppnådde den första delen av utmaningen genom att imitera en av WordPress-utvecklarna, men fungerade webbplatsen fortfarande efter min push?

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Min push ändrade något för nu omdirigerades webbplatsen till port 8080.

Fram till nu hade jag ignorerat CI/CD-delen av utmaningen, vilket borde vara nyckeln till att slutföra den. Förvaret innehåller en .gitlab-ci.yml fil, som tillhandahåller konfigurationen för en GitLab CI/CD-pipeline. Varje gång du trycker till förvaret, startar CI/CD-systemet, och en GitLab Runner exekverar skripten i denna YML-fil. Det är lika bra som att få fjärrkodexekvering på servern där GitLab Runner är installerad, tänkte jag.

När jag tittade närmare såg jag en rsync skript som kopierar alla filer från Git-förvaret till katalogen på webbservern från vilken webbplatsen serverades. Först försökte jag använda rsync att vända dataflödet genom att kopiera alla filer från webbservern till Git-förvaret, men utan framgång.

Efter mycket hypotestestning fick jag så småningom min genombrottsinsikt: Istället för att försöka "fixa" WordPress-webbplatsen eller köra skadliga skript via byggsystemet, servera en webbplats som läcker information från webbservern. Inuti index.php (finns på den översta nivån av förvaret) kan jag kommentera koden som laddar WordPress-webbplatsen och köra PHP-kommandon som sonderar webbservern.

Jag kan faktiskt till och med köra skalkommandon med PHP. jag upptäckte att passera igenom() fungerade lätt.

In index.php, Jag använde // att kommentera två rader och jag lade till passthru('ls -la /'); på sista raden. Detta skapar en webbplats som listar alla filer i rotkatalogen på webbservern:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Sedan skickade jag den här ändringen till Git-förvaret och GitLab CI/CD-systemet tog hand om att uppdatera webbplatsen åt mig:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ah, Elfen-ringen måste vara med flag.txt! Jag upprepade de föregående stegen, men den här gången använde jag passthru('cat /flag.txt'); avslöjar Elfen-ringen nästa gång jag begärde webbplatsen:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Till tredje ringen.

3. Web Ring

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Den roligaste utmaningen för mig var Open Boria Mine Door, även om Glamtariels fontän var intressant samtidigt som den presenterade gåtor.

Öppna Boria-gruvans dörr

I Open Boria Mine Door fick vi sex stift eller mini-utmaningar för att kringgå ingångsvalidering eller en Policy för innehållssäkerhet för att ansluta in- och utloppsrören mellan stiften, inklusive matchning av rörfärgerna. För de flesta stift använde jag HTML för att skriva en lista med anslutningsbokstaven 'o'. Här är min sista lösning:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Stift 1

Det fanns ingen validering för Pin 1, så det var en enkel fråga om HTML och inline CSS:

Stift 2

Pin 2 hade en innehållssäkerhetspolicy som inte tillåtit JavaScript men tillät inline CSS, så det var inga problem för min metod:

Stift 3

Pin 3 hade en innehållssäkerhetspolicy som inte tillät CSS men tillät inline JavaScript, så jag använde JavaScript för att ändra stilarna istället:

Stift 4

Pin 4 hade ingen innehållssäkerhetspolicy, men den hade en sanitizeInput-funktion på klientsidan som skulle ta bort dubbla citattecken, enkla citattecken, vänster vinkelparenteser och höger vinkelparenteser. Tricket här var att inse att den här funktionen inte utlöstes genom att skicka in formuläret, utan av på oskärpa händelse. Med andra ord, att flytta musen bort från inmatningsfältet utlöste på oskärpa evenemanget, sanerar all input. Lösningen var att skicka in formuläret genom att trycka på ange -tangenten, samtidigt som du ser till att inte flytta muspekaren utanför gränserna för inmatningsfältet:

Stift 5

Pin 5 hade samma sak sanitizeInput funktion och bypass tillsammans med en innehållssäkerhetspolicy som förbjuder inline CSS, men tillåter inline JavaScript:

Stift 6

Slutligen sanerade inte Pin 6 inmatningen, men den använde en striktare innehållssäkerhetspolicy som förbjöd både inline CSS och JavaScript. Min lösning var att använda föråldrad HTML för att få de stilar jag behövde och använda en tabell istället för en lista:

Glamtariels fontän

Glamtariels fontän var ett tillfälle att öva XML External Entity (XXE) attacker. Att ta reda på hur man definierar en anpassad XML-entitet, definiera en entitet som begär en fil från servern och lägga till den entiteten som en nyttolast till en HTTP-förfrågan var inte svårt. Det svåraste var att ta reda på gåtorna i spelet för att visa vägen till filerna som servern skulle läcka. Här är genombrottsförfrågan som avslöjar platsen för guldringen:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Jag skulle ge två lärdomar från denna utmaning. Använd först Content Type Converter förlängning i Rapa för att konvertera JSON-nyttolaster till XML. För det andra, försök att placera XXE-nyttolasten i olika taggar – det tog mig lång tid att komma på att allt jag behövde göra var att placera &xxe; nyttolast i reqType taggen istället för imgDrop märka.

Till den fjärde ringen.

4. Molnring

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Att spela för Cloud Ring var en nybörjarresa till Amazon Web Services (AWS) Command Line Interface (CLI).

Höjdpunkten i denna uppsättning utmaningar var att använda tryffelsvin för att hitta AWS-referenser i ett Git-förråd och sedan utnyttja dem för att autentisera som en AWS-användare. En angripare som kommer till denna position kan använda aws iam kommandon för att fråga vilka policyer som gäller för användaren, och därmed vilka molntillgångar som kan nås och missbrukas.

Till den femte ringen.

5. Burning Ring of Fire

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Den mest lärorika delen av denna uppsättning utmaningar var att lära sig om Merkle träd att utnyttja ett smart kontrakt och komma på förköpslistan för att köpa en icke-fungibel token (NFT). Här var utmaningen att upptäcka bevisvärdena som, tillsammans med min plånboksadress och rotvärdet av ett Merkle Tree, bevisade att jag fanns med på förköpslistan.

Efter några misslyckade försök att tillhandahålla bevisvärden insåg jag att jag aldrig skulle kunna räkna ut bevisvärdena för det angivna rotvärdet eftersom det inte fanns något sätt att veta alla bladvärden som användes för att beräkna det. Jag behövde ändra rotvärdet så att jag kunde tillhandahålla ett giltigt Merkle-träd.

Använda Professor QPetabytes verktyg, Jag skapade ett Merkle-träd av två blad som består av min plånboksadress och adressen till BSRS_nft smart kontrakt, som jag hittade genom att använda Blockchain Explorer i spelet i block två av spelets Ethereum blockchain. Verktyget genererade rotvärdet för detta träd och bevisvärdet för min plånboksadress. Sedan använde jag Burp för att fånga upp begäran till servern och ändrade standardrotvärdet så att jag kunde skicka in ett giltigt Merkle-träd. Här är min NFT-spor köpt till ett fast pris av 100 KringleCoins:

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ett riktigt fult exemplar.

Final

Knäckte det! Höjdpunkter från KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ett stort tack till arrangörerna av SANS Holiday Hack Challenge för att de sträckte ut mitt sinne på nya sätt och hjälpte till att fördjupa min kunskap om cybersäkerhet. Jag ser inte bara fram emot nästa års utmaning, utan jag kommer även att testa 2020 och 2021 års utgåvor av denna utmaning. Och om du inte har deltagit i den här utmaningen tidigare hoppas jag att dessa höjdpunkter har väckt ditt intresse.

Tidsstämpel:

Mer från Vi lever säkerhet