EDITAR 2 :
Hay una buena razón por la que esta publicación está atrayendo tanta atención:lograste grabar toda la sesión en vivo de un intruso en tu PC. Esto es muy diferente de nuestra experiencia cotidiana, donde tratamos con el descubrimiento de las consecuencias de sus acciones y tratamos de repararlas. Aquí lo vemos en el trabajo, lo vemos teniendo algunos problemas para establecer la puerta trasera, vuelve sobre sus pasos, trabaja 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 incapaz de hacer que su malware se ejecute en el sistema, lea a continuación) e intente implementar instrumentos de control completamente autónomos. Esto es lo que los investigadores de seguridad observan a diario con sus trampas de miel . Para mí, esta es una oportunidad muy rara y una fuente de diversión.
Definitivamente has sido hackeado. La evidencia de esto no provienen del fragmento de auth.log
archivo que mostró, porque esto informa un intento de inicio de sesión fallido, que ocurre en un período de tiempo corto (dos segundos). Notarás que la segunda línea dice Failed password
, mientras que el tercero reporta un pre-auth
desconectar:el tipo lo intentó y falló.
La evidencia proviene en cambio del contenido de los dos archivos http://222.186.30.209:65534/yjz
y 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 ejecuté file
en ellos, que mostraba:
$ 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
El comando reveló muchas cosas sospechosas (referencia a varios ataques conocidos, a los comandos que se sustituirán, un script que claramente se usó para configurar un nuevo servicio, etc.).
Luego produje los hashes MD5 de ambos archivos y los alimenté a la base de datos de hash de Cymru para ver si eran agentes conocidos de malware. Mientras que yjz
no lo 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 razonablemente 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
por lo que ahora estamos seguros de que el software estándar de Linux puede identificarlo.
¿Qué debe hacer?
Aunque es bastante nuevo, ninguno de los sistemas es muy nuevo; consulte este artículo de enero de 2015 sobre XorDdos, por ejemplo. Por lo tanto, la mayoría de los paquetes gratuitos deberían poder eliminarlo. Deberías probar:clamav
, rkhunter
, chkrootkit
. Busqué en Google y vi que afirman poder 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 (¡incluyéndome a mí!) Es posible que hayamos 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 piratería distintas, cambia sus permisos varias veces, las reinicia varias veces e intenta muchas veces deshabilitar 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 lo pirateen. la herramienta está siendo bloqueada por el cortafuegos, 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 animarte muy No subestimes el alcance del daño infligido a 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 manipulación de los servicios (en /etc/init.d
y en /etc/rc.d
), con crontab
, con el archivo de historial de mysql
y un par de archivos en proc
que son enlaces a bash
(lo que sugiere que se ha plantado una versión fraudulenta hecha a medida de su caparazón). 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, binarios (Content-Type: application/x-www-form-urlencoded
) deben descargarse en la computadora 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,1 MB y 600 kB, respectivamente), puedo aventurarme a suponer que la mayoría de los archivos necesarios para encubrir el rootkit, es decir, las versiones alteradas de ls
, netstat
, ps
, ifconfig
,..., se descargaría de esta manera. Y esto explicaría los febriles intentos del atacante de poner en marcha 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, son especialmente preocupantes 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 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 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 recomendarle en la medida de lo posible que peine su sistema con un instrumento profesional o que lo vuelva a instalar desde cero.
Y, por cierto, si esto le resulta útil a alguien, esta es la lista de los 331 Direcciones IP a las que yjz
intenta conectarse. Esta lista es tan grande (y probablemente destinada a ser aún más grande) que creo que esta es la razón para manipular mysql
. La lista proporcionada por la otra puerta trasera es idéntica, lo cual, supongo, es la razón por la que se deja a la vista una información tan importante (creo el atacante no deseaba hacer el esfuerzo de almacenarlos en formato kernel, por lo que colocó la lista completa en un archivo de texto sin cifrar, que probablemente sea leído por todos sus backdoors, sea cual sea el 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 las 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 se trata principalmente de una red de bots chinos.
EDITAR 3
A pedido 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 brinda muchos servicios, este es un tema mucho más complejo). vaid
afirma que hizo lo siguiente:
-
Vuelva a instalar el sistema
-
cambió la contraseña raíz a una contraseña de 16 caracteres con letras mayúsculas y minúsculas combinadas, caracteres y dígitos.
-
Cambió el nombre de usuario a un nombre de usuario de 6 caracteres mixtos y aplicó la misma contraseña que se usó para root
-
cambió el puerto SSH a algo por encima de 5000
-
desactivó 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 si cambiar el puerto ssh; Lo dejé en 22, pero usé claves criptográficas para la autenticación. tenía cientos de intentos de robo al día , ninguno tuvo éxito. Cuando, cansado de comprobar a diario que nadie había tenido éxito, finalmente cambié el puerto a algo por encima de 10.000, los intentos de intrusión se redujeron a cero. Eso sí, no es que los hackers sean estúpidos (¡no lo son!), simplemente 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 tienes 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 emita el comando
ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa [email protected]
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 aguantará mucho. De hecho, actualmente no hay exploits conocidos contra las versiones actuales de openssh v2
, y de RSA empleado por openssh v2
.
Por último, para realmente asegurar 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 loopback.
A medida que crezcan sus necesidades y sea necesario 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 las personas accedan a su navegador web.
Bienvenido a Internet, donde es probable que cualquier servidor SSH abierto sea probado, forzado por la fuerza bruta y se le inflijan varias indignidades.
Para comenzar, debe borrar completamente el almacenamiento del producto. Imagínelo si quiere pasarlo a los forenses, pero la instalación de Linux ahora es sospechosa.
Un poco de conjetura pero
-
Tienes fuerza bruta o utilice una contraseña común. Es seguridad por oscuridad, pero no desea una contraseña de diccionario o para usar una cuenta raíz abierta a SSH. Deshabilite el acceso SSH raíz si es una opción o al menos cambie el nombre para que tengan que adivinar ambos. SSHing como root es una práctica de seguridad terrible de todos modos. Si debe usar la raíz, inicie sesión como otro usuario y use su o sudo para cambiar.
-
Según el producto, es posible que desee bloquear el acceso SSH de alguna manera. Un bloqueo total suena como una buena idea y permite a los usuarios abrirlo según sea necesario . Dependiendo de los recursos que pueda ahorrar, considere permitir solo direcciones IP en su propia subred o algún tipo de sistema de aceleración de inicio de sesión. Si no lo necesita en el producto final, asegúrese de que esté apagado.
-
Utilice un puerto no estándar. Seguridad por oscuridad nuevamente, pero significa que un atacante necesita apuntar a su puerto.
-
Nunca utilice una contraseña predeterminada. El mejor enfoque que he visto es generar aleatoriamente una contraseña para un dispositivo específico y enviarla con su producto. La mejor práctica es la autenticación basada en claves, pero no tengo idea de cómo abordaría eso en un producto de mercado masivo.
Oh, definitivamente has sido hackeado. Parece que alguien pudo obtener credenciales de root e intentó descargar un troyano en su sistema. MariusMatutiae proporcionó un análisis de la carga útil.
Surgen dos preguntas:a) ¿Tuvo éxito el atacante? y b) ¿qué puedes hacer al respecto?
La respuesta a la primera pregunta puede ser un no Observe cómo el atacante intenta repetidamente descargar y ejecutar la carga útil, aparentemente sin éxito. Sospecho que algo (¿SELinux, quizás?) se interpuso en su camino.
SIN EMBARGO:El atacante también alteró su /etc/rc.d/rc.local
archivo, con la esperanza de que cuando reinicie su sistema, la carga útil se active. Si aún no ha reiniciado el sistema, no reinicie hasta que haya eliminado estas alteraciones de /etc/rc.d/rc.local
. Si ya lo has reiniciado... bueno, mala suerte.
En cuanto a lo que puede hacer al respecto:lo más seguro es borrar el sistema y reinstalarlo desde cero. Pero esto puede no ser siempre una opción. Una cosa significativamente menos segura que hacer es analizar exactamente lo que sucedió y borrar todo rastro, si es posible. Nuevamente, si aún no ha reiniciado el sistema, tal vez todo lo que necesita es limpiar /etc/rc.d/rc.local
, elimina cualquier cosa descargada por el atacante y, por último, pero no menos importante, ¡cambia la maldita contraseña!
Sin embargo, si el atacante ya pudo ejecutar la carga útil, puede haber otras modificaciones en su sistema que pueden ser difíciles de detectar. Es por eso que una limpieza completa es realmente la única opción segura (y recomendada). Como indicó, el equipo en cuestión puede ser un objetivo de prueba/desarrollo, por lo que tal vez limpiarlo no sea tan doloroso como en otros casos.
Actualizar :Sin perjuicio de lo que escribí sobre una posible recuperación, deseo hacerme eco de la muy fuerte de MariusMatutiae recomendación de no subestimar el daño potencial causado por esta carga útil y la medida en que puede haber comprometido el sistema de destino.