Abbiamo trattato l'iniezione di processo e lo svuotamento di processo. L'iniezione di processo è il processo di iniezione di un processo già in esecuzione con codice dannoso o shellcode. Il processo di svuotamento è il processo di creazione di un processo legittimo in uno stato sospeso e quindi di annullamento della mappatura del codice legittimo dalla memoria e di sostituzione con il codice della shell. Sia l'iniezione di processo che lo svuotamento sono utili per nascondere rootkit e shellcode in processi dall'aspetto innocente per mantenere l'accesso e la persistenza. Questo faceva parte TryHackMe abusa dei componenti interni di Windows percorso della squadra rossa.
Abbiamo anche trattato l'iniezione di DLL e il dirottamento di DLL insieme a uno scenario pratico del laboratorio TryHackMe Abusing Windows Internals che fa parte del percorso del team Rosso. L'iniezione DLL si basa sull'utilizzo delle chiamate API di Windows per eseguire azioni specifiche come la selezione di un processo in esecuzione, l'allocazione della memoria e la scrittura della DLL dannosa nella regione di memoria allocata. Il dirottamento DLL si basa sulla disponibilità delle autorizzazioni di accesso per individuare e sostituire una DLL legittima con una dannosa.
Ottieni gli appunti di studio COMPTIA Pentest+
Corso sulle tecniche di escalation dei privilegi Windows
Descrizione della sfida
Sfrutta i componenti interni di Windows per eludere le soluzioni di rilevamento comuni, utilizzando approcci moderni indipendenti dagli strumenti.
Video in evidenza
Process injection viene comunemente utilizzato come termine generale per descrivere l'inserimento di codice dannoso in un processo tramite funzionalità o componenti legittimi.
Ad alto livello, l'iniezione di shellcode può essere suddivisa in quattro passaggi:
- Aprire un processo di destinazione con tutti i diritti di accesso.
- Allocare la memoria del processo di destinazione per lo shellcode.
- Scrivi lo shellcode nella memoria allocata nel processo di destinazione.
- Esegui lo shellcode utilizzando un thread remoto.
Il processo di svuotamento offre la possibilità di inserire un intero file dannoso in un processo. Ciò si ottiene “svuotando” o de-mappando il processo e iniettando specifiche PE (Portable Eeseguibile) dati e sezioni nel processo.
Ad un livello elevato il processo di svuotamento può essere suddiviso in sei fasi:
- Creare un processo di destinazione in uno stato sospeso.
- Apri un'immagine dannosa.
- Annulla la mappatura del codice legittimo dalla memoria del processo.
- Assegna posizioni di memoria per codice dannoso e scrivi ciascuna sezione nello spazio degli indirizzi.
- Imposta un punto di ingresso per il codice dannoso.
- Estrarre il processo di destinazione dallo stato sospeso.
A livello di alto livello il dirottamento (esecuzione) del thread può essere suddiviso in undici passaggi:
- Individuare e aprire un processo di destinazione da controllare.
- Allocare la regione di memoria per il codice dannoso.
- Scrivi codice dannoso nella memoria allocata.
- Identificare l'ID del thread di destinazione da dirottare.
- Apri il thread di destinazione.
- Sospendere il thread di destinazione.
- Ottenere il contesto del thread.
- Aggiorna il puntatore dell'istruzione al codice dannoso.
- Riscrivere il contesto del thread di destinazione.
- Riprendi il thread compromesso.
Ad alto livello l'iniezione DLL può essere suddivisa in sei passaggi:
- Individuare un processo di destinazione da iniettare.
- Aprire il processo di destinazione.
- Allocare la regione di memoria per DLL dannose.
- Scrivi la DLL dannosa nella memoria allocata.
- Carica ed esegui la DLL dannosa.
Risposte in camera
Quale flag si ottiene dopo aver iniettato lo shellcode?
Quale flag si ottiene dopo aver svuotato e iniettato lo shellcode?
Quale flag si ottiene dopo aver dirottato il thread?
Qual è la chiamata API di Windows utilizzata per mettere in coda una funzione APC?
Il puntatore alla funzione void può essere utilizzato su un processo remoto? (sì/no)
Le tecniche di iniezione impiegate da TrickBot erano riflettenti? (sì/no)
Quale nome di funzione è stato utilizzato per scrivere manualmente gli hook?
Videoprocedura dettagliata