A Montanha com Segredos: Ocultando Processos no Linux com 'mount'

A Montanha com Segredos: Ocultando Processos no Linux com 'mount'

Aprenda como a técnica 'bind mount' pode ser usada para ocultar processos no Linux, como ela funciona, e como detectar e reverter essa manipulação. Este artigo explora o uso do comando 'mount' com a flag 'MS_BIND' para esconder processos, uma técnica comum em malware.

MundiX News·16 de maio de 2026·3 min de leitura·👁 11 views

A Montanha com Segredos: Ocultando Processos no Linux com 'mount'

Conteúdo do Artigo

  • Como a técnica funciona
  • Escolhendo o doador
  • Montagem aninhada
  • Ordem de montagem
  • Strace — descendo ao nível de chamadas de sistema
  • Detecções
  • Auditd
  • /proc/mounts
  • Script para detecção
  • Desmontagem
  • Conclusão

A ocultação de processos é uma tarefa clássica para malware. Normalmente, este é o território dos rootkits: módulos LKM, interceptação da tabela de chamadas de sistema, substituição de manipuladores em /proc. Tudo isso requer o carregamento de código no kernel, compilação para uma versão específica e deixa rastros perceptíveis. Mas há uma maneira mais simples. Sem módulos de kernel e compilação, apenas uma chamada mount padrão com a flag MS_BIND.

Neste artigo, faremos o seguinte:

  • Analisaremos a técnica de ocultação de processos via bind mount;
  • Reproduziremos essa técnica manualmente e veremos o que acontece no nível de chamada de sistema, via strace;
  • Configuraremos uma regra auditd para monitoramento em tempo real;
  • Escreveremos um script em Python para detectar e revelar processos ocultos.

A ideia é baseada nos artigos de Stefan Berger e Hal Pomeranz.

Aviso

Este artigo é informativo e se destina a especialistas em segurança que realizam testes como parte de um contrato. O autor e a redação não se responsabilizam por quaisquer danos causados pelo uso das informações apresentadas. A disseminação de programas maliciosos, a violação do funcionamento de sistemas e a violação do sigilo da correspondência são puníveis por lei.

Como a técnica funciona

Como o malware esconde processos? Frequentemente usamos ps para ver quais processos estão em execução no sistema. Se você olhar um pouco mais fundo, pode descobrir que este utilitário olha para as informações sobre os processos em /proc:

bash
root@0bc5a04d0a00:/
rev# strace ps
...
openat(AT_FDCWD, "/proc", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
openat(AT_FDCWD, "/proc/uptime", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(4, "75062.72 585321.72\n", 1024) = 19
close(4) = 0
mmap(NULL, 626688, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7bc2598f6000
getdents64(3, 0x57052d78eaf0 /* 67 entries */, 32768) = 2008
newfstatat(AT_FDCWD, "/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}, 0) = 0
openat(AT_FDCWD, "/proc/1/stat", O_RDONLY) = 4
read(4, "1 (bash) S 0 1 1 34816 169 41945"..., 1024) = 329
close(4) = 0
openat(AT_FDCWD, "/proc/1/status", O_RDONLY) = 4
read(4, "Name:\tbash\nUmask:\t0022\nState:\tS"
..., 1024) = 1024
read(4, "0000, 00000000, 00000000, 00000000,"
..., 1024) = 417
close(4) = 0
openat(AT_FDCWD, "/proc/1/environ", O_RDONLY) = 4
read(4, "PATH=/usr/local/sbin:/usr/local/"
..., 131072) = 110
read(4, "", 130962) = 0
close(4) = 0
openat(AT_FDCWD, "/proc/1/cmdline", O_RDONLY) = 4
read(4, "bash\0", 131072) = 5
read(4, "", 131067) = 0
close(4) = 0
openat(AT_FDCWD, "/proc/1/ctty", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/proc/tty/drivers", O_RDONLY) = 4
read(4, "/dev/tty /dev/tty"
..., 9999) = 677
close(4) = 0
...

No Linux, procfs é um sistema de arquivos virtual que fornece acesso às informações do kernel por meio de operações de arquivo regulares. Cada processo é representado por um diretório /proc/[PID], dentro do qual estão os arquivos: stat, cmdline, comm, environ, fd/ e outros. É isso que ps, top, htop e qualquer outra ferramenta de monitoramento lê.

O personagem principal da técnica de hoje é a chamada de sistema mount:

c
mount(source, target, filesystemtype, mountflags, data)

Esta é uma chamada de sistema para montar um sistema de arquivos. Para bind mount, a flag MS_BIND (0x1000) é usada.

O restante do artigo está disponível apenas para membros do Xakep.ru.

Torne-se membro da comunidade Xakep.ru!

A adesão à comunidade durante o período especificado lhe dará acesso a TODOS os materiais do "Hacker", permitirá que você baixe edições em PDF, desative anúncios no site e aumente seu desconto acumulativo pessoal!

Mais detalhes

Eu já sou membro do "Xakep.ru"

← Anterior

Vulnerabilidade no NGINX de 18 anos leva à execução remota de código

🛡️⚡

Pare de pesquisar. Comece a hackear.

O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 Compartilhar & Baixar

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.