Zlomljeno! Poudarki s KringleCon 5: Zlati prstani

Zlomljeno! Poudarki s KringleCon 5: Zlati prstani

Učenje se sreča z zabavo na izzivu SANS Holiday Hack Challenge 2022 – pripravite se na vožnjo s crackerjackom na severnem tečaju, ko bom izničil Grinchumov zmoten načrt in pridobil pet zlatih prstanov

To je moje prvo leto, ko sodelujem v SANS Holiday Hack Challenge in bilo je vrhunsko. Skozi niz 16 izzivov, od enostavnih do težjih, sem vadil analizo sumljivega omrežnega prometa in dnevnikov PowerShell, pisanje Pravila Suricata, izstop iz a Docker posoda, iskanje razkritih ključev za izkoriščanje a Cevovod GitLab CI/CD in Uporabnik AWS, dirigiranje Napadi zunanjih entitet XML, in vdor v pametno pogodbo za nakup a nezamenljiv žeton.

Najboljši del te izkušnje je bil ta, da sem se seznanil z novimi orodji in tehnologijami, s čimer sem še dodatno razširil svoje znanje o kibernetski varnosti. Tukaj delim nekaj poudarkov iz reševanja izzivov.

usmerjenost

Vsak udeleženec prejme avatar za navigacijo v okolju videoiger v brskalniku, postavljenem na severnem polu:

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

Med usmerjanjem prejmete denarnico za kriptovalute, ki jo igra uporablja za nagrajevanje KringleCoins za dokončanje izzivov in ki jo uporabite v zadnjem izzivu za vdor v pametno pogodbo. Zanimivo je, da igra spremlja vse transakcije KringleCoin v verigi blokov Ethereum, kar pomeni, da je celoten zapis vašega napredka shranjen tudi v tej verigi blokov.

Do prvega zvonjenja v igri.

1. Tolkienov prstan

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

Iskanje Tolkienovega prstana je zahtevalo napenjanje mišic za analizo dnevnikov.

Lažno predstavljanje Wireshark

Najprej sem uporabil Wireshark za analizo ponujenega .pcap datoteka, ki je razkrila strežnik na adv.epostoday[.]uk prenos datoteke Ref_Sept24-2020.zip na računalnik:

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

Ko sem pokukal v datoteko ZIP, sem našel izvršljivo datoteko z imenom Ref_Sept24-2020.scr ki je sprožil dve zaznavi v programu ESET Endpoint Security: BAT/Runner.ES in Generik.TAGTBG. Ta zlonamerna programska oprema sčasoma povzroči zlonamerno izvršljivo datoteko, ki se izvaja v pomnilniku, imenovano config.dll in jih je zaznal ESET Napredni skener pomnilnika as Win32/Dridex.DD.

Dnevniki dogodkov Windows

Nato sem analiziral ponujeno .evtx datoteka, ki vsebuje dnevnike PowerShell s pregledovalnikom dogodkov. Čeprav obstajajo druga orodja za analizo dnevnikov PowerShell, če napadalci vedo, kako uporabiti binarne datoteke, ki živijo zunaj zemlje, da ostanejo pod radarjem, bi morali biti zagovorniki tudi dobro seznanjeni z izvornimi orodji, ki jih ponuja operacijski sistem.

Ker so dnevniki vsebovali 10,434 dogodkov, sem dogodke združil po datumu in nato zagnal dejanje Najdi, da bi poiskal vse dogodke, ki vsebujejo $ značaj. V PowerShell, $ se uporablja za ustvarjanje in referenco spremenljivke. Ugotovil sem, da se je napad zgodil 24. decembra 2022, ko je napadalec zagnal naslednji skript:

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

Videti je, da je napadalec našel skrivni recept in zamenjal skrivno sestavino med za ribje olje, in nato ustvaril novo datoteko z recepti. To je sprožilo dogodek z ID-jem 4104, ki pomeni izvajanje oddaljenih ukazov PowerShell. Zato sem dogodke filtriral po tem ID-ju, kar mi je pomagalo hitreje najti dodatne zlonamerne dogodke.

Regata Suricata

Zadnja vaja za Tolkienov prstan je bila pisanje štirih pravil Suricata za spremljanje omrežnega prometa za okužbo z Dridexom:

alert dns $HOME_NET any -> any any (msg:”Znano slabo iskanje DNS, možna okužba Dridex”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

opozorilo http 192.185.57.242 poljubno <> poljubno poljubno (msg:”Raziščite sumljive povezave, možna okužba z Dridexom”; sid:2; rev:1;)

opozorilo tls vse poljubno -> poljubno poljubno (msg:”Razišči slaba potrdila, možna okužba z Dridexom”; tls.cert_subject; content:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

opozorilo http vse poljubno -> poljubno poljubno (msg:”Sumljiva funkcija JavaScript, možna okužba Dridex”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

Da ta pravila ujamejo iskanja DNS za adv.epostoday[.]uk, povezave z naslovom IP 192.185.57[.]242, uporaba zlonamernega strežnika hearbellith.Icanwepeh[.]nagoya identificiran s splošnim imenom (CN) v potrdilu TLS in uporabo JavaScripta atob() funkcijo za dekodiranje binarnega niza, ki vsebuje podatke, kodirane z base64, na odjemalcu.

Dokončanje teh treh izzivov mi je prineslo Tolkienov prstan:

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

Na drugi prstan.

2. Vilinski prstan

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

Najvidnejša izziva za Elfen Ring sta bila Prison Escape in Jolly CI/CD.

Pobeg iz zapora

Prison Escape je bil strog opomnik, da je dodelitev korenskih pravic uporabniku v vsebniku Docker enako dobra kot dodelitev korenskih pravic v gostiteljskem sistemu. Izziv je bil prebiti se iz zabojnika. No, enostavno narediti, ko ste root:

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

Kot uporabnik root sem navedel tabele particij za napravo in nato namestil datotečni sistem gostitelja, kar mi je omogočilo popoln dostop do gostitelja. Zdaj bi lahko poiskal ključ, ki bi se moral nahajati v domačem imeniku, kot razkrivajo namigi v igri:

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

Jolly CI/CD

Čeprav je bilo to hitro, sem Jolly CI/CD potreboval najdlje od vseh izzivov, da sem ugotovil. Najprej smo dobili repozitorij Git za kloniranje prek HTTP:

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

Iz URL-ja sem videl, da je ime repozitorija wordpress.flag.net.internal, zato sem se preselil v repozitorij in našel spletno mesto WordPress. Preveril sem, ali spletno mesto deluje:

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

Ja, spletna stran je delovala. Zanimalo me je, ali je v zgodovini izvorne kode ušel kakšen ključ. Če da, bi moral biti sposoben potisniti spremembe v izvorno kodo. Pa sem tekel git log:

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

Glede na sporočila potrditve je videti kot a Zavezati je bilo narejeno po dodajanju sredstev za odpravo napake. Čas je, da preverite objavo pre-whoops:

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

Odlično, našel sem a .ssh imenik s ključi. Kopirajmo te ključe in konfigurirajmo agenta SSH in uporabnika Git, da vidimo, ali lahko posnemam lastnika teh ključev:

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

Zdaj pa se vrnimo v glavno vejo in preizkusimo, ali lahko potisnemo trivialno spremembo izvorne kode (z uporabo nano sem preprosto dodal presledek v eno od datotek):

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

Torej, prvi del izziva sem dosegel tako, da sem se predstavljal za enega od razvijalcev WordPressa, toda ali je spletno mesto po mojem pritisku še vedno delovalo?

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

Moj pritisk je nekaj spremenil, ker je zdaj spletno mesto preusmerjeno na vrata 8080.

Do zdaj sem ignoriral CI/CD del izziva, ki bi moral biti ključ do njegovega dokončanja. Repozitorij vsebuje a .gitlab-ci.yml ki zagotavlja konfiguracijo za cevovod GitLab CI/CD. Vsakič, ko pritisnete v repozitorij, se zažene sistem CI/CD in a GitLab Runner izvaja skripte v tej datoteki YML. To je enako dobro kot doseganje oddaljenega izvajanja kode na strežniku, kjer je nameščen GitLab Runner, sem pomislil.

Ko sem pogledal bližje, sem videl rsync skript, ki kopira vse datoteke iz repozitorija Git v imenik na spletnem strežniku, iz katerega je bilo spletno mesto streženo. Sprva sem poskušal uporabiti rsync obrniti tok podatkov s kopiranjem vseh datotek s spletnega strežnika v repozitorij Git, vendar neuspešno.

Po številnih testiranjih hipotez sem na koncu prišel do prelomnega vpogleda: Namesto da poskušate »popraviti« spletno mesto WordPress ali zagnati zlonamerne skripte prek sistema gradnje, strezite spletnemu mestu, ki uhaja iz spletnega strežnika. V notranjosti index.php (ki se nahaja na najvišji ravni repozitorija), lahko komentiram kodo, ki naloži spletno mesto WordPress in zažene ukaze PHP, ki preverjajo spletni strežnik.

Dejansko lahko s PHP-jem izvajam celo lupinske ukaze. To sem našel passthru() delal enostavno.

In index.php, Uporabil sem // komentirati dve vrstici in sem dodal passthru('l -la /'); v zadnji vrstici. S tem se ustvari spletno mesto, na katerem so navedene vse datoteke v korenskem imeniku spletnega strežnika:

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

Nato sem to spremembo potisnil v repozitorij Git in sistem GitLab CI/CD je namesto mene poskrbel za posodobitev spletne strani:

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

Ah, Elfen Ring mora biti notri flag.txt! Ponovil sem prejšnje korake, toda tokrat z uporabo passthru('cat /flag.txt'); razkrivam Elfen Ring, ko sem naslednjič zahteval spletno stran:

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

Na tretji zvonec.

3. Spletni obroč

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

Najbolj zabaven izziv mi je bil Open Boria Mine Door, čeprav je bil zanimiv Glamtariel's Fountain, ki je predstavljal tudi uganke.

Odprite vrata rudnika Boria

V Open Boria Mine Door nam je bilo predstavljenih šest žebljičkov ali mini izzivov, kako zaobiti preverjanje vnosa ali Pravilnik o varnosti vsebine za povezavo vstopnih in izstopnih cevi med zatiči, vključno z ujemanjem barv cevi. Za večino žebljičkov sem uporabil HTML, da sem napisal seznam povezovalnih črk 'o'. Tukaj je moja končna rešitev:

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

Zatič 1

Za Pin 1 ni bilo preverjanja, zato je šlo za preprosto stvar HTML in vgrajenega CSS:

Zatič 2

Pin 2 je imel pravilnik o varnosti vsebine, ki je onemogočal JavaScript, dovoljeval pa je vgrajeni CSS, tako da to ni bila težava za mojo metodo:

Zatič 3

Pin 3 je imel pravilnik o varnosti vsebine, ki ni dovoljeval CSS, dovoljeval pa je vgrajeni JavaScript, zato sem namesto tega uporabil JavaScript za spreminjanje slogov:

Zatič 4

Pin 4 ni imel pravilnika o varnosti vsebine, vendar je imel funkcijo sanitizeInput na strani odjemalca, ki je odstranila dvojne narekovaje, enojne narekovaje, leve kotne oklepaje in desne kotne oklepaje. Trik je bil ugotoviti, da te funkcije ni sprožila oddaja obrazca, ampak onblur dogodek. Z drugimi besedami, premikanje miške stran od vnosnega polja je sprožilo onblur dogodka, saniranje vseh vnosov. Rešitev je bila oddaja obrazca s pritiskom na Vnesite tipko, pri čemer pazite, da kazalca miške ne premaknete izven meja vnosnega polja:

Zatič 5

Pin 5 je imel enako sanitizeInput funkcijo in obhod skupaj s pravilnikom o varnosti vsebine, ki prepoveduje vgrajeni CSS, dovoljuje pa vgrajeni JavaScript:

Zatič 6

Nazadnje Pin 6 ni očistil vnosa, vendar je uporabil strožjo politiko varnosti vsebine, ki prepoveduje tako vgrajeni CSS kot JavaScript. Moja rešitev je bila uporaba zastarelega HTML-ja za pridobitev slogov, ki sem jih potreboval, in uporaba tabele namesto seznama:

Glamtarielov vodnjak

Glamtarielov vodnjak je bila priložnost za vadbo Napadi z zunanjo entiteto XML (XXE).. Ni bilo težko ugotoviti, kako definirati entiteto XML po meri, definirati entiteto, ki zahteva datoteko od strežnika, in dodati to entiteto kot koristni tovor v zahtevo HTTP. Najtežji del je bil ugotoviti uganke v igri, da bi ugotovili pot do datotek, ki bi pricurljale iz strežnika. Tukaj je prelomna zahteva, ki razkriva lokacijo zlatega prstana:

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.

Iz tega izziva bi ponudil dve lekciji. Najprej uporabite Pretvornik vrste vsebine razširitev v Podriganje za pretvorbo uporabnih obremenitev JSON v XML. Drugič, poskusite umestiti tovor XXE v ​​različne oznake – dolgo sem potreboval, da sem ugotovil, da moram samo postaviti &xxe; tovor v reqType namesto oznake imgDrop oznaka.

Na četrti prstan.

4. Oblačni prstan

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

Igranje za Cloud Ring je bil začetniški vpad v vmesnik ukazne vrstice (CLI) Amazon Web Services (AWS).

Vrhunec tega sklopa izzivov je bila uporaba tartuf najti poverilnice AWS v repozitoriju Git in jih nato izkoristiti za preverjanje pristnosti kot uporabnik AWS. Napadalec, ki pride na ta položaj, lahko uporabi aws sem ukaze za poizvedbo o pravilnikih, ki veljajo za uporabnika, in s tem do katerih sredstev v oblaku je mogoče dostopati in jih zlorabiti.

Na peti zvonec.

5. Goreči ognjeni obroč

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

Najbolj poučen del tega sklopa izzivov je bilo spoznavanje Merkle drevesa za izkoriščanje pametne pogodbe in uvrstite se na predprodajni seznam za nakup nezamenljivega žetona (NFT). Tu je bil izziv odkriti dokazne vrednosti, ki so skupaj z naslovom moje denarnice in korensko vrednostjo Merkle Tree dokazale mojo vključitev na seznam predprodaje.

Po nekaj neuspešnih poskusih zagotavljanja dokaznih vrednosti sem ugotovil, da nikoli ne bom mogel ugotoviti dokaznih vrednosti za podano korensko vrednost, ker ni bilo načina, da bi izvedeli vse vrednosti listov, uporabljene za izračun. Moral sem spremeniti korensko vrednost, da sem lahko zagotovil veljavno Merklovo drevo.

Uporaba Orodje profesorja QPetabyte, sem ustvaril Merklovo drevo iz dveh listov, sestavljeno iz naslova moje denarnice in naslova za BSRS_nft pametno pogodbo, ki sem jo našel z Blockchain Explorerjem v igri v drugem bloku verige blokov Ethereum v igri. Orodje je ustvarilo korensko vrednost tega drevesa in dokazno vrednost za naslov moje denarnice. Nato sem uporabil Burp za prestrezanje zahteve do strežnika in spremenil privzeto korensko vrednost, da sem lahko predložil veljavno Merklovo drevo. Tukaj je moj NFT sporc kupljeno po fiksni ceni 100 KringleCoinov:

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

Res grd primerek.

Končna

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

Najlepša hvala organizatorjem izziva SANS Holiday Hack Challenge, ker so moj um razširili na nove načine in pomagali poglobiti moje znanje o kibernetski varnosti. Ne samo, da se veselim izziva naslednje leto, ampak bom celo preizkusil izdaji tega izziva za leti 2020 in 2021. In če še niste sodelovali v tem izzivu, upam, da so ti poudarki vzbudili vaše zanimanje.

Časovni žig:

Več od Živimo varnost