EDIT 2 :
c'è una buona ragione per cui questo post sta attirando così tanta attenzione: sei riuscito a registrare l'intera sessione live di un intruso sul tuo PC. Questo è molto diverso dalla nostra esperienza quotidiana, in cui ci occupiamo della scoperta delle conseguenze delle sue azioni e proviamo a ripararle. Qui lo vediamo al lavoro, lo vediamo avere dei problemi con la creazione della backdoor, ripercorrere i suoi passi, lavorare febbrilmente (forse perché era seduto alla tua scrivania, come suggerito sopra, o forse, e secondo me più probabilmente, perché era incapace di far funzionare il suo malware sul sistema, leggere sotto) e provare a distribuire strumenti di controllo completamente autonomi. Questo è ciò che i ricercatori della sicurezza testimoniano quotidianamente con le loro trappole per il miele . Per me, questa è un'occasione molto rara e la fonte di un certo divertimento.
Sei stato sicuramente hackerato. Le prove a riguardo non provengono dallo snippet del auth.log
file visualizzato, poiché segnala un tentativo di accesso non riuscito, che si verifica per un breve periodo di tempo (due secondi). Noterai che la seconda riga indica Failed password
, mentre la terza riporta una pre-auth
disconnessione: il ragazzo ha provato e fallito.
Le prove provengono invece dal contenuto dei due file http://222.186.30.209:65534/yjz
e http://222.186.30.209:65534/yjz1
che l'attaccante ha scaricato sul tuo sistema.
Il sito è attualmente aperto a chiunque per scaricarli, cosa che ho fatto. Ho corso per la prima volta file
su di loro, che ha mostrato:
$ file y*
yjz: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
yjz1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
Poi li ho portati su una VM Debian a 64 bit che ho; un esame del loro contenuto attraverso il strings
comando ha rivelato molte cose sospette (riferimento a vari attacchi noti, a comandi da sostituire, uno script che è stato chiaramente utilizzato per impostare un nuovo servizio e così via).
Ho quindi prodotto gli hash MD5 di entrambi i file e li ho inviati al database di hash di Cymru per vedere se sono noti agenti di malware. Mentre yjz
non lo è, lo yjz1
è e Cymru riporta una probabilità di rilevamento da parte del software antivirus del 58%. Indica anche che questo file è stato visto l'ultima volta circa tre giorni fa, quindi è abbastanza recente.
Eseguendo clamscan (parte del clamav
pacchetto) sui due file che ho ottenuto:
$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
quindi ora siamo certi che il software Linux standard possa identificarlo.
Cosa dovresti fare
Sebbene piuttosto nuovo, nessuno dei due sistemi è molto nuovo, vedi questo articolo del gennaio 2015 su XorDdos , per esempio. Quindi la maggior parte dei pacchetti gratuiti dovrebbe essere in grado di rimuoverlo. Si dovrebbe provare: clamav
, rkhunter
, chkrootkit
. Ho cercato su Google e ho visto che affermano di essere in grado di individuarlo. Usali per controllare il lavoro del predecessore, ma dopo aver eseguito questi tre programmi dovresti essere pronto per partire.
Per quanto riguarda la domanda più ampia, what should you do to prevent future infections
la risposta di Journeyman è un buon primo passo. Ricorda solo che è una lotta in corso, che tutti noi (incluso me!) Potremmo aver perso senza nemmeno saperlo.
MODIFICA :
Alla richiesta (indiretta) di Viktor Toth, vorrei aggiungere alcuni commenti. È certamente vero che l'intruso ha incontrato alcune difficoltà: scarica due distinti strumenti di hacking, modifica le loro autorizzazioni più volte, li riavvia più volte e tenta molte volte di disabilitare il firewall. È facile indovinare cosa sta succedendo: si aspetta che i suoi strumenti di hacking aprano un canale di comunicazione verso uno dei suoi PC infetti (vedi più avanti) e, quando non vede spuntare questo nuovo canale nella sua GUI di controllo, teme il suo hacking lo strumento viene bloccato dal firewall, quindi ripete la procedura di installazione. Concordo con Viktor Toth sul fatto che questa fase particolare della sua operazione non sembra portare i frutti attesi, ma vorrei incoraggiarvi fortemente non sottovalutare l'entità del danno inflitto sul tuo PC.
Fornisco qui un output parziale di strings yjz1
:
etc/init.d/%s
/etc/rc%d.d/S90%s
--del
chkconfig
remove
update-rc.d
/etc/cron.hourly/gcc4.sh
/etc/rc.d/rc%d.d/S90%s
--add
defaults
/proc/%d/exe
/proc/self/exe
HOME=/
MYSQL_HISTFILE=/dev/null
#!/bin/sh
# chkconfig: 12345 90 90
# description: %s
### BEGIN INIT INFO
# Provides: %s
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 4 5
# Default-Stop:
# Short-Description: %s
### END INIT INFO
case $1 in
start)
stop)
esac
sed -i '/\/etc\/cron.hourly\/gcc4.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc4.sh' >> /etc/crontab
etc/init.d/%s
GET %s HTTP/1.1
%sHost: %s
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive
Ciò fornisce prove di manomissione dei servizi (in /etc/init.d
e in /etc/rc.d
), con crontab
, con il file cronologico di mysql
e un paio di file in proc
cui sono collegati bash
(il che suggerisce che è stata creata una versione fraudolenta personalizzata della shell). Quindi il programma genera una richiesta HTTP (a un sito di lingua cinese,
Accept-Language: zh-cn
che dà sostanza al commento di David Schwartz sopra), che può creare ancora più caos. Nella richiesta, i binari ( Content-Type: application/x-www-form-urlencoded
) devono essere scaricati sul PC attaccato (GET) e caricati sulla macchina di controllo (POST). Non sono riuscito a stabilire cosa sarebbe stato scaricato sul PC attaccato, ma, date le piccole dimensioni di entrambi yjz
e yjz1
(1,1 MB e 600 KB, ripetutamente), posso avventurarmi a supporre che la maggior parte dei file necessari per mascherare il rootkit, ovvero l'alterato versioni ls
, netstat
, ps
, ifconfig
, ..., sarebbero stati scaricati in questo modo. E questo spiegherebbe i tentativi febbrili dell'attaccante di avviare questo download.
Non vi è alcuna certezza che quanto sopra esaurisca tutte le possibilità: certamente ci manca parte della trascrizione (tra le righe 457 e 481) e non vediamo un logout; inoltre, particolarmente preoccupanti sono le linee 495-497,
cd /tmp; ./yd_cd/make
che fanno riferimento a un file che non abbiamo visto scaricato e che potrebbe essere una compilation: in tal caso, significa che l'attaccante ha (finalmente?) capito qual era il problema con i suoi eseguibili e sta cercando di risolverlo, nel qual caso il il PC attaccato è andato per sempre. [In effetti, le due versioni del malware che l'attaccante ha scaricato sul computer hackerato (e io sulla mia macchina virtuale Debian a 64 bit) sono per un'architettura inadatta, x86, mentre il solo nome del computer hackerato nel computer rivela il fatto che aveva a che fare con un'architettura a braccio].
Il motivo per cui ho scritto questa modifica è di esortarti il più fortemente possibile sia a pettinare il tuo sistema con uno strumento professionale, sia a reinstallare da zero.
E, a proposito, se questo dovesse rivelarsi utile a chiunque, questo è l'elenco degli 331 indirizzi IP a cui yjz
tenta di connettersi. Questa lista è così ampia (e probabilmente destinata a diventare ancora più grande) che credo sia questa la ragione per manometterla mysql
. L'elenco fornito dall'altra backdoor è identico, il che, presumo, è il motivo per cui è stata lasciata aperta un'informazione così importante (penso che l'attaccante non volesse fare lo sforzo di archiviarli in formato kernel, quindi ha messo l'intero elenco in un file di testo in chiaro, che è probabilmente letto da tutte le sue backdoor, per qualsiasi sistema operativo):
61.132.163.68
202.102.192.68
202.102.213.68
202.102.200.101
58.242.2.2
202.38.64.1
211.91.88.129
211.138.180.2
218.104.78.2
202.102.199.68
202.175.3.3
202.175.3.8
202.112.144.30
61.233.9.9
61.233.9.61
124.207.160.110
202.97.7.6
202.97.7.17
202.106.0.20
202.106.46.151
202.106.195.68
202.106.196.115
202.106.196.212
202.106.196.228
202.106.196.230
202.106.196.232
202.106.196.237
202.112.112.10
211.136.17.107
211.136.28.231
211.136.28.234
211.136.28.237
211.147.6.3
219.141.136.10
219.141.140.10
219.141.148.37
219.141.148.39
219.239.26.42
221.130.32.100
221.130.32.103
221.130.32.106
221.130.32.109
221.130.33.52
221.130.33.60
221.176.3.70
221.176.3.73
221.176.3.76
221.176.3.79
221.176.3.83
221.176.3.85
221.176.4.6
221.176.4.9
221.176.4.12
221.176.4.15
221.176.4.18
221.176.4.21
58.22.96.66
218.104.128.106
202.101.98.55
211.138.145.194
211.138.151.161
211.138.156.66
218.85.152.99
218.85.157.99
222.47.29.93
202.101.107.85
119.233.255.228
222.47.62.142
122.72.33.240
211.98.121.27
218.203.160.194
221.7.34.10
61.235.70.98
113.111.211.22
202.96.128.68
202.96.128.86
202.96.128.166
210.21.3.140
210.21.4.130
211.95.193.97
211.98.2.4
211.98.4.1
211.162.61.225
211.162.61.235
211.162.61.255
211.162.62.1
211.162.62.60
221.4.66.66
202.103.176.22
202.96.144.47
210.38.192.33
202.96.134.33
202.96.134.133
202.96.154.15
210.21.196.6
221.5.88.88
202.103.243.112
202.193.64.33
61.235.164.13
61.235.164.18
202.103.225.68
221.7.136.68
202.103.224.68
211.97.64.129
211.138.240.100
211.138.242.18
211.138.245.180
221.7.128.68
222.52.118.162
202.98.192.67
202.98.198.167
211.92.136.81
211.139.1.3
211.139.2.18
202.100.192.68
211.97.96.65
211.138.164.6
221.11.132.2
202.100.199.8
202.99.160.68
202.99.166.4
202.99.168.8
222.222.222.222
202.102.224.68
202.102.227.68
222.85.85.85
222.88.88.88
210.42.241.1
202.196.64.1
112.100.100.100
202.97.224.68
219.235.127.1
61.236.93.33
211.93.24.129
211.137.241.34
219.147.198.230
202.103.0.68
202.103.0.117
202.103.24.68
202.103.44.150
202.114.0.242
202.114.240.6
211.161.158.11
211.161.159.3
218.104.111.114
218.104.111.122
218.106.127.114
218.106.127.122
221.232.129.30
59.51.78.210
61.234.254.5
202.103.96.112
219.72.225.253
222.243.129.81
222.246.129.80
211.142.210.98
211.142.210.100
220.168.208.3
220.168.208.6
220.170.64.68
218.76.192.100
61.187.98.3
61.187.98.6
202.98.0.68
211.93.64.129
211.141.16.99
202.98.5.68
219.149.194.55
211.138.200.69
202.102.3.141
202.102.3.144
58.240.57.33
112.4.0.55
114.114.114.114
114.114.115.115
202.102.24.34
218.2.135.1
221.6.4.66
221.131.143.69
202.102.8.141
222.45.0.110
61.177.7.1
218.104.32.106
211.103.13.101
221.228.255.1
61.147.37.1
222.45.1.40
58.241.208.46
202.102.9.141
202.102.7.90
202.101.224.68
202.101.226.68
211.141.90.68
211.137.32.178
202.96.69.38
211.140.197.58
219.149.6.99
202.96.86.18
101.47.189.10
101.47.189.18
118.29.249.50
118.29.249.54
202.96.64.68
202.96.75.68
202.118.1.29
202.118.1.53
219.148.204.66
202.99.224.8
202.99.224.67
211.90.72.65
211.138.91.1
218.203.101.3
202.100.96.68
211.93.0.81
222.75.152.129
211.138.75.123
202.102.154.3
202.102.152.3
219.146.1.66
219.147.1.66
202.102.128.68
202.102.134.68
211.138.106.19
211.90.80.65
202.99.192.66
202.99.192.68
61.134.1.4
202.117.96.5
202.117.96.10
218.30.19.40
218.30.19.50
116.228.111.118
180.168.255.18
202.96.209.5
202.96.209.133
202.101.6.2
211.95.1.97
211.95.72.1
211.136.112.50
211.136.150.66
119.6.6.6
124.161.97.234
124.161.97.238
124.161.97.242
61.139.2.69
202.98.96.68
202.115.32.36
202.115.32.39
218.6.200.139
218.89.0.124
61.139.54.66
61.139.39.73
139.175.10.20
139.175.55.244
139.175.150.20
139.175.252.16
168.95.1.1
210.200.211.193
210.200.211.225
211.78.130.1
61.31.1.1
61.31.233.1
168.95.192.1
168.95.192.174
61.60.224.3
61.60.224.5
202.113.16.10
202.113.16.11
202.99.96.68
202.99.104.68
211.137.160.5
211.137.160.185
219.150.32.132
202.98.224.68
211.139.73.34
61.10.0.130
61.10.1.130
202.14.67.4
202.14.67.14
202.45.84.58
202.45.84.67
202.60.252.8
202.85.128.32
203.80.96.9
203.142.100.18
203.142.100.21
203.186.94.20
203.186.94.241
221.7.1.20
61.128.114.133
61.128.114.166
218.202.152.130
61.166.150.123
202.203.128.33
211.98.72.7
211.139.29.68
211.139.29.150
211.139.29.170
221.3.131.11
222.172.200.68
61.166.150.101
61.166.150.139
202.203.144.33
202.203.160.33
202.203.192.33
202.203.208.33
202.203.224.33
211.92.144.161
222.221.5.240
61.166.25.129
202.96.103.36
221.12.1.227
221.130.252.200
222.46.120.5
202.96.96.68
218.108.248.219
218.108.248.245
61.130.254.34
60.191.244.5
202.96.104.15
202.96.104.26
221.12.33.227
202.96.107.27
61.128.128.68
61.128.192.68
218.201.17.2
221.5.203.86
221.5.203.90
221.5.203.98
221.7.92.86
221.7.92.98
Il seguente codice
#!/bin/bash
echo 0 > out
while read i; do
whois $i | grep -m 1 -i country >> out
done < filename
cat out | grep -i cn | wc -l
nell'elenco di cui sopra mostra che 302 su un totale di 331 indirizzi si trovano nella Cina continentale, i restanti si trovano a Hong Kong, Mongolia, Taiwan. Ciò aggiunge ulteriore supporto alla tesi di David Schwartz secondo cui si tratta principalmente di un anello bot cinese.
MODIFICA 3
Su richiesta di @ vaid (l'autore del PO, leggi il suo commento qui sotto), aggiungerò un commento su come rafforzare la sicurezza di un sistema Linux di base (per un sistema che fornisce molti servizi, questo è un argomento molto più complesso). vaid
afferma di aver fatto quanto segue:
Reinstalla il sistema
ha cambiato la password di root in una password lunga 16 caratteri con lettere, caratteri e cifre minuscole e maiuscole miste.
Modificato il nome utente in un nome utente lungo composto da 6 caratteri e applicato la stessa password utilizzata per il root
ha cambiato la porta SSH a qualcosa sopra 5000
disattivato l'accesso root SSH.
Questo va bene (tranne per il fatto che utilizzo una porta superiore a 10.000 poiché molti programmi utili utilizzano le porte inferiori a 10.000). Ma non posso sottolineare abbastanza la necessità di utilizzare le chiavi crittografiche per il login ssh , anziché le password. Ti darò un esempio personale. Su uno dei miei VPS, non ero sicuro se cambiare la porta ssh; L'ho lasciato a 22, ma ho usato le chiavi crittografiche per l'autenticazione. Ho avuto centinaia di tentativi di rodaggio al giorno , nessuno è riuscito. Quando, stanco di controllare ogni giorno che nessuno fosse riuscito, alla fine ho cambiato la porta a qualcosa di sopra di 10.000, i tentativi di rodaggio sono andati a zero. Intendiamoci, non è che gli hacker siano stupidi (non lo sono!), Cacciano solo prede più facili.
È facile attivare una chiave crittografica con RSA come algoritmo di firma, vedi il commento di Jan Hudec (grazie!):
cd; mkdir .ssh; chmod 700 .ssh; cd .ssh; ssh-keygen -t rsa (then hit <kbd>ENTER>/kbd> three times); cat id_rsa.pub >> authorized_keys; chmod 600 *
Ora tutto ciò che devi fare è copiare il file id_rsa
sulla macchina da cui vuoi connetterti (in una directory .ssh
, anche chmod
'ed a 700), quindi emettere il comando
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Quando sei sicuro che funzioni, modifica sul server (= la macchina a cui vuoi connetterti) il file /etc/ssh/sshd_config
e cambia la linea
#PasswordAuthentication yes
per
PasswordAuthentication no
e riavvia il ssh
servizio ( service ssh restart
o systemctl restart ssh
, o qualcosa del genere, a seconda della distribuzione).
Questo resisterà molto. In effetti, attualmente non ci sono exploit noti contro le versioni attuali di openssh v2
e di RSA come impiegati da openssh v2
.
Infine, per bloccare davvero il tuo computer, dovrai configurare il firewall (netfilter / iptables) come segue:
iptables -A INPUT -p tcp --dport YourChosenNonStandardPort -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Questo, 1) consente connessioni ssh da LAN e WAN, 2) consente tutto l'input originato dalle tue richieste (ad esempio, quando carichi una pagina Web), 3) rilascia tutto il resto sull'input, 4) consente tutto l'output e 5-6) consente tutto sull'interfaccia di loopback.
Man mano che le tue esigenze crescono e devono essere aperte più porte, puoi farlo aggiungendo, in cima all'elenco, regole come:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
per consentire ad esempio alle persone di accedere al tuo browser Web.