Infezione da virus DDoS (come servizio unix) su un server web Debian 8 VM


14

Mantengo un Wordpress (completamente aggiornato) per un team di studenti su una macchina virtuale sul servizio ~ okeanos per un paio di anni. Oggi l'helpdesk mi ha informato che sto conducendo attacchi DDoS, che - ovviamente - non lo sono (questo servizio ha le mie credenziali accademiche connesse ...). Dopo aver sospeso la macchina e ho infiammato il loro sistema di posta, ho cercato di scoprire cosa è successo.

Prima di tutto, corro a ps -ejper verificare cosa è in esecuzione:

root@snf-25181:~# ps -ej
1545 1545 1545 ? 00:00:00 console-kit-dae
1618 1057 1057 ? 00:00:00 gdm-session-wor
1632 1632 1632 ? 00:01:40 rghuoywvrf
1767 1767 1767 ? 00:00:00 sshd
1769 1769 1769 ? 00:00:00 systemd
1770 1769 1769 ? 00:00:00 (sd-pam)
1775 1767 1767 ? 00:00:00 sshd
1776 1776 1776 pts/0 00:00:00 bash
1849 1849 1776 pts/0 00:00:00 su
1870 1870 1776 pts/0 00:00:00 bash
2246 0 0 ? 00:00:00 kworker/0:0
2797 839 839 ? 00:00:00 apache2
3158 3158 3158 ? 00:00:00 bvxktwwnsb
3162 3162 3162 ? 00:00:00 bvxktwwnsb
3163 3163 3163 ? 00:00:00 bvxktwwnsb
3164 3164 3164 ? 00:00:00 bvxktwwnsb
3165 3165 1776 pts/0 00:00:00 ps

Notare bvxktwwnsb e rguoywvrf

Poi ho fatto un ps auxper ottenere i servizi (di nuovo, una coda):

Debian-+  1629  0.0  0.0 178300  4444 ?        Sl   16:53   0:00 /usr/lib/dconf/dconf-service
root      1667  0.0  0.0  30744  4436 ?        Ss   16:53   0:00 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
root      1670  0.0  0.1 299588  9884 ?        Ssl  16:53   0:00 /usr/lib/packagekit/packagekitd
root      1674  0.0  0.1 1055004 6168 ?        Ssl  16:53   0:00 /usr/sbin/console-kit-daemon --no-daemon
www-data  1923  0.0  0.1 240964  8112 ?        S    16:53   0:00 /usr/sbin/apache2 -k start
pankgeo+  5656  0.0  0.0  27416  3424 ?        Ss   17:03   0:00 /lib/systemd/systemd --user
pankgeo+  5657  0.0  0.0 143108  2408 ?        S    17:03   0:00 (sd-pam)   
root      5893  0.0  0.1 102420  6428 ?        Ss   17:04   0:00 sshd: pankgeorg [priv]
pankgeo+  5904  0.1  0.0 102560  4128 ?        S    17:04   0:02 sshd: pankgeorg@pts/0
pankgeo+  5905  0.2  0.1  16816  6388 pts/0    Ss+  17:04   0:04 -bash      
root      7443  0.0  0.1 102420  6496 ?        Ss   17:07   0:00 sshd: pankgeorg [priv]
pankgeo+  7448  0.0  0.0 102552  4160 ?        S    17:07   0:00 sshd: pankgeorg@pts/1
pankgeo+  7449  0.0  0.1  16468  6228 pts/1    Ss+  17:07   0:01 -bash      
root     17351  0.0  0.0      0     0 ?        S    17:15   0:00 [kworker/0:0]
root     18446  0.0  0.0      0     0 ?        S    17:18   0:00 [kworker/0:2]
root     18488  0.1  0.0      0     0 ?        S    17:18   0:01 [kworker/1:1]
root     22680  1.5  0.0      0     0 ?        S    17:28   0:08 [kworker/1:0]
root     24173  0.0  0.1 102420  6416 ?        Ss   17:31   0:00 sshd: pankgeorg [priv]
pankgeo+ 24181  0.3  0.0 102420  3360 ?        S    17:31   0:01 sshd: pankgeorg@pts/2
pankgeo+ 24182  0.0  0.0  16480  6112 pts/2    Ss   17:31   0:00 -bash      
root     25316  2.3  0.0      0     0 ?        S    17:33   0:06 [kworker/1:2]
root     26777  0.0  0.0      0     0 ?        S    17:35   0:00 [kworker/0:1]
root     26778  0.0  0.0      0     0 ?        S    17:35   0:00 [kworker/0:3]
root     27300  0.0  0.0   1424  1040 ?        Ss   17:38   0:00 cat resolv.conf  #note                        
root     27306  0.0  0.0   1424  1036 ?        Ss   17:38   0:00 gnome-terminal   #from                     
root     27307  0.0  0.0   1424  1036 ?        Ss   17:38   0:00 ifconfig eth0    #here                    
root     27308  0.0  0.0   1424  1040 ?        Ss   17:38   0:00 id               #(DDOS?)         
root     27309  0.0  0.0   1424  1040 ?        Ss   17:38   0:00 ifconfig                        
pankgeo+ 27315  0.0  0.0  11136  2044 pts/2    R+   17:38   0:00 ps aux     

Nota le voci [-4: -1]. Poi ho scoperto online, chkconfig --listquindi lo eseguo e questo è saltato fuori:

root@snf-25181:/home/pankgeorg# chkconfig --list
acdnfhruvx 0:off 1:off 2:off 3:off 4:off 5:off 6:off
flyymwddwn 0:off 1:off 2:off 3:off 4:off 5:off 6:off

1 a 5 dove onma li ho girati off. Quindi ho riavviato e ha cambiato nome. Poi ho locatedetto acdnfhruvxe questo è saltato fuori:

root@snf-25181:~# locate acdnfhruvx
/etc/init.d/acdnfhruvx
/etc/rc1.d/S01acdnfhruvx
/etc/rc2.d/S01acdnfhruvx
/etc/rc3.d/S01acdnfhruvx
/etc/rc4.d/S01acdnfhruvx
/etc/rc5.d/S01acdnfhruvx

Il contenuto di uno di essi (sono tutti uguali): root @ snf-25181: ~ # cat /etc/init.d/acdnfhruvx #! / Bin / sh

chkconfig: 12345 90 90
description: acdnfhruvx
BEGIN INIT INFO
Provides: acdnfhruvx
Required-Start:
Required-Stop:
Default-Start: 1 2 3 4 5
Default-Stop:
Short-Description: acdnfhruvx
END INIT INFO
case $1 in
start)
/bin/acdnfhruvx
;;
stop)
;;
*)
/bin/acdnfhruvx   
;;
esac    

Questo è stato trovato dopo un riavvio, quindi /bin/acdnfhruvxnon era da nessuna parte. Più tardi ho trovato exes (ELF Formatted) su /usr/bin(penso di poterlo condividere se c'è un uomo coraggioso tra voi)

Una lunga lista di comandi ho visto la macchina che esegue senza conoscere l'origine (da successive ps -ejs e ps auxes:

root     27755  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 ifconfig                        
root     27759  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 who                        
root     27760  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 echo "find"                        
root     27761  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 top                        
root     27762  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 id                        
root     27805  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 gnome-terminal                        
root     27809  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 ifconfig                        
root     27810  0.0  0.0   1424  1044 ?        Ss   17:40   0:00 sh                        
root     27811  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 sleep 1                        
root     27822  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 netstat -an                        
root     27826  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 top                        
root     27829  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 bash                        
root     27833  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 cd /etc                        
root     27834  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 whoami                        
root     27822  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 netstat -an                        
root     27826  0.0  0.0   1424  1036 ?        Ss   17:40   0:00 top                        
root     27829  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 bash                        
root     27833  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 cd /etc                        
root     27834  0.0  0.0   1424  1040 ?        Ss   17:40   0:00 whoami                        

pkilling è inutile, poiché esegue sempre la fork, rimuovendo i file da /etc/init.d/ed /{usr/,}binè anche inutile poiché dopo il riavvio è disponibile una nuova (identica) versione dell'eseguibile. Dopo tutte queste informazioni, ho due domande: posso scoprire come sono stato infettato? Posso liberarmene? Grazie in anticipo!


Se il tuo server è stato compromesso, sarà molto difficile dire come è stato infettato e cosa è stato fatto, perché è banale per l'intruso dottore / rimuovere i file di registro. La migliore pratica è quella di avere una memoria fuori sede dei file di registro in un'altra posizione, quindi se la tua macchina è compromessa avrai almeno i registri che portano al rodaggio. In definitiva, penso che dovrai reinstallare - l'unico modo per garantire un sistema pulito non infetto.

Risposte:


24

Abbiamo subito un'infezione simile su Suse, probabilmente attraverso il login ssh brute force .

I passaggi per la pulizia sono:

  1. Controlla il file /etc/crontab. Probabilmente hai una voce per chiamare il virus ogni 3 minuti

    */3 * * * * root /etc/cron.hourly/cron.sh
    

    Elimina questa riga.

  2. Identificare il processo genitore del virus. Il rguoywvrfnel tuo ps -ej. Gli altri procesi vengono creati e uccisi continuamente.
  3. Smettila, non ucciderla, con kill -STOP 1632
  4. Verifica con un altro ps -ejche vive solo il genitore, i bambini dovrebbero morire rapidamente
  5. Ora puoi eliminare i file in /usr/bine /etc/init.d. Esistono varianti del virus che utilizza anche /booto /bin. Utilizzare ls -lt | headper cercare file che sono stati modificati di recente.
  6. Controlla lo script in /etc/cron.hourly/cron.sh. Nel nostro server stava chiamando un'altra copia del virus /lib/libgcc.so. Elimina entrambi i file.
  7. Ora puoi uccidere definitivamente il rguoywvrfprocesso.

1
ci sono alcuni script cattivi su /etc/rc6.d/, che iniziano con K90
mazgalici

1
fai un find / -name "*rguoywvrf*"per trovare gli altri file, sostituendoli rguoywvrfcon qualunque sia il nome del tuo file
Mohamed Hafez,


3

Per rispondere alle tue domande:

  1. Senza le necessarie precauzioni (off-site syslog, IDS, monitoraggio dei log, ecc.) Probabilmente non scoprirai mai cosa è successo.
  2. Dovrei essere d'accordo con Matt. Investirai tempo per far funzionare una macchina di cui non ti fiderai davvero. Secondo me, la soluzione migliore è spostare i dati fuori dal sito e ripetere la macchina.

Certo, per quello che vale, questa è solo la mia opinione. Tuttavia, durante la ripetizione della macchina, puoi ovviamente prendere le precauzioni necessarie e proteggerti meglio in futuro.


1

questa è una minaccia che genera un sacco di problemi perché avvia un attacco DDOS e genera migliaia di connessioni ai server esterni sulla porta 80, ma se non lo faccio intenzionalmente o no, tende a sovraccaricare la connessione finché i router / firewall non si bloccano se non ci sono Regole di attacco DDOS.

ora, come puoi rimuovere questa minaccia?

  1. trova la tua minaccia, usa

CentOS / RedHat

ps -ely 

Debian

ps -ej

vedrai:

3158 3158 3158 ? 00:00:00 bvxktwwnsb
3162 3162 3162 ? 00:00:00 bvxktwwnsb
3163 3163 3163 ? 00:00:00 bvxktwwnsb
3164 3164 3164 ? 00:00:00 bvxktwwnsb

il " bvxktwwnsb" è il tuo obiettivo

  1. quindi è necessario avviare il server Linux in modalità utente singolo, apportare modifiche in modalità multiutente è inutile, in genere è possibile passare con il seguente comando:

    telinit S

  2. successivamente è necessario eliminare i file eseguiti all'avvio

in Centos / Redhat la procedura è

Passaggio a)

cd /etc/init.d          
ll -tr 

l'ultimo comando ordina i tuoi file in data inversa, vedrai gli ultimi 1 o 2 file alla fine con il nome like

acdnfhruvx
kmrkuwbrng
gqpjiestmf
bvxktwwnsb

devi vedere il contenuto

cat /etc/init.d/gqpjiestmf

normalmente vedrai l'esecuzione di un file che si trova in / bin o / usr / sbin con lo stesso nome

devi eliminare entrambi i file.

Passaggio b)

cd /etc/
ll -tr 

controlla se il tuo file crontab è stato modificato di recente, guarda il suo contenuto, cerca una linea

*/3 * * * * root /etc/cron.hourly/udev.sh

o

*/3 * * * * root /etc/cron.hourly/crontab.sh 

devi modificare il file e rimuovere quella riga.

controlla il contenuto di udev.sho crontab.she vedrai qualcosa del genere

#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
cp /lib/libgcc4.so /lib/libgcc4.4.so
/lib/libgcc4.4.so

è necessario rimuovere il file "libgcc4.4.so" o qualsiasi altro oggetto menzionato (la modifica delle autorizzazioni funzionerebbe, ad esempio chmod a-x libgcc.so)

riavviare il server e tutto dovrebbe essere a posto.

Per debian / ubuntu e parenti usare:

locate bvxktwwnsb

ed elimina i file trovati in / etc e / bin

spero che questo aiuti molte persone.


La tua risposta può essere difficile da leggere perché non sembra essere formattata correttamente. Se hai bisogno di aiuto, il centro assistenza ha ulteriori informazioni sulla formattazione corretta dei post.
bwDraco,

0

Ho trovato qualcosa !!!

cerca / etc / crontab

Nel mio server, c'è un cronjob ogni 3 minuti per eseguire qualcosa:

*/3 * * * * root /etc/cron.hourly/cron.sh

cat cron.sh

#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done
cp /lib/libgcc.so /lib/libgcc.so.bak
/lib/libgcc.so.bak

La mia soluzione:

  1. disabilita permesso (rwx 000) per: /etc/init.d/ {/ usr} / bin / /lib/libgcc.so
  2. rimuove la voce cronjob in / etc / crontab
  3. rimuovi cron script in /etc/cron.hourly/cron.sh
  4. riavvia il server

nota: i percorsi dei file possono variare


0

Trucco aggiuntivo complementare alla soluzione Serhii. L'arresto di tutti i processi può essere difficile in quanto questa cosa spamma rete e CPU. Quindi aggiungi questa linea alla tua /etc/crontabper FERMARE automaticamente tutti i processi cattivi (ferma tutti i processi con 10 caratteri nel nome ogni tre minuti):

*/3 * * * * root pstree -ap | grep -E -- '-[a-z]{10},' | cut -d, -f2 | xargs kill -STOP 2>/dev/null

Questa è una buona cosa da fare dopo la pulizia per assicurarsi che il processo non ritorni. Eseguilo per un po 'fino a quando non sei sicuro che la tua scatola sia pulita.

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.