Purustas selle! KringleCon 5 esiletõstmised: Golden Rings

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings

Õppimine kohtub lõbusaga 2022. aasta SANS Holiday Hack Challenge'il – pange end põhjapoolusel kreekerisõidule, kui ma nurjan Grinchumi veaplaani ja võtan kätte viis kuldsõrmust

See on minu esimene aasta, kus osalen SANS Holiday Hack Challenge ja see oli lööklaine. Läbi 16 väljakutse, mis ulatusid lihtsast kuni raskeni, harjutasin kahtlase võrguliikluse ja PowerShelli logide analüüsimist ning kirjutamist Suricata reeglid, murdes välja a Docker konteiner, lekkinud võtmete leidmine, et ära kasutada a GitLabi CI/CD torujuhe ja AWS-i kasutaja, dirigeerimine XML-i väliste üksuste rünnakud, ja nutika lepingu häkkimine a mitteelustatav märk.

Selle kogemuse parim osa oli see, et see tutvustas mulle uusi tööriistu ja tehnoloogiaid, laiendades seega minu küberturvalisuse teadmisi palju kaugemale. Siinkohal jagan mõningaid väljakutsete lahendamise tipphetki.

Orientatsioon

Iga osaleja saab avatari, et navigeerida põhjapoolusele seatud brauserisiseses videomängukeskkonnas:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Orienteerudes saate krüptovaluuta rahakoti, mida mäng kasutab väljakutsete täitmise eest KringleCoinide jagamiseks ja mida kasutate viimases väljakutses nutika lepingu häkkimiseks. Huvitav on see, et mäng jälgib kõiki KringleCoini tehinguid Ethereumi plokiahelas, mis tähendab, et ka sellesse plokiahelasse salvestatakse täielik ülevaade teie edusammudest.

Mängu esimese ringi juurde.

1. Tolkieni sõrmus

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Tolkieni sõrmuse leidmine nõudis mu palkide analüüsi lihaste painutamist.

Wiresharki andmepüük

Esiteks kasutasin pakutava analüüsimiseks Wiresharki .pcap fail, mis paljastas serveri aadressil adv.epostoday[.]uk faili allalaadimine Ref_Sept24-2020.zip arvutisse:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

ZIP-faili piiludes leidsin käivitatava faili nimega Ref_Sept24-2020.scr mis käivitas rakenduses ESET Endpoint Security kaks tuvastamist: BAT/Runner.ES ja Generik.TAGTBG. See pahavara viib lõpuks mälus töötava pahatahtliku käivitatava failini config.dll ja tuvastas ESET Täiustatud mäluskanner as Win32/Dridex.DD.

Windowsi sündmuste logid

Järgmiseks analüüsisin pakutut .evtx faili, mis sisaldab PowerShelli logisid sündmustevaaturiga. Kuigi PowerShelli logide analüüsimiseks on ka teisi tööriistu, peaksid kaitsjad olema hästi kursis ka operatsioonisüsteemi pakutavate natiivsete tööriistadega, kui ründajad teavad, kuidas kasutada väljaspool maad elavaid binaarfaile, et jääda radari alla.

Kuna logid sisaldasid 10,434 XNUMX sündmust, rühmitasin sündmused kuupäeva järgi ja seejärel käivitasin toimingu Otsi, et otsida sündmusi, mis sisaldavad $ iseloomu. PowerShellis $ kasutatakse loomiseks ja viitamiseks muutujad. Leidsin, et rünnak toimus 24. detsembril 2022, kui ründaja käivitas järgmise skripti:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Näib, et ründaja leidis salaretsepti ja vahetas selle salajase koostisosa välja mesi eest kalaõlija lõi seejärel uue retseptifaili. See käivitas sündmuse ID-ga 4104, mis tähistab PowerShelli kaugkäskude täitmist. Seega filtreerisin sündmused selle ID järgi, aidates mul kiiremini leida täiendavaid pahatahtlikke sündmusi.

Suricata regatt

Tolkieni ringi viimane harjutus oli nelja Suricata reegli kirjutamine, et jälgida võrguliiklust Dridexi nakatumise suhtes:

alert dns $HOME_NET any -> any any (msg:"Teatud halb DNS-otsing, võimalik Dridexi infektsioon"; dns.query; content:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

hoiatus http 192.185.57.242 mis tahes <> mis tahes (sõnum: "Uurige kahtlasi ühendusi, võimalikku Dridex-infektsiooni"; sid:2; rev:1;)

alert tls any any -> any any (sõnum: "Uurige halbu sertifikaate, võimalikku Dridexi nakkust"; tls.cert_subject; sisu:"CN=heardbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

alert http any any -> any any (msg:"Kahtlane JavaScripti funktsioon, võimalik Dridex-infektsioon"; file_data; content:"let byteCharacters = atob"; sid:4; rev:1;)

Selleks püüavad need reeglid DNS-i otsingud kinni adv.epostoday[.]uk, ühendused IP-aadressiga 192.185.57[.]242, pahatahtliku serveri kasutamine hearbellith.Icanwepeh[.]nagoya tuvastatakse üldnimetuse kaudu (CN) TLS-sertifikaadis ja JavaScripti kasutamist atob() funktsioon binaarstringi dekodeerimiseks, mis sisaldab kliendil base64-kodeeringuga andmeid.

Nende kolme väljakutse täitmine teenis mulle Tolkieni sõrmuse:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Teise rõnga juurde.

2. Haldjarõngas

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Elfen Ringi silmapaistvamad väljakutsed olid Prison Escape ja Jolly CI/CD.

Vangla põgenemine

Prison Escape oli karm meeldetuletus, et Dockeri konteineris olevale kasutajale juurõiguste andmine on sama hea kui hostisüsteemi juurõiguste andmine. Väljakutse oli konteinerist välja murda. Noh, lihtne teha, kui olete juur:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Juurkasutajana loetlesin seadme partitsioonitabelid ja seejärel ühendasin hosti failisüsteemi, andes mulle täieliku juurdepääsu hostile. Nüüd võiksin otsida võtit, mis peaks asuma kodukataloogis, nagu selgus mängusisestest vihjetest:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Jolly CI/CD

Kuigi see oli kiire, kulus mul Jolly CI/CD-l kõige kauem aega, et välja mõelda. Esiteks anti meile Giti hoidla HTTP kaudu kloonimiseks:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

URL-ist nägin, et hoidla nimi oli wordpress.flag.net.internal, nii et kolisin hoidlasse ja leidsin WordPressi veebisaidi. Kontrollisin, kas veebisait on aktiivne:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Jah, veebisait toimis. Mind huvitas, kas lähtekoodi ajaloos on lekkinud võtmeid. Kui jah, siis peaksin saama lähtekoodi muudatusi teha. Nii et ma jooksin git logi:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Kinnitussõnumite põhjal näeb see välja nagu a endale tehti pärast varade lisamist, et parandada oih. Aeg tutvuda hoopi-eelse kohustusega:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Suurepärane, leidsin a .ssh klahvidega kataloog. Kopeerime need võtmed ja konfigureerime SSH-agendi ja Giti kasutaja, et näha, kas ma saan esineda nende võtmete omanikuna:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Nüüd pöördume tagasi põhiharu juurde ja testime, kas saame lähtekoodi triviaalse muudatuse sisse lükata (nano abil lisasin ühte faili lihtsalt tühiku):

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Niisiis, saavutasin väljakutse esimese osa, kehastades end ühe WordPressi arendajast, kuid kas veebisait töötas ka pärast minu tõuget?

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Minu tõuge muutis midagi, sest nüüd suunati veebisait ümber pordile 8080.

Seni olin ignoreerinud väljakutse CI/CD osa, mis peaks olema selle täitmise võti. Hoidla sisaldab a .gitlab-ci.yml fail, mis pakub GitLabi CI/CD konveieri konfiguratsiooni. Iga kord, kui vajutate hoidlasse, käivitub CI/CD süsteem ja a GitLabi jooksja käivitab selles YML-failis olevad skriptid. See on sama hea kui saavutada koodi kaugkäivitamine serveris, kuhu GitLab Runner on installitud, mõtlesin ma.

Lähemalt vaadates nägin ma rsync skript, mis kopeerib kõik failid Giti hoidlast selle veebiserveri kataloogi, kust veebisaiti teenindati. Algul proovisin kasutada rsync andmevoo ümberpööramiseks, kopeerides kõik failid veebiserverist Giti hoidlasse, kuid edutult.

Pärast pikka hüpoteesi testimist sain lõpuks oma läbimurdelise ülevaate: selle asemel, et proovida WordPressi veebisaiti "parandada" või käivitada pahatahtlikke skripte ehitussüsteemi kaudu, teenindage veebisaiti, mis lekib teavet veebiserverist. Sees index.php (asub hoidla ülaosas), saan kommenteerida koodi, mis laadib WordPressi veebisaidi ja käivitada PHP-käsud, mis uurivad veebiserverit.

Tõepoolest, ma saan PHP-ga isegi shellikäske käivitada. Ma leidsin selle passthru() töötas kergelt.

In index.php, Ma kasutasin // kommenteerida kaks rida ja lisasin passthru('ls -la /'); viimasel real. See loob veebisaidi, mis loetleb kõik veebiserveri juurkataloogis olevad failid:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Seejärel lükkasin selle muudatuse Giti hoidlasse ja GitLabi CI/CD süsteem hoolitses veebisaidi värskendamise eest minu eest:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Ah, päkapikurõngas peab sees olema lipp.txt! Kordasin eelmisi samme, kuid seekord kasutasin passthru('kass /lipp.txt'); paljastades Elfen Ringi järgmisel korral, kui veebisaiti taotlesin:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Kolmanda rõnga juurde.

3. Veebirõngas

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Minu jaoks oli kõige lõbusam väljakutse Open Boria Mine Door, kuigi Glamtarieli purskkaev oli huvitav, esitades ka mõistatusi.

Avage Boria kaevanduse uks

Avatud Boria kaevanduse ukses esitati meile kuus tihvti või miniväljakutset sisendi valideerimisest või Sisu turvalisuse poliitika sisend- ja väljalasketorude ühendamiseks tihvtide vahel, sealhulgas torude värvide sobitamiseks. Enamiku tihvtide puhul kasutasin ühendavate tähtede o loendi koostamiseks HTML-i. Siin on minu lõplik lahendus:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Pin 1

Pin 1 valideerimist ei tehtud, seega oli tegemist lihtsa HTML-i ja tekstisisese CSS-iga:

Pin 2

Pin 2 sisaldas sisuturbeeeskirju, mis keelas JavaScripti, kuid lubas tekstisisese CSS-i, nii et minu meetodi puhul ei olnud see probleem:

Pin 3

Pin 3 sisaldas sisuturbeeeskirju, mis keelas CSS-i, kuid lubas tekstisisese JavaScripti, seega kasutasin stiilide muutmiseks JavaScripti:

Pin 4

Pin 4 ei sisaldanud sisu turvapoliitikat, kuid sellel oli kliendi poolel funktsioon sanitizeInput, mis eemaldas topelt-, üksikjutumärgid, vasakpoolsed nurksulud ja paremnurksulud. Siin oli trikk mõistmine, et seda funktsiooni ei käivitanud vormi esitamine, vaid hägune sündmus. Teisisõnu käivitas hiire liigutamine sisestusväljast eemale hägune sündmus, desinfitseerides mis tahes sisendi. Lahenduseks oli vormi esitamine, vajutades nuppu sisene klahvi, jälgides samas, et hiirekursor ei liiguks sisestusvälja piiridest väljapoole:

Pin 5

Pin 5 oli sama sanitizeInput funktsiooni ja möödaviigu koos sisuturbepoliitikaga, mis keelab tekstisisese CSS-i, kuid lubab tekstisisese JavaScripti:

Pin 6

Lõpuks ei desinfitseerinud Pin 6 sisendit, vaid kasutas rangemat sisuturbepoliitikat, mis keelas nii tekstisisese CSS-i kui ka JavaScripti. Minu lahendus oli kasutada aegunud HTML-i, et saada vajalikud stiilid, ja kasutada loendi asemel tabelit:

Glamtarieli purskkaev

Glamtarieli purskkaev oli võimalus harjutada XML External Entity (XXE) rünnakud. Kohandatud XML-olemi määratlemine, serverilt faili taotleva olemi määratlemine ja selle olemi lisamine HTTP-päringusse kasuliku koormusena ei olnud keeruline. Kõige raskem osa oli mõistatada mängusiseseid mõistatusi, et leida tee serverist lekitavate failideni. Siin on läbimurdetaotlus, mis paljastab kuldsõrmuse asukoha:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Pakun sellest väljakutsest kaks õppetundi. Esiteks kasutage Sisutüübi konverter laiendus sisse Röhitsema JSON-i kasulike koormuste teisendamiseks XML-i. Teiseks proovige paigutada XXE kasulik koormus erinevatele siltidele – mul kulus kaua aega, enne kui sain aru, et mul ei ole vaja teha muud, kui &xxe; kasulik koormus reqType sildi asemel imgDrop tag.

Neljanda ringi juurde.

4. Pilvesõrmus

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Cloud Ringi eest mängimine oli algaja sissetung Amazon Web Servicesi (AWS) käsurea liidesesse (CLI).

Selle väljakutsete kogumi tipphetk oli kasutamine trühvlihoog et leida Giti hoidlast AWS-i mandaadid ja seejärel kasutada neid AWS-i kasutajana autentimiseks. Sellele positsioonile jõudnud ründaja saab kasutada aws iam käske, et teha päring kasutajale kehtivate poliitikate kohta ja seega millistele pilvevaradele juurde pääseda ja neid kuritarvitada.

Viienda rõnga juurde.

5. Põlev tulerõngas

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Selle väljakutsete komplekti kõige õpetlikum osa oli õppimine Merkle puud kasutada nutikat lepingut ja mitteasendatava märgi (NFT) ostmise eelmüügiloendisse pääsemine. Siin oli väljakutse leida tõestusväärtused, mis koos minu rahakoti aadressi ja Merkle Tree juurväärtusega tõestasid minu kuulumist eelmüüginimekirja.

Pärast mõningaid ebaõnnestunud katseid tõestusväärtusi esitada, mõistsin, et ma ei suuda kunagi esitatud juurväärtuse tõestusväärtusi välja selgitada, kuna ei olnud võimalik teada kõiki selle arvutamiseks kasutatud lehtede väärtusi. Pidin muutma juurväärtust, et saaksin esitada kehtiva Merkle Tree.

Kasutamine Professor QPetabyte'i tööriist, lõin Merkle Tree kahest lehest, mis koosnes minu rahakoti aadressist ja aadressist BSRS_nft nutikas leping, mille leidsin mängusisese Blockchain Exploreri abil mängu Ethereumi plokiahela teises plokis. Tööriist genereeris selle puu juurväärtuse ja minu rahakoti aadressi tõendiväärtuse. Seejärel kasutasin Burpi serverile suunatud päringu pealtkuulamiseks ja muutsin vaikimisi juurväärtust, et saaksin esitada kehtiva Merkle Tree. Siin on minu NFT sporc ostetud fikseeritud hinnaga 100 KringleCoini:

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Kole isend tõesti.

Lõplik

Purustas selle! KringleCon 5 esiletõstmised: Golden Rings PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Suur aitäh SANS Holiday Hack Challenge'i korraldajatele, et nad aitasid mu mõtteid uutel viisidel laiendada ja aitasid süvendada minu küberturbealaseid teadmisi. Ma mitte ainult ei oota järgmise aasta väljakutset, vaid proovin isegi selle väljakutse 2020. ja 2021. aasta väljaandeid. Ja kui te pole varem selles väljakutses osalenud, siis loodan, et need tipphetked on teie huvi äratanud.

Ajatempel:

Veel alates Me elame turvaliselt