MODIFICA 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, dove affrontiamo la scoperta delle conseguenze delle sue azioni e cerchiamo di rimediare. Qui lo vediamo al lavoro, lo vediamo avere qualche problema a stabilire la backdoor, tornare sui suoi passi, lavorare febbrilmente (forse perché era seduto alla tua scrivania, come suggerito sopra, o forse, e secondo me più probabile, perché era incapace di far funzionare il suo malware sul sistema, leggi sotto) e provare a implementare strumenti di controllo completamente autonomi. Questo è ciò che i ricercatori di sicurezza testimoniano quotidianamente con le loro trappole al miele . Per me, questa è un'occasione molto rara e fonte di divertimento.
Sei stato sicuramente hackerato. Le prove per questo non provengono dallo snippet del auth.log
file che hai visualizzato, perché questo segnala un tentativo di accesso non riuscito, che si è verificato in un breve lasso di tempo (due secondi). Noterai che la seconda riga indica Failed password
, mentre il terzo riporta un pre-auth
disconnettersi:il ragazzo ha provato e ha fallito.
L'evidenza viene 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 possa scaricarli, cosa che ho fatto. Per prima cosa ho eseguito file
su di essi, che mostrava:
$ 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
command ha rivelato molto di sospetto (riferimento a vari attacchi noti, a comandi da sostituire, uno script chiaramente utilizzato per impostare un nuovo servizio e così via).
Ho quindi prodotto gli hash MD5 di entrambi i file e li ho inseriti nel database hash di Cymru per vedere se sono noti agenti di malware. Mentre yjz
non è, yjz1
è, e Cymru riporta una probabilità di rilevamento da parte del software antivirus del 58%. Dichiara inoltre che questo file è stato visto l'ultima volta circa tre giorni fa, quindi è ragionevolmente recente.
L'esecuzione di clamscan (parte del file clamav
package) 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 di gennaio 2015 su XorDdos, per esempio. Quindi la maggior parte dei pacchetti gratuiti dovrebbe essere in grado di rimuoverlo. Dovresti 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. Tieni presente che è una lotta continua, che tutti noi (incluso me!) potremmo benissimo aver perso senza nemmeno saperlo.
MODIFICA :
Alla sollecitazione (indiretta) di Viktor Toth, vorrei aggiungere alcuni commenti. È certamente vero che l'intruso ha incontrato alcune difficoltà:scarica due distinti strumenti di hacking, ne modifica più volte i permessi, li riavvia più volte e tenta più volte di disabilitare il firewall. È facile intuire cosa sta succedendo:si aspetta che i suoi strumenti di hacking aprano un canale di comunicazione verso uno dei suoi pc infetti (vedi dopo), e, quando non vede spuntare questo nuovo canale sulla sua GUI di controllo, teme il suo hacking tool viene bloccato dal firewall, quindi ripete la procedura di installazione. Sono d'accordo con Viktor Toth che questa particolare fase della sua operazione non sembra portare i frutti sperati, ma vorrei incoraggiarvi fortissimamente da non sottovalutare l'entità del danno inflitto al 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 la prova della 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
che sono collegamenti a bash
(il che suggerisce che è stata piantata una versione fraudolenta su misura del tuo guscio). Quindi il programma genera una richiesta HTTP (a un sito in lingua cinese,
Accept-Language: zh-cn
che dà sostanza al commento di David Schwartz sopra), che potrebbe creare ancora più scompiglio. Nella richiesta, i file 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, viste le ridotte dimensioni di entrambi i yjz
e yjz1
(rispettivamente 1,1 MB e 600 kB), posso azzardare a supporre che la maggior parte dei file fosse necessaria per mascherare il rootkit, vale a dire le versioni alterate di ls
, netstat
, ps
, ifconfig
,..., verrebbe scaricato in questo modo. E questo spiegherebbe i febbrili tentativi dell'attaccante di far partire questo download.
Non c'è certezza che quanto sopra esaurisca tutte le possibilità:sicuramente ci manca parte della trascrizione (tra le righe 457 e 481) e non vediamo un logout; inoltre, particolarmente preoccupanti sono le righe 495-497,
cd /tmp; ./yd_cd/make
che si riferiscono a un file che non abbiamo visto scaricato e che potrebbe essere una compilation:se è così, significa che l'attaccante ha (finalmente?) capito qual era il problema con i suoi eseguibili, e sta cercando di risolverlo, nel qual caso il pc attaccato è andato per sempre. [Infatti, le due versioni del malware che l'attaccante ha scaricato sulla macchina hackerata (e io sulla mia VM Debian a 64 bit) sono per un'architettura inadatta, x86, mentre il solo nome del pc hackerato rivela il fatto che aveva a che fare con un'architettura del braccio].
Il motivo per cui ho scritto questa modifica è per esortarti il più fortemente possibile a pettinare il tuo sistema con uno strumento professionale o a reinstallare da zero.
E, a proposito, se questo dovesse rivelarsi utile a qualcuno, questo è l'elenco dei 331 Indirizzi IP a cui yjz
cerca di connettersi. Questa lista è così grande (e probabilmente destinata a diventare ancora più grande) che credo sia questo il motivo per manomettere mysql
. L'elenco fornito dall'altra backdoor è identico, il che, presumo, è il motivo per lasciare allo scoperto un'informazione così importante (penso l'aggressore non desiderava fare lo sforzo di archiviarli in formato kernel, quindi ha inserito 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 precedente mostra che 302 su un totale di 331 gli indirizzi sono nella Cina continentale, i restanti sono a Hong Kong, Mongolia, Taiwan. Ciò aggiunge ulteriore supporto alla tesi di David Schwartz secondo cui si tratta principalmente di un anello di bot cinese.
MODIFICA 3
Su richiesta di @vaid (l'autore dell'OP, leggi il suo commento 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
dichiara di aver fatto quanto segue:
Reinstallare il sistema
password di root modificata in una password lunga 16 caratteri con lettere minuscole e maiuscole miste, caratteri e cifre.
Modificato il nome utente in un nome utente di 6 caratteri misti e applicata la stessa password usata per root
cambiato la porta SSH a qualcosa sopra 5000
disattivato l'accesso root SSH.
Questo va bene (tranne che uso 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 chiavi crittografiche per il login ssh , invece delle password. Ti faccio un esempio personale. Su uno dei miei VPS, ero incerto se cambiare la porta ssh; L'ho lasciato a 22, ma ho usato chiavi crittografiche per l'autenticazione. Ne avevo centinaia di tentativi di effrazione al giorno , nessuno è riuscito. Quando, stanco di controllare quotidianamente che nessuno ci fosse riuscito, alla fine ho portato la porta a qualcosa sopra i 10.000, i tentativi di effrazione sono andati a zero. Intendiamoci, non è che gli hacker siano stupidi (non lo sono!), danno solo la caccia a prede più facili.
È facile attivare una chiave crittografica con RSA come algoritmo di firma, vedi il commento di seguito 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
alla macchina da cui vuoi connetterti (in una directory .ssh
, anche chmod
'ed a 700), quindi emetti il comando
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa [email protected]
Quando sei sicuro che funzioni, modifica sul server (=la macchina a cui vuoi connetterti) il file /etc/ssh/sshd_config
e cambia la riga
#PasswordAuthentication yes
a
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. Infatti, attualmente non sono noti exploit contro le attuali versioni di openssh v2
, e di RSA come impiegato da openssh v2
.
Infine, per bloccare davvero la tua macchina, 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 sia da LAN che da WAN, 2) consente tutti gli input originati dalle tue richieste (ad esempio, quando carichi una pagina Web), 3) rilascia tutto il resto sull'input, 4) consente tutto su 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.
Benvenuto in Internet, dove è probabile che qualsiasi server SSH aperto venga sondato, sottoposto a forza bruta e subisca vari insulti.
Per iniziare, è necessario cancellare completamente lo spazio di archiviazione sul prodotto. Immaginalo se vuoi passarlo per la scientifica, ma l'installazione di Linux su di esso è ora sospetta.
Un po' di congetture ma
-
Hai o forzato bruto utilizzare una password comune. È sicurezza per oscurità ma non vuoi una password del dizionario o per utilizzare un account root aperto a SSH. Disabilita l'accesso root SSH se è un'opzione o almeno cambia il nome in modo che debbano indovinare entrambi. SSHing come root è comunque una pratica di sicurezza terribile. Se devi usare root, accedi come un altro utente e usa su o sudo per cambiare.
-
A seconda del prodotto, potresti voler bloccare l'accesso SSH in qualche modo. Un blocco totale sembra una buona idea e consente agli utenti di aprirlo se necessario . A seconda delle risorse che puoi risparmiare, considera di consentire solo gli indirizzi IP nella tua sottorete o un qualche tipo di sistema di limitazione degli accessi. Se non ne hai bisogno sul prodotto finale, assicurati che sia disattivato.
-
Usa una porta non standard. Di nuovo sicurezza tramite oscurità, ma significa che un utente malintenzionato deve prendere di mira la tua porta.
-
Non utilizzare mai una password predefinita. L'approccio migliore che ho visto è generare casualmente una password per un dispositivo specifico e spedirla con il tuo prodotto. La migliore pratica è l'autenticazione basata su chiave, ma non ho idea di come ti avvicineresti a questo su un prodotto del mercato di massa.
Oh, sei stato sicuramente hackerato. Sembra che qualcuno sia stato in grado di ottenere le credenziali di root e abbia tentato di scaricare un trojan sul tuo sistema. MariusMatutiae ha fornito un'analisi del payload.
Sorgono due domande:a) L'attaccante ha avuto successo? E b) cosa puoi fare al riguardo?
La risposta alla prima domanda potrebbe essere un n. Nota come l'attaccante tenta ripetutamente di scaricare ed eseguire il payload, apparentemente senza successo. Sospetto che qualcosa (SELinux, forse?) si sia messo sulla sua strada.
TUTTAVIA:L'aggressore ha anche modificato il tuo /etc/rc.d/rc.local
file, nella speranza che al riavvio del sistema venga attivato il payload. Se non hai ancora riavviato il sistema, non riavviare fino a quando non avrai rimosso queste alterazioni da /etc/rc.d/rc.local
. Se l'hai già riavviato... beh, sfortuna.
Quanto a cosa puoi fare al riguardo:la cosa più sicura da fare è cancellare il sistema e reinstallarlo da zero. Ma questa potrebbe non essere sempre un'opzione. Una cosa significativamente meno sicura da fare è analizzare esattamente cosa è successo e cancellarne ogni traccia, se possibile. Ancora una volta, se non hai ancora riavviato il sistema, forse tutto ciò che serve è un /etc/rc.d/rc.local
pulito , rimuovi tutto ciò che è stato scaricato dall'aggressore e, ultimo ma non meno importante, cambia la dannata password!
Tuttavia, se l'attaccante era già in grado di eseguire il payload, potrebbero esserci altre modifiche al sistema che potrebbero essere difficili da rilevare. Ecco perché una cancellazione completa è davvero l'unica opzione sicura (e consigliata). Come hai indicato, l'attrezzatura in questione potrebbe essere un obiettivo di test/sviluppo, quindi forse pulirla non è così doloroso come potrebbe essere in altri casi.
Aggiorna :Nonostante quanto ho scritto su una possibile guarigione, desidero fare eco a molto forte di MariusMatutiae consiglio di non sottovalutare il potenziale danno causato da questo payload e la misura in cui potrebbe aver compromesso il sistema di destinazione.