A spart! Repere de la KringleCon 5: Golden Rings

A spart! Repere de la KringleCon 5: Golden Rings

Învățarea se întâlnește cu distracția la SANS Holiday Hack Challenge 2022 – prindeți-vă curea pentru o plimbare cu crackerjack la Polul Nord, în timp ce încalc planul greșit al lui Grinchum și recuperez cele cinci inele de aur

Acesta este primul meu an de participare la SANS Holiday Hack Challenge și a fost o explozie. Printr-o serie de 16 provocări, de la ușor la dificil, am exersat analiza traficului de rețea suspect și a jurnalelor PowerShell, scriind regulile Suricata, izbucnind dintr-o Container de andocare, găsirea de chei scurse pentru a exploata a Conducta GitLab CI/CD si un utilizator AWS, dirijare Atacuri XML External Entity, și piratarea unui contract inteligent pentru a cumpăra un jeton non-fungible.

Cea mai bună parte a acestei experiențe a fost că m-a introdus în noi instrumente și tehnologii, extinzându-mi astfel cunoștințele de securitate cibernetică mult mai departe. Aici, împărtășesc câteva momente importante din rezolvarea provocărilor.

Orientare

Fiecare participant primește un avatar pentru a naviga într-un mediu de joc video în browser stabilit la Polul Nord:

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

În timpul orientării, primești un portofel cu criptomonede pe care jocul îl folosește pentru a acorda KringleCoins pentru finalizarea provocărilor și pe care îl folosești în ultima provocare pentru a pirata un contract inteligent. Interesant este că jocul ține evidența tuturor tranzacțiilor KringleCoin într-un blockchain Ethereum, ceea ce înseamnă că o înregistrare completă a progresului tău este stocată și în acest blockchain.

Pe primul inel al jocului.

1. Inelul Tolkien

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

Găsirea Inelului Tolkien a necesitat să-mi flexez mușchii de analiză a jurnalelor.

phishing Wireshark

În primul rând, am folosit Wireshark pentru a analiza cele furnizate .pcap fișier care a dezvăluit un server la adv.epostoday[.]uk descărcarea fișierului Ref_Sept24-2020.zip la un computer:

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

Privind în interiorul fișierului ZIP, am găsit un executabil numit Ref_Sept24-2020.scr care a declanșat două detectări în ESET Endpoint Security: BAT/Runner.ES și Generik.TAGTBG. Acest malware duce în cele din urmă la un executabil rău intenționat care rulează în memorie numit config.dll și detectat de ESET Scaner avansat de memorie as Win32/Dridex.DD.

Jurnalele de evenimente Windows

În continuare, am analizat cele oferite .evtx fișier care conține jurnalele PowerShell cu Vizualizator de evenimente. Deși există și alte instrumente pentru a analiza jurnalele PowerShell, dacă atacatorii știu cum să folosească binarele care trăiesc în afara terenului pentru a rămâne sub radar, apărătorii ar trebui, de asemenea, să fie familiarizați cu instrumentele native pe care le oferă un sistem de operare.

Deoarece jurnalele conțineau 10,434 de evenimente, am grupat evenimentele după dată și apoi am rulat acțiunea Găsiți pentru a căuta orice evenimente care conțineau $ caracter. În PowerShell, $ este folosit pentru a crea și a face referire variabile. Am găsit un atac pe 24 decembrie 2022, când atacatorul a rulat următorul script:

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

Se pare că atacatorul a găsit o rețetă secretă, a schimbat ingredientul secret al miere pentru untură de peşte, apoi a creat un nou fișier de rețetă. Acest lucru a declanșat un eveniment cu un ID de 4104, care reprezintă execuția comenzilor PowerShell de la distanță. Așadar, am filtrat evenimentele după acest ID, ajutându-mă să găsesc mai rapid evenimente rău intenționate suplimentare.

Regatta Suricata

Ultimul exercițiu pentru Inelul Tolkien a fost scrierea a patru reguli Suricata pentru a monitoriza traficul de rețea pentru o infestare cu Dridex:

alert dns $HOME_NET orice -> orice orice (msg:„Căutare DNS proastă cunoscută, posibilă infecție Dridex”; dns.query; conținut:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

alertă http 192.185.57.242 orice <> orice orice (msg:„Investigați conexiuni suspecte, posibilă infecție cu Dridex”; sid:2; rev:1;)

alert tls any any -> any any (msg:„Investigați certificate proaste, posibilă infecție cu Dridex”; tls.cert_subject; conținut:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg:„Funcție JavaScript suspectă, posibilă infecție Dridex”; date_file; conținut:”let byteCharacters = atob”; sid:4; rev:1;)

În ordine, aceste reguli prind căutările DNS pentru adv.epostoday[.]uk, conexiuni la adresa IP 192.185.57[.]242, utilizarea serverului rău intenționat heardbelth.Icanwepeh[.]nagoya identificat prin numele comun (CN) într-un certificat TLS și utilizarea JavaScript atob() funcție de decodare a unui șir binar care conține date codificate în base64 pe client.

Finalizarea acestor trei provocări mi-a câștigat inelul Tolkien:

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

Trec la al doilea inel.

2. Inelul Elfen

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

Cele mai proeminente provocări pentru Elfen Ring au fost Prison Escape și Jolly CI/CD.

Evadare în închisoare

Prison Escape a fost un memento sever că acordarea de privilegii root unui utilizator într-un container Docker este la fel de bună ca acordarea de privilegii root pe sistemul gazdă. Provocarea a fost să iasă din container. Ei bine, ușor de făcut când ești root:

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

În calitate de utilizator root, am listat tabelele de partiții pentru dispozitiv și apoi am montat sistemul de fișiere gazdă, oferindu-mi acces deplin la gazdă. Acum aș putea căuta cheia, care ar trebui să fie localizată în directorul principal, așa cum este dezvăluit de sugestiile din joc:

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

Jolly CI/CD

Deși asta a fost rapid, Jolly CI/CD mi-a luat cea mai lungă provocare să-mi dau seama. Mai întâi, ni s-a oferit un depozit Git pentru a clona prin HTTP:

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

Din URL, am putut vedea că numele depozitului era wordpress.flag.net.intern, așa că m-am mutat în depozit și am găsit un site web WordPress. Am verificat dacă site-ul este live:

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

Da, site-ul era funcțional. Eram curios dacă au existat chei scurse în istoricul codului sursă. Dacă da, ar trebui să pot împinge modificări la codul sursă. Așa că am fugit git-log:

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

Din mesajele de comitere, se pare că a comite a fost făcută după adăugarea de active pentru a remedia un whoops. E timpul să verifici comiterea pre-whoops:

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

Excelent, am gasit un .ssh director cu chei. Să copiem acele chei și să configuram un agent SSH și un utilizator Git pentru a vedea dacă pot uzurpa identitatea proprietarului acelor chei:

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

Acum să revenim la ramura principală și să testăm dacă putem împinge o modificare banală a codului sursă (folosind nano, am adăugat pur și simplu un spațiu la unul dintre fișiere):

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

Așadar, am reușit prima parte a provocării uzurpându-mă pe unul dintre dezvoltatorii WordPress, dar site-ul a mai funcționat după impulsul meu?

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

Împingerea mea a schimbat ceva pentru că acum site-ul web a fost redirecționat către portul 8080.

Până acum, ignorasem partea CI/CD a provocării, care ar trebui să fie cheia finalizării acesteia. Depozitul conține a .gitlab-ci.yml fișier, care oferă configurația pentru o conductă GitLab CI/CD. De fiecare dată când împingeți în depozit, sistemul CI/CD pornește și a GitLab Runner execută scripturile din acest fișier YML. M-am gândit că este la fel de bun ca realizarea execuției codului de la distanță pe serverul pe care este instalat GitLab Runner.

Privind mai atent, am văzut o rsync script care copie toate fișierele din depozitul Git în directorul de pe serverul web de pe care site-ul a fost servit. La început, am încercat să folosesc rsync pentru a inversa fluxul de date prin copierea tuturor fișierelor de pe serverul web în depozitul Git, dar fără succes.

După o mulțime de testare a ipotezelor, în cele din urmă am avut o perspectivă revoluționară: în loc să încerc să „remediez” site-ul WordPress sau să rulez scripturi rău intenționate prin intermediul sistemului de compilare, serviți un site web care scurge informații de pe serverul web. Interior index.php (situat la nivelul superior al depozitului), pot comenta codul care încarcă site-ul WordPress și pot rula comenzi PHP care sondează serverul web.

Într-adevăr, pot rula chiar și comenzi shell cu PHP. am gasit asta trece prin() lucrat usor.

In index.php, Obisnuiam // pentru a comenta două rânduri și am adăugat passthru('ls -la /'); pe ultima linie. Aceasta creează un site web care listează toate fișierele din directorul rădăcină al serverului web:

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

Apoi am împins această modificare în depozitul Git și sistemul GitLab CI/CD s-a ocupat de actualizarea site-ului pentru mine:

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

Ah, Inelul Elfen trebuie să fie înăuntru steag.txt! Am repetat pașii anteriori, dar de data aceasta folosind passthru('cat /flag.txt'); dezvăluind Inelul Elfen data viitoare când am solicitat site-ul:

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

Trec la al treilea inel.

3. Web Ring

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

Cea mai distractivă provocare pentru mine a fost Open Boria Mine Door, deși Glamtariel's Fountain a fost interesantă, prezentând și ghicitori.

Deschide ușa minei Boria

În Open Boria Mine Door, ni s-au prezentat șase pini sau mini-provocări pentru a ocoli validarea intrării sau un Politica de securitate a conținutului pentru a conecta țevile de intrare și de ieșire între știfturi, inclusiv potrivirea culorilor țevilor. Pentru majoritatea pinurilor, am folosit HTML pentru a scrie o listă de litere de legătură „o”. Iată soluția mea finală:

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

Pinul 1

Nu a existat nicio validare pentru Pin 1, așa că a fost o simplă chestiune de HTML și CSS inline:

Pinul 2

Pinul 2 avea o politică de securitate a conținutului care nu permitea JavaScript, dar permitea CSS inline, așa că nu a fost o problemă pentru metoda mea:

Pinul 3

Pinul 3 avea o politică de securitate a conținutului care nu permitea CSS, dar permitea JavaScript inline, așa că am folosit JavaScript pentru a schimba stilurile:

Pinul 4

Pinul 4 nu avea o politică de securitate a conținutului, dar avea o funcție sanitizeInput pe partea clientului care elimina ghilimele duble, ghilimele simple, parantezele cu unghi stâng și parantezele cu unghi drept. Trucul aici a fost să realizezi că această funcție nu a fost declanșată prin trimiterea formularului, ci de către onblur eveniment. Cu alte cuvinte, mutarea mouse-ului departe de câmpul de intrare a declanșat onblur eveniment, dezinfectând orice intrare. Soluția a fost trimiterea formularului apăsând tasta Intrați tasta, având grijă să nu mutați cursorul mouse-ului în afara limitelor câmpului de introducere:

Pinul 5

Pinul 5 avea același lucru sanitizeInput funcția și ocolirea împreună cu o politică de securitate a conținutului care interzice CSS inline, dar permite JavaScript inline:

Pinul 6

În cele din urmă, Pinul 6 nu a dezinfectat intrarea, dar a folosit o politică de securitate a conținutului mai strictă, care interzicea atât CSS, cât și JavaScript inline. Soluția mea a fost să folosesc HTML depreciat pentru a obține stilurile de care aveam nevoie și să folosesc un tabel în loc de o listă:

Fântâna lui Glamtariel

Fântâna lui Glamtariel a fost o oportunitate de a practica Atacuri XML External Entity (XXE).. Înțelegerea modului de a defini o entitate XML personalizată, definirea unei entități care solicită un fișier de la server și adăugarea acelei entități ca sarcină utilă la o solicitare HTTP nu a fost greu. Cea mai grea parte a fost să descoperi ghicitorile din joc pentru a ghici calea către fișierele pe care serverul le va scurge. Iată cererea inovatoare care dezvăluie locația inelului de aur:

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.

Aș oferi două lecții învățate din această provocare. În primul rând, utilizați Convertor de tip de conținut extensie în burp pentru a converti încărcăturile utile JSON în XML. În al doilea rând, încercați să plasați încărcătura utilă XXE în diferite etichete – mi-a luat mult timp să îmi dau seama că tot ce trebuia să fac a fost să plasez &xxe; sarcină utilă în reqType eticheta în loc de imgDrop etichetă.

La al patrulea inel.

4. Cloud Ring

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

Jocul pentru Cloud Ring a fost o incursiune a începătorilor în Interfața de linie de comandă (CLI) Amazon Web Services (AWS).

Punctul culminant al acestui set de provocări a fost utilizarea trufflehog pentru a găsi acreditările AWS într-un depozit Git și apoi exploatarea lor pentru a se autentifica ca utilizator AWS. Un atacator care ajunge în această poziție poate folosi aws iam comenzi pentru a interoga politicile care se aplică utilizatorului și, astfel, ce active cloud pot fi accesate și abuzate.

Trec la al cincilea inel.

5. Inel de foc arzând

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

Cea mai instructivă parte a acestui set de provocări a fost să înveți despre Merkle Trees să exploateze un contract inteligent și intră pe lista de prevânzare pentru achiziționarea unui token nefungibil (NFT). Aici provocarea a fost să descopăr valorile doveditoare care, împreună cu adresa mea de portofel și valoarea rădăcină a unui Arbore Merkle, au dovedit includerea mea pe lista de prevânzare.

După câteva încercări nereușite de a furniza valori de probă, mi-am dat seama că nu voi putea niciodată să aflu valorile de probă pentru valoarea rădăcină furnizată, deoarece nu exista nicio modalitate de a cunoaște toate valorile frunzelor folosite pentru a o calcula. Trebuia să schimb valoarea rădăcină, astfel încât să pot oferi un Merkle Tree valid.

Utilizarea Instrumentul profesorului QPetabyte, am creat un Merkle Tree din două foi formate din adresa mea de portofel și adresa pentru BSRS_nft contract inteligent, pe care l-am găsit folosind Blockchain Explorer din joc în blocul doi din blockchain-ul Ethereum al jocului. Instrumentul a generat valoarea rădăcină a acestui arbore și valoarea de probă pentru adresa portofelului meu. Apoi am folosit Burp pentru a intercepta cererea către server și am schimbat valoarea rădăcină implicită, astfel încât să pot trimite un Merkle Tree valid. Aici e al meu NFT sporc cumpărat la un preț fix de 100 KringleCoins:

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

Un exemplar urât într-adevăr.

Final

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

Le mulțumesc foarte mult organizatorilor SANS Holiday Hack Challenge pentru că mi-au întins mintea în moduri noi și m-au ajutat să-mi aprofundez cunoștințele privind securitatea cibernetică. Nu numai că aștept cu nerăbdare provocarea de anul viitor, dar voi încerca chiar și edițiile din 2020 și 2021 ale acestei provocări. Și dacă nu ați mai participat la această provocare până acum, sper că aceste momente importante v-au stârnit interesul.

Timestamp-ul:

Mai mult de la Traim Securitate