Come si uccide un processo con più thread?

2

Ho a che fare con un malware che ha più thread che si controllano a vicenda, non sono in grado di ucciderli tutti in una volta, quindi non posso liberarmene, come faccio a fare questo? Stavo pensando di usare un debugger del kernel ma forse c'è un'alternativa migliore.

    
posta Trey 02.11.2017 - 12:00
fonte

2 risposte

4

Se è possibile identificare il modo in cui il malware viene avviato all'avvio o dove è memorizzato, una possibile opzione sarebbe quella di spegnere la macchina, avviare da un altro supporto (come Linux o Windows PE live USB) e apportare modifiche da lì per impedirlo all'avvio successivo. Ciò comporterà la rimozione di file contenenti il codice eseguibile del malware o la modifica della configurazione del sistema per impedirne il riavvio all'avvio.

Se stai cercando di identificare gli eseguibili, segui i passaggi suggerito da baldPrussian -

Get the names of the threads, which can tell you the executable that runs. Find where the exes are and the reg keys (possibly the run key) that call them

Suggerirei di controllare il sistema più volte nei giorni successivi per garantire che nulla fosse lasciato sul sistema per consentire la reinfezione. Inoltre, vuoi fare tutto il possibile per determinare il vettore dell'infezione, anche in questo caso puoi prendere provvedimenti per non essere reinviato.

Se il peggiore dovesse peggiorare, inghiotti le tue perdite e bombardalo dall'orbita .

    
risposta data 02.11.2017 - 17:49
fonte
1

Non hai specificato quale sistema operativo si tratta. Su Linux, tutti i thread che sono collegati insieme hanno lo stesso PID. In modo confuso, ciò che è visibile come PID è spesso il TID, o ID thread, e il PID (reale) è chiamato TGID, che è l'ID dell'intero processo POSIX.1. Mi riferirò solo al TID e al TGID per evitare confusione quando un'applicazione non è in grado di decidere se etichettare il TID o il TGID come PID.

Qualsiasi processo con thread avrà lo stesso TGID per tutti i thread, anche se TID è diverso. Quando invii un segnale al TGID, il kernel invia il segnale round-robin a ciascun TID in quel gruppo di thread. La maggior parte dei segnali, come SIGTERM, può essere intrappolata e ignorata. Ce ne sono due che non possono essere intrappolati, SIGKILL e SIGSTOP. Il primo, con pochissime eccezioni *, assicurerà che il processo non sia in grado di eseguire altro codice nello userspace dal momento in cui riceve il segnale. Uscirà con forza. Quest'ultimo è simile, assicurando che non verrà eseguito più codice, ma piuttosto che chiudere il processo, semplicemente lo interrompe (finché non viene ricevuto un segnale SIGCONT). Questo può essere utile per analizzare il malware mentre è bloccato e impotente a fare qualsiasi cosa per fermarti.

Si noti che questo funzionerà solo se sono effettivamente thread e non solo una serie di processi separati e separati, non c'è alcun meccanismo in atto per il riavvio del malware stesso, ad es. attraverso un altro processo compromesso o un lavoro cron, e il tuo ambiente non è stato compromesso, il che significa uccidere in realtà uccidere.

kill -KILL $malwarepid

o

kill -STOP $malwarepid

* Le uniche eccezioni sono quando il processo genitore non è pronto a ricevere le sue informazioni di uscita, lasciando il processo come uno zombie, o quando il processo è nel mezzo di un syscall non interrompibile, richiedendo che syscall sia effettivamente completato prima del processo di uscita. Nessuna di queste eccezioni consente al processo di eseguire più del proprio codice prima che esca.

    
risposta data 08.11.2017 - 08:40
fonte

Leggi altre domande sui tag