Rotto! Momenti salienti della KringleCon 5: Anelli d'oro

Rotto! Momenti salienti della KringleCon 5: Anelli d'oro

L'apprendimento incontra il divertimento alla SANS Holiday Hack Challenge del 2022: allacciati per un giro da cracker al Polo Nord mentre sventolo il piano fallo di Grinchum e recupero i cinque anelli d'oro

Questo è il mio primo anno di partecipazione al Sfida di hacking natalizio SANS ed è stato uno spasso. Attraverso una serie di 16 sfide che vanno dal facile al difficile, mi sono esercitato ad analizzare il traffico di rete sospetto e i log di PowerShell, scrivendo Suricata governa, uscendo da a Contenitore Docker, trovare chiavi trapelate per sfruttare a Pipeline GitLab CI/CD e Utente AWS, dirigere Attacchi di entità esterne XMLe hackerando uno smart contract per acquistare a token non fungibile.

La parte migliore di questa esperienza è stata che mi ha introdotto a nuovi strumenti e tecnologie, ampliando così ulteriormente la mia conoscenza della sicurezza informatica. Qui, condivido alcuni punti salienti della risoluzione delle sfide.

Orientamento

Ogni partecipante riceve un avatar per navigare in un ambiente di videogiochi nel browser ambientato al Polo Nord:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Durante l'orientamento, ricevi un portafoglio di criptovaluta che il gioco utilizza per assegnare KringleCoin per il completamento delle sfide e che utilizzi nell'ultima sfida per hackerare uno smart contract. È interessante notare che il gioco tiene traccia di tutte le transazioni KringleCoin in una blockchain di Ethereum, il che significa che anche una registrazione completa dei tuoi progressi è memorizzata in questa blockchain.

Al primo squillo del gioco.

1. Anello di Tolkien

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trovare l'anello di Tolkien ha richiesto di flettere i miei muscoli di analisi dei registri.

Phishing Wireshark

Innanzitutto, ho utilizzato Wireshark per analizzare i dati forniti .pcap file che ha rivelato un server in adv.epostoday[.]uk scaricando il file Rif_24 settembre-2020.zip a un computer:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Sbirciando all'interno del file ZIP, ho trovato un eseguibile chiamato Rif_24 settembre-2020.scr che ha attivato due rilevamenti in ESET Endpoint Security: BAT/Runner.ES ed Generico.TAGTBG. Questo malware alla fine porta a un eseguibile dannoso in esecuzione nella memoria chiamato config.dll e rilevato da ESET Scanner di memoria avanzato as Win32/Dridex.DD.

Registri eventi di Windows

Successivamente, ho analizzato il fornito evtx file contenente i log di PowerShell con il Visualizzatore eventi. Sebbene esistano altri strumenti per analizzare i log di PowerShell, se gli aggressori sanno come utilizzare i binari che vivono fuori terra per rimanere sotto il radar, i difensori dovrebbero anche essere esperti negli strumenti nativi forniti da un sistema operativo.

Poiché i registri contenevano 10,434 eventi, ho raggruppato gli eventi per data e quindi eseguito l'azione Trova per cercare eventuali eventi contenenti il $ carattere. In PowerShell, $ è usato per creare e fare riferimento variabili. Ho trovato un attacco in corso il 24 dicembre 2022, quando l'attaccante ha eseguito il seguente script:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Sembra che l'aggressore abbia trovato una ricetta segreta, ne abbia cambiato l'ingrediente segreto miele per olio di pesce, quindi ha creato un nuovo file ricetta. Ciò ha attivato un evento con ID 4104, che rappresenta l'esecuzione di comandi PowerShell remoti. Quindi, ho filtrato gli eventi in base a questo ID, aiutandomi a trovare più rapidamente ulteriori eventi dannosi.

Regata Suricata

L'ultimo esercizio per il Tolkien Ring è stato scrivere quattro regole Suricata per monitorare il traffico di rete per un'infestazione di Dridex:

alert dns $HOME_NET any -> any any (msg:”Ricerca DNS errata nota, possibile infezione Dridex”; dns.query; content:”adv.epostoday.uk”; nocase; sid:1; rev:1;)

alert http 192.185.57.242 any <> any any (msg:”Indaga sulle connessioni sospette, possibile infezione da Dridex”; sid:2; rev:1;)

alert tls any any -> any any (msg:”Indaga sui certificati errati, possibile infezione da Dridex”; tls.cert_subject; content:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg:"Funzione JavaScript sospetta, possibile infezione da Dridex"; file_data; content:"let byteCharacters = atob"; sid:4; rev:1;)

Nell'ordine, queste regole rilevano le ricerche DNS per adv.epostoday[.]uk, connessioni all'indirizzo IP 192.185.57[.]242, l'uso del server dannoso Heardbellith.Icanwepeh[.]nagoya identificato tramite il nome comune (CN) in un certificato TLS e l'uso di JavaScript da A a B() funzione per decodificare una stringa binaria contenente dati con codifica Base64 sul client.

Il completamento di queste tre sfide mi ha fatto guadagnare il Tolkien Ring:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Al secondo squillo.

2. Anello elfico

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Le sfide più importanti per l'Elfen Ring sono state Prison Escape e Jolly CI/CD.

Prison escape

Prison Escape è stato un severo promemoria del fatto che concedere i privilegi di root a un utente in un container Docker è altrettanto valido che concedere i privilegi di root sul sistema host. La sfida era uscire dal contenitore. Bene, fatto facilmente quando sei root:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Come utente root, ho elencato le tabelle delle partizioni per il dispositivo e quindi ho montato il filesystem host, garantendomi l'accesso completo all'host. Ora potrei cercare la chiave, che dovrebbe trovarsi nella home directory come rivelato dai suggerimenti nel gioco:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Jolly CI/CD

Sebbene sia stato veloce, Jolly CI / CD mi ha richiesto più tempo di qualsiasi sfida per capirlo. Innanzitutto, ci è stato fornito un repository Git da clonare su HTTP:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Dall'URL, ho potuto vedere che il nome del repository era wordpress.flag.net.interno, quindi sono passato al repository e ho trovato un sito Web WordPress. Ho controllato se il sito web era attivo:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Sì, il sito web era funzionante. Ero curioso di sapere se ci fossero chiavi trapelate nella cronologia del codice sorgente. Se sì, dovrei essere in grado di inviare modifiche al codice sorgente. Quindi sono scappato registro git:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Dai messaggi di commit, sembra che a commettere è stato creato dopo l'aggiunta di risorse per correggere un whoops. È ora di dare un'occhiata al commit pre-whoops:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Eccellente, ho trovato un .ssh directory con le chiavi. Copiamo quelle chiavi e configuriamo un agente SSH e un utente Git per vedere se posso impersonare il proprietario di quelle chiavi:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Ora torniamo al ramo principale e testiamo se possiamo inviare una banale modifica al codice sorgente (usando nano, ho semplicemente aggiunto uno spazio a uno dei file):

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Quindi, ho raggiunto la prima parte della sfida impersonando uno degli sviluppatori di WordPress, ma il sito web ha funzionato ancora dopo la mia spinta?

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

La mia spinta ha cambiato qualcosa perché ora il sito Web è stato reindirizzato alla porta 8080.

Finora avevo ignorato la parte CI/CD della sfida, che dovrebbe essere la chiave per completarla. Il repository contiene un .gitlab-ci.yml file, che fornisce la configurazione per una pipeline CI/CD GitLab. Ogni volta che invii al repository, entra in funzione il sistema CI/CD e a Corridore di GitLab esegue gli script in questo file YML. È buono come ottenere l'esecuzione di codice remoto sul server in cui è installato GitLab Runner, ho pensato.

Guardando più da vicino, ho visto un rsync script che copia tutti i file dal repository Git alla directory sul server Web da cui il sito Web veniva servito. All'inizio ho provato a usare rsync per invertire il flusso di dati copiando tutti i file dal server web al repository Git, ma senza successo.

Dopo un sacco di test di ipotesi, alla fine ho avuto la mia intuizione rivoluzionaria: invece di provare a "riparare" il sito Web di WordPress o eseguire script dannosi tramite il sistema di compilazione, servi un sito Web che fa trapelare informazioni dal server web. Dentro index.php (situato al livello più alto del repository), posso commentare il codice che carica il sito web WordPress ed eseguire comandi PHP che sondano il server web.

In effetti, posso persino eseguire comandi di shell con PHP. l'ho trovato passare attraverso() ha funzionato facilmente.

In index.php, Ero solito // per commentare due righe e ho aggiunto passa('ls -la /'); sull'ultima riga. Questo crea un sito Web che elenca tutti i file nella directory principale del server Web:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Quindi ho inviato questa modifica al repository Git e il sistema GitLab CI/CD si è occupato di aggiornare il sito Web per me:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Ah, l'Elfen Ring deve esserci flag.txt! Ho ripetuto i passaggi precedenti, ma questa volta utilizzando passante('cat /flag.txt'); rivelando l'Elfen Ring la prossima volta che ho richiesto il sito web:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Al terzo squillo.

3. Anello Web

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

La sfida più divertente per me è stata Aprire la porta della miniera di Boria, sebbene la fontana di Glamtariel fosse interessante e presentasse anche indovinelli.

Apri la porta della miniera di Boria

In Open Boria Mine Door, ci sono stati presentati sei pin o mini-sfide per aggirare la convalida dell'input o un Politica sulla sicurezza dei contenuti per collegare i tubi di entrata e di uscita tra i perni, compresa la corrispondenza dei colori dei tubi. Per la maggior parte dei pin, ho usato l'HTML per scrivere un elenco di lettere "o" di collegamento. Ecco la mia soluzione finale:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Perno 1

Non c'era alcuna convalida per il Pin 1, quindi era una semplice questione di HTML e CSS in linea:

Perno 2

Il pin 2 aveva una politica di sicurezza dei contenuti che non consentiva JavaScript ma consentiva CSS in linea, quindi non era un problema per il mio metodo:

Perno 3

Il pin 3 aveva una politica di sicurezza dei contenuti che non consentiva CSS ma consentiva JavaScript in linea, quindi ho utilizzato JavaScript per modificare gli stili:

Perno 4

Il pin 4 non aveva una politica di sicurezza dei contenuti, ma aveva una funzione sanitizeInput sul lato client che eliminava le virgolette doppie, le virgolette singole, le parentesi angolari sinistre e le parentesi angolari destre. Il trucco qui era rendersi conto che questa funzione non è stata attivata inviando il modulo, ma dal sfocato evento. In altre parole, l'allontanamento del mouse dal campo di input ha attivato il file sfocato evento, sanificando qualsiasi ingresso. La soluzione era inviare il modulo premendo il entrare tasto, facendo attenzione a non spostare il cursore del mouse al di fuori dei limiti del campo di input:

Perno 5

Il pin 5 aveva lo stesso disinfettareInput funzione e bypass insieme a una politica di sicurezza dei contenuti che vieta CSS in linea, ma consente JavaScript in linea:

Perno 6

Infine, il pin 6 non ha disinfettato l'input, ma ha utilizzato una politica di sicurezza dei contenuti più rigorosa che vieta sia CSS in linea che JavaScript. La mia soluzione era utilizzare HTML deprecato per ottenere gli stili di cui avevo bisogno e utilizzare una tabella invece di un elenco:

Fontana di Glamtariel

Fontana di Glamtariel è stata l'occasione per esercitarsi Attacchi XML External Entity (XXE).. Capire come definire un'entità XML personalizzata, definire un'entità che richiede un file dal server e aggiungere quell'entità come payload a una richiesta HTTP non è stato difficile. La parte più difficile è stata capire gli enigmi del gioco per indovinare il percorso dei file che il server avrebbe fatto trapelare. Ecco la richiesta rivoluzionaria che rivela la posizione dell'anello d'oro:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Vorrei offrire due lezioni apprese da questa sfida. Per prima cosa, usa il Convertitore di tipo di contenuto estensione in Rutto per convertire i payload JSON in XML. In secondo luogo, prova a posizionare il payload XXE in tag diversi: mi ci è voluto molto tempo per capire che tutto quello che dovevo fare era posizionare il &xxe; carico utile in reqType tag al posto di imgDrop etichetta.

Al quarto squillo.

4. Anello delle nuvole

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Giocare per il Cloud Ring è stata l'incursione di un principiante nell'interfaccia a riga di comando (CLI) di Amazon Web Services (AWS).

Il momento clou di questa serie di sfide è stato l'utilizzo tartufo per trovare le credenziali AWS in un repository Git e quindi sfruttarle per autenticarsi come utente AWS. Un attaccante che arriva in questa posizione può usare aws iam comandi per interrogare i criteri che si applicano all'utente e quindi a quali risorse cloud è possibile accedere e abusare.

Al quinto squillo.

5. Anello di fuoco ardente

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

La parte più istruttiva di questa serie di sfide è stata l'apprendimento Alberi di Merkle sfruttare uno smart contract e entrare nella lista di prevendita per l'acquisto di un token non fungibile (NFT). Qui la sfida era scoprire i valori di prova che, insieme all'indirizzo del mio portafoglio e al valore radice di un Merkle Tree, dimostrassero la mia inclusione nell'elenco di prevendita.

Dopo alcuni tentativi falliti di fornire valori di prova, mi sono reso conto che non sarei mai stato in grado di capire i valori di prova per il valore radice fornito perché non c'era modo di conoscere tutti i valori foglia utilizzati per calcolarlo. Avevo bisogno di modificare il valore della radice in modo da poter fornire un Merkle Tree valido.

utilizzando Lo strumento del professor QPetabyte, ho creato un Merkle Tree da due foglie costituite dall'indirizzo del mio portafoglio e dall'indirizzo per il BSRS_nft smart contract, che ho trovato utilizzando il Blockchain Explorer in-game nel blocco due della blockchain di Ethereum del gioco. Lo strumento ha generato il valore radice di questo albero e il valore di prova per l'indirizzo del mio portafoglio. Quindi ho utilizzato Burp per intercettare la richiesta al server e ho modificato il valore predefinito della radice in modo da poter inviare un Merkle Tree valido. Ecco il mio NFT sport acquistato ad un prezzo fisso di 100 KringleCoin:

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Davvero un brutto esemplare.

Finale

Craccato! Punti salienti di KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Un grande ringraziamento agli organizzatori della SANS Holiday Hack Challenge per aver ampliato la mia mente in nuovi modi e aver contribuito ad approfondire le mie conoscenze sulla sicurezza informatica. Non solo non vedo l'ora che arrivi la sfida del prossimo anno, ma proverò anche le edizioni 2020 e 2021 di questa sfida. E se non hai mai partecipato a questa sfida prima d'ora, spero che questi punti salienti abbiano suscitato il tuo interesse.

Timestamp:

Di più da Viviamo la sicurezza