EDITAR 2 :
Hay una buena razón por la que esta publicación está atrayendo tanta atención: logró grabar toda la sesión en vivo de un intruso en su PC. Esto es muy diferente de nuestra experiencia cotidiana, donde tratamos con el descubrimiento de las consecuencias de sus acciones y tratamos de corregirlas. Aquí lo vemos en el trabajo, vemos que tiene algunos problemas para establecer la puerta trasera, volver sobre sus pasos, trabajar febrilmente (tal vez porque estaba sentado en su escritorio, como se sugirió anteriormente, o tal vez, y en mi opinión más probable, porque estaba no puede hacer que su malware se ejecute en el sistema, lea a continuación) e intente implementar instrumentos de control totalmente autónomos. Esto es lo que los investigadores de seguridad presencian diariamente con sus trampas de miel . Para mí, esta es una oportunidad muy rara, y la fuente de cierta diversión.
Definitivamente has sido hackeado. La evidencia de esto no proviene del fragmento del auth.log
archivo que mostró, porque esto informa un intento de inicio de sesión fallido, que se produce en un corto período de tiempo (dos segundos). Notarás que la segunda línea dice Failed password
, mientras que la tercera informa una pre-auth
desconexión: el tipo lo intentó y falló.
En cambio, la evidencia proviene del contenido de los dos archivos http://222.186.30.209:65534/yjz
y de lo http://222.186.30.209:65534/yjz1
que el atacante descargó en su sistema.
El sitio está actualmente abierto para que cualquiera pueda descargarlos, lo cual hice. Primero corrí file
sobre ellos, que mostró:
$ 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
Luego los traje a una máquina virtual Debian de 64 bits que tengo; un examen de su contenido a través del strings
comando reveló muchas cosas sospechosas (referencia a varios ataques conocidos, comandos a los que se debe sustituir, un script que se usó claramente para configurar un nuevo servicio, etc.).
Luego produje los hash MD5 de ambos archivos y los envié a la base de datos hash de Cymru para ver si son agentes conocidos de malware. Mientras yjz
que no es, yjz1
es y Cymru informa una probabilidad de detección por software antivirus del 58%. También indica que este archivo se vio por última vez hace unos tres días, por lo que es bastante reciente.
Ejecutando clamscan (parte del clamav
paquete) en los dos archivos que obtuve:
$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND
así que ahora estamos seguros de que el software estándar de Linux puede identificarlo.
Que deberias hacer
Aunque es bastante nuevo, ninguno de los sistemas es muy nuevo, consulte este artículo de enero de 2015 sobre XorDdos , por ejemplo. Entonces, la mayoría de los paquetes gratuitos deberían poder eliminarlo. Usted debe tratar: clamav
, rkhunter
, chkrootkit
. Busqué en Google y vi que dicen ser capaces de detectarlo. Úselos para verificar el trabajo del predecesor, pero después de ejecutar estos tres programas, debería estar listo para comenzar.
En cuanto a la pregunta más amplia, what should you do to prevent future infections
la respuesta de Journeyman es un buen primer paso. Solo tenga en cuenta que es una lucha continua, una que todos nosotros (¡incluido yo!) Bien podríamos haber perdido sin siquiera saberlo.
EDITAR :
En el aviso (indirecto) de Viktor Toth, me gustaría agregar algunos comentarios. Ciertamente, es cierto que el intruso encontró algunas dificultades: descarga dos herramientas de pirateo distintas, cambia sus permisos varias veces, las reinicia varias veces e intenta muchas veces desactivar el firewall. Es fácil adivinar lo que está sucediendo: espera que sus herramientas de piratería abran un canal de comunicación hacia una de sus PC infectadas (ver más adelante) y, cuando no ve que este nuevo canal aparece en su GUI de control, teme que su pirateo el firewall está bloqueando la herramienta, por lo que repite el procedimiento de instalación. Estoy de acuerdo con Viktor Toth en que esta etapa particular de su operación no parece dar los frutos esperados, pero me gustaría alentarlo fuertemente. para no subestimar el alcance del daño infligido en tu pc.
Proporciono aquí una salida parcial de 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
Esto proporciona evidencia de alteración de los servicios (en /etc/init.d
y dentro /etc/rc.d
), con crontab
el archivo de historial de mysql
y un par de archivos en los proc
que están vinculados bash
(lo que sugiere que se ha plantado una versión fraudulenta personalizada de su shell). Luego, el programa genera una solicitud HTTP (a un sitio de habla china,
Accept-Language: zh-cn
lo que da sustancia al comentario anterior de David Schwartz), lo que puede crear aún más estragos. En la solicitud, los binarios ( Content-Type: application/x-www-form-urlencoded
) deben descargarse en la PC atacada (GET) y cargarse en la máquina de control (POST). No pude establecer qué se descargaría en la PC atacada, pero, dado el pequeño tamaño de ambos yjz
y yjz1
(1.1MB y 600kB, respectivamente), puedo aventurarme a suponer que la mayoría de los archivos necesarios para ocultar el rootkit, es decir , el alterado versiones de ls
, netstat
, ps
, ifconfig
, ..., se pueden descargar de esta manera. Y esto explicaría los febriles intentos del atacante para iniciar esta descarga.
No hay certeza de que lo anterior agote todas las posibilidades: ciertamente nos falta parte de la transcripción (entre las líneas 457 y 481) y no vemos un cierre de sesión; Además, especialmente preocupantes son las líneas 495-497,
cd /tmp; ./yd_cd/make
que se refieren a un archivo que no vimos descargado, y que podría ser una compilación: si es así, significa que el atacante ha entendido (¿finalmente?) cuál era el problema con sus ejecutables y está tratando de solucionarlo, en cuyo caso el La PC atacada se ha ido para siempre. [De hecho, las dos versiones del malware que el atacante descargó en la máquina pirateada (y yo en mi VM Debian de 64 bits) son para una arquitectura inadecuada, x86, mientras que solo el nombre de la PC pirateada revela el hecho de que estaba tratando con una arquitectura de brazo].
La razón por la que escribí esta edición es para instarlo lo más fuerte posible a que combine su sistema con un instrumento profesional o que lo reinstale desde cero.
Y, por cierto, si esto resulta útil para alguien, esta es la lista de las 331 direcciones IP a las que yjz
intenta conectarse. Esta lista es tan grande (y probablemente está destinada a hacerse aún más grande) que creo que esta es la razón para manipularla mysql
. La lista proporcionada por la otra puerta trasera es idéntica, lo cual, supongo, es la razón para dejar a la vista una información tan importante (creo que el atacante no quiso hacer el esfuerzo de almacenarlos en formato kernel, por lo que puso la lista completa en un archivo de texto claro, que probablemente sea leído por todas sus puertas traseras, para cualquier 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
El siguiente código
#!/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
en la lista anterior muestra que 302 de un total de 331 direcciones están en China continental, las restantes están en Hong Kong, Mongolia, Taiwán. Esto agrega más apoyo a la afirmación de David Schwartz de que esto es principalmente un anillo bot chino.
EDITAR 3
A petición de @ vaid (el autor del OP, lea su comentario a continuación), agregaré un comentario sobre cómo fortalecer la seguridad de un sistema Linux básico (para un sistema que proporciona muchos servicios, este es un tema mucho más complejo). vaid
declara que hizo lo siguiente:
Vuelva a instalar el sistema.
cambió la contraseña de root a una contraseña de 16 caracteres con letras mayúsculas y minúsculas y caracteres y dígitos mixtos.
Cambió el nombre de usuario a un nombre de usuario largo de 6 caracteres mixtos y aplicó la misma contraseña que la utilizada para root
cambió el puerto SSH a algo superior a 5000
desactivado el inicio de sesión raíz SSH.
Esto está bien (excepto que uso un puerto por encima de 10,000 ya que muchos programas útiles usan los puertos por debajo de 10,000). Pero no puedo enfatizar lo suficiente la necesidad de usar claves criptográficas para el inicio de sesión ssh , en lugar de contraseñas. Te daré un ejemplo personal. En uno de mis VPS, no estaba seguro de si cambiar el puerto ssh; Lo dejé a las 22, pero usé claves criptográficas para la autenticación. Tuve cientos de intentos de intrusión por día , ninguno tuvo éxito. Cuando, cansado de comprobar a diario que nadie había tenido éxito, eventualmente cambié el puerto a algo por encima de 10,000, los intentos de robo se pusieron a cero. Eso sí, no es que los hackers sean estúpidos (¡no lo son!), Solo cazan presas más fáciles.
Es fácil activar una clave criptográfica con RSA como algoritmo de firma, vea el comentario a continuación de Jan Hudec (¡gracias!):
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 *
Ahora todo lo que tiene que hacer es copiar el archivo id_rsa
a la máquina desde la que desea conectarse (en un directorio .ssh
, también chmod
'ed a 700), luego emitir el comando
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine
Cuando esté seguro de que esto funciona, edite en el servidor (= la máquina a la que desea conectarse) el archivo /etc/ssh/sshd_config
y cambie la línea
#PasswordAuthentication yes
a
PasswordAuthentication no
y reinicie el ssh
servicio ( service ssh restart
o systemctl restart ssh
, o algo así, dependiendo de la distribución).
Esto resistirá mucho. De hecho, actualmente no hay exploits conocidos en contra de las versiones actuales openssh v2
y de RSA empleadas por openssh v2
.
Por último, para atornillar realmente su máquina, deberá configurar el firewall (netfilter / iptables) de la siguiente manera:
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
Esto, 1) permite conexiones ssh desde LAN y WAN, 2) permite todas las entradas originadas por sus solicitudes (por ejemplo, cuando carga una página web), 3) deja todo lo demás en la entrada, 4) permite todo en la salida, y 5-6) permite todo en la interfaz de bucle invertido.
A medida que crecen sus necesidades y se deben abrir más puertos, puede hacerlo agregando, en la parte superior de la lista, reglas como:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
para permitir, por ejemplo, que personas accedan a su navegador web.