Análisis de Linux.Okiru

Siguiendo con nuestra campaña de detección y documentación de botnets IoT, hace unos días encontramos otra amenaza no clasificada con anterioridad. Fue subida por primera vez a la plataforma VirusTotal el 3 de noviembre y solamente es detectada como maliciosa por 4 antivirus.

Durante el artículo se van a analizar dos variantes del malware, las cuales se diferencian fundamentalmente en su propagación. La primera de ellas fue detectada en nuestros sistemas honeypot (concretamente para la arquitectura SPARC). La segunda se trata de una variante de la primera, la cual fue encontrada bajo la arquitectura Intel x86_64, y de la cual el laboratorio de malware Netlab360 se hizo eco hace unos días.

Al no encontrar registros de su identificación, hemos decidido clasificarla como Linux.Okiru, debido al nombre de sus binarios.

Versión inicial

A diferencia de botnets detectadas anteriormente, esta busca la existencia de las rutas “/dev/FTWDT101_watchdog” y “/dev/FTWDT101\ watchdog” para evitar los reinicios, además de las ya conocidas “/dev/watchdog” y “/dev/misc/watchdog”.

Tras ello, el dispositivo va realizando peticiones SYN TCP escaneando puertos Telnet abiertos y generando IP aleatorias.

Al detectar un puerto 23 o 2323 abierto, lleva a cabo el intento de login con credenciales por defecto en servicios Telnet que estén abiertos a Internet.

Tal y como podemos observar en la imagen, las credenciales se encuentran cifradas con el algoritmo XOR, concretamente con la clave 0x07, que es una característica adoptada de la botnet Mirai y no presente en la mayoría de las botnets que actualmente están en activo.

 

Si realizamos el descifrado, las credenciales son las siguientes:

Llama la atención las credenciales root:t0talc0ntr0l4!, combinación por defecto de los sistemas de automatización de hogares de la empresa Control4. El resto son combinaciones ya conocidas con objetivos como routers o sistemas DVR.

Para la infección del dispositivo, el malware utiliza dos mecanismos: uno a través del protocolo tftp, y el otro a través de HTTP con el comando wget, donde descarga el binario malicioso desde el servidor C2.

Tal y como podemos observar en la imagen anterior, los dos protocolos se conectan contra la IP 37.48.99.233, y acceden al recurso “/fahwrzadws/okiru.%d” donde el último String será la arquitectura de la máquina infectada.

A través de este recurso pudimos obtener muestras de arquitectura x86, arm, arm4, arm7 y mips.

Versión dos

Esta segunda versión difiere de la primera fundamentalmente en la vía de propagación, la cual no se lleva a cabo a partir de las credenciales por defecto sino por la explotación de vulnerabilidades presentes en los puertos 37215 y 52869.

Exploit 1:

Petición POST que se lleva a cabo contra el puerto 37215.

Exploit 2:

El segundo exploit se trata de una variante de la vulnerabilidad CVE-2014-8361, la cual afecta al protocolo SOAP de la interfaz UpnP.

Tal y como se puede observar, se lleva a cabo la descarga del binario malicioso a través de la inyección de código en las vulnerabilidades. Las peticiones HTTP se hacen contra los siguientes CnC:

Como podemos ver, uno de los servidores hacer referencia a bigbotpein. El dominio network[dot]bigbotpein[dot]com ya fue utilizado como parte de la infraestructura de la variante de Mirai Freepein, el cual ya analizamos en nuestro informe. Además, la cadena bigbotpein también está incluida como parte de las variantes Satori y Bigbotpein de Mirai.

Así pues, todo apunta a que el actor que está detrás de este nuevo malware es Lizard Squad, conocidos por los diferentes ataques de denegación de servicio llevados a cabo contra la plataforma Playstation Network o Blizzard.

Se ha desarrollado la siguiente regla Yara para la detección de las muestras de la botnet Okiru:

rule LinuxOkiru: MALW
{
	meta:
		description = "Linux.Okiru"
		author = "Joan Soriano / @w0lfvan"
		date = "2017-11-03"
		version = "1.0"
		MD5 = "0e1e8079cc78cd242dd70867bc30c8d1"
		SHA256 = "601ad06dd9de8c19c196441f4a405c95dbd752c95fb017fda6c4fc7ca6d86d9c"
	strings:
		$a = "/usr/dvr_main _8182T_1108"
		$b = "/var/Challenge"
		$c = "/mnt/mtd/app/gui"
	condition:
		all of them
}

 

Versión inicial

 Versión dos

Referencias