come funziona il malware senza file su Linux?


10

Comprendo la definizione di malware senza file:

Codice dannoso che non è basato su file ma esiste solo in memoria ... Più in particolare, codice dannoso senza file ... si aggiunge a un processo attivo in memoria ...

Qualcuno può spiegare come funziona questo accodarsi a un processo attivo in memoria?

Inoltre, quale protezione / kernel (hardening) è disponibile contro tali attacchi?


Ad esempio, sfruttando un buffer overflow in un'applicazione di rete e quindi scaricare codice dannoso che viene eseguito all'interno dell'applicazione e si diffonde attraverso la rete. Nessun file coinvolto. La seconda parte della domanda è molto ampia, equivale essenzialmente a "quali contromisure esistono contro il malware"?
— Dirkt,

È possibile rispondere meglio a questa domanda all'indirizzo https://security.stackexchange.com/ .
— rubynorails

@rubynorails - Sono interessato solo alle risposte specifiche di Linux. SecuritySE è generale. Se richiedo una risposta specifica per Linux, mi invieranno qui.
— Martin Vegter,

Risposte:


6

Il malware senza file attacca l'obiettivo sfruttando una vulnerabilità, ad esempio nel plug-in Flash di un browser o in un protocollo di rete.

Un processo Linux può essere modificato usando la chiamata di sistema ptrace(). Questa chiamata di sistema viene generalmente utilizzata dai debugger per ispezionare e gestire lo stato interno del processo di destinazione ed è utile nello sviluppo del software.

Ad esempio, consideriamo un processo con PID 1234. L'intero spazio degli indirizzi di questo processo può essere visualizzato nello pseudo file system /procnella posizione /proc/1234/mem. È possibile aprire questo pseudofile, quindi collegarlo a questo processo tramite ptrace(); dopo averlo fatto, è possibile utilizzare pread()e pwrite()scrivere nello spazio del processo.

char file[64];
pid = 1234;

sprintf(file, "/proc/%ld/mem", (long)pid);
int fd = open(file, O_RDWR);
ptrace(PTRACE_ATTACH, pid, 0, 0);

waitpid(pid, NULL, 0);
off_t addr = ...; // target process address

pread(fd, &value, sizeof(value), addr);
// or
pwrite(fd, &value, sizeof(value), addr);

ptrace(PTRACE_DETACH, pid, 0, 0);
close(fd);

(Codice preso da qui . Un altro documento su un exploit ptrace è disponibile qui .)

Per quanto riguarda la difesa orientata al kernel contro questi attacchi, l'unico modo è installare patch del fornitore del kernel e / o disabilitare il particolare vettore di attacco. Ad esempio, nel caso di ptrace è possibile caricare un modulo di blocco ptrace nel kernel che disabiliterà quella particolare chiamata di sistema; chiaramente questo rende anche impossibile utilizzare ptrace per il debug.


Proprio come l'altra risposta , anche questa è obsoleta - come spiegato qui non è più necessario avviare un processo per leggere o scrivere sulla sua /proc/PID/mem. Spero che tu sia meno refrattario dell'altro individuo ad aggiornare e correggere la tua risposta, invece di perpetuare miti e disinformazione.
— seleziona il

... che in questo caso può avere conseguenze, poiché le persone possono erroneamente supporre che, seguendo un processo, possono impedire ad altri processi di leggere la sua memoria.
— seleziona il

@pizdelect Grazie per il link. Sarebbe bene se aggiungi il contenuto come un'altra risposta.
— dr_

No, non aggiungerò un'altra risposta. Mi aspetto che aggiusti il ​​tuo.
— seleziona il

Ricorda che puoi modificare anche le risposte di altre persone. Sembra che tu abbia una conoscenza migliore di me su questo particolare argomento, quindi sei invitato a farlo.
— dr_

1

Quando si riesce a arrestare in modo anomalo un processo, è possibile che il processo inserisca dati nella memoria. Un modo molto popolare per farlo è usare gli overflow del buffer .

Come funziona ? Sai, ad esempio, che un processo è in ascolto sulla porta x e ha un buffer per una determinata funzione che è, diciamo, grande 15 byte. Questa funzione viene chiamata con 15 byte di dati + n byte (il codice da eseguire). Se il programma non convalida correttamente i dati, sovrascriverà la memoria adiacente con il codice e quindi il codice risiederà nella memoria. Se riesci a ottenere questo codice da eseguire, sei il proprietario del sistema. Esistono limitazioni, ad esempio, un processo non può scrivere in memoria al di fuori del suo spazio allocato .

Esistono lunghi elenchi di vulnerabilità su tutti i sistemi operativi in ​​cui i sovraccarichi del buffer consentono ai cracker di iniettare dati nella memoria del target.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.